From 2b10f2e73c6d14ca4fd5754f37b8ce75cdfa6ca1 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 18 May 2026 13:03:24 +0100 Subject: [PATCH] Implement feature X to enhance user experience and fix bug Y in module Z --- rad/static/dv3d/index.js | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/rad/static/dv3d/index.js b/rad/static/dv3d/index.js index 58350e75..35d6c4a6 100644 --- a/rad/static/dv3d/index.js +++ b/rad/static/dv3d/index.js @@ -30,15 +30,15 @@ var h$=Object.defineProperty;var g$=(t,e,r)=>e in t?h$(t,e,{enumerable:!0,config * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var F$=vt,Ka=V$;function bt(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Q3=Object.prototype.hasOwnProperty,U$=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Cb={},Sb={};function B$(t){return Q3.call(Sb,t)?!0:Q3.call(Cb,t)?!1:U$.test(t)?Sb[t]=!0:(Cb[t]=!0,!1)}function G$(t,e,r,n){if(r!==null&&r.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function W$(t,e,r,n){if(e===null||typeof e>"u"||G$(t,e,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function aa(t,e,r,n,i,o,a){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=t,this.type=e,this.sanitizeURL=o,this.removeEmptyString=a}var So={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){So[t]=new aa(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];So[e]=new aa(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){So[t]=new aa(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){So[t]=new aa(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){So[t]=new aa(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){So[t]=new aa(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){So[t]=new aa(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){So[t]=new aa(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){So[t]=new aa(t,5,!1,t.toLowerCase(),null,!1,!1)});var NT=/[\-:]([a-z])/g;function kT(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){So[t]=new aa(t,1,!1,t.toLowerCase(),null,!1,!1)});So.xlinkHref=new aa("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){So[t]=new aa(t,1,!1,t.toLowerCase(),null,!0,!0)});function VT(t,e,r,n){var i=So.hasOwnProperty(e)?So[e]:null;(i!==null?i.type!==0:n||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),QC=Object.prototype.hasOwnProperty,U$=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Cb={},Sb={};function B$(t){return QC.call(Sb,t)?!0:QC.call(Cb,t)?!1:U$.test(t)?Sb[t]=!0:(Cb[t]=!0,!1)}function G$(t,e,r,n){if(r!==null&&r.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function W$(t,e,r,n){if(e===null||typeof e>"u"||G$(t,e,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function aa(t,e,r,n,i,o,a){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=t,this.type=e,this.sanitizeURL=o,this.removeEmptyString=a}var So={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){So[t]=new aa(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];So[e]=new aa(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){So[t]=new aa(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){So[t]=new aa(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){So[t]=new aa(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){So[t]=new aa(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){So[t]=new aa(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){So[t]=new aa(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){So[t]=new aa(t,5,!1,t.toLowerCase(),null,!1,!1)});var NT=/[\-:]([a-z])/g;function kT(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(NT,kT);So[e]=new aa(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){So[t]=new aa(t,1,!1,t.toLowerCase(),null,!1,!1)});So.xlinkHref=new aa("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){So[t]=new aa(t,1,!1,t.toLowerCase(),null,!0,!0)});function VT(t,e,r,n){var i=So.hasOwnProperty(e)?So[e]:null;(i!==null?i.type!==0:n||!(2s||i[a]!==o[s]){var c=` -`+i[a].replace(" at new "," at ");return t.displayName&&c.includes("")&&(c=c.replace("",t.displayName)),c}while(1<=a&&0<=s);break}}}finally{ux=!1,Error.prepareStackTrace=r}return(t=t?t.displayName||t.name:"")?Ug(t):""}function z$(t){switch(t.tag){case 5:return Ug(t.type);case 16:return Ug("Lazy");case 13:return Ug("Suspense");case 19:return Ug("SuspenseList");case 0:case 2:case 15:return t=fx(t.type,!1),t;case 11:return t=fx(t.type.render,!1),t;case 1:return t=fx(t.type,!0),t;default:return""}}function rC(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case u0:return"Fragment";case l0:return"Portal";case eC:return"Profiler";case FT:return"StrictMode";case tC:return"Suspense";case nC:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case dO:return(t.displayName||"Context")+".Consumer";case fO:return(t._context.displayName||"Context")+".Provider";case UT:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case BT:return e=t.displayName||null,e!==null?e:rC(t.type)||"Memo";case Tu:e=t._payload,t=t._init;try{return rC(t(e))}catch{}}return null}function $$(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return rC(e);case 8:return e===FT?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function ef(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function gO(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function j$(t){var e=gO(t)?"checked":"value",r=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),n=""+t[e];if(!t.hasOwnProperty(e)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(t,e,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function km(t){t._valueTracker||(t._valueTracker=j$(t))}function pO(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var r=e.getValue(),n="";return t&&(n=gO(t)?t.checked?"true":"false":t.value),t=n,t!==r?(e.setValue(t),!0):!1}function G2(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function iC(t,e){var r=e.checked;return oi({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??t._wrapperState.initialChecked})}function _b(t,e){var r=e.defaultValue==null?"":e.defaultValue,n=e.checked!=null?e.checked:e.defaultChecked;r=ef(e.value!=null?e.value:r),t._wrapperState={initialChecked:n,initialValue:r,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function mO(t,e){e=e.checked,e!=null&&VT(t,"checked",e,!1)}function oC(t,e){mO(t,e);var r=ef(e.value),n=e.type;if(r!=null)n==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+r):t.value!==""+r&&(t.value=""+r);else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?aC(t,e.type,r):e.hasOwnProperty("defaultValue")&&aC(t,e.type,ef(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function Eb(t,e,r){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var n=e.type;if(!(n!=="submit"&&n!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,r||e===t.value||(t.value=e),t.defaultValue=e}r=t.name,r!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,r!==""&&(t.name=r)}function aC(t,e,r){(e!=="number"||G2(t.ownerDocument)!==t)&&(r==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+r&&(t.defaultValue=""+r))}var Bg=Array.isArray;function B0(t,e,r,n){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=Vm.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Wp(t,e){if(e){var r=t.firstChild;if(r&&r===t.lastChild&&r.nodeType===3){r.nodeValue=e;return}}t.textContent=e}var ap={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},H$=["Webkit","ms","Moz","O"];Object.keys(ap).forEach(function(t){H$.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),ap[e]=ap[t]})});function xO(t,e,r){return e==null||typeof e=="boolean"||e===""?"":r||typeof e!="number"||e===0||ap.hasOwnProperty(t)&&ap[t]?(""+e).trim():e+"px"}function CO(t,e){t=t.style;for(var r in e)if(e.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=xO(r,e[r],n);r==="float"&&(r="cssFloat"),n?t.setProperty(r,i):t[r]=i}}var K$=oi({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function lC(t,e){if(e){if(K$[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(bt(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(bt(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(bt(61))}if(e.style!=null&&typeof e.style!="object")throw Error(bt(62))}}function uC(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var fC=null;function GT(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var dC=null,G0=null,W0=null;function Ib(t){if(t=j1(t)){if(typeof dC!="function")throw Error(bt(280));var e=t.stateNode;e&&(e=F5(e),dC(t.stateNode,t.type,e))}}function SO(t){G0?W0?W0.push(t):W0=[t]:G0=t}function TO(){if(G0){var t=G0,e=W0;if(W0=G0=null,Ib(t),e)for(t=0;t>>=0,t===0?32:31-(ij(t)/oj|0)|0}var Fm=64,Um=4194304;function Gg(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function j2(t,e){var r=t.pendingLanes;if(r===0)return 0;var n=0,i=t.suspendedLanes,o=t.pingedLanes,a=r&268435455;if(a!==0){var s=a&~i;s!==0?n=Gg(s):(o&=a,o!==0&&(n=Gg(o)))}else a=r&~i,a!==0?n=Gg(a):o!==0&&(n=Gg(o));if(n===0)return 0;if(e!==0&&e!==n&&!(e&i)&&(i=n&-n,o=e&-e,i>=o||i===16&&(o&4194240)!==0))return e;if(n&4&&(n|=r&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=n;0r;r++)e.push(t);return e}function z1(t,e,r){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-cc(e),t[e]=r}function lj(t,e){var r=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var n=t.eventTimes;for(t=t.expirationTimes;0=cp),Vb=" ",Fb=!1;function zO(t,e){switch(t){case"keyup":return Vj.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $O(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var f0=!1;function Uj(t,e){switch(t){case"compositionend":return $O(e);case"keypress":return e.which!==32?null:(Fb=!0,Vb);case"textInput":return t=e.data,t===Vb&&Fb?null:t;default:return null}}function Bj(t,e){if(f0)return t==="compositionend"||!XT&&zO(t,e)?(t=GO(),r2=HT=Ru=null,f0=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:r,offset:e-t};t=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Wb(r)}}function qO(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?qO(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function XO(){for(var t=window,e=G2();e instanceof t.HTMLIFrameElement;){try{var r=typeof e.contentWindow.location.href=="string"}catch{r=!1}if(r)t=e.contentWindow;else break;e=G2(t.document)}return e}function YT(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function Xj(t){var e=XO(),r=t.focusedElem,n=t.selectionRange;if(e!==r&&r&&r.ownerDocument&&qO(r.ownerDocument.documentElement,r)){if(n!==null&&YT(r)){if(e=n.start,t=n.end,t===void 0&&(t=e),"selectionStart"in r)r.selectionStart=e,r.selectionEnd=Math.min(t,r.value.length);else if(t=(e=r.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=r.textContent.length,o=Math.min(n.start,i);n=n.end===void 0?o:Math.min(n.end,i),!t.extend&&o>n&&(i=n,n=o,o=i),i=zb(r,o);var a=zb(r,n);i&&a&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),o>n?(t.addRange(e),t.extend(a.node,a.offset)):(e.setEnd(a.node,a.offset),t.addRange(e)))}}for(e=[],t=r;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,d0=null,yC=null,up=null,wC=!1;function $b(t,e,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;wC||d0==null||d0!==G2(n)||(n=d0,"selectionStart"in n&&YT(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),up&&qp(up,n)||(up=n,n=q2(yC,"onSelect"),0p0||(t.current=EC[p0],EC[p0]=null,p0--)}function Or(t,e){p0++,EC[p0]=t.current,t.current=e}var tf={},Fo=vf(tf),Ca=vf(!1),md=tf;function fh(t,e){var r=t.type.contextTypes;if(!r)return tf;var n=t.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===e)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=e[o];return n&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function Sa(t){return t=t.childContextTypes,t!=null}function Y2(){Fr(Ca),Fr(Fo)}function Jb(t,e,r){if(Fo.current!==tf)throw Error(bt(168));Or(Fo,e),Or(Ca,r)}function iM(t,e,r){var n=t.stateNode;if(e=e.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in e))throw Error(bt(108,$$(t)||"Unknown",i));return oi({},r,n)}function J2(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||tf,md=Fo.current,Or(Fo,t),Or(Ca,Ca.current),!0}function Zb(t,e,r){var n=t.stateNode;if(!n)throw Error(bt(169));r?(t=iM(t,e,md),n.__reactInternalMemoizedMergedChildContext=t,Fr(Ca),Fr(Fo),Or(Fo,t)):Fr(Ca),Or(Ca,r)}var Pl=null,U5=!1,Ex=!1;function oM(t){Pl===null?Pl=[t]:Pl.push(t)}function sH(t){U5=!0,oM(t)}function yf(){if(!Ex&&Pl!==null){Ex=!0;var t=0,e=gr;try{var r=Pl;for(gr=1;t>=a,i-=a,Nl=1<<32-cc(e)+i|r<_?(E=T,T=null):E=T.sibling;var b=d(y,T,w[_],x);if(b===null){T===null&&(T=E);break}t&&T&&b.alternate===null&&e(y,T),m=o(b,m,_),S===null?C=b:S.sibling=b,S=b,T=E}if(_===w.length)return r(y,T),Wr&&Bf(y,_),C;if(T===null){for(;__?(E=T,T=null):E=T.sibling;var D=d(y,T,b.value,x);if(D===null){T===null&&(T=E);break}t&&T&&D.alternate===null&&e(y,T),m=o(D,m,_),S===null?C=D:S.sibling=D,S=D,T=E}if(b.done)return r(y,T),Wr&&Bf(y,_),C;if(T===null){for(;!b.done;_++,b=w.next())b=u(y,b.value,x),b!==null&&(m=o(b,m,_),S===null?C=b:S.sibling=b,S=b);return Wr&&Bf(y,_),C}for(T=n(y,T);!b.done;_++,b=w.next())b=h(T,y,_,b.value,x),b!==null&&(t&&b.alternate!==null&&T.delete(b.key===null?_:b.key),m=o(b,m,_),S===null?C=b:S.sibling=b,S=b);return t&&T.forEach(function(I){return e(y,I)}),Wr&&Bf(y,_),C}function v(y,m,w,x){if(typeof w=="object"&&w!==null&&w.type===u0&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Nm:e:{for(var C=w.key,S=m;S!==null;){if(S.key===C){if(C=w.type,C===u0){if(S.tag===7){r(y,S.sibling),m=i(S,w.props.children),m.return=y,y=m;break e}}else if(S.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Tu&&t6(C)===S.type){r(y,S.sibling),m=i(S,w.props),m.ref=mg(y,S,w),m.return=y,y=m;break e}r(y,S);break}else e(y,S);S=S.sibling}w.type===u0?(m=sd(w.props.children,y.mode,x,w.key),m.return=y,y=m):(x=f2(w.type,w.key,w.props,null,y.mode,x),x.ref=mg(y,m,w),x.return=y,y=x)}return a(y);case l0:e:{for(S=w.key;m!==null;){if(m.key===S)if(m.tag===4&&m.stateNode.containerInfo===w.containerInfo&&m.stateNode.implementation===w.implementation){r(y,m.sibling),m=i(m,w.children||[]),m.return=y,y=m;break e}else{r(y,m);break}else e(y,m);m=m.sibling}m=Lx(w,y.mode,x),m.return=y,y=m}return a(y);case Tu:return S=w._init,v(y,m,S(w._payload),x)}if(Bg(w))return g(y,m,w,x);if(fg(w))return p(y,m,w,x);Hm(y,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,m!==null&&m.tag===6?(r(y,m.sibling),m=i(m,w),m.return=y,y=m):(r(y,m),m=Rx(w,y.mode,x),m.return=y,y=m),a(y)):r(y,m)}return v}var hh=lM(!0),uM=lM(!1),ey=vf(null),ty=null,y0=null,e_=null;function t_(){e_=y0=ty=null}function n_(t){var e=ey.current;Fr(ey),t._currentValue=e}function IC(t,e,r){for(;t!==null;){var n=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,n!==null&&(n.childLanes|=e)):n!==null&&(n.childLanes&e)!==e&&(n.childLanes|=e),t===r)break;t=t.return}}function $0(t,e){ty=t,e_=y0=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(va=!0),t.firstContext=null)}function Cs(t){var e=t._currentValue;if(e_!==t)if(t={context:t,memoizedValue:e,next:null},y0===null){if(ty===null)throw Error(bt(308));y0=t,ty.dependencies={lanes:0,firstContext:t}}else y0=y0.next=t;return e}var ed=null;function r_(t){ed===null?ed=[t]:ed.push(t)}function fM(t,e,r,n){var i=e.interleaved;return i===null?(r.next=r,r_(e)):(r.next=i.next,i.next=r),e.interleaved=r,Xl(t,n)}function Xl(t,e){t.lanes|=e;var r=t.alternate;for(r!==null&&(r.lanes|=e),r=t,t=t.return;t!==null;)t.childLanes|=e,r=t.alternate,r!==null&&(r.childLanes|=e),r=t,t=t.return;return r.tag===3?r.stateNode:null}var _u=!1;function i_(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function dM(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Wl(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function ju(t,e,r){var n=t.updateQueue;if(n===null)return null;if(n=n.shared,nr&2){var i=n.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),n.pending=e,Xl(t,r)}return i=n.interleaved,i===null?(e.next=e,r_(n)):(e.next=i.next,i.next=e),n.interleaved=e,Xl(t,r)}function o2(t,e,r){if(e=e.updateQueue,e!==null&&(e=e.shared,(r&4194240)!==0)){var n=e.lanes;n&=t.pendingLanes,r|=n,e.lanes=r,zT(t,r)}}function n6(t,e){var r=t.updateQueue,n=t.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var i=null,o=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};o===null?i=o=a:o=o.next=a,r=r.next}while(r!==null);o===null?i=o=e:o=o.next=e}else i=o=e;r={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:o,shared:n.shared,effects:n.effects},t.updateQueue=r;return}t=r.lastBaseUpdate,t===null?r.firstBaseUpdate=e:t.next=e,r.lastBaseUpdate=e}function ny(t,e,r,n){var i=t.updateQueue;_u=!1;var o=i.firstBaseUpdate,a=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,a===null?o=l:a.next=l,a=c;var f=t.alternate;f!==null&&(f=f.updateQueue,s=f.lastBaseUpdate,s!==a&&(s===null?f.firstBaseUpdate=l:s.next=l,f.lastBaseUpdate=c))}if(o!==null){var u=i.baseState;a=0,f=l=c=null,s=o;do{var d=s.lane,h=s.eventTime;if((n&d)===d){f!==null&&(f=f.next={eventTime:h,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=t,p=s;switch(d=e,h=r,p.tag){case 1:if(g=p.payload,typeof g=="function"){u=g.call(h,u,d);break e}u=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=p.payload,d=typeof g=="function"?g.call(h,u,d):g,d==null)break e;u=oi({},u,d);break e;case 2:_u=!0}}s.callback!==null&&s.lane!==0&&(t.flags|=64,d=i.effects,d===null?i.effects=[s]:d.push(s))}else h={eventTime:h,lane:d,tag:s.tag,payload:s.payload,callback:s.callback,next:null},f===null?(l=f=h,c=u):f=f.next=h,a|=d;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;d=s,s=d.next,d.next=null,i.lastBaseUpdate=d,i.shared.pending=null}}while(!0);if(f===null&&(c=u),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=f,e=i.shared.interleaved,e!==null){i=e;do a|=i.lane,i=i.next;while(i!==e)}else o===null&&(i.shared.lanes=0);wd|=a,t.lanes=a,t.memoizedState=u}}function r6(t,e,r){if(t=e.effects,e.effects=null,t!==null)for(e=0;er?r:4,t(!0);var n=Dx.transition;Dx.transition={};try{t(!1),e()}finally{gr=r,Dx.transition=n}}function OM(){return Ss().memoizedState}function fH(t,e,r){var n=Ku(t);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},MM(t))PM(e,r);else if(r=fM(t,e,r,n),r!==null){var i=ea();lc(r,t,n,i),RM(r,e,n)}}function dH(t,e,r){var n=Ku(t),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(MM(t))PM(e,i);else{var o=t.alternate;if(t.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var a=e.lastRenderedState,s=o(a,r);if(i.hasEagerState=!0,i.eagerState=s,fc(s,a)){var c=e.interleaved;c===null?(i.next=i,r_(e)):(i.next=c.next,c.next=i),e.interleaved=i;return}}catch{}finally{}r=fM(t,e,i,n),r!==null&&(i=ea(),lc(r,t,n,i),RM(r,e,n))}}function MM(t){var e=t.alternate;return t===ii||e!==null&&e===ii}function PM(t,e){fp=iy=!0;var r=t.pending;r===null?e.next=e:(e.next=r.next,r.next=e),t.pending=e}function RM(t,e,r){if(r&4194240){var n=e.lanes;n&=t.pendingLanes,r|=n,e.lanes=r,zT(t,r)}}var oy={readContext:Cs,useCallback:Do,useContext:Do,useEffect:Do,useImperativeHandle:Do,useInsertionEffect:Do,useLayoutEffect:Do,useMemo:Do,useReducer:Do,useRef:Do,useState:Do,useDebugValue:Do,useDeferredValue:Do,useTransition:Do,useMutableSource:Do,useSyncExternalStore:Do,useId:Do,unstable_isNewReconciler:!1},hH={readContext:Cs,useCallback:function(t,e){return Gc().memoizedState=[t,e===void 0?null:e],t},useContext:Cs,useEffect:o6,useImperativeHandle:function(t,e,r){return r=r!=null?r.concat([t]):null,s2(4194308,4,_M.bind(null,e,t),r)},useLayoutEffect:function(t,e){return s2(4194308,4,t,e)},useInsertionEffect:function(t,e){return s2(4,2,t,e)},useMemo:function(t,e){var r=Gc();return e=e===void 0?null:e,t=t(),r.memoizedState=[t,e],t},useReducer:function(t,e,r){var n=Gc();return e=r!==void 0?r(e):e,n.memoizedState=n.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},n.queue=t,t=t.dispatch=fH.bind(null,ii,t),[n.memoizedState,t]},useRef:function(t){var e=Gc();return t={current:t},e.memoizedState=t},useState:i6,useDebugValue:d_,useDeferredValue:function(t){return Gc().memoizedState=t},useTransition:function(){var t=i6(!1),e=t[0];return t=uH.bind(null,t[1]),Gc().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,r){var n=ii,i=Gc();if(Wr){if(r===void 0)throw Error(bt(407));r=r()}else{if(r=e(),fo===null)throw Error(bt(349));yd&30||mM(n,e,r)}i.memoizedState=r;var o={value:r,getSnapshot:e};return i.queue=o,o6(yM.bind(null,n,o,t),[t]),n.flags|=2048,n1(9,vM.bind(null,n,o,r,e),void 0,null),r},useId:function(){var t=Gc(),e=fo.identifierPrefix;if(Wr){var r=kl,n=Nl;r=(n&~(1<<32-cc(n)-1)).toString(32)+r,e=":"+e+"R"+r,r=e1++,0")&&(c=c.replace("",t.displayName)),c}while(1<=a&&0<=s);break}}}finally{ux=!1,Error.prepareStackTrace=r}return(t=t?t.displayName||t.name:"")?Ug(t):""}function z$(t){switch(t.tag){case 5:return Ug(t.type);case 16:return Ug("Lazy");case 13:return Ug("Suspense");case 19:return Ug("SuspenseList");case 0:case 2:case 15:return t=fx(t.type,!1),t;case 11:return t=fx(t.type.render,!1),t;case 1:return t=fx(t.type,!0),t;default:return""}}function r3(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case u0:return"Fragment";case l0:return"Portal";case e3:return"Profiler";case FT:return"StrictMode";case t3:return"Suspense";case n3:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case dO:return(t.displayName||"Context")+".Consumer";case fO:return(t._context.displayName||"Context")+".Provider";case UT:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case BT:return e=t.displayName||null,e!==null?e:r3(t.type)||"Memo";case Tu:e=t._payload,t=t._init;try{return r3(t(e))}catch{}}return null}function $$(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return r3(e);case 8:return e===FT?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function ef(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function gO(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function j$(t){var e=gO(t)?"checked":"value",r=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),n=""+t[e];if(!t.hasOwnProperty(e)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return i.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(t,e,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function km(t){t._valueTracker||(t._valueTracker=j$(t))}function pO(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var r=e.getValue(),n="";return t&&(n=gO(t)?t.checked?"true":"false":t.value),t=n,t!==r?(e.setValue(t),!0):!1}function G2(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function i3(t,e){var r=e.checked;return oi({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??t._wrapperState.initialChecked})}function _b(t,e){var r=e.defaultValue==null?"":e.defaultValue,n=e.checked!=null?e.checked:e.defaultChecked;r=ef(e.value!=null?e.value:r),t._wrapperState={initialChecked:n,initialValue:r,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function mO(t,e){e=e.checked,e!=null&&VT(t,"checked",e,!1)}function o3(t,e){mO(t,e);var r=ef(e.value),n=e.type;if(r!=null)n==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+r):t.value!==""+r&&(t.value=""+r);else if(n==="submit"||n==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?a3(t,e.type,r):e.hasOwnProperty("defaultValue")&&a3(t,e.type,ef(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function Eb(t,e,r){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var n=e.type;if(!(n!=="submit"&&n!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,r||e===t.value||(t.value=e),t.defaultValue=e}r=t.name,r!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,r!==""&&(t.name=r)}function a3(t,e,r){(e!=="number"||G2(t.ownerDocument)!==t)&&(r==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+r&&(t.defaultValue=""+r))}var Bg=Array.isArray;function B0(t,e,r,n){if(t=t.options,e){e={};for(var i=0;i"+e.valueOf().toString()+"",e=Vm.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Wp(t,e){if(e){var r=t.firstChild;if(r&&r===t.lastChild&&r.nodeType===3){r.nodeValue=e;return}}t.textContent=e}var ap={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},H$=["Webkit","ms","Moz","O"];Object.keys(ap).forEach(function(t){H$.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),ap[e]=ap[t]})});function xO(t,e,r){return e==null||typeof e=="boolean"||e===""?"":r||typeof e!="number"||e===0||ap.hasOwnProperty(t)&&ap[t]?(""+e).trim():e+"px"}function CO(t,e){t=t.style;for(var r in e)if(e.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=xO(r,e[r],n);r==="float"&&(r="cssFloat"),n?t.setProperty(r,i):t[r]=i}}var K$=oi({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function l3(t,e){if(e){if(K$[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(bt(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(bt(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(bt(61))}if(e.style!=null&&typeof e.style!="object")throw Error(bt(62))}}function u3(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var f3=null;function GT(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var d3=null,G0=null,W0=null;function Ib(t){if(t=j1(t)){if(typeof d3!="function")throw Error(bt(280));var e=t.stateNode;e&&(e=F5(e),d3(t.stateNode,t.type,e))}}function SO(t){G0?W0?W0.push(t):W0=[t]:G0=t}function TO(){if(G0){var t=G0,e=W0;if(W0=G0=null,Ib(t),e)for(t=0;t>>=0,t===0?32:31-(ij(t)/oj|0)|0}var Fm=64,Um=4194304;function Gg(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function j2(t,e){var r=t.pendingLanes;if(r===0)return 0;var n=0,i=t.suspendedLanes,o=t.pingedLanes,a=r&268435455;if(a!==0){var s=a&~i;s!==0?n=Gg(s):(o&=a,o!==0&&(n=Gg(o)))}else a=r&~i,a!==0?n=Gg(a):o!==0&&(n=Gg(o));if(n===0)return 0;if(e!==0&&e!==n&&!(e&i)&&(i=n&-n,o=e&-e,i>=o||i===16&&(o&4194240)!==0))return e;if(n&4&&(n|=r&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=n;0r;r++)e.push(t);return e}function z1(t,e,r){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-cc(e),t[e]=r}function lj(t,e){var r=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var n=t.eventTimes;for(t=t.expirationTimes;0=cp),Vb=" ",Fb=!1;function zO(t,e){switch(t){case"keyup":return Vj.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $O(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var f0=!1;function Uj(t,e){switch(t){case"compositionend":return $O(e);case"keypress":return e.which!==32?null:(Fb=!0,Vb);case"textInput":return t=e.data,t===Vb&&Fb?null:t;default:return null}}function Bj(t,e){if(f0)return t==="compositionend"||!XT&&zO(t,e)?(t=GO(),r2=HT=Ru=null,f0=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:r,offset:e-t};t=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Wb(r)}}function qO(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?qO(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function XO(){for(var t=window,e=G2();e instanceof t.HTMLIFrameElement;){try{var r=typeof e.contentWindow.location.href=="string"}catch{r=!1}if(r)t=e.contentWindow;else break;e=G2(t.document)}return e}function YT(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function Xj(t){var e=XO(),r=t.focusedElem,n=t.selectionRange;if(e!==r&&r&&r.ownerDocument&&qO(r.ownerDocument.documentElement,r)){if(n!==null&&YT(r)){if(e=n.start,t=n.end,t===void 0&&(t=e),"selectionStart"in r)r.selectionStart=e,r.selectionEnd=Math.min(t,r.value.length);else if(t=(e=r.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var i=r.textContent.length,o=Math.min(n.start,i);n=n.end===void 0?o:Math.min(n.end,i),!t.extend&&o>n&&(i=n,n=o,o=i),i=zb(r,o);var a=zb(r,n);i&&a&&(t.rangeCount!==1||t.anchorNode!==i.node||t.anchorOffset!==i.offset||t.focusNode!==a.node||t.focusOffset!==a.offset)&&(e=e.createRange(),e.setStart(i.node,i.offset),t.removeAllRanges(),o>n?(t.addRange(e),t.extend(a.node,a.offset)):(e.setEnd(a.node,a.offset),t.addRange(e)))}}for(e=[],t=r;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,d0=null,y3=null,up=null,w3=!1;function $b(t,e,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;w3||d0==null||d0!==G2(n)||(n=d0,"selectionStart"in n&&YT(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),up&&qp(up,n)||(up=n,n=q2(y3,"onSelect"),0p0||(t.current=E3[p0],E3[p0]=null,p0--)}function Or(t,e){p0++,E3[p0]=t.current,t.current=e}var tf={},Fo=vf(tf),Ca=vf(!1),md=tf;function fh(t,e){var r=t.type.contextTypes;if(!r)return tf;var n=t.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===e)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=e[o];return n&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=i),i}function Sa(t){return t=t.childContextTypes,t!=null}function Y2(){Fr(Ca),Fr(Fo)}function Jb(t,e,r){if(Fo.current!==tf)throw Error(bt(168));Or(Fo,e),Or(Ca,r)}function iM(t,e,r){var n=t.stateNode;if(e=e.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in e))throw Error(bt(108,$$(t)||"Unknown",i));return oi({},r,n)}function J2(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||tf,md=Fo.current,Or(Fo,t),Or(Ca,Ca.current),!0}function Zb(t,e,r){var n=t.stateNode;if(!n)throw Error(bt(169));r?(t=iM(t,e,md),n.__reactInternalMemoizedMergedChildContext=t,Fr(Ca),Fr(Fo),Or(Fo,t)):Fr(Ca),Or(Ca,r)}var Pl=null,U5=!1,Ex=!1;function oM(t){Pl===null?Pl=[t]:Pl.push(t)}function sH(t){U5=!0,oM(t)}function yf(){if(!Ex&&Pl!==null){Ex=!0;var t=0,e=gr;try{var r=Pl;for(gr=1;t>=a,i-=a,Nl=1<<32-cc(e)+i|r<_?(E=T,T=null):E=T.sibling;var b=d(y,T,w[_],x);if(b===null){T===null&&(T=E);break}t&&T&&b.alternate===null&&e(y,T),m=o(b,m,_),S===null?C=b:S.sibling=b,S=b,T=E}if(_===w.length)return r(y,T),Wr&&Bf(y,_),C;if(T===null){for(;__?(E=T,T=null):E=T.sibling;var D=d(y,T,b.value,x);if(D===null){T===null&&(T=E);break}t&&T&&D.alternate===null&&e(y,T),m=o(D,m,_),S===null?C=D:S.sibling=D,S=D,T=E}if(b.done)return r(y,T),Wr&&Bf(y,_),C;if(T===null){for(;!b.done;_++,b=w.next())b=u(y,b.value,x),b!==null&&(m=o(b,m,_),S===null?C=b:S.sibling=b,S=b);return Wr&&Bf(y,_),C}for(T=n(y,T);!b.done;_++,b=w.next())b=h(T,y,_,b.value,x),b!==null&&(t&&b.alternate!==null&&T.delete(b.key===null?_:b.key),m=o(b,m,_),S===null?C=b:S.sibling=b,S=b);return t&&T.forEach(function(I){return e(y,I)}),Wr&&Bf(y,_),C}function v(y,m,w,x){if(typeof w=="object"&&w!==null&&w.type===u0&&w.key===null&&(w=w.props.children),typeof w=="object"&&w!==null){switch(w.$$typeof){case Nm:e:{for(var C=w.key,S=m;S!==null;){if(S.key===C){if(C=w.type,C===u0){if(S.tag===7){r(y,S.sibling),m=i(S,w.props.children),m.return=y,y=m;break e}}else if(S.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===Tu&&t6(C)===S.type){r(y,S.sibling),m=i(S,w.props),m.ref=mg(y,S,w),m.return=y,y=m;break e}r(y,S);break}else e(y,S);S=S.sibling}w.type===u0?(m=sd(w.props.children,y.mode,x,w.key),m.return=y,y=m):(x=f2(w.type,w.key,w.props,null,y.mode,x),x.ref=mg(y,m,w),x.return=y,y=x)}return a(y);case l0:e:{for(S=w.key;m!==null;){if(m.key===S)if(m.tag===4&&m.stateNode.containerInfo===w.containerInfo&&m.stateNode.implementation===w.implementation){r(y,m.sibling),m=i(m,w.children||[]),m.return=y,y=m;break e}else{r(y,m);break}else e(y,m);m=m.sibling}m=Lx(w,y.mode,x),m.return=y,y=m}return a(y);case Tu:return S=w._init,v(y,m,S(w._payload),x)}if(Bg(w))return g(y,m,w,x);if(fg(w))return p(y,m,w,x);Hm(y,w)}return typeof w=="string"&&w!==""||typeof w=="number"?(w=""+w,m!==null&&m.tag===6?(r(y,m.sibling),m=i(m,w),m.return=y,y=m):(r(y,m),m=Rx(w,y.mode,x),m.return=y,y=m),a(y)):r(y,m)}return v}var hh=lM(!0),uM=lM(!1),ey=vf(null),ty=null,y0=null,e_=null;function t_(){e_=y0=ty=null}function n_(t){var e=ey.current;Fr(ey),t._currentValue=e}function I3(t,e,r){for(;t!==null;){var n=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,n!==null&&(n.childLanes|=e)):n!==null&&(n.childLanes&e)!==e&&(n.childLanes|=e),t===r)break;t=t.return}}function $0(t,e){ty=t,e_=y0=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(va=!0),t.firstContext=null)}function Cs(t){var e=t._currentValue;if(e_!==t)if(t={context:t,memoizedValue:e,next:null},y0===null){if(ty===null)throw Error(bt(308));y0=t,ty.dependencies={lanes:0,firstContext:t}}else y0=y0.next=t;return e}var ed=null;function r_(t){ed===null?ed=[t]:ed.push(t)}function fM(t,e,r,n){var i=e.interleaved;return i===null?(r.next=r,r_(e)):(r.next=i.next,i.next=r),e.interleaved=r,Xl(t,n)}function Xl(t,e){t.lanes|=e;var r=t.alternate;for(r!==null&&(r.lanes|=e),r=t,t=t.return;t!==null;)t.childLanes|=e,r=t.alternate,r!==null&&(r.childLanes|=e),r=t,t=t.return;return r.tag===3?r.stateNode:null}var _u=!1;function i_(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function dM(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Wl(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function ju(t,e,r){var n=t.updateQueue;if(n===null)return null;if(n=n.shared,nr&2){var i=n.pending;return i===null?e.next=e:(e.next=i.next,i.next=e),n.pending=e,Xl(t,r)}return i=n.interleaved,i===null?(e.next=e,r_(n)):(e.next=i.next,i.next=e),n.interleaved=e,Xl(t,r)}function o2(t,e,r){if(e=e.updateQueue,e!==null&&(e=e.shared,(r&4194240)!==0)){var n=e.lanes;n&=t.pendingLanes,r|=n,e.lanes=r,zT(t,r)}}function n6(t,e){var r=t.updateQueue,n=t.alternate;if(n!==null&&(n=n.updateQueue,r===n)){var i=null,o=null;if(r=r.firstBaseUpdate,r!==null){do{var a={eventTime:r.eventTime,lane:r.lane,tag:r.tag,payload:r.payload,callback:r.callback,next:null};o===null?i=o=a:o=o.next=a,r=r.next}while(r!==null);o===null?i=o=e:o=o.next=e}else i=o=e;r={baseState:n.baseState,firstBaseUpdate:i,lastBaseUpdate:o,shared:n.shared,effects:n.effects},t.updateQueue=r;return}t=r.lastBaseUpdate,t===null?r.firstBaseUpdate=e:t.next=e,r.lastBaseUpdate=e}function ny(t,e,r,n){var i=t.updateQueue;_u=!1;var o=i.firstBaseUpdate,a=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,a===null?o=l:a.next=l,a=c;var f=t.alternate;f!==null&&(f=f.updateQueue,s=f.lastBaseUpdate,s!==a&&(s===null?f.firstBaseUpdate=l:s.next=l,f.lastBaseUpdate=c))}if(o!==null){var u=i.baseState;a=0,f=l=c=null,s=o;do{var d=s.lane,h=s.eventTime;if((n&d)===d){f!==null&&(f=f.next={eventTime:h,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=t,p=s;switch(d=e,h=r,p.tag){case 1:if(g=p.payload,typeof g=="function"){u=g.call(h,u,d);break e}u=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=p.payload,d=typeof g=="function"?g.call(h,u,d):g,d==null)break e;u=oi({},u,d);break e;case 2:_u=!0}}s.callback!==null&&s.lane!==0&&(t.flags|=64,d=i.effects,d===null?i.effects=[s]:d.push(s))}else h={eventTime:h,lane:d,tag:s.tag,payload:s.payload,callback:s.callback,next:null},f===null?(l=f=h,c=u):f=f.next=h,a|=d;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;d=s,s=d.next,d.next=null,i.lastBaseUpdate=d,i.shared.pending=null}}while(!0);if(f===null&&(c=u),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=f,e=i.shared.interleaved,e!==null){i=e;do a|=i.lane,i=i.next;while(i!==e)}else o===null&&(i.shared.lanes=0);wd|=a,t.lanes=a,t.memoizedState=u}}function r6(t,e,r){if(t=e.effects,e.effects=null,t!==null)for(e=0;er?r:4,t(!0);var n=Dx.transition;Dx.transition={};try{t(!1),e()}finally{gr=r,Dx.transition=n}}function OM(){return Ss().memoizedState}function fH(t,e,r){var n=Ku(t);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},MM(t))PM(e,r);else if(r=fM(t,e,r,n),r!==null){var i=ea();lc(r,t,n,i),RM(r,e,n)}}function dH(t,e,r){var n=Ku(t),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(MM(t))PM(e,i);else{var o=t.alternate;if(t.lanes===0&&(o===null||o.lanes===0)&&(o=e.lastRenderedReducer,o!==null))try{var a=e.lastRenderedState,s=o(a,r);if(i.hasEagerState=!0,i.eagerState=s,fc(s,a)){var c=e.interleaved;c===null?(i.next=i,r_(e)):(i.next=c.next,c.next=i),e.interleaved=i;return}}catch{}finally{}r=fM(t,e,i,n),r!==null&&(i=ea(),lc(r,t,n,i),RM(r,e,n))}}function MM(t){var e=t.alternate;return t===ii||e!==null&&e===ii}function PM(t,e){fp=iy=!0;var r=t.pending;r===null?e.next=e:(e.next=r.next,r.next=e),t.pending=e}function RM(t,e,r){if(r&4194240){var n=e.lanes;n&=t.pendingLanes,r|=n,e.lanes=r,zT(t,r)}}var oy={readContext:Cs,useCallback:Do,useContext:Do,useEffect:Do,useImperativeHandle:Do,useInsertionEffect:Do,useLayoutEffect:Do,useMemo:Do,useReducer:Do,useRef:Do,useState:Do,useDebugValue:Do,useDeferredValue:Do,useTransition:Do,useMutableSource:Do,useSyncExternalStore:Do,useId:Do,unstable_isNewReconciler:!1},hH={readContext:Cs,useCallback:function(t,e){return Gc().memoizedState=[t,e===void 0?null:e],t},useContext:Cs,useEffect:o6,useImperativeHandle:function(t,e,r){return r=r!=null?r.concat([t]):null,s2(4194308,4,_M.bind(null,e,t),r)},useLayoutEffect:function(t,e){return s2(4194308,4,t,e)},useInsertionEffect:function(t,e){return s2(4,2,t,e)},useMemo:function(t,e){var r=Gc();return e=e===void 0?null:e,t=t(),r.memoizedState=[t,e],t},useReducer:function(t,e,r){var n=Gc();return e=r!==void 0?r(e):e,n.memoizedState=n.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e},n.queue=t,t=t.dispatch=fH.bind(null,ii,t),[n.memoizedState,t]},useRef:function(t){var e=Gc();return t={current:t},e.memoizedState=t},useState:i6,useDebugValue:d_,useDeferredValue:function(t){return Gc().memoizedState=t},useTransition:function(){var t=i6(!1),e=t[0];return t=uH.bind(null,t[1]),Gc().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,r){var n=ii,i=Gc();if(Wr){if(r===void 0)throw Error(bt(407));r=r()}else{if(r=e(),fo===null)throw Error(bt(349));yd&30||mM(n,e,r)}i.memoizedState=r;var o={value:r,getSnapshot:e};return i.queue=o,o6(yM.bind(null,n,o,t),[t]),n.flags|=2048,n1(9,vM.bind(null,n,o,r,e),void 0,null),r},useId:function(){var t=Gc(),e=fo.identifierPrefix;if(Wr){var r=kl,n=Nl;r=(n&~(1<<32-cc(n)-1)).toString(32)+r,e=":"+e+"R"+r,r=e1++,0<\/script>",t=t.removeChild(t.firstChild)):typeof n.is=="string"?t=a.createElement(r,{is:n.is}):(t=a.createElement(r),r==="select"&&(a=t,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):t=a.createElementNS(t,r),t[Kc]=e,t[Jp]=n,WM(t,e,!1,!1),e.stateNode=t;e:{switch(a=uC(r,n),r){case"dialog":Lr("cancel",t),Lr("close",t),i=n;break;case"iframe":case"object":case"embed":Lr("load",t),i=n;break;case"video":case"audio":for(i=0;imh&&(e.flags|=128,n=!0,vg(o,!1),e.lanes=4194304)}else{if(!n)if(t=ry(a),t!==null){if(e.flags|=128,n=!0,r=t.updateQueue,r!==null&&(e.updateQueue=r,e.flags|=4),vg(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!Wr)return Io(e),null}else 2*Di()-o.renderingStartTime>mh&&r!==1073741824&&(e.flags|=128,n=!0,vg(o,!1),e.lanes=4194304);o.isBackwards?(a.sibling=e.child,e.child=a):(r=o.last,r!==null?r.sibling=a:e.child=a,o.last=a)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=Di(),e.sibling=null,r=ti.current,Or(ti,n?r&1|2:r&1),e):(Io(e),null);case 22:case 23:return y_(),n=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==n&&(e.flags|=8192),n&&e.mode&1?Ua&1073741824&&(Io(e),e.subtreeFlags&6&&(e.flags|=8192)):Io(e),null;case 24:return null;case 25:return null}throw Error(bt(156,e.tag))}function CH(t,e){switch(ZT(e),e.tag){case 1:return Sa(e.type)&&Y2(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return gh(),Fr(Ca),Fr(Fo),s_(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return a_(e),null;case 13:if(Fr(ti),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(bt(340));dh()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Fr(ti),null;case 4:return gh(),null;case 10:return n_(e.type._context),null;case 22:case 23:return y_(),null;case 24:return null;default:return null}}var qm=!1,Ao=!1,SH=typeof WeakSet=="function"?WeakSet:Set,Ht=null;function w0(t,e){var r=t.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){pi(t,e,n)}else r.current=null}function VC(t,e,r){try{r()}catch(n){pi(t,e,n)}}var m6=!1;function TH(t,e){if(xC=H2,t=XO(),YT(t)){if("selectionStart"in t)var r={start:t.selectionStart,end:t.selectionEnd};else e:{r=(r=t.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break e}var a=0,s=-1,c=-1,l=0,f=0,u=t,d=null;t:for(;;){for(var h;u!==r||i!==0&&u.nodeType!==3||(s=a+i),u!==o||n!==0&&u.nodeType!==3||(c=a+n),u.nodeType===3&&(a+=u.nodeValue.length),(h=u.firstChild)!==null;)d=u,u=h;for(;;){if(u===t)break t;if(d===r&&++l===i&&(s=a),d===o&&++f===n&&(c=a),(h=u.nextSibling)!==null)break;u=d,d=u.parentNode}u=h}r=s===-1||c===-1?null:{start:s,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(CC={focusedElem:t,selectionRange:r},H2=!1,Ht=e;Ht!==null;)if(e=Ht,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Ht=t;else for(;Ht!==null;){e=Ht;try{var g=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var p=g.memoizedProps,v=g.memoizedState,y=e.stateNode,m=y.getSnapshotBeforeUpdate(e.elementType===e.type?p:qs(e.type,p),v);y.__reactInternalSnapshotBeforeUpdate=m}break;case 3:var w=e.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(bt(163))}}catch(x){pi(e,e.return,x)}if(t=e.sibling,t!==null){t.return=e.return,Ht=t;break}Ht=e.return}return g=m6,m6=!1,g}function dp(t,e,r){var n=e.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&t)===t){var o=i.destroy;i.destroy=void 0,o!==void 0&&VC(e,r,o)}i=i.next}while(i!==n)}}function W5(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var r=e=e.next;do{if((r.tag&t)===t){var n=r.create;r.destroy=n()}r=r.next}while(r!==e)}}function FC(t){var e=t.ref;if(e!==null){var r=t.stateNode;switch(t.tag){case 5:t=r;break;default:t=r}typeof e=="function"?e(t):e.current=t}}function jM(t){var e=t.alternate;e!==null&&(t.alternate=null,jM(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Kc],delete e[Jp],delete e[_C],delete e[oH],delete e[aH])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function HM(t){return t.tag===5||t.tag===3||t.tag===4}function v6(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||HM(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function UC(t,e,r){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?r.nodeType===8?r.parentNode.insertBefore(t,e):r.insertBefore(t,e):(r.nodeType===8?(e=r.parentNode,e.insertBefore(t,r)):(e=r,e.appendChild(t)),r=r._reactRootContainer,r!=null||e.onclick!==null||(e.onclick=X2));else if(n!==4&&(t=t.child,t!==null))for(UC(t,e,r),t=t.sibling;t!==null;)UC(t,e,r),t=t.sibling}function BC(t,e,r){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?r.insertBefore(t,e):r.appendChild(t);else if(n!==4&&(t=t.child,t!==null))for(BC(t,e,r),t=t.sibling;t!==null;)BC(t,e,r),t=t.sibling}var vo=null,Ys=!1;function fu(t,e,r){for(r=r.child;r!==null;)KM(t,e,r),r=r.sibling}function KM(t,e,r){if(Yc&&typeof Yc.onCommitFiberUnmount=="function")try{Yc.onCommitFiberUnmount(A5,r)}catch{}switch(r.tag){case 5:Ao||w0(r,e);case 6:var n=vo,i=Ys;vo=null,fu(t,e,r),vo=n,Ys=i,vo!==null&&(Ys?(t=vo,r=r.stateNode,t.nodeType===8?t.parentNode.removeChild(r):t.removeChild(r)):vo.removeChild(r.stateNode));break;case 18:vo!==null&&(Ys?(t=vo,r=r.stateNode,t.nodeType===8?_x(t.parentNode,r):t.nodeType===1&&_x(t,r),Hp(t)):_x(vo,r.stateNode));break;case 4:n=vo,i=Ys,vo=r.stateNode.containerInfo,Ys=!0,fu(t,e,r),vo=n,Ys=i;break;case 0:case 11:case 14:case 15:if(!Ao&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&VC(r,e,a),i=i.next}while(i!==n)}fu(t,e,r);break;case 1:if(!Ao&&(w0(r,e),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(s){pi(r,e,s)}fu(t,e,r);break;case 21:fu(t,e,r);break;case 22:r.mode&1?(Ao=(n=Ao)||r.memoizedState!==null,fu(t,e,r),Ao=n):fu(t,e,r);break;default:fu(t,e,r)}}function y6(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var r=t.stateNode;r===null&&(r=t.stateNode=new SH),e.forEach(function(n){var i=RH.bind(null,t,n);r.has(n)||(r.add(n),n.then(i,i))})}}function Ws(t,e){var r=e.deletions;if(r!==null)for(var n=0;ni&&(i=a),n&=~o}if(n=i,n=Di()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*EH(n/1960))-n,10t?16:t,Lu===null)var n=!1;else{if(t=Lu,Lu=null,cy=0,nr&6)throw Error(bt(331));var i=nr;for(nr|=4,Ht=t.current;Ht!==null;){var o=Ht,a=o.child;if(Ht.flags&16){var s=o.deletions;if(s!==null){for(var c=0;cDi()-m_?ad(t,0):p_|=r),Ta(t,e)}function tP(t,e){e===0&&(t.mode&1?(e=Um,Um<<=1,!(Um&130023424)&&(Um=4194304)):e=1);var r=ea();t=Xl(t,e),t!==null&&(z1(t,e,r),Ta(t,r))}function PH(t){var e=t.memoizedState,r=0;e!==null&&(r=e.retryLane),tP(t,r)}function RH(t,e){var r=0;switch(t.tag){case 13:var n=t.stateNode,i=t.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=t.stateNode;break;default:throw Error(bt(314))}n!==null&&n.delete(e),tP(t,r)}var nP;nP=function(t,e,r){if(t!==null)if(t.memoizedProps!==e.pendingProps||Ca.current)va=!0;else{if(!(t.lanes&r)&&!(e.flags&128))return va=!1,wH(t,e,r);va=!!(t.flags&131072)}else va=!1,Wr&&e.flags&1048576&&aM(e,Q2,e.index);switch(e.lanes=0,e.tag){case 2:var n=e.type;c2(t,e),t=e.pendingProps;var i=fh(e,Fo.current);$0(e,r),i=l_(null,e,n,t,i,r);var o=u_();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Sa(n)?(o=!0,J2(e)):o=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,i_(e),i.updater=G5,e.stateNode=i,i._reactInternals=e,MC(e,n,t,r),e=LC(null,e,n,!0,o,r)):(e.tag=0,Wr&&o&&JT(e),Jo(null,e,i,r),e=e.child),e;case 16:n=e.elementType;e:{switch(c2(t,e),t=e.pendingProps,i=n._init,n=i(n._payload),e.type=n,i=e.tag=AH(n),t=qs(n,t),i){case 0:e=RC(null,e,n,t,r);break e;case 1:e=h6(null,e,n,t,r);break e;case 11:e=f6(null,e,n,t,r);break e;case 14:e=d6(null,e,n,qs(n.type,t),r);break e}throw Error(bt(306,n,""))}return e;case 0:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),RC(t,e,n,i,r);case 1:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),h6(t,e,n,i,r);case 3:e:{if(UM(e),t===null)throw Error(bt(387));n=e.pendingProps,o=e.memoizedState,i=o.element,dM(t,e),ny(e,n,null,r);var a=e.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},e.updateQueue.baseState=o,e.memoizedState=o,e.flags&256){i=ph(Error(bt(423)),e),e=g6(t,e,n,r,i);break e}else if(n!==i){i=ph(Error(bt(424)),e),e=g6(t,e,n,r,i);break e}else for(Wa=$u(e.stateNode.containerInfo.firstChild),ja=e,Wr=!0,Zs=null,r=uM(e,null,n,r),e.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(dh(),n===i){e=Yl(t,e,r);break e}Jo(t,e,n,r)}e=e.child}return e;case 5:return hM(e),t===null&&DC(e),n=e.type,i=e.pendingProps,o=t!==null?t.memoizedProps:null,a=i.children,SC(n,i)?a=null:o!==null&&SC(n,o)&&(e.flags|=32),FM(t,e),Jo(t,e,a,r),e.child;case 6:return t===null&&DC(e),null;case 13:return BM(t,e,r);case 4:return o_(e,e.stateNode.containerInfo),n=e.pendingProps,t===null?e.child=hh(e,null,n,r):Jo(t,e,n,r),e.child;case 11:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),f6(t,e,n,i,r);case 7:return Jo(t,e,e.pendingProps,r),e.child;case 8:return Jo(t,e,e.pendingProps.children,r),e.child;case 12:return Jo(t,e,e.pendingProps.children,r),e.child;case 10:e:{if(n=e.type._context,i=e.pendingProps,o=e.memoizedProps,a=i.value,Or(ey,n._currentValue),n._currentValue=a,o!==null)if(fc(o.value,a)){if(o.children===i.children&&!Ca.current){e=Yl(t,e,r);break e}}else for(o=e.child,o!==null&&(o.return=e);o!==null;){var s=o.dependencies;if(s!==null){a=o.child;for(var c=s.firstContext;c!==null;){if(c.context===n){if(o.tag===1){c=Wl(-1,r&-r),c.tag=2;var l=o.updateQueue;if(l!==null){l=l.shared;var f=l.pending;f===null?c.next=c:(c.next=f.next,f.next=c),l.pending=c}}o.lanes|=r,c=o.alternate,c!==null&&(c.lanes|=r),IC(o.return,r,e),s.lanes|=r;break}c=c.next}}else if(o.tag===10)a=o.type===e.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(bt(341));a.lanes|=r,s=a.alternate,s!==null&&(s.lanes|=r),IC(a,r,e),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===e){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}Jo(t,e,i.children,r),e=e.child}return e;case 9:return i=e.type,n=e.pendingProps.children,$0(e,r),i=Cs(i),n=n(i),e.flags|=1,Jo(t,e,n,r),e.child;case 14:return n=e.type,i=qs(n,e.pendingProps),i=qs(n.type,i),d6(t,e,n,i,r);case 15:return kM(t,e,e.type,e.pendingProps,r);case 17:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),c2(t,e),e.tag=1,Sa(n)?(t=!0,J2(e)):t=!1,$0(e,r),LM(e,n,i),MC(e,n,i,r),LC(null,e,n,!0,t,r);case 19:return GM(t,e,r);case 22:return VM(t,e,r)}throw Error(bt(156,e.tag))};function rP(t,e){return MO(t,e)}function LH(t,e,r,n){this.tag=t,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ys(t,e,r,n){return new LH(t,e,r,n)}function x_(t){return t=t.prototype,!(!t||!t.isReactComponent)}function AH(t){if(typeof t=="function")return x_(t)?1:0;if(t!=null){if(t=t.$$typeof,t===UT)return 11;if(t===BT)return 14}return 2}function qu(t,e){var r=t.alternate;return r===null?(r=ys(t.tag,e,t.key,t.mode),r.elementType=t.elementType,r.type=t.type,r.stateNode=t.stateNode,r.alternate=t,t.alternate=r):(r.pendingProps=e,r.type=t.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=t.flags&14680064,r.childLanes=t.childLanes,r.lanes=t.lanes,r.child=t.child,r.memoizedProps=t.memoizedProps,r.memoizedState=t.memoizedState,r.updateQueue=t.updateQueue,e=t.dependencies,r.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},r.sibling=t.sibling,r.index=t.index,r.ref=t.ref,r}function f2(t,e,r,n,i,o){var a=2;if(n=t,typeof t=="function")x_(t)&&(a=1);else if(typeof t=="string")a=5;else e:switch(t){case u0:return sd(r.children,i,o,e);case FT:a=8,i|=8;break;case eC:return t=ys(12,r,e,i|2),t.elementType=eC,t.lanes=o,t;case tC:return t=ys(13,r,e,i),t.elementType=tC,t.lanes=o,t;case nC:return t=ys(19,r,e,i),t.elementType=nC,t.lanes=o,t;case hO:return $5(r,i,o,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case fO:a=10;break e;case dO:a=9;break e;case UT:a=11;break e;case BT:a=14;break e;case Tu:a=16,n=null;break e}throw Error(bt(130,t==null?t:typeof t,""))}return e=ys(a,r,e,i),e.elementType=t,e.type=n,e.lanes=o,e}function sd(t,e,r,n){return t=ys(7,t,n,e),t.lanes=r,t}function $5(t,e,r,n){return t=ys(22,t,n,e),t.elementType=hO,t.lanes=r,t.stateNode={isHidden:!1},t}function Rx(t,e,r){return t=ys(6,t,null,e),t.lanes=r,t}function Lx(t,e,r){return e=ys(4,t.children!==null?t.children:[],t.key,e),e.lanes=r,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function NH(t,e,r,n,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=hx(0),this.expirationTimes=hx(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=hx(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function C_(t,e,r,n,i,o,a,s,c){return t=new NH(t,e,r,s,c),e===1?(e=1,o===!0&&(e|=8)):e=0,o=ys(3,null,null,e),t.current=o,o.stateNode=t,o.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},i_(o),t}function kH(t,e,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(sP)}catch(t){console.error(t)}}sP(),sO.exports=Ja;var GH=sO.exports,jC,b6=GH;jC=b6.createRoot,b6.hydrateRoot;var rt;(function(t){t.ERROR_EVENT="CORNERSTONE_ERROR",t.CACHE_SIZE_EXCEEDED="CACHE_SIZE_EXCEEDED",t.IMAGE_LOAD_ERROR="IMAGE_LOAD_ERROR",t.CAMERA_MODIFIED="CORNERSTONE_CAMERA_MODIFIED",t.CAMERA_RESET="CORNERSTONE_CAMERA_RESET",t.VOI_MODIFIED="CORNERSTONE_VOI_MODIFIED",t.PRESET_MODIFIED="CORNERSTONE_VIEWPORT_RENDERING_PRESET_MODIFIED",t.DISPLAY_AREA_MODIFIED="CORNERSTONE_DISPLAY_AREA_MODIFIED",t.ELEMENT_DISABLED="CORNERSTONE_ELEMENT_DISABLED",t.ELEMENT_ENABLED="CORNERSTONE_ELEMENT_ENABLED",t.IMAGE_RENDERED="CORNERSTONE_IMAGE_RENDERED",t.IMAGE_VOLUME_MODIFIED="CORNERSTONE_IMAGE_VOLUME_MODIFIED",t.IMAGE_VOLUME_LOADING_COMPLETED="CORNERSTONE_IMAGE_VOLUME_LOADING_COMPLETED",t.IMAGE_LOADED="CORNERSTONE_IMAGE_LOADED",t.IMAGE_RETRIEVAL_STAGE="CORNERSTONE_IMAGE_RETRIEVAL_STAGE",t.IMAGE_LOAD_FAILED="CORNERSTONE_IMAGE_LOAD_FAILED",t.VOLUME_VIEWPORT_NEW_VOLUME="CORNERSTONE_VOLUME_VIEWPORT_NEW_VOLUME",t.VOLUME_LOADED="CORNERSTONE_VOLUME_LOADED",t.VOLUME_LOADED_FAILED="CORNERSTONE_VOLUME_LOADED_FAILED",t.IMAGE_CACHE_IMAGE_ADDED="CORNERSTONE_IMAGE_CACHE_IMAGE_ADDED",t.IMAGE_CACHE_IMAGE_REMOVED="CORNERSTONE_IMAGE_CACHE_IMAGE_REMOVED",t.VOLUME_CACHE_VOLUME_ADDED="CORNERSTONE_VOLUME_CACHE_VOLUME_ADDED",t.VOLUME_CACHE_VOLUME_REMOVED="CORNERSTONE_VOLUME_CACHE_VOLUME_REMOVED",t.STACK_NEW_IMAGE="CORNERSTONE_STACK_NEW_IMAGE",t.VOLUME_NEW_IMAGE="CORNERSTONE_VOLUME_NEW_IMAGE",t.PRE_STACK_NEW_IMAGE="CORNERSTONE_PRE_STACK_NEW_IMAGE",t.IMAGE_SPACING_CALIBRATED="CORNERSTONE_IMAGE_SPACING_CALIBRATED",t.VIEWPORT_NEW_IMAGE_SET="CORNERSTONE_VIEWPORT_NEW_IMAGE_SET",t.STACK_VIEWPORT_SCROLL="CORNERSTONE_STACK_VIEWPORT_SCROLL",t.STACK_SCROLL_OUT_OF_BOUNDS="STACK_SCROLL_OUT_OF_BOUNDS",t.GEOMETRY_CACHE_GEOMETRY_ADDED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",t.GEOMETRY_CACHE_GEOMETRY_REMOVED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_REMOVED",t.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS="VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",t.VOLUME_VIEWPORT_SCROLL="VOLUME_VIEWPORT_SCROLL",t.CLIPPING_PLANES_UPDATED="CORNERSTONE_CLIPPING_PLANES_UPDATED",t.WEB_WORKER_PROGRESS="CORNERSTONE_WEB_WORKER_PROGRESS",t.COLORMAP_MODIFIED="CORNERSTONE_COLORMAP_MODIFIED",t.DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED="DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED",t.DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED="DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED",t.DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED="DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED",t.DYNAMIC_VOLUME_TIME_POINT_LOADED="DYNAMIC_VOLUME_TIME_POINT_LOADED",t.GEOMETRY_LOADED="GEOMETRY_LOADED",t.GEOMETRY_LOAD_PROGRESS="GEOMETRY_LOAD_PROGRESS",t.GEOMETRY_LOADED_FAILED="GEOMETRY_LOADED_FAILED",t.ACTORS_CHANGED="CORNERSTONE_ACTORS_CHANGED"})(rt||(rt={}));var pn;(function(t){t.Interaction="interaction",t.Thumbnail="thumbnail",t.Prefetch="prefetch",t.Compute="compute"})(pn||(pn={}));var vr;(function(t){t.STACK="stack",t.ORTHOGRAPHIC="orthographic",t.PERSPECTIVE="perspective",t.VOLUME_3D="volume3d",t.VIDEO="video",t.WHOLE_SLIDE="wholeSlide"})(vr||(vr={}));var Vl;(function(t){t[t.NEAREST=0]="NEAREST",t[t.LINEAR=1]="LINEAR",t[t.FAST_LINEAR=2]="FAST_LINEAR"})(Vl||(Vl={}));const d2={COMPOSITE_BLEND:0,MAXIMUM_INTENSITY_BLEND:1,MINIMUM_INTENSITY_BLEND:2,AVERAGE_INTENSITY_BLEND:3,ADDITIVE_INTENSITY_BLEND:4,RADON_TRANSFORM_BLEND:5,LABELMAP_EDGE_PROJECTION_BLEND:6},WH={OFF:0,NORMALIZED:1,RAW:2};var cP={BlendMode:d2,FilterMode:WH};const{BlendMode:wg}=cP;var Zc;(function(t){t[t.COMPOSITE=wg.COMPOSITE_BLEND]="COMPOSITE",t[t.MAXIMUM_INTENSITY_BLEND=wg.MAXIMUM_INTENSITY_BLEND]="MAXIMUM_INTENSITY_BLEND",t[t.MINIMUM_INTENSITY_BLEND=wg.MINIMUM_INTENSITY_BLEND]="MINIMUM_INTENSITY_BLEND",t[t.AVERAGE_INTENSITY_BLEND=wg.AVERAGE_INTENSITY_BLEND]="AVERAGE_INTENSITY_BLEND",t[t.LABELMAP_EDGE_PROJECTION_BLEND=wg.LABELMAP_EDGE_PROJECTION_BLEND]="LABELMAP_EDGE_PROJECTION_BLEND"})(Zc||(Zc={}));var Cd;(function(t){t.AXIAL="axial",t.CORONAL="coronal",t.SAGITTAL="sagittal",t.ACQUISITION="acquisition"})(Cd||(Cd={}));var Qc;(function(t){t.CONTOUR="CONTOUR",t.SURFACE="SURFACE",t.MESH="MESH"})(Qc||(Qc={}));var HC;(function(t){t.CLOSED_PLANAR="CLOSED_PLANAR",t.OPEN_PLANAR="OPEN_PLANAR"})(HC||(HC={}));const zH=HC;var za;(function(t){t.PLY="PLY",t.STL="STL",t.OBJ="OBJ",t.VTP="VTP"})(za||(za={}));var wo;(function(t){t.LINEAR="LINEAR",t.SAMPLED_SIGMOID="SIGMOID",t.LINEAR_EXACT="LINEAR_EXACT"})(wo||(wo={}));var KC;(function(t){t.SUM="SUM",t.AVERAGE="AVERAGE",t.SUBTRACT="SUBTRACT"})(KC||(KC={}));const $H=KC;var Qs;(function(t){t.NOT_APPLICABLE="",t.ERMF="ERMF",t.USER="User",t.PROJECTION="Proj",t.REGION="Region",t.ERROR="Error",t.UNCALIBRATED="Uncalibrated",t.CALIBRATED="Calibrated",t.UNKNOWN="Unknown"})(Qs||(Qs={}));var Lo;(function(t){t.NO_DATA="noData",t.LOADING="loading",t.PRE_RENDER="preRender",t.RESIZE="resize",t.RENDERED="rendered"})(Lo||(Lo={}));var ya;(function(t){t[t.FAR_REPLICATE=1]="FAR_REPLICATE",t[t.ADJACENT_REPLICATE=3]="ADJACENT_REPLICATE",t[t.SUBRESOLUTION=6]="SUBRESOLUTION",t[t.LOSSY=7]="LOSSY",t[t.FULL_RESOLUTION=8]="FULL_RESOLUTION"})(ya||(ya={}));var i1;(function(t){t.FRAME="f",t.SECOND="s"})(i1||(i1={}));const jH=Object.freeze(Object.defineProperty({__proto__:null,get SpeedUnit(){return i1}},Symbol.toStringTag,{value:"Module"}));var Qo;(function(t){t.CALIBRATION="calibrationModule",t.CINE="cineModule",t.GENERAL_IMAGE="generalImageModule",t.GENERAL_SERIES="generalSeriesModule",t.GENERAL_STUDY="generalStudyModule",t.IMAGE_PIXEL="imagePixelModule",t.IMAGE_PLANE="imagePlaneModule",t.IMAGE_URL="imageUrlModule",t.MODALITY_LUT="modalityLutModule",t.MULTIFRAME="multiframeModule",t.NM_MULTIFRAME_GEOMETRY="nmMultiframeGeometryModule",t.OVERLAY_PLANE="overlayPlaneModule",t.PATIENT="patientModule",t.PATIENT_STUDY="patientStudyModule",t.PET_IMAGE="petImageModule",t.PET_ISOTOPE="petIsotopeModule",t.PET_SERIES="petSeriesModule",t.SOP_COMMON="sopCommonModule",t.ULTRASOUND_ENHANCED_REGION="ultrasoundEnhancedRegionModule",t.VOI_LUT="voiLutModule",t.WADO_WEB_CLIENT="wadoWebClient"})(Qo||(Qo={}));var H0;(function(t){t.SUM="SUM",t.SUBTRACT="SUBTRACT",t.AVERAGE="AVERAGE"})(H0||(H0={}));var fy;(function(t){t.RLE="RLE",t.Volume="Volume"})(fy||(fy={}));const Qa=Object.freeze(Object.defineProperty({__proto__:null,BlendModes:Zc,CalibrationTypes:Qs,ContourType:zH,DynamicOperatorType:$H,Events:rt,get GenerateImageType(){return H0},GeometryType:Qc,ImageQualityStatus:ya,InterpolationType:Vl,MeshType:za,MetadataModules:Qo,OrientationAxis:Cd,RequestType:pn,VOILUTFunctionType:wo,VideoEnums:jH,ViewportStatus:Lo,ViewportType:vr,VoxelManagerEnum:fy},Symbol.toStringTag,{value:"Module"})),qC={hotIron:{name:"Hot Iron",numOfColors:256,colors:[[0,0,0,255],[2,0,0,255],[4,0,0,255],[6,0,0,255],[8,0,0,255],[10,0,0,255],[12,0,0,255],[14,0,0,255],[16,0,0,255],[18,0,0,255],[20,0,0,255],[22,0,0,255],[24,0,0,255],[26,0,0,255],[28,0,0,255],[30,0,0,255],[32,0,0,255],[34,0,0,255],[36,0,0,255],[38,0,0,255],[40,0,0,255],[42,0,0,255],[44,0,0,255],[46,0,0,255],[48,0,0,255],[50,0,0,255],[52,0,0,255],[54,0,0,255],[56,0,0,255],[58,0,0,255],[60,0,0,255],[62,0,0,255],[64,0,0,255],[66,0,0,255],[68,0,0,255],[70,0,0,255],[72,0,0,255],[74,0,0,255],[76,0,0,255],[78,0,0,255],[80,0,0,255],[82,0,0,255],[84,0,0,255],[86,0,0,255],[88,0,0,255],[90,0,0,255],[92,0,0,255],[94,0,0,255],[96,0,0,255],[98,0,0,255],[100,0,0,255],[102,0,0,255],[104,0,0,255],[106,0,0,255],[108,0,0,255],[110,0,0,255],[112,0,0,255],[114,0,0,255],[116,0,0,255],[118,0,0,255],[120,0,0,255],[122,0,0,255],[124,0,0,255],[126,0,0,255],[128,0,0,255],[130,0,0,255],[132,0,0,255],[134,0,0,255],[136,0,0,255],[138,0,0,255],[140,0,0,255],[142,0,0,255],[144,0,0,255],[146,0,0,255],[148,0,0,255],[150,0,0,255],[152,0,0,255],[154,0,0,255],[156,0,0,255],[158,0,0,255],[160,0,0,255],[162,0,0,255],[164,0,0,255],[166,0,0,255],[168,0,0,255],[170,0,0,255],[172,0,0,255],[174,0,0,255],[176,0,0,255],[178,0,0,255],[180,0,0,255],[182,0,0,255],[184,0,0,255],[186,0,0,255],[188,0,0,255],[190,0,0,255],[192,0,0,255],[194,0,0,255],[196,0,0,255],[198,0,0,255],[200,0,0,255],[202,0,0,255],[204,0,0,255],[206,0,0,255],[208,0,0,255],[210,0,0,255],[212,0,0,255],[214,0,0,255],[216,0,0,255],[218,0,0,255],[220,0,0,255],[222,0,0,255],[224,0,0,255],[226,0,0,255],[228,0,0,255],[230,0,0,255],[232,0,0,255],[234,0,0,255],[236,0,0,255],[238,0,0,255],[240,0,0,255],[242,0,0,255],[244,0,0,255],[246,0,0,255],[248,0,0,255],[250,0,0,255],[252,0,0,255],[254,0,0,255],[255,0,0,255],[255,2,0,255],[255,4,0,255],[255,6,0,255],[255,8,0,255],[255,10,0,255],[255,12,0,255],[255,14,0,255],[255,16,0,255],[255,18,0,255],[255,20,0,255],[255,22,0,255],[255,24,0,255],[255,26,0,255],[255,28,0,255],[255,30,0,255],[255,32,0,255],[255,34,0,255],[255,36,0,255],[255,38,0,255],[255,40,0,255],[255,42,0,255],[255,44,0,255],[255,46,0,255],[255,48,0,255],[255,50,0,255],[255,52,0,255],[255,54,0,255],[255,56,0,255],[255,58,0,255],[255,60,0,255],[255,62,0,255],[255,64,0,255],[255,66,0,255],[255,68,0,255],[255,70,0,255],[255,72,0,255],[255,74,0,255],[255,76,0,255],[255,78,0,255],[255,80,0,255],[255,82,0,255],[255,84,0,255],[255,86,0,255],[255,88,0,255],[255,90,0,255],[255,92,0,255],[255,94,0,255],[255,96,0,255],[255,98,0,255],[255,100,0,255],[255,102,0,255],[255,104,0,255],[255,106,0,255],[255,108,0,255],[255,110,0,255],[255,112,0,255],[255,114,0,255],[255,116,0,255],[255,118,0,255],[255,120,0,255],[255,122,0,255],[255,124,0,255],[255,126,0,255],[255,128,4,255],[255,130,8,255],[255,132,12,255],[255,134,16,255],[255,136,20,255],[255,138,24,255],[255,140,28,255],[255,142,32,255],[255,144,36,255],[255,146,40,255],[255,148,44,255],[255,150,48,255],[255,152,52,255],[255,154,56,255],[255,156,60,255],[255,158,64,255],[255,160,68,255],[255,162,72,255],[255,164,76,255],[255,166,80,255],[255,168,84,255],[255,170,88,255],[255,172,92,255],[255,174,96,255],[255,176,100,255],[255,178,104,255],[255,180,108,255],[255,182,112,255],[255,184,116,255],[255,186,120,255],[255,188,124,255],[255,190,128,255],[255,192,132,255],[255,194,136,255],[255,196,140,255],[255,198,144,255],[255,200,148,255],[255,202,152,255],[255,204,156,255],[255,206,160,255],[255,208,164,255],[255,210,168,255],[255,212,172,255],[255,214,176,255],[255,216,180,255],[255,218,184,255],[255,220,188,255],[255,222,192,255],[255,224,196,255],[255,226,200,255],[255,228,204,255],[255,230,208,255],[255,232,212,255],[255,234,216,255],[255,236,220,255],[255,238,224,255],[255,240,228,255],[255,242,232,255],[255,244,236,255],[255,246,240,255],[255,248,244,255],[255,250,248,255],[255,252,252,255],[255,255,255,255]]},pet:{name:"PET",numColors:256,colors:[[0,0,0,255],[0,2,1,255],[0,4,3,255],[0,6,5,255],[0,8,7,255],[0,10,9,255],[0,12,11,255],[0,14,13,255],[0,16,15,255],[0,18,17,255],[0,20,19,255],[0,22,21,255],[0,24,23,255],[0,26,25,255],[0,28,27,255],[0,30,29,255],[0,32,31,255],[0,34,33,255],[0,36,35,255],[0,38,37,255],[0,40,39,255],[0,42,41,255],[0,44,43,255],[0,46,45,255],[0,48,47,255],[0,50,49,255],[0,52,51,255],[0,54,53,255],[0,56,55,255],[0,58,57,255],[0,60,59,255],[0,62,61,255],[0,65,63,255],[0,67,65,255],[0,69,67,255],[0,71,69,255],[0,73,71,255],[0,75,73,255],[0,77,75,255],[0,79,77,255],[0,81,79,255],[0,83,81,255],[0,85,83,255],[0,87,85,255],[0,89,87,255],[0,91,89,255],[0,93,91,255],[0,95,93,255],[0,97,95,255],[0,99,97,255],[0,101,99,255],[0,103,101,255],[0,105,103,255],[0,107,105,255],[0,109,107,255],[0,111,109,255],[0,113,111,255],[0,115,113,255],[0,117,115,255],[0,119,117,255],[0,121,119,255],[0,123,121,255],[0,125,123,255],[0,128,125,255],[1,126,127,255],[3,124,129,255],[5,122,131,255],[7,120,133,255],[9,118,135,255],[11,116,137,255],[13,114,139,255],[15,112,141,255],[17,110,143,255],[19,108,145,255],[21,106,147,255],[23,104,149,255],[25,102,151,255],[27,100,153,255],[29,98,155,255],[31,96,157,255],[33,94,159,255],[35,92,161,255],[37,90,163,255],[39,88,165,255],[41,86,167,255],[43,84,169,255],[45,82,171,255],[47,80,173,255],[49,78,175,255],[51,76,177,255],[53,74,179,255],[55,72,181,255],[57,70,183,255],[59,68,185,255],[61,66,187,255],[63,64,189,255],[65,63,191,255],[67,61,193,255],[69,59,195,255],[71,57,197,255],[73,55,199,255],[75,53,201,255],[77,51,203,255],[79,49,205,255],[81,47,207,255],[83,45,209,255],[85,43,211,255],[86,41,213,255],[88,39,215,255],[90,37,217,255],[92,35,219,255],[94,33,221,255],[96,31,223,255],[98,29,225,255],[100,27,227,255],[102,25,229,255],[104,23,231,255],[106,21,233,255],[108,19,235,255],[110,17,237,255],[112,15,239,255],[114,13,241,255],[116,11,243,255],[118,9,245,255],[120,7,247,255],[122,5,249,255],[124,3,251,255],[126,1,253,255],[128,0,255,255],[130,2,252,255],[132,4,248,255],[134,6,244,255],[136,8,240,255],[138,10,236,255],[140,12,232,255],[142,14,228,255],[144,16,224,255],[146,18,220,255],[148,20,216,255],[150,22,212,255],[152,24,208,255],[154,26,204,255],[156,28,200,255],[158,30,196,255],[160,32,192,255],[162,34,188,255],[164,36,184,255],[166,38,180,255],[168,40,176,255],[170,42,172,255],[171,44,168,255],[173,46,164,255],[175,48,160,255],[177,50,156,255],[179,52,152,255],[181,54,148,255],[183,56,144,255],[185,58,140,255],[187,60,136,255],[189,62,132,255],[191,64,128,255],[193,66,124,255],[195,68,120,255],[197,70,116,255],[199,72,112,255],[201,74,108,255],[203,76,104,255],[205,78,100,255],[207,80,96,255],[209,82,92,255],[211,84,88,255],[213,86,84,255],[215,88,80,255],[217,90,76,255],[219,92,72,255],[221,94,68,255],[223,96,64,255],[225,98,60,255],[227,100,56,255],[229,102,52,255],[231,104,48,255],[233,106,44,255],[235,108,40,255],[237,110,36,255],[239,112,32,255],[241,114,28,255],[243,116,24,255],[245,118,20,255],[247,120,16,255],[249,122,12,255],[251,124,8,255],[253,126,4,255],[255,128,0,255],[255,130,4,255],[255,132,8,255],[255,134,12,255],[255,136,16,255],[255,138,20,255],[255,140,24,255],[255,142,28,255],[255,144,32,255],[255,146,36,255],[255,148,40,255],[255,150,44,255],[255,152,48,255],[255,154,52,255],[255,156,56,255],[255,158,60,255],[255,160,64,255],[255,162,68,255],[255,164,72,255],[255,166,76,255],[255,168,80,255],[255,170,85,255],[255,172,89,255],[255,174,93,255],[255,176,97,255],[255,178,101,255],[255,180,105,255],[255,182,109,255],[255,184,113,255],[255,186,117,255],[255,188,121,255],[255,190,125,255],[255,192,129,255],[255,194,133,255],[255,196,137,255],[255,198,141,255],[255,200,145,255],[255,202,149,255],[255,204,153,255],[255,206,157,255],[255,208,161,255],[255,210,165,255],[255,212,170,255],[255,214,174,255],[255,216,178,255],[255,218,182,255],[255,220,186,255],[255,222,190,255],[255,224,194,255],[255,226,198,255],[255,228,202,255],[255,230,206,255],[255,232,210,255],[255,234,214,255],[255,236,218,255],[255,238,222,255],[255,240,226,255],[255,242,230,255],[255,244,234,255],[255,246,238,255],[255,248,242,255],[255,250,246,255],[255,252,250,255],[255,255,255,255]]},hotMetalBlue:{name:"Hot Metal Blue",numColors:256,colors:[[0,0,0,255],[0,0,2,255],[0,0,4,255],[0,0,6,255],[0,0,8,255],[0,0,10,255],[0,0,12,255],[0,0,14,255],[0,0,16,255],[0,0,17,255],[0,0,19,255],[0,0,21,255],[0,0,23,255],[0,0,25,255],[0,0,27,255],[0,0,29,255],[0,0,31,255],[0,0,33,255],[0,0,35,255],[0,0,37,255],[0,0,39,255],[0,0,41,255],[0,0,43,255],[0,0,45,255],[0,0,47,255],[0,0,49,255],[0,0,51,255],[0,0,53,255],[0,0,55,255],[0,0,57,255],[0,0,59,255],[0,0,61,255],[0,0,63,255],[0,0,65,255],[0,0,67,255],[0,0,69,255],[0,0,71,255],[0,0,73,255],[0,0,75,255],[0,0,77,255],[0,0,79,255],[0,0,81,255],[0,0,83,255],[0,0,84,255],[0,0,86,255],[0,0,88,255],[0,0,90,255],[0,0,92,255],[0,0,94,255],[0,0,96,255],[0,0,98,255],[0,0,100,255],[0,0,102,255],[0,0,104,255],[0,0,106,255],[0,0,108,255],[0,0,110,255],[0,0,112,255],[0,0,114,255],[0,0,116,255],[0,0,117,255],[0,0,119,255],[0,0,121,255],[0,0,123,255],[0,0,125,255],[0,0,127,255],[0,0,129,255],[0,0,131,255],[0,0,133,255],[0,0,135,255],[0,0,137,255],[0,0,139,255],[0,0,141,255],[0,0,143,255],[0,0,145,255],[0,0,147,255],[0,0,149,255],[0,0,151,255],[0,0,153,255],[0,0,155,255],[0,0,157,255],[0,0,159,255],[0,0,161,255],[0,0,163,255],[0,0,165,255],[0,0,167,255],[3,0,169,255],[6,0,171,255],[9,0,173,255],[12,0,175,255],[15,0,177,255],[18,0,179,255],[21,0,181,255],[24,0,183,255],[26,0,184,255],[29,0,186,255],[32,0,188,255],[35,0,190,255],[38,0,192,255],[41,0,194,255],[44,0,196,255],[47,0,198,255],[50,0,200,255],[52,0,197,255],[55,0,194,255],[57,0,191,255],[59,0,188,255],[62,0,185,255],[64,0,182,255],[66,0,179,255],[69,0,176,255],[71,0,174,255],[74,0,171,255],[76,0,168,255],[78,0,165,255],[81,0,162,255],[83,0,159,255],[85,0,156,255],[88,0,153,255],[90,0,150,255],[93,2,144,255],[96,4,138,255],[99,6,132,255],[102,8,126,255],[105,9,121,255],[108,11,115,255],[111,13,109,255],[114,15,103,255],[116,17,97,255],[119,19,91,255],[122,21,85,255],[125,23,79,255],[128,24,74,255],[131,26,68,255],[134,28,62,255],[137,30,56,255],[140,32,50,255],[143,34,47,255],[146,36,44,255],[149,38,41,255],[152,40,38,255],[155,41,35,255],[158,43,32,255],[161,45,29,255],[164,47,26,255],[166,49,24,255],[169,51,21,255],[172,53,18,255],[175,55,15,255],[178,56,12,255],[181,58,9,255],[184,60,6,255],[187,62,3,255],[190,64,0,255],[194,66,0,255],[198,68,0,255],[201,70,0,255],[205,72,0,255],[209,73,0,255],[213,75,0,255],[217,77,0,255],[221,79,0,255],[224,81,0,255],[228,83,0,255],[232,85,0,255],[236,87,0,255],[240,88,0,255],[244,90,0,255],[247,92,0,255],[251,94,0,255],[255,96,0,255],[255,98,3,255],[255,100,6,255],[255,102,9,255],[255,104,12,255],[255,105,15,255],[255,107,18,255],[255,109,21,255],[255,111,24,255],[255,113,26,255],[255,115,29,255],[255,117,32,255],[255,119,35,255],[255,120,38,255],[255,122,41,255],[255,124,44,255],[255,126,47,255],[255,128,50,255],[255,130,53,255],[255,132,56,255],[255,134,59,255],[255,136,62,255],[255,137,65,255],[255,139,68,255],[255,141,71,255],[255,143,74,255],[255,145,76,255],[255,147,79,255],[255,149,82,255],[255,151,85,255],[255,152,88,255],[255,154,91,255],[255,156,94,255],[255,158,97,255],[255,160,100,255],[255,162,103,255],[255,164,106,255],[255,166,109,255],[255,168,112,255],[255,169,115,255],[255,171,118,255],[255,173,121,255],[255,175,124,255],[255,177,126,255],[255,179,129,255],[255,181,132,255],[255,183,135,255],[255,184,138,255],[255,186,141,255],[255,188,144,255],[255,190,147,255],[255,192,150,255],[255,194,153,255],[255,196,156,255],[255,198,159,255],[255,200,162,255],[255,201,165,255],[255,203,168,255],[255,205,171,255],[255,207,174,255],[255,209,176,255],[255,211,179,255],[255,213,182,255],[255,215,185,255],[255,216,188,255],[255,218,191,255],[255,220,194,255],[255,222,197,255],[255,224,200,255],[255,226,203,255],[255,228,206,255],[255,229,210,255],[255,231,213,255],[255,233,216,255],[255,235,219,255],[255,237,223,255],[255,239,226,255],[255,240,229,255],[255,242,232,255],[255,244,236,255],[255,246,239,255],[255,248,242,255],[255,250,245,255],[255,251,249,255],[255,253,252,255],[255,255,255,255]]},pet20Step:{name:"PET 20 Step",numColors:256,colors:[[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255]]},gray:{name:"Gray",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,1,1]]}},jet:{name:"Jet",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.35,0,0],[.66,1,1],[.89,1,1],[1,.5,.5]],green:[[0,0,0],[.125,0,0],[.375,1,1],[.64,1,1],[.91,0,0],[1,0,0]],blue:[[0,.5,.5],[.11,1,1],[.34,1,1],[.65,0,0],[1,0,0]]}},hsv:{name:"HSV",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[.15873,1,1],[.174603,.96875,.96875],[.333333,.03125,.03125],[.349206,0,0],[.666667,0,0],[.68254,.03125,.03125],[.84127,.96875,.96875],[.857143,1,1],[1,1,1]],green:[[0,0,0],[.15873,.9375,.9375],[.174603,1,1],[.507937,1,1],[.666667,.0625,.0625],[.68254,0,0],[1,0,0]],blue:[[0,0,0],[.333333,0,0],[.349206,.0625,.0625],[.507937,1,1],[.84127,1,1],[.857143,.9375,.9375],[1,.09375,.09375]]}},hot:{name:"Hot",numColors:256,gamma:1,segmentedData:{red:[[0,.0416,.0416],[.365079,1,1],[1,1,1]],green:[[0,0,0],[.365079,0,0],[.746032,1,1],[1,1,1]],blue:[[0,0,0],[.746032,0,0],[1,1,1]]}},cool:{name:"Cool",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,1,1],[1,0,0]],blue:[[0,1,1],[1,1,1]]}},spring:{name:"Spring",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,0,0]]}},summer:{name:"Summer",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,.5,.5],[1,1,1]],blue:[[0,.4,.4],[1,.4,.4]]}},autumn:{name:"Autumn",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,0,0]]}},winter:{name:"Winter",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,0,0]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,.5,.5]]}},bone:{name:"Bone",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.746032,.652778,.652778],[1,1,1]],green:[[0,0,0],[.365079,.319444,.319444],[.746032,.777778,.777778],[1,1,1]],blue:[[0,0,0],[.365079,.444444,.444444],[1,1,1]]}},copper:{name:"Copper",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.809524,1,1],[1,1,1]],green:[[0,0,0],[1,.7812,.7812]],blue:[[0,0,0],[1,.4975,.4975]]}},spectral:{name:"Spectral",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.05,.4667,.4667],[.1,.5333,.5333],[.15,0,0],[.2,0,0],[.25,0,0],[.3,0,0],[.35,0,0],[.4,0,0],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,.7333,.7333],[.7,.9333,.9333],[.75,1,1],[.8,1,1],[.85,1,1],[.9,.8667,.8667],[.95,.8,.8],[1,.8,.8]],green:[[0,0,0],[.05,0,0],[.1,0,0],[.15,0,0],[.2,0,0],[.25,.4667,.4667],[.3,.6,.6],[.35,.6667,.6667],[.4,.6667,.6667],[.45,.6,.6],[.5,.7333,.7333],[.55,.8667,.8667],[.6,1,1],[.65,1,1],[.7,.9333,.9333],[.75,.8,.8],[.8,.6,.6],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]],blue:[[0,0,0],[.05,.5333,.5333],[.1,.6,.6],[.15,.6667,.6667],[.2,.8667,.8667],[.25,.8667,.8667],[.3,.8667,.8667],[.35,.6667,.6667],[.4,.5333,.5333],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,0,0],[.7,0,0],[.75,0,0],[.8,0,0],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]]}},coolwarm:{name:"CoolWarm",numColors:256,gamma:1,segmentedData:{red:[[0,.2298057,.2298057],[.03125,.26623388,.26623388],[.0625,.30386891,.30386891],[.09375,.342804478,.342804478],[.125,.38301334,.38301334],[.15625,.424369608,.424369608],[.1875,.46666708,.46666708],[.21875,.509635204,.509635204],[.25,.552953156,.552953156],[.28125,.596262162,.596262162],[.3125,.639176211,.639176211],[.34375,.681291281,.681291281],[.375,.722193294,.722193294],[.40625,.761464949,.761464949],[.4375,.798691636,.798691636],[.46875,.833466556,.833466556],[.5,.865395197,.865395197],[.53125,.897787179,.897787179],[.5625,.924127593,.924127593],[.59375,.944468518,.944468518],[.625,.958852946,.958852946],[.65625,.96732803,.96732803],[.6875,.969954137,.969954137],[.71875,.966811177,.966811177],[.75,.958003065,.958003065],[.78125,.943660866,.943660866],[.8125,.923944917,.923944917],[.84375,.89904617,.89904617],[.875,.869186849,.869186849],[.90625,.834620542,.834620542],[.9375,.795631745,.795631745],[.96875,.752534934,.752534934],[1,.705673158,.705673158]],green:[[0,.298717966,.298717966],[.03125,.353094838,.353094838],[.0625,.406535296,.406535296],[.09375,.458757618,.458757618],[.125,.50941904,.50941904],[.15625,.558148092,.558148092],[.1875,.604562568,.604562568],[.21875,.648280772,.648280772],[.25,.688929332,.688929332],[.28125,.726149107,.726149107],[.3125,.759599947,.759599947],[.34375,.788964712,.788964712],[.375,.813952739,.813952739],[.40625,.834302879,.834302879],[.4375,.849786142,.849786142],[.46875,.860207984,.860207984],[.5,.86541021,.86541021],[.53125,.848937047,.848937047],[.5625,.827384882,.827384882],[.59375,.800927443,.800927443],[.625,.769767752,.769767752],[.65625,.734132809,.734132809],[.6875,.694266682,.694266682],[.71875,.650421156,.650421156],[.75,.602842431,.602842431],[.78125,.551750968,.551750968],[.8125,.49730856,.49730856],[.84375,.439559467,.439559467],[.875,.378313092,.378313092],[.90625,.312874446,.312874446],[.9375,.24128379,.24128379],[.96875,.157246067,.157246067],[1,.01555616,.01555616]],blue:[[0,.753683153,.753683153],[.03125,.801466763,.801466763],[.0625,.84495867,.84495867],[.09375,.883725899,.883725899],[.125,.917387822,.917387822],[.15625,.945619588,.945619588],[.1875,.968154911,.968154911],[.21875,.98478814,.98478814],[.25,.995375608,.995375608],[.28125,.999836203,.999836203],[.3125,.998151185,.998151185],[.34375,.990363227,.990363227],[.375,.976574709,.976574709],[.40625,.956945269,.956945269],[.4375,.931688648,.931688648],[.46875,.901068838,.901068838],[.5,.865395561,.865395561],[.53125,.820880546,.820880546],[.5625,.774508472,.774508472],[.59375,.726736146,.726736146],[.625,.678007945,.678007945],[.65625,.628751763,.628751763],[.6875,.579375448,.579375448],[.71875,.530263762,.530263762],[.75,.481775914,.481775914],[.78125,.434243684,.434243684],[.8125,.387970225,.387970225],[.84375,.343229596,.343229596],[.875,.300267182,.300267182],[.90625,.259301199,.259301199],[.9375,.220525627,.220525627],[.96875,.184115123,.184115123],[1,.150232812,.150232812]]}},blues:{name:"Blues",numColors:256,gamma:1,segmentedData:{red:[[0,.9686274528503418,.9686274528503418],[.125,.8705882430076599,.8705882430076599],[.25,.7764706015586853,.7764706015586853],[.375,.6196078658103943,.6196078658103943],[.5,.41960784792900085,.41960784792900085],[.625,.25882354378700256,.25882354378700256],[.75,.12941177189350128,.12941177189350128],[.875,.0313725508749485,.0313725508749485],[1,.0313725508749485,.0313725508749485]],green:[[0,.9843137264251709,.9843137264251709],[.125,.9215686321258545,.9215686321258545],[.25,.8588235378265381,.8588235378265381],[.375,.7921568751335144,.7921568751335144],[.5,.6823529601097107,.6823529601097107],[.625,.572549045085907,.572549045085907],[.75,.4431372582912445,.4431372582912445],[.875,.3176470696926117,.3176470696926117],[1,.1882352977991104,.1882352977991104]],blue:[[0,1,1],[.125,.9686274528503418,.9686274528503418],[.25,.9372549057006836,.9372549057006836],[.375,.8823529481887817,.8823529481887817],[.5,.8392156958580017,.8392156958580017],[.625,.7764706015586853,.7764706015586853],[.75,.7098039388656616,.7098039388656616],[.875,.6117647290229797,.6117647290229797],[1,.41960784792900085,.41960784792900085]]}}},Qr={MINIMUM_SLAB_THICKNESS:.05,MAXIMUM_RAY_DISTANCE:1e6};Object.freeze(Qr);const qa=.001;function lP(t){const e=Object.getOwnPropertyNames(t);for(const r of e){const n=t[r];n&&typeof n=="object"&&lP(n)}return Object.freeze(t)}const HH={axial:{viewPlaneNormal:[0,0,-1],viewUp:[0,-1,0],viewRight:[1,0,0]},sagittal:{viewPlaneNormal:[1,0,0],viewUp:[0,0,1],viewRight:[0,1,0]},coronal:{viewPlaneNormal:[0,-1,0],viewUp:[0,0,1],viewRight:[1,0,0]}},Au=lP(HH),uP=[{name:"CT-AAA",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 143.556 0 166.222 0.686275 214.389 0.696078 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 143.556 0.615686 0.356863 0.184314 166.222 0.882353 0.603922 0.290196 214.389 1 1 1 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-AAA2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"16 -3024 0 129.542 0 145.244 0.166667 157.02 0.5 169.918 0.627451 395.575 0.8125 1578.73 0.8125 3071 0.8125",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"32 -3024 0 0 0 129.542 0.54902 0.25098 0.14902 145.244 0.6 0.627451 0.843137 157.02 0.890196 0.47451 0.6 169.918 0.992157 0.870588 0.392157 395.575 1 0.886275 0.658824 1578.73 1 0.829256 0.957922 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -16.4458 0 641.385 0.715686 3071 0.705882",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -16.4458 0.729412 0.254902 0.301961 641.385 0.905882 0.815686 0.552941 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bones",gradientOpacity:"4 0 1 985.12 1",specularPower:"1",scalarOpacity:"8 -1000 0 152.19 0 278.93 0.190476 952 0.2",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -1000 0.3 0.3 1 -488 0.3 1 0.3 463.28 1 0 0 659.15 1 0.912535 0.0374849 953 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-Cardiac",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 -77.6875 0 94.9518 0.285714 179.052 0.553571 260.439 0.848214 3071 0.875",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 -77.6875 0.54902 0.25098 0.14902 94.9518 0.882353 0.603922 0.290196 179.052 1 0.937033 0.954531 260.439 0.615686 0 0 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 42.8964 0 163.488 0.428571 277.642 0.776786 1587 0.754902 3071 0.754902",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 42.8964 0.54902 0.25098 0.14902 163.488 0.917647 0.639216 0.0588235 277.642 1 0.878431 0.623529 1587 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -3024 0 -86.9767 0 45.3791 0.169643 139.919 0.589286 347.907 0.607143 1224.16 0.607143 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -3024 0 0 0 -86.9767 0 0.25098 1 45.3791 1 0 0 139.919 1 0.894893 0.894893 347.907 1 1 0.25098 1224.16 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Contrast-Enhanced",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 67.0106 0 251.105 0.446429 439.291 0.625 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 67.0106 0.54902 0.25098 0.14902 251.105 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Vessels",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -3024 0 -1278.35 0 22.8277 0.428571 439.291 0.625 3071 0.616071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -3024 0 0 0 -1278.35 0.54902 0.25098 0.14902 22.8277 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 136.47 0 159.215 0.258929 318.43 0.571429 478.693 0.776786 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 136.47 0 0 0 159.215 0.159804 0.159804 0.159804 318.43 0.764706 0.764706 0.764706 478.693 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-2",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 142.677 0 145.016 0.116071 192.174 0.5625 217.24 0.776786 384.347 0.830357 3661 0.830357",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 142.677 0 0 0 145.016 0.615686 0 0.0156863 192.174 0.909804 0.454902 0 217.24 0.972549 0.807843 0.611765 384.347 0.909804 0.909804 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -2048 0 128.643 0 129.982 0.0982143 173.636 0.669643 255.884 0.857143 584.878 0.866071 3661 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -2048 0 0 0 128.643 0 0 0 129.982 0.615686 0 0.0156863 173.636 0.909804 0.454902 0 255.884 0.886275 0.886275 0.886275 584.878 0.968627 0.968627 0.968627 3661 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cropped-Volume-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -451 0 -450 1 1050 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -451 0 0 0 -450 0.0556356 0.0556356 0.0556356 1050 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Fat",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"14 -1000 0 -100 0 -99 0.15 -60 0.15 -59 0 101.2 0 952 0",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"36 -1000 0.3 0.3 1 -497.5 0.3 1 0.3 -99 0 0 1 -76.946 0 1 0 -65.481 0.835431 0.888889 0.0165387 83.89 1 0 0 463.28 1 0 0 659.15 1 0.912535 0.0374849 2952 1 0.300267 0.299886",diffuse:"1",interpolation:"1"},{name:"CT-Liver-Vasculature",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 149.113 0 157.884 0.482143 339.96 0.660714 388.526 0.830357 1197.95 0.839286 3661 0.848214",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 149.113 0 0 0 157.884 0.501961 0.25098 0 339.96 0.695386 0.59603 0.36886 388.526 0.854902 0.85098 0.827451 1197.95 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Lung",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"12 -1000 0 -600 0 -599 0.15 -400 0.15 -399 0 2952 0",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -1000 0.3 0.3 1 -600 0 0 1 -530 0.134704 0.781726 0.0724558 -460 0.929244 1 0.109473 -400 0.888889 0.254949 0.0240258 2952 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -637.62 0 700 1 3071 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -637.62 1 1 1 700 1 1 1 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Muscle",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 -155.407 0 217.641 0.676471 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 -155.407 0.54902 0.25098 0.14902 217.641 0.882353 0.603922 0.290196 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Pulmonary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 -568.625 0 -364.081 0.0714286 -244.813 0.401786 18.2775 0.607143 447.798 0.830357 3592.73 0.839286",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 -568.625 0 0 0 -364.081 0.396078 0.301961 0.180392 -244.813 0.611765 0.352941 0.0705882 18.2775 0.843137 0.0156863 0.156863 447.798 0.752941 0.752941 0.752941 3592.73 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Soft-Tissue",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -167.01 0 -160 1 240 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -167.01 0 0 0 -160 0.0556356 0.0556356 0.0556356 240 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Air",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0.705882 -900.0 0.715686 -500.0 0 3071 0",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 1 1 1 -900.0 0.2 1.0 1.0 -500.0 0.3 0.3 1.0 3071 0 0 0 ",diffuse:"0.9",interpolation:"1"},{name:"MR-Angio",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 151.354 0 158.279 0.4375 190.112 0.580357 200.873 0.732143 3661 0.741071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 151.354 0 0 0 158.279 0.74902 0.376471 0 190.112 1 0.866667 0.733333 200.873 0.937255 0.937255 0.937255 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-Default",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 0 0 20 0 40 0.15 120 0.3 220 0.375 1024 0.5",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 0 0 0 0 20 0.168627 0 0 40 0.403922 0.145098 0.0784314 120 0.780392 0.607843 0.380392 220 0.847059 0.835294 0.788235 1024 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"8 0 0 98.3725 0 416.637 1 2800 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"16 0 1 1 1 98.3725 1 1 1 416.637 1 1 1 2800 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-T2-Brain",gradientOpacity:"4 0 1 160.25 1",specularPower:"40",scalarOpacity:"10 0 0 36.05 0 218.302 0.171429 412.406 1 641 1",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"16 0 0 0 0 98.7223 0.956863 0.839216 0.192157 412.406 0 0.592157 0.807843 641 1 1 1",diffuse:"0.6",interpolation:"1"},{name:"DTI-FA-Brain",gradientOpacity:"4 0 1 0.9950 1",specularPower:"40",scalarOpacity:"16 0 0 0 0 0.3501 0.0158 0.49379 0.7619 0.6419 1 0.9920 1 0.9950 0 0.9950 0",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"28 0 1 0 0 0 1 0 0 0.24974 0.4941 1 0 0.49949 0 0.9882 1 0.7492 0.51764 0 1 0.9950 1 0 0 0.9950 1 0 0",diffuse:"0.9",interpolation:"1"}],KH={slicer3D:[160/255,164/255,217/255]},wf=Object.freeze(Object.defineProperty({__proto__:null,BACKGROUND_COLORS:KH,CPU_COLORMAPS:qC,EPSILON:qa,MPR_CAMERA_VALUES:Au,RENDERING_DEFAULTS:Qr,VIEWPORT_PRESETS:uP},Symbol.toStringTag,{value:"Module"})),xg={},o1={get:t=>xg[t],set:t=>{const e=t.id;xg[e]=t},delete:t=>delete xg[t],getAll:()=>{const e=Object.keys(xg).map(r=>xg[r]);return e.sort((r,n)=>r.id[0]==="_"&&n.id[0]!=="_"?1:r.id[0]!=="_"&&n.id[0]==="_"?-1:0),e}};class qH{constructor(){this.listeners={},this.debouncedListeners={}}reset(){this.listeners={},this.debouncedListeners={}}addEventListenerOnce(e,r){const n=i=>{this.removeEventListener(e,n),r.call(this,i)};this.addEventListener(e,n)}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].indexOf(r)===-1&&this.listeners[e].push(r)}addEventListenerDebounced(e,r,n){this.debouncedListeners[e]=this.debouncedListeners[e]||{};const i=this.debouncedListeners[e];if(!i[r]){const o=a=>{i[r]&&clearTimeout(i[r].timeoutId),i[r].timeoutId=setTimeout(()=>{r.call(this,a)},n)};i[r]={original:r,handle:o,timeoutId:null},this.addEventListener(e,o)}}removeEventListenerDebounced(e,r){var n;if((n=this.debouncedListeners[e])!=null&&n[r]){const i=this.debouncedListeners[e][r];this.removeEventListener(e,i.handle),clearTimeout(i.timeoutId),delete this.debouncedListeners[e][r]}}removeEventListener(e,r){if(!this.listeners[e])return;const n=this.listeners[e],i=n.length;for(let o=0;o(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16))}function ut(t=et,e,r=null){if(!e)throw new Error("Event type was not defined");const n=new CustomEvent(e,{detail:r,cancelable:!0});return t==null?void 0:t.dispatchEvent(n)}var XH=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var n,i,o;if(Array.isArray(e)){if(n=e.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!t(e[i],r[i]))return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(o=Object.keys(e),n=o.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,o[i]))return!1;for(i=n;i--!==0;){var a=o[i];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r};const E_=pl(XH);var D6=Object.prototype.toString,fP=function(e){var r=D6.call(e),n=r==="[object Arguments]";return n||(n=r!=="[object Array]"&&e!==null&&typeof e=="object"&&typeof e.length=="number"&&e.length>=0&&D6.call(e.callee)==="[object Function]"),n},Ax,I6;function YH(){if(I6)return Ax;I6=1;var t;if(!Object.keys){var e=Object.prototype.hasOwnProperty,r=Object.prototype.toString,n=fP,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),a=i.call(function(){},"prototype"),s=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],c=function(d){var h=d.constructor;return h&&h.prototype===d},l={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if(typeof window>"u")return!1;for(var d in window)try{if(!l["$"+d]&&e.call(window,d)&&window[d]!==null&&typeof window[d]=="object")try{c(window[d])}catch{return!0}}catch{return!0}return!1}(),u=function(d){if(typeof window>"u"||!f)return c(d);try{return c(d)}catch{return!1}};t=function(h){var g=h!==null&&typeof h=="object",p=r.call(h)==="[object Function]",v=n(h),y=g&&r.call(h)==="[object String]",m=[];if(!g&&!p&&!v)throw new TypeError("Object.keys called on a non-object");var w=a&&p;if(y&&h.length>0&&!e.call(h,0))for(var x=0;x0)for(var C=0;C3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Hd("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Hd("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Hd("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Hd("`loose`, if provided, must be a boolean");var i=arguments.length>3?arguments[3]:null,o=arguments.length>4?arguments[4]:null,a=arguments.length>5?arguments[5]:null,s=arguments.length>6?arguments[6]:!1,c=!!R6&&R6(e,r);if(P6)P6(e,r,{configurable:a===null&&c?c.configurable:!a,enumerable:i===null&&c?c.enumerable:!i,value:n,writable:o===null&&c?c.writable:!o});else if(s||!i&&!o&&!a)e[r]=n;else throw new iK("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},XC=dP,hP=function(){return!!XC};hP.hasArrayLengthDefineBug=function(){if(!XC)return null;try{return XC([],"length",{value:1}).length!==1}catch{return!0}};var aK=hP,sK=QH,cK=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",lK=Object.prototype.toString,uK=Array.prototype.concat,L6=oK,fK=function(t){return typeof t=="function"&&lK.call(t)==="[object Function]"},gP=aK(),dK=function(t,e,r,n){if(e in t){if(n===!0){if(t[e]===r)return}else if(!fK(n)||!n())return}gP?L6(t,e,r,!0):L6(t,e,r)},pP=function(t,e){var r=arguments.length>2?arguments[2]:{},n=sK(e);cK&&(n=uK.call(n,Object.getOwnPropertySymbols(e)));for(var i=0;inull};function ic(t){if(t==null||t.isA)return t;if(!t.vtkClass)return ec.console&&ec.console.error&&ec.console.error("Invalid VTK object"),null;const e=CP[t.vtkClass];if(!e)return ec.console&&ec.console.error&&ec.console.error(`No vtk class found for Object of type ${t.vtkClass}`),null;const r={...t};Object.keys(r).forEach(i=>{r[i]&&typeof r[i]=="object"&&r[i].vtkClass&&(r[i]=ic(r[i]))});const n=e(r);return n&&n.modified&&n.modified(),n}function TK(t,e){CP[t]=e}ic.register=TK;class Nx extends Array{push(){for(let e=0;e{TP[t]=jf});ec.console=console.hasOwnProperty("log")?console:TP;const nf={debug:jf,error:ec.console.error||jf,info:ec.console.info||jf,log:ec.console.log||jf,warn:ec.console.warn||jf};function _P(t,e){nf[t]&&(nf[t]=e||jf)}function EP(){nf.log(...arguments)}function bP(){nf.info(...arguments)}function dy(){nf.debug(...arguments)}function Ln(){nf.error(...arguments)}function X5(){nf.warn(...arguments)}const A6={};function DP(t){A6[t]||(nf.error(t),A6[t]=!0)}const Uo=Object.create(null);Uo.Float32Array=Float32Array;Uo.Float64Array=Float64Array;Uo.Uint8Array=Uint8Array;Uo.Int8Array=Int8Array;Uo.Uint16Array=Uint16Array;Uo.Int16Array=Int16Array;Uo.Uint32Array=Uint32Array;Uo.Int32Array=Int32Array;Uo.Uint8ClampedArray=Uint8ClampedArray;try{Uo.BigInt64Array=BigInt64Array,Uo.BigUint64Array=BigUint64Array}catch{}function Fh(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n1?e-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:2,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1e3;const n=["TB","GB","MB","KB"];let i=Number(t),o="B";for(;i>r;)i/=r,o=n.pop();return`${i.toFixed(e)} ${o}`}function MP(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:" ";const r=[];let n=t;for(;n>1e3;)r.push(`000${n%1e3}`.slice(-3)),n=Math.floor(n/1e3);return n>0&&r.push(n),r.reverse(),r.join(e)}function PP(t){Object.keys(t).forEach(e=>{Array.isArray(t[e])&&(t[e]=[].concat(t[e]))})}function bK(t){return Object.values(Uo).some(e=>t instanceof e)}function DK(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let r=0;rt[r]===e)}function RP(t){return t&&t.isA?t.getState():t}function b_(t){setTimeout(t,0)}function LP(t,e){const r=performance.now();t.finally(()=>{const n=performance.now()-r;e(n)})}function yr(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};PP(e);const r=[];if(Number.isInteger(e.mtime)||(e.mtime=++YC),!("classHierarchy"in e))e.classHierarchy=new Nx("vtkObject");else if(!(e.classHierarchy instanceof Nx)){const o=new Nx;for(let a=0;a!!e.deleted,t.modified=o=>{if(e.deleted){Ln("instance deleted - cannot call any method");return}o&&oa&&a(t)))},t.onModified=o=>{if(e.deleted)return Ln("instance deleted - cannot call any method"),null;const a=r.length;return r.push(o),i(a)},t.getMTime=()=>e.mtime,t.isA=o=>{let a=e.classHierarchy.length;for(;a--;)if(e.classHierarchy[a]===o)return!0;return!1},t.getClassName=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.classHierarchy[e.classHierarchy.length-1-o]},t.set=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,c=!1;return Object.keys(o).forEach(l=>{const f=s?null:t[`set${J5(l)}`];f&&Array.isArray(o[l])&&f.length>1?c=f(...o[l])||c:f?c=f(o[l])||c:(["mtime"].indexOf(l)===-1&&!a&&X5(`Warning: Set value to model directly ${l}, ${o[l]}`),c=e[l]!==o[l]||c,e[l]=o[l])}),c},t.get=function(){for(var o=arguments.length,a=new Array(o),s=0;s{c[l]=e[l]}),c},t.getReferenceByName=o=>e[o],t.delete=()=>{Object.keys(e).forEach(o=>delete e[o]),r.forEach((o,a)=>n(a)),e.deleted=!0},t.getState=()=>{if(e.deleted)return null;const o={...e,vtkClass:t.getClassName()};Object.keys(o).forEach(s=>{o[s]===null||o[s]===void 0||s[0]==="_"?delete o[s]:o[s].isA?o[s]=o[s].getState():Array.isArray(o[s])?o[s]=o[s].map(RP):bK(o[s])&&(o[s]=Array.from(o[s]))});const a={};return Object.keys(o).sort().forEach(s=>{a[s]=o[s]}),a.mtime&&delete a.mtime,a},t.shallowCopy=function(o){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(o.getClassName()!==t.getClassName())throw new Error(`Cannot ShallowCopy ${o.getClassName()} into ${t.getClassName()}`);const s=o.get(),c=Object.keys(e).sort();Object.keys(s).sort().forEach(f=>{const u=c.indexOf(f);u===-1?a&&dy(`add ${f} in shallowCopy`):c.splice(u,1),e[f]=s[f]}),c.length&&a&&dy(`Untouched keys: ${c.join(", ")}`),t.modified()},t.toJSON=function(){return t.getState()},t}const OK={object(t,e,r){return function(){return{...e[r.name]}}}};function Go(t,e,r){r.forEach(n=>{if(typeof n=="object"){const i=OK[n.type];i?t[`get${mi(n.name)}`]=i(t,e,n):t[`get${mi(n.name)}`]=()=>e[n.name]}else t[`get${mi(n)}`]=()=>e[n]})}const AP={enum(t,e,r){const n=`_on${mi(r.name)}Changed`;return i=>{var o;if(typeof i=="string"){if(r.enum[i]!==void 0)return e[r.name]!==r.enum[i]?(e[r.name]=r.enum[i],t.modified(),!0):!1;throw Ln(`Set Enum with invalid argument ${r}, ${i}`),new RangeError("Set Enum with invalid string argument")}if(typeof i=="number"){if(e[r.name]!==i){if(Object.keys(r.enum).map(a=>r.enum[a]).indexOf(i)!==-1){const a=e[r.name];return e[r.name]=i,(o=e[n])==null||o.call(e,t,e,i,a),t.modified(),!0}throw Ln(`Set Enum outside numeric range ${r}, ${i}`),new RangeError("Set Enum outside numeric range")}return!1}throw Ln(`Set Enum with invalid argument (String/Number) ${r}, ${i}`),new TypeError("Set Enum with invalid argument (String/Number)")}},object(t,e,r){var i;((i=r.params)==null?void 0:i.length)===1&&X5('Setter of type "object" with a single "param" field is not supported');const n=`_on${mi(r.name)}Changed`;return function(){var l,f;for(var o=arguments.length,a=new Array(o),s=0;s1&&((l=r.params)!=null&&l.length)?c=r.params.reduce((u,d,h)=>Object.assign(u,{[d]:a[h]}),{}):c=a[0],!E_(e[r.name],c)){const u=e[r.name];return e[r.name]=c,(f=e[n])==null||f.call(e,t,e,c,u),t.modified(),!0}return!1}}};function N6(t){if(typeof t=="object"){const e=AP[t.type];if(e)return(r,n)=>e(r,n,t);throw Ln(`No setter for field ${t}`),new TypeError("No setter for field")}return function(r,n){const i=`_on${mi(t)}Changed`;return function(a){var s;if(n.deleted)return Ln("instance deleted - cannot call any method"),!1;if(n[t]!==a){const c=n[t.name];return n[t]=a,(s=n[i])==null||s.call(n,r,n,a,c),r.modified(),!0}return!1}}}function K1(t,e,r){r.forEach(n=>{typeof n=="object"?t[`set${mi(n.name)}`]=N6(n)(t,e):t[`set${mi(n)}`]=N6(n)(t,e)})}function ci(t,e,r){Go(t,e,r),K1(t,e,r)}function Uh(t,e,r){r.forEach(n=>{t[`get${mi(n)}`]=()=>e[n]?Array.from(e[n]):e[n],t[`get${mi(n)}ByReference`]=()=>e[n]})}function D_(t,e,r,n){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0;r.forEach(o=>{if(e[o]&&n&&e[o].length!==n)throw new RangeError(`Invalid initial number of values for array (${o})`);const a=`_on${mi(o)}Changed`;t[`set${mi(o)}`]=function(){var h;if(e.deleted)return Ln("instance deleted - cannot call any method"),!1;for(var s=arguments.length,c=new Array(s),l=0;l=0)&&(f=f[0],d=!0),f==null)u=e[o]!==f;else{if(n&&f.length!==n)if(f.length{const c=e[o];s.forEach((l,f)=>{c[f]=l})}})}function I_(t,e,r,n){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0;Uh(t,e,r),D_(t,e,r,n,i)}function q1(t,e,r){for(let n=0;n1&&arguments[1]!==void 0?arguments[1]:0;if(e.deleted){Ln("instance deleted - cannot call any method");return}if(g>=e.numberOfInputs){Ln(`algorithm ${t.getClassName()} only has ${e.numberOfInputs} input ports. To add more input ports, use addInputData()`);return}(e.inputData[g]!==h||e.inputConnection[g])&&(e.inputData[g]=h,e.inputConnection[g]=null,t.modified&&t.modified())}function o(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.inputConnection[h]&&(e.inputData[h]=e.inputConnection[h]()),e.inputData[h]}function a(h){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(e.deleted){Ln("instance deleted - cannot call any method");return}if(g>=e.numberOfInputs){let p=`algorithm ${t.getClassName()} only has `;p+=`${e.numberOfInputs}`,p+=" input ports. To add more input ports, use addInputConnection()",Ln(p);return}e.inputData[g]=null,e.inputConnection[g]=h}function s(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.inputConnection[h]}function c(){let h=e.numberOfInputs;for(;h&&!e.inputData[h-1]&&!e.inputConnection[h-1];)h--;return h===e.numberOfInputs&&e.numberOfInputs++,h}function l(h){if(e.deleted){Ln("instance deleted - cannot call any method");return}a(h,c())}function f(h){if(e.deleted){Ln("instance deleted - cannot call any method");return}i(h,c())}function u(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.deleted?(Ln("instance deleted - cannot call any method"),null):(t.shouldUpdate()&&t.update(),e.output[h])}t.shouldUpdate=()=>{var v,y;const h=t.getMTime();let g=1/0,p=n;for(;p--;){if(!e.output[p]||e.output[p].isDeleted())return!0;const m=e.output[p].getMTime();if(mg)return!0;return!1};function d(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;const g=()=>u(h);return g.filter=t,g}if(e.numberOfInputs){let h=e.numberOfInputs;for(;h--;)e.inputData.push(null),e.inputConnection.push(null);t.setInputData=i,t.setInputConnection=a,t.addInputData=f,t.addInputConnection=l,t.getInputData=o,t.getInputConnection=s}n&&(t.getOutputData=u,t.getOutputPort=d),t.update=()=>{const h=[];if(e.numberOfInputs){let g=0;for(;ge.numberOfInputs,t.getNumberOfOutputPorts=()=>n||e.output.length,t.getInputArrayToProcess=h=>{const g=e.inputArrayToProcess[h],p=e.inputData[h];return g&&p?p[`get${g.fieldAssociation}`]().getArray(g.arrayName):null},t.setInputArrayToProcess=function(h,g,p){let v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"Scalars";for(;e.inputArrayToProcess.lengthu.apply(t,arguments),1-d);else if(u.apply(t,arguments)===M_)break}}}t[`invoke${mi(r)}`]=c,t[`on${mi(r)}`]=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!l.apply)return console.error(`Invalid callback for event ${r}`),null;if(e.deleted)return Ln("instance deleted - cannot call any method"),null;const u=o++;return n.push([u,l,f]),n.sort((d,h)=>h[2]-d[2]),s(u)},t.delete=()=>{i(),n.forEach(l=>{let[f]=l;return a(f)})}}function $n(t,e){const r=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const i={},o={};return t(o,i,n),Object.freeze(o)};return e&&ic.register(e,r),r}function X1(){for(var t=arguments.length,e=new Array(t),r=0;r!!a).map(a=>a(...i))}}function R_(t){return t&&t.isA&&t.isA("vtkObject")}function hy(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];if(R_(t)){if(n.indexOf(t)>=0)return r;n.push(t);const i=e(t);i!==void 0&&r.push(i);const o=t.get();Object.keys(o).forEach(a=>{const s=o[a];Array.isArray(s)?s.forEach(c=>{hy(c,e,r,n)}):hy(s,e,r,n)})}return r}function NP(t,e,r){var n=this;let i;const o=function(){for(var a=arguments.length,s=new Array(a),c=0;c{i=null,r||t.apply(l,s)},u=r&&!i;clearTimeout(i),i=setTimeout(f,e),u&&t.apply(l,s)};return o.cancel=()=>clearTimeout(i),o}function kP(t,e){let r=!1,n=null;function i(){r=!1,n!==null&&(o(...n),n=null)}function o(){for(var a=arguments.length,s=new Array(a),c=0;c2&&arguments[2]!==void 0?arguments[2]:{};e.keystore=Object.assign(e.keystore||{},r),t.setKey=(n,i)=>{e.keystore[n]=i},t.getKey=n=>e.keystore[n],t.getAllKeys=()=>Object.keys(e.keystore),t.deleteKey=n=>delete e.keystore[n],t.clearKeystore=()=>t.getAllKeys().forEach(n=>delete e.keystore[n])}let MK=1;const Jm="__root__";function VP(t,e){L_(t,e);const r=t.delete;e.proxyId=`${MK++}`,e.ui=JSON.parse(JSON.stringify(e.ui||[])),Go(t,e,["proxyId","proxyGroup","proxyName"]),ci(t,e,["proxyManager"]);const n={},i={};function o(l,f){i[f]||(i[f]=[]);const u=i[f];for(let d=0;d{e.ui=JSON.parse(JSON.stringify(l||[])),Object.keys(n).forEach(f=>delete n[f]),Object.keys(i).forEach(f=>delete i[f]),o(e.ui,Jm),t.modified()};function a(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jm;return i[l]}t.updateProxyProperty=(l,f)=>{const u=n[l];u?Object.assign(u,f):n[l]={...f}},t.activate=()=>{if(e.proxyManager){const l=`setActive${mi(t.getProxyGroup().slice(0,-1))}`;e.proxyManager[l]&&e.proxyManager[l](t)}},e.propertyLinkSubscribers={},t.registerPropertyLinkForGC=(l,f)=>{f in e.propertyLinkSubscribers||(e.propertyLinkSubscribers[f]=[]),e.propertyLinkSubscribers[f].push(l)},t.gcPropertyLinks=l=>{const f=e.propertyLinkSubscribers[l]||[];for(;f.length;)f.pop().unbind(t)},e.propertyLinkMap={},t.getPropertyLink=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(e.propertyLinkMap[l])return e.propertyLinkMap[l];let u=null;const d=[];let h=0,g=!1;function p(x){let C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(g)return null;const S=[];let T=null;for(h=d.length;h--;){const E=d[h];E.instance===x?T=E:S.push(E)}if(!T)return null;const _=T.instance[`get${mi(T.propertyName)}`]();if(!DK(_,u)||C){for(u=_,g=!0;S.length;){const E=S.pop();E.instance.set({[E.propertyName]:u})}g=!1}return e.propertyLinkMap[l].persistent&&(e.propertyLinkMap[l].value=_),_}function v(x,C){const S=[];for(h=d.length;h--;){const T=d[h];T.instance===x&&(T.propertyName===C||C===void 0)&&(T.subscription.unsubscribe(),S.push(h))}for(;S.length;)d.splice(S.pop(),1)}function y(x,C){let S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const T=x.onModified(p),_=d[0];return d.push({instance:x,propertyName:C,subscription:T}),S&&(e.propertyLinkMap[l].persistent&&e.propertyLinkMap[l].value!==void 0?x.set({[C]:e.propertyLinkMap[l].value}):_&&p(_.instance,!0)),{unsubscribe:()=>v(x,C)}}function m(){for(;d.length;)d.pop().subscription.unsubscribe()}const w={bind:y,unbind:v,unsubscribe:m,persistent:f};return e.propertyLinkMap[l]=w,w};function s(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jm;const f=[],u=e.proxyId,d=a(l)||[];for(let h=0;hs().map(l=>l.name),t.getPropertyByName=l=>s().find(f=>f.name===l),t.getPropertyDomainByName=l=>(n[l]||{}).domain,t.getProxySection=()=>({id:e.proxyId,name:e.proxyGroup,ui:e.ui,properties:s()}),t.delete=()=>{const l=Object.keys(e.propertyLinkMap);let f=l.length;for(;f--;)e.propertyLinkMap[l[f]].unsubscribe();Object.keys(e.propertyLinkSubscribers).forEach(t.gcPropertyLinks),r()},t.getState=()=>null;function c(){if(e.links)for(let l=0;l{for(;i.length;)i.pop().unsubscribe();n()}}function UP(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};e.this=t;function i(s){const c=Object.keys(s);let l=c.length;for(;l--;){const f=c[l];e[f].set(s[f])}}const o=Object.keys(n);let a=o.length;for(;a--;){const s=o[a];e[s]=n[s];const c=r[s];t[`set${mi(s)}`]=l=>{if(l!==e[s]){e[s]=l;const f=c[l];i(f),t.modified()}}}o.length&&Go(t,e,o)}const k6=10,V6=40,F6=800;function BP(t){let e=0,r=0,n=0,i=0;return"detail"in t&&(r=t.detail),"wheelDelta"in t&&(r=-t.wheelDelta/120),"wheelDeltaY"in t&&(r=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=r,r=0),n=e*k6,i=r*k6,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(n=t.deltaX),(n||i)&&t.deltaMode&&(t.deltaMode===1?(n*=V6,i*=V6):(n*=F6,i*=F6)),n&&!e&&(e=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:e,spinY:r||e,pixelX:n,pixelY:i||n}}var J={algo:O_,capitalize:J5,chain:X1,debounce:NP,enumToString:IK,event:P_,EVENT_ABORT:M_,formatBytesToProperUnit:OP,formatNumbersWithThousandSeparator:MP,get:Go,getArray:Uh,getCurrentGlobalMTime:_K,getStateArrayMapFunc:RP,isVtkObject:R_,keystore:L_,measurePromiseExecution:LP,moveToProtected:q1,newInstance:$n,newTypedArray:Fh,newTypedArrayFrom:Y5,normalizeWheel:BP,obj:yr,proxy:VP,proxyPropertyMapping:FP,proxyPropertyState:UP,safeArrays:PP,set:K1,setArray:D_,setGet:ci,setGetArray:I_,setImmediate:b_,setLoggerFunction:_P,throttle:kP,traverseInstanceTree:hy,TYPED_ARRAYS:Uo,uncapitalize:IP,VOID:SP,vtkDebugMacro:dy,vtkErrorMacro:Ln,vtkInfoMacro:bP,vtkLogMacro:EP,vtkOnceErrorMacro:DP,vtkWarningMacro:X5,objectSetterMap:AP},_o=Object.freeze({__proto__:null,VOID:SP,setLoggerFunction:_P,vtkLogMacro:EP,vtkInfoMacro:bP,vtkDebugMacro:dy,vtkErrorMacro:Ln,vtkWarningMacro:X5,vtkOnceErrorMacro:DP,TYPED_ARRAYS:Uo,newTypedArray:Fh,newTypedArrayFrom:Y5,capitalize:J5,_capitalize:mi,uncapitalize:IP,formatBytesToProperUnit:OP,formatNumbersWithThousandSeparator:MP,setImmediateVTK:b_,measurePromiseExecution:LP,obj:yr,get:Go,set:K1,setGet:ci,getArray:Uh,setArray:D_,setGetArray:I_,moveToProtected:q1,algo:O_,EVENT_ABORT:M_,event:P_,newInstance:$n,chain:X1,isVtkObject:R_,traverseInstanceTree:hy,debounce:NP,throttle:kP,keystore:L_,proxy:VP,proxyPropertyMapping:FP,proxyPropertyState:UP,normalizeWheel:BP,default:J});const GP={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},xn={VOID:"",CHAR:"Int8Array",SIGNED_CHAR:"Int8Array",UNSIGNED_CHAR:"Uint8Array",UNSIGNED_CHAR_CLAMPED:"Uint8ClampedArray",SHORT:"Int16Array",UNSIGNED_SHORT:"Uint16Array",INT:"Int32Array",UNSIGNED_INT:"Uint32Array",FLOAT:"Float32Array",DOUBLE:"Float64Array"},PK=xn.FLOAT;var WP={DefaultDataType:PK,DataTypeByteSize:GP,VtkDataTypes:xn};const RK="WebGL",gy=Object.create(null);function zP(t,e){gy[t]=e}function LK(){return Object.keys(gy)}function $P(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return gy[t]&&gy[t](e)}function AK(t,e){e.classHierarchy.push("vtkRenderWindow"),t.addRenderer=r=>{t.hasRenderer(r)||(r.setRenderWindow(t),e.renderers.push(r),t.modified())},t.removeRenderer=r=>{e.renderers=e.renderers.filter(n=>n!==r),t.modified()},t.hasRenderer=r=>e.renderers.indexOf(r)!==-1,t.newAPISpecificView=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return $P(r||e.defaultViewAPI,n)},t.addView=r=>{t.hasView(r)||(r.setRenderable(t),e._views.push(r),t.modified())},t.removeView=r=>{e._views=e._views.filter(n=>n!==r),t.modified()},t.hasView=r=>e._views.indexOf(r)!==-1,t.preRender=()=>{e.renderers.forEach(r=>{r.isActiveCameraCreated()||r.resetCamera()})},t.render=()=>{t.preRender(),e.interactor?e.interactor.render():e._views.forEach(r=>r.traverseAllPasses())},t.getStatistics=()=>{const r={propCount:0,invisiblePropCount:0,gpuMemoryMB:0};return e._views.forEach(n=>{n.getGraphicsMemoryInfo&&(r.gpuMemoryMB+=n.getGraphicsMemoryInfo()/1e6)}),e.renderers.forEach(n=>{const i=n.getViewProps(),o=e._views[0].getViewNodeFor(n);i.forEach(a=>{if(a.getVisibility()){r.propCount+=1;const s=a.getMapper&&a.getMapper();if(s&&s.getPrimitiveCount){const c=o.getViewNodeFor(s);if(c){c.getAllocatedGPUMemoryInBytes&&(r.gpuMemoryMB+=c.getAllocatedGPUMemoryInBytes()/1e6);const l=s.getPrimitiveCount();Object.keys(l).forEach(f=>{r[f]||(r[f]=0),r[f]+=l[f]})}}}else r.invisiblePropCount+=1})}),r.str=Object.keys(r).map(n=>`${n}: ${r[n]}`).join(` -`),r},t.captureImages=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"image/png",n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return J.setImmediate(t.render),e._views.map(i=>i.captureNextImage?i.captureNextImage(r,n):void 0).filter(i=>!!i)},t.addRenderWindow=r=>e.childRenderWindows.includes(r)?!1:(e.childRenderWindows.push(r),t.modified(),!0),t.removeRenderWindow=r=>{const n=e.childRenderWindows.findIndex(i=>i===r);return n<0?!1:(e.childRenderWindows.splice(n,1),t.modified(),!0)}}const NK={defaultViewAPI:RK,renderers:[],views:[],interactor:null,neverRendered:!0,numberOfLayers:1,childRenderWindows:[]};function jP(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,NK,r),J.obj(t,e),J.setGet(t,e,["interactor","numberOfLayers","_views","defaultViewAPI"]),J.get(t,e,["neverRendered"]),J.getArray(t,e,["renderers","childRenderWindows"]),J.moveToProtected(t,e,["views"]),J.event(t,e,"completion"),AK(t,e)}const kK=J.newInstance(jP,"vtkRenderWindow");var VK={newInstance:kK,extend:jP,registerViewConstructor:zP,listViewAPIs:LK,newAPISpecificView:$P};const a1={CLAMP_TO_EDGE:0,REPEAT:1,MIRRORED_REPEAT:2},Xt={NEAREST:0,LINEAR:1,NEAREST_MIPMAP_NEAREST:2,NEAREST_MIPMAP_LINEAR:3,LINEAR_MIPMAP_NEAREST:4,LINEAR_MIPMAP_LINEAR:5};var HP={Wrap:a1,Filter:Xt};const KP=new Float32Array(1),FK=new Int32Array(KP.buffer);function UK(t){KP[0]=t;const e=FK[0];let r=e>>16&32768,n=e>>12&2047;const i=e>>23&255;return i<103?r:i>142?(r|=31744,r|=(i===255?0:1)&&e&8388607,r):i<113?(n|=2048,r|=(n>>114-i)+(n>>113-i&1),r):(r|=i-112<<10|n>>1,r+=n&1,r)}function BK(t){const e=(t&32768)>>15,r=(t&31744)>>10,n=t&1023;return r===0?(e?-1:1)*2**-14*(n/2**10):r===31?n?NaN:(e?-1:1)*(1/0):(e?-1:1)*2**(r-15)*(1+n/2**10)}var Hf={fromHalf:BK,toHalf:UK},A_={exports:{}};A_.exports;(function(t){(function(e,r,n){function i(c){var l=this,f=s();l.next=function(){var u=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=u-(l.c=u|0)},l.c=1,l.s0=f(" "),l.s1=f(" "),l.s2=f(" "),l.s0-=f(c),l.s0<0&&(l.s0+=1),l.s1-=f(c),l.s1<0&&(l.s1+=1),l.s2-=f(c),l.s2<0&&(l.s2+=1),f=null}function o(c,l){return l.c=c.c,l.s0=c.s0,l.s1=c.s1,l.s2=c.s2,l}function a(c,l){var f=new i(c),u=l&&l.state,d=f.next;return d.int32=function(){return f.next()*4294967296|0},d.double=function(){return d()+(d()*2097152|0)*11102230246251565e-32},d.quick=d,u&&(typeof u=="object"&&o(u,f),d.state=function(){return o(f,{})}),d}function s(){var c=4022871197,l=function(f){f=String(f);for(var u=0;u>>0,d-=c,d*=c,c=d>>>0,d-=c,c+=d*4294967296}return(c>>>0)*23283064365386963e-26};return l}r&&r.exports?r.exports=a:this.alea=a})(Xi,t)})(A_);var GK=A_.exports,N_={exports:{}};N_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var u=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^u^u>>>8},s===(s|0)?c.x=s:l+=s;for(var f=0;f>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xor128=a})(Xi,t)})(N_);var WK=N_.exports,k_={exports:{}};k_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.next=function(){var u=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(u^u<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,s===(s|0)?c.x=s:l+=s;for(var f=0;f>>4),c.next()}function o(s,c){return c.x=s.x,c.y=s.y,c.z=s.z,c.w=s.w,c.v=s.v,c.d=s.d,c}function a(s,c){var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xorwow=a})(Xi,t)})(k_);var zK=k_.exports,V_={exports:{}};V_.exports;(function(t){(function(e,r,n){function i(s){var c=this;c.next=function(){var f=c.x,u=c.i,d,h;return d=f[u],d^=d>>>7,h=d^d<<24,d=f[u+1&7],h^=d^d>>>10,d=f[u+3&7],h^=d^d>>>3,d=f[u+4&7],h^=d^d<<7,d=f[u+7&7],d=d^d<<13,h^=d^d<<9,f[u]=h,c.i=u+1&7,h};function l(f,u){var d,h=[];if(u===(u|0))h[0]=u;else for(u=""+u,d=0;d0;--d)f.next()}l(c,s)}function o(s,c){return c.x=s.x.slice(),c.i=s.i,c}function a(s,c){s==null&&(s=+new Date);var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(f.x&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xorshift7=a})(Xi,t)})(V_);var $K=V_.exports,F_={exports:{}};F_.exports;(function(t){(function(e,r,n){function i(s){var c=this;c.next=function(){var f=c.w,u=c.X,d=c.i,h,g;return c.w=f=f+1640531527|0,g=u[d+34&127],h=u[d=d+1&127],g^=g<<13,h^=h<<17,g^=g>>>15,h^=h>>>12,g=u[d]=g^h,c.i=d,g+(f^f>>>16)|0};function l(f,u){var d,h,g,p,v,y=[],m=128;for(u===(u|0)?(h=u,u=null):(u=u+"\0",h=0,m=Math.max(m,u.length)),g=0,p=-32;p>>15,h^=h<<4,h^=h>>>13,p>=0&&(v=v+1640531527|0,d=y[p&127]^=h+v,g=d==0?g+1:0);for(g>=128&&(y[(u&&u.length||0)&127]=-1),g=127,p=4*128;p>0;--p)h=y[g+34&127],d=y[g=g+1&127],h^=h<<13,d^=d<<17,h^=h>>>15,d^=d>>>12,y[g]=h^d;f.w=v,f.X=y,f.i=g}l(c,s)}function o(s,c){return c.i=s.i,c.w=s.w,c.X=s.X.slice(),c}function a(s,c){s==null&&(s=+new Date);var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(f.X&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xor4096=a})(Xi,t)})(F_);var jK=F_.exports,U_={exports:{}};U_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.next=function(){var u=c.b,d=c.c,h=c.d,g=c.a;return u=u<<25^u>>>7^d,d=d-h|0,h=h<<24^h>>>8^g,g=g-u|0,c.b=u=u<<20^u>>>12^d,c.c=d=d-h|0,c.d=h<<16^d>>>16^g,c.a=g-u|0},c.a=0,c.b=0,c.c=-1640531527,c.d=1367130551,s===Math.floor(s)?(c.a=s/4294967296|0,c.b=s|0):l+=s;for(var f=0;f>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.tychei=a})(Xi,t)})(U_);var HK=U_.exports,qP={exports:{}};const KK={},qK=Object.freeze(Object.defineProperty({__proto__:null,default:KK},Symbol.toStringTag,{value:"Module"})),al=p$(qK);(function(t){(function(e,r,n){var i=256,o=6,a=52,s="random",c=n.pow(i,o),l=n.pow(2,a),f=l*2,u=i-1,d;function h(x,C,S){var T=[];C=C==!0?{entropy:!0}:C||{};var _=y(v(C.entropy?[x,w(r)]:x??m(),3),T),E=new g(T),b=function(){for(var D=E.g(o),I=c,P=0;D=f;)D/=2,I/=2,P>>>=1;return(D+P)/I};return b.int32=function(){return E.g(4)|0},b.quick=function(){return E.g(4)/4294967296},b.double=b,y(w(E.S),r),(C.pass||S||function(D,I,P,O){return O&&(O.S&&p(O,E),D.state=function(){return p(E,{})}),P?(n[s]=D,I):D})(b,_,"global"in C?C.global:this==n,C.state)}function g(x){var C,S=x.length,T=this,_=0,E=T.i=T.j=0,b=T.S=[];for(S||(x=[S++]);_XP(`vtkMath::${t} - NOT IMPLEMENTED`)}function pp(t,e,r,n){let i;for(let o=0;o0&&arguments[0]!==void 0?arguments[0]:3;const e=Array(t);for(let r=0;rMath.PI;function aq(t,e){return e>1023?t*2**1023*2**(e-1023):e<-1074?t*2**-1074*2**(e+1074):t*2**e}function Zr(t){return t/180*Math.PI}function py(t){return t*180/Math.PI}const{round:$g,floor:z_,ceil:sq,min:cq,max:lq}=Math;function uq(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=1/0;for(let i=e,o=t.length;i1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=-1/0;for(let i=e,o=t.length;i1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=1/0,i=-1/0;for(let o=e,a=t.length;o=0;--i)if(r[i]0&&arguments[0]!==void 0?arguments[0]:0;const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:1)-t;return t+r*Math.random()}const Cq=Y1("gaussian");function my(t,e,r){return r[0]=t[0]+e[0],r[1]=t[1]+e[1],r[2]=t[2]+e[2],r}function zl(t,e,r){return r[0]=t[0]-e[0],r[1]=t[1]-e[1],r[2]=t[2]-e[2],r}function JP(t,e){return t[0]*=e,t[1]*=e,t[2]*=e,t}function ZP(t,e){return t[0]*=e,t[1]*=e,t}function JC(t,e,r,n){return n[0]=t[0]+e[0]*r,n[1]=t[1]+e[1]*r,n[2]=t[2]+e[2]*r,n}function Sq(t,e,r,n){return n[0]=t[0]+e[0]*r,n[1]=t[1]+e[1]*r,n}function _n(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Tq(t,e,r){r[0]=t[0]*e[0],r[1]=t[0]*e[1],r[2]=t[0]*e[2],r[3]=t[1]*e[0],r[4]=t[1]*e[1],r[5]=t[1]*e[2],r[6]=t[2]*e[0],r[7]=t[2]*e[1],r[8]=t[2]*e[2]}function sl(t,e,r){const n=t[1]*e[2]-t[2]*e[1],i=t[2]*e[0]-t[0]*e[2],o=t[0]*e[1]-t[1]*e[0];return r[0]=n,r[1]=i,r[2]=o,r}function Nu(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3;switch(e){case 1:return Math.abs(t);case 2:return Math.sqrt(t[0]*t[0]+t[1]*t[1]);case 3:return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);default:{let r=0;for(let n=0;no&&i>a?(c=0,l=1,f=2):o>a?(c=1,l=2,f=0):(c=2,l=0,f=1);const u=t[c]/s,d=t[l]/s,h=t[f]/s,g=Math.sqrt(u*u+h*h);if(n!==0){const p=Math.sin(n),v=Math.cos(n);e&&(e[c]=(h*v-u*d*p)/g,e[l]=p*g,e[f]=(-(u*v)-d*h*p)/g),r&&(r[c]=(-(h*p)-u*d*v)/g,r[l]=v*g,r[f]=(u*p-d*h*v)/g)}else e&&(e[c]=h/g,e[l]=0,e[f]=-u/g),r&&(r[c]=-u*d/g,r[l]=g,r[f]=-d*h/g)}function Eq(t,e,r){const n=_n(e,e);if(n===0)return r[0]=0,r[1]=0,r[2]=0,!1;const i=_n(t,e)/n;for(let o=0;o<3;o++)r[o]=e[o];return JP(r,i),!0}function ZC(t,e){return t[0]*e[0]+t[1]*e[1]}function bq(t,e,r){const n=ZC(e,e);if(n===0)return r[0]=0,r[1]=0,!1;const i=ZC(t,e)/n;for(let o=0;o<2;o++)r[o]=e[o];return ZP(r,i),!0}function $c(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])+(t[2]-e[2])*(t[2]-e[2])}function Dq(t,e){const r=[0,0,0];return sl(t,e,r),Math.atan2(Nu(r),_n(t,e))}function Iq(t,e,r){const n=Math.abs(t-r);return 1/Math.sqrt(2*Math.PI*e)*Math.exp(-(n**2)/(2*e))}function Oq(t,e,r){const n=Math.abs(t-r);return Math.exp(-(n**2)/(2*e))}function Mq(t,e,r){r[0]=t[0]*e[0],r[1]=t[0]*e[1],r[2]=t[1]*e[0],r[3]=t[1]*e[1]}function QP(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function eR(t){const e=QP(t);return e!==0&&(t[0]/=e,t[1]/=e),e}function ei(){for(var t=arguments.length,e=new Array(t),r=0;ri&&(i=n),(n=Math.abs(t[a*3+2]))>i&&(i=n),o[a]=1/i;i=o[0]*Math.abs(t[0]),r=0,(n=o[1]*Math.abs(t[3]))>=i&&(i=n,r=1),(n=o[2]*Math.abs(t[6]))>=i&&(r=2),r!==0&&(pp(t,3,r,0),o[r]=o[0]),e[0]=r,t[3]/=t[0],t[6]/=t[0],t[4]-=t[3]*t[1],t[7]-=t[6]*t[1],i=o[1]*Math.abs(t[4]),r=1,(n=o[2]*Math.abs(t[7]))>=i&&(r=2,pp(t,3,1,2),o[2]=o[1]),e[1]=r,t[7]/=t[4],t[5]-=t[3]*t[2],t[8]-=t[6]*t[2]+t[7]*t[5],e[2]=2}function Rq(t,e,r){let n=r[e[0]];r[e[0]]=r[0],r[0]=n,n=r[e[1]],r[e[1]]=r[1],r[1]=n-t[3]*r[0],n=r[e[2]],r[e[2]]=r[2],r[2]=n-t[6]*r[0]-t[7]*r[1],r[2]/=t[8],r[1]=(r[1]-t[5]*r[2])/t[4],r[0]=(r[0]-t[1]*r[1]-t[2]*r[2])/t[0]}function Lq(t,e,r){const n=t[0],i=t[1],o=t[2],a=t[3],s=t[4],c=t[5],l=t[6],f=t[7],u=t[8],d=+ei(s,f,c,u),h=-ei(a,l,c,u),g=+ei(a,l,s,f),p=-ei(i,f,o,u),v=+ei(n,l,o,u),y=-ei(n,l,i,f),m=+ei(i,s,o,c),w=-ei(n,a,o,c),x=+ei(n,a,i,s),C=n*d+i*h+o*g,S=d*e[0]+p*e[1]+m*e[2],T=h*e[0]+v*e[1]+w*e[2],_=g*e[0]+y*e[1]+x*e[2];r[0]=S/C,r[1]=T/C,r[2]=_/C}function v2(t,e,r){const n=t[0]*e[0]+t[1]*e[1]+t[2]*e[2],i=t[3]*e[0]+t[4]*e[1]+t[5]*e[2],o=t[6]*e[0]+t[7]*e[1]+t[8]*e[2];r[0]=n,r[1]=i,r[2]=o}function QC(t,e,r){const n=[...t],i=[...e];for(let o=0;o<3;o++)r[o]=n[0]*i[o]+n[1]*i[o+3]+n[2]*i[o+6],r[o+3]=n[3]*i[o]+n[4]*i[o+3]+n[5]*i[o+6],r[o+6]=n[6]*i[o]+n[7]*i[o+3]+n[8]*i[o+6]}function Aq(t,e,r,n,i,o,a){n!==i&&XP("Number of columns of A must match number of rows of B.");const s=[...t],c=[...e];for(let l=0;l2&&arguments[2]!==void 0?arguments[2]:G_;if(t.length!==e.length)return!1;function n(i,o){return Math.abs(i-e[o])<=r}return t.every(n)}const J1=tR;function nR(t){for(let e=0;e<3;e++)t[e*3]=t[e*3+1]=t[e*3+2]=0,t[e*3+e]=1}function rR(t,e){for(let r=0;r1&&arguments[1]!==void 0?arguments[1]:G_;return J1(t,B_,e)}function Vq(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:G_;return J1(t,iq,e)}function iR(t,e){const r=t[0]*t[0],n=t[0]*t[1],i=t[0]*t[2],o=t[0]*t[3],a=t[1]*t[1],s=t[2]*t[2],c=t[3]*t[3],l=t[1]*t[2],f=t[1]*t[3],u=t[2]*t[3],d=a+s+c;let h=1/(r+d);const g=(r-d)*h;h*=2,e[0]=a*h+g,e[3]=(l+o)*h,e[6]=(f-i)*h,e[1]=(l-o)*h,e[4]=s*h+g,e[7]=(u+n)*h,e[2]=(f+i)*h,e[5]=(u-n)*h,e[8]=c*h+g}function y2(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!`${t}`.includes("e"))return+`${Math.round(`${t}e+${e}`)}e-${e}`;const r=`${t}`.split("e");let n="";return+r[1]+e>0&&(n="+"),+`${Math.round(`${+r[0]}e${n}${+r[1]+e}`)}e-${e}`}function eS(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0,0,0],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;return e[0]=y2(t[0],r),e[1]=y2(t[1],r),e[2]=y2(t[2],r),e}function Z1(t,e,r,n){let i,o,a,s,c,l,f,u,d,h,g,p,v,y,m,w;const x=Dr(e),C=Dr(e),S=(_,E,b)=>{y=_[E],v=_[b],_[E]=y-p*(v+y*h),_[b]=v+p*(y-v*h)};for(rR(e,n),c=0;c3&&Math.abs(r[c])+y===Math.abs(r[c])&&Math.abs(r[s])+y===Math.abs(r[s]))t[c*e+s]=0;else if(Math.abs(t[c*e+s])>f){for(v=r[s]-r[c],Math.abs(v)+y===Math.abs(v)?d=t[c*e+s]/v:(u=.5*v/t[c*e+s],d=1/(Math.abs(u)+Math.sqrt(1+u*u)),u<0&&(d=-d)),m=1/Math.sqrt(1+d*d),p=d*m,h=p/(1+m),v=d*t[c*e+s],C[c]-=v,C[s]+=v,r[c]-=v,r[s]+=v,t[c*e+s]=0,o=0;o<=c-1;o++)S(t,o*e+c,o*e+s);for(o=c+1;o<=s-1;o++)S(t,c*e+o,o*e+s);for(o=s+1;o=U6)return Sd("vtkMath::Jacobi: Error extracting eigenfunctions"),0;for(o=0;o=w||Math.abs(r[i]-w)>1)+(e&1);for(l=0,i=0;i=0&&l++;if(lh?g:h,i=p>i?p:i,r[d]=1,i!==0&&(r[d]/=i)}const o=Math.abs(e[0])*r[0],a=Math.abs(e[3])*r[1],s=Math.abs(e[6])*r[2];n[0]=0,i=o,a>=i&&(i=a,n[0]=1),s>=i&&(n[0]=2),n[0]!==0&&(zg(e,3,n[0],0),r[n[0]]=r[0]);const c=Math.abs(e[4])*r[1],l=Math.abs(e[7])*r[2];n[1]=1,i=c,l>=i&&(n[1]=2,zg(e,3,1,2)),n[2]=2;let f=0;if(Z5(e)<0){f=1;for(let d=0;d<9;d++)e[d]=-e[d]}const u=Dr(4);if(oR(e,u),iR(u,e),f)for(let d=0;d<9;d++)e[d]=-e[d];n[1]!==1&&zg(e,3,n[1],1),n[0]!==0&&zg(e,3,n[0],0)}function sR(t,e,r){let n,i,o,a,s,c;const l=[...t];if(Z1(l,3,e,r),e[0]===e[1]&&e[0]===e[2]){nR(r);return}for(K0(r,r),n=0;n<3;n++)if(e[(n+1)%3]===e[(n+2)%3]){for(c=Math.abs(r[n*3]),a=0,i=1;i<3;i++)c<(s=Math.abs(r[n*3+i]))&&(c=s,a=i);a!==n&&(s=e[a],e[a]=e[n],e[n]=s,pp(r,3,n,a)),r[a*3+a]<0&&(r[a*3]=-r[a*3],r[a*3+1]=-r[a*3+1],r[a*3+2]=-r[a*3+2]),i=(a+1)%3,o=(a+2)%3,r[i*3]=0,r[i*3+1]=0,r[i*3+2]=0,r[i*3+i]=1;const f=sl([r[a*3],r[a*3+1],r[a*3+2]],[r[i*3],r[i*3+1],r[i*3+2]],[]);Td(f);const u=sl(f,[r[a*3],r[a*3+1],r[a*3+2]],[]);for(let d=0;d<3;d++)r[o*3+d]=f[d],r[i*3+d]=u[d];K0(r,r);return}for(c=Math.abs(r[0]),a=0,n=1;n<3;n++)c<(s=Math.abs(r[n*3]))&&(c=s,a=n);if(a!==0){const f=e[a];e[a]=e[0],e[0]=f,pp(r,3,a,0)}if(Math.abs(r[4])a&&(a=f);if(a===0)return Sd("Unable to factor linear system"),0;u[n]=1/a}for(i=0;i=a&&(a=l,s=n)}if(i!==s){for(o=0;o=0)for(o=a;o<=i-1;o++)c-=t[i*n+o]*r[o];else c!==0&&(a=i);r[i]=c}for(i=n-1;i>=0;i--){for(c=r[i],o=i+1;o3&&arguments[3]!==void 0?arguments[3]:null,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:null;const o=n||Dr(r),a=i||Dr(r);if($_(t,o,r)===0)return null;for(let s=0;sn&&(n=Math.abs(t[i*e+o]));for(let i=0;i6&&arguments[6]!==void 0?arguments[6]:!0;if(tW_&&(c=0,s[d]=0);if(c&&i===1)return Sd("Detected homogeneous system (Y=0), calling SolveHomogeneousLeastSquares()"),tS(t,e,r,o);if(c)g=1;else for(d=0;d1&&arguments[1]!==void 0?arguments[1]:[0,.5,1];switch(t.length){case 3:return e[0]=parseInt(t[0],16)*17/255,e[1]=parseInt(t[1],16)*17/255,e[2]=parseInt(t[2],16)*17/255,e;case 4:return e[0]=parseInt(t[1],16)*17/255,e[1]=parseInt(t[2],16)*17/255,e[2]=parseInt(t[3],16)*17/255,e;case 6:return e[0]=parseInt(t.substr(0,2),16)/255,e[1]=parseInt(t.substr(2,2),16)/255,e[2]=parseInt(t.substr(4,2),16)/255,e;case 7:return e[0]=parseInt(t.substr(1,2),16)/255,e[1]=parseInt(t.substr(3,2),16)/255,e[2]=parseInt(t.substr(5,2),16)/255,e;case 9:return e[0]=parseInt(t.substr(1,2),16)/255,e[1]=parseInt(t.substr(3,2),16)/255,e[2]=parseInt(t.substr(5,2),16)/255,e[3]=parseInt(t.substr(7,2),16)/255,e;default:return e}}function Hg(t,e){let r,n;const[i,o,a]=t,s=1/3,c=1/6,l=2/3;let f=i,u=i;o>f?f=o:of?f=a:a0?n=(f-u)/f:n=0,n>0?(i===f?r=c*(o-a)/(f-u):o===f?r=s+c*(a-i)/(f-u):r=l+c*(i-o)/(f-u),r<0&&(r+=1)):r=0,e[0]=r,e[1]=n,e[2]=d}function Kf(t,e){const[r,n,i]=t,o=1/3,a=1/6,s=2/3,c=5/6;let l,f,u;r>a&&r<=o?(f=1,l=(o-r)/a,u=0):r>o&&r<=.5?(f=1,u=(r-o)/a,l=0):r>.5&&r<=s?(u=1,f=(s-r)/a,l=0):r>s&&r<=c?(u=1,l=(r-s)/a,f=0):r>c&&r<=1?(l=1,u=(1-r)/a,f=0):(l=1,f=r/a,u=0),l=n*l+(1-n),f=n*f+(1-n),u=n*u+(1-n),l*=i,f*=i,u*=i,e[0]=l,e[1]=f,e[2]=u}function uR(t,e){const[r,n,i]=t;let o=(r+16)/116,a=n/500+o,s=o-i/200;o**3>.008856?o**=3:o=(o-16/116)/7.787,a**3>.008856?a**=3:a=(a-16/116)/7.787,s**3>.008856?s**=3:s=(s-16/116)/7.787;const c=.9505,l=1,f=1.089;e[0]=c*a,e[1]=l*o,e[2]=f*s}function fR(t,e){const[r,n,i]=t,o=.9505,a=1,s=1.089;let c=r/o,l=n/a,f=i/s;c>.008856?c**=1/3:c=7.787*c+16/116,l>.008856?l**=1/3:l=7.787*l+16/116,f>.008856?f**=1/3:f=7.787*f+16/116,e[0]=116*l-16,e[1]=500*(c-l),e[2]=200*(l-f)}function dR(t,e){const[r,n,i]=t;let o=r*3.2406+n*-1.5372+i*-.4986,a=r*-.9689+n*1.8758+i*.0415,s=r*.0557+n*-.204+i*1.057;o>.0031308?o=1.055*o**(1/2.4)-.055:o*=12.92,a>.0031308?a=1.055*a**(1/2.4)-.055:a*=12.92,s>.0031308?s=1.055*s**(1/2.4)-.055:s*=12.92;let c=o;c1&&(o/=c,a/=c,s/=c),o<0&&(o=0),a<0&&(a=0),s<0&&(s=0),e[0]=o,e[1]=a,e[2]=s}function hR(t,e){let[r,n,i]=t;r>.04045?r=((r+.055)/1.055)**2.4:r/=12.92,n>.04045?n=((n+.055)/1.055)**2.4:n/=12.92,i>.04045?i=((i+.055)/1.055)**2.4:i/=12.92,e[0]=r*.4124+n*.3576+i*.1805,e[1]=r*.2126+n*.7152+i*.0722,e[2]=r*.0193+n*.1192+i*.9505}function nd(t,e){const r=[0,0,0];hR(t,r),fR(r,e)}function vy(t,e){const r=[0,0,0];uR(t,r),dR(r,e)}function Bh(t){return t[0]=1,t[1]=-1,t[2]=1,t[3]=-1,t[4]=1,t[5]=-1,t}function w2(t){return!(t[1]-t[0]<0)}function $q(t,e,r){return r[0]=Math.min(t[0],e[0]),r[1]=Math.max(t[0],e[0]),r[2]=Math.min(t[1],e[1]),r[3]=Math.max(t[1],e[1]),r[4]=Math.min(t[2],e[2]),r[5]=Math.max(t[2],e[2]),r}function oc(t,e,r){return tr?r:t}function nS(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[0,0,0];return n[0]=oc(t[0],e[0],r[0]),n[1]=oc(t[1],e[1],r[1]),n[2]=oc(t[2],e[2],r[2]),n}function jq(t,e){let r=0;return e[0]!==e[1]&&(te[1]?r=e[1]:r=t,r=(r-e[0])/(e[1]-e[0])),r}const Hq=Y1("GetScalarTypeFittingRange"),Kq=Y1("GetAdjustedScalarRange");function qq(t,e){if(!t||!e)return 0;for(let r=0;r<6;r+=2)if(t[r]e[r+1]||t[r+1]e[r+1])return 0;return 1}function Xq(t,e,r){if(!t||!e)return 0;for(let n=0;n<6;n+=2)if(t[n]+r[n/2]e[n+1]||t[n+1]+r[n/2]e[n+1])return 0;return 1}function Yq(t,e,r){if(!t||!e||!r)return 0;for(let n=0;n<3;n++)if(t[n]+r[n]e[2*n+1])return 0;return 1}function Jq(t,e,r,n){const i=Dr(3),o=Dr(3),a=Dr(3),s=Dr(3),c=Dr(3),l=Dr(3);for(let x=0;x<3;++x)i[x]=t[x]-e[x],o[x]=e[x]-r[x],a[x]=r[x]-t[x],s[x]=-i[x],c[x]=-o[x],l[x]=-a[x];const f=Nu(s),u=Nu(c),d=Nu(a),h=Dr(3);sl(i,o,h);const g=Nu(h),p=f*u*d/(2*g),v=2*g*g,y=u*u*_n(i,l)/v,m=d*d*_n(s,o)/v,w=f*f*_n(a,c)/v;for(let x=0;x<3;++x)n[x]=y*t[x]+m*e[x]+w*r[x];return p}const Zq=1/0,Qq=-1/0,gR=t=>!Number.isFinite(t),{isFinite:eX,isNaN:rS}=Number,yy=rS;function rf(){return[].concat([Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE])}function tX(t){let e=-1,r=-1;for(let n=0;ne&&(r=n,e=i)}return r}function pR(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3;const r=new Array(e),n=new Array(e);for(let o=0;o0;o--){let a=-1/0,s=0,c=0;for(let l=0;l<=o;++l){const f=r[l];for(let u=0;u<=o;++u){const d=n[u],h=Math.abs(t[f+e*d]);h>a&&(a=h,s=l,c=u)}}[r[o],r[s]]=[r[s],r[o]],[n[o],n[c]]=[n[c],n[o]]}const i=new Array(e*e).fill(0);for(let o=0;o15?e.toString(16):`0${e.toString(16)}`}function nX(t){return`${arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#"}${t.map(mR).join("")}`}function Zm(t){return Math.round(t*255)}function rX(t){return t.length===3?`rgb(${t.map(Zm).join(", ")})`:`rgba(${Zm(t[0]||0)}, ${Zm(t[1]||0)}, ${Zm(t[2]||0)}, ${t[3]||0})`}var nn={Pi:oq,ldexp:aq,radiansFromDegrees:Zr,degreesFromRadians:py,round:$g,floor:z_,ceil:sq,ceilLog2:hq,min:cq,max:lq,arrayMin:uq,arrayMax:fq,arrayRange:dq,isPowerOfTwo:jg,nearestPowerOfTwo:ps,factorial:gq,binomial:pq,beginCombination:mq,nextCombination:vq,randomSeed:yq,getSeed:wq,random:xq,gaussian:Cq,add:my,subtract:zl,multiplyScalar:JP,multiplyScalar2D:ZP,multiplyAccumulate:JC,multiplyAccumulate2D:Sq,dot:_n,outer:Tq,cross:sl,norm:Nu,normalize:Td,perpendiculars:_q,projectVector:Eq,projectVector2D:bq,distance2BetweenPoints:$c,angleBetweenVectors:Dq,gaussianAmplitude:Iq,gaussianWeight:Oq,dot2D:ZC,outer2D:Mq,norm2D:QP,normalize2D:eR,determinant2x2:ei,LUFactor3x3:Pq,LUSolve3x3:Rq,linearSolve3x3:Lq,multiply3x3_vect3:v2,multiply3x3_mat3:QC,multiplyMatrix:Aq,transpose3x3:K0,invert3x3:Nq,identity3x3:nR,identity:rR,isIdentity:kq,isIdentity3x3:Vq,determinant3x3:Z5,quaternionToMatrix3x3:iR,areEquals:tR,areMatricesEqual:J1,roundNumber:y2,roundVector:eS,matrix3x3ToQuaternion:oR,multiplyQuaternion:Fq,orthogonalize3x3:aR,diagonalize3x3:sR,singularValueDecomposition3x3:Uq,solveLinearSystem:cR,invertMatrix:lR,luFactorLinearSystem:$_,luSolveLinearSystem:j_,estimateMatrixCondition:Bq,jacobi:Gq,jacobiN:Z1,solveHomogeneousLeastSquares:tS,solveLeastSquares:Wq,hex2float:zq,rgb2hsv:Hg,hsv2rgb:Kf,lab2xyz:uR,xyz2lab:fR,xyz2rgb:dR,rgb2xyz:hR,rgb2lab:nd,lab2rgb:vy,uninitializeBounds:Bh,areBoundsInitialized:w2,computeBoundsFromPoints:$q,clampValue:oc,clampVector:nS,clampAndNormalizeValue:jq,getScalarTypeFittingRange:Hq,getAdjustedScalarRange:Kq,extentIsWithinOtherExtent:qq,boundsIsWithinOtherBounds:Xq,pointIsWithinBounds:Yq,solve3PointCircle:Jq,inf:Zq,negInf:Qq,isInf:gR,isNan:rS,isNaN:rS,isFinite:eX,createUninitializedBounds:rf,getMajorAxisIndex:tX,getSparseOrthogonalMatrix:pR,floatToHex2:mR,floatRGB2HexCode:nX,float2CssRGBA:rX};const{vtkErrorMacro:iX}=_o,{DefaultDataType:oX}=WP,aX=1e-6;function iS(t,e,r){const n=t.length;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,a,s;for(s=e;so&&(o=a);return{min:i,max:o}}function sX(){let t=Number.MAX_VALUE,e=-Number.MAX_VALUE,r=0,n=0;return{add(i){t>i&&(t=i),e1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;if(e<0&&r>1){const i=t.length/r,o=new Float64Array(i);for(let a=0,s=0;a1&&arguments[1]!==void 0?arguments[1]:0;const r=t||[];for(;r.length<=e;)r.push(null);return r}function H_(t){return Object.prototype.toString.call(t).slice(8,-1)}function cX(t){const e=t.getNumberOfComponents();let r=0;const n=new Array(e);for(let i=0;ir&&(r=o)}return r}const lX={computeRange:vR,createRangeHelper:sX,fastComputeRange:iS,getDataType:H_,getMaxNorm:cX};function uX(t,e){e.classHierarchy.push("vtkDataArray");function r(n){if(n<0)return!1;const i=t.getNumberOfComponents(),o=e.values.length/(i>0?i:1);if(n===o)return!0;if(n>o){const a=e.values;return e.values=Fh(e.dataType,(n+o)*i),e.values.set(a),!0}return e.size>n*i&&(e.size=n*i,t.dataChange()),!0}t.dataChange=()=>{e.ranges=null,t.modified()},t.resize=n=>{r(n);const i=n*t.getNumberOfComponents();return e.size!==i?(e.size=i,t.dataChange(),!0):!1},t.initialize=()=>{t.resize(0)},t.getElementComponentSize=()=>e.values.BYTES_PER_ELEMENT,t.getComponent=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.values[n*e.numberOfComponents+i]},t.setComponent=(n,i,o)=>{o!==e.values[n*e.numberOfComponents+i]&&(e.values[n*e.numberOfComponents+i]=o,t.dataChange())},t.getValue=n=>{const i=n/e.numberOfComponents,o=n%e.numberOfComponents;return t.getComponent(i,o)},t.setValue=(n,i)=>{const o=n/e.numberOfComponents,a=n%e.numberOfComponents;t.setComponent(o,a,i)},t.getData=()=>e.size===e.values.length?e.values:e.values.subarray(0,e.size),t.getRange=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:-1,i=n;i<0&&(i=e.numberOfComponents===1?0:e.numberOfComponents);let o=null;return e.ranges||(e.ranges=B6(e.ranges,e.numberOfComponents)),o=e.ranges[i],o?(e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple):(o=vR(t.getData(),n,e.numberOfComponents),e.ranges[i]=o,e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple)},t.setRange=(n,i)=>{e.ranges||(e.ranges=B6(e.ranges,e.numberOfComponents));const o={min:n.min,max:n.max};return e.ranges[i]=o,e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple},t.getRanges=function(){if(!(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0))return structuredClone(e.ranges);const i=[];for(let o=0;o1){const[o,a]=t.getRange(-1),s={min:o,max:a};i.push(s)}return i},t.setTuple=(n,i)=>{const o=n*e.numberOfComponents;for(let a=0;a{let o=n*e.numberOfComponents;const a=Math.min(i.length,e.size-o);for(let s=0;s(e.size<=n*e.numberOfComponents&&(e.size=(n+1)*e.numberOfComponents,r(n+1)),t.setTuple(n,i),n),t.insertTuples=(n,i)=>{const o=n+i.length/e.numberOfComponents;return e.size{const i=e.size/e.numberOfComponents;return t.insertTuple(i,n)},t.insertNextTuples=n=>{const i=e.size/e.numberOfComponents;return t.insertTuples(i,n)},t.findTuple=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:aX;for(let o=0;oi){a=!1;break}if(a)return o/e.numberOfComponents}return-1},t.getTuple=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];const o=e.numberOfComponents||1,a=n*o;switch(o){case 4:i[3]=e.values[a+3];case 3:i[2]=e.values[a+2];case 2:i[1]=e.values[a+1];case 1:i[0]=e.values[a];break;default:for(let s=o-1;s>=0;--s)i[s]=e.values[a+s]}return i},t.getTuples=(n,i)=>{const o=(n??0)*e.numberOfComponents,a=(i??t.getNumberOfTuples())*e.numberOfComponents,s=t.getData().subarray(o,a);return s.length>0?s:null},t.getTupleLocation=function(){return(arguments.length>0&&arguments[0]!==void 0?arguments[0]:1)*e.numberOfComponents},t.getNumberOfComponents=()=>e.numberOfComponents,t.getNumberOfValues=()=>e.size,t.getNumberOfTuples=()=>e.size/e.numberOfComponents,t.getDataType=()=>e.dataType,t.newClone=()=>wR({empty:!0,name:e.name,dataType:e.dataType,numberOfComponents:e.numberOfComponents}),t.getName=()=>(e.name||(t.modified(),e.name=`vtkDataArray${t.getMTime()}`),e.name),t.setData=(n,i)=>{e.values=n,e.size=n.length,e.dataType=H_(n),i&&(e.numberOfComponents=i),e.size%e.numberOfComponents!==0&&(e.numberOfComponents=1),t.dataChange()},t.getState=()=>{if(e.deleted)return null;const n={...e,vtkClass:t.getClassName()};n.values=Array.from(n.values),delete n.buffer,Object.keys(n).forEach(o=>{n[o]||delete n[o]});const i={};return Object.keys(n).sort().forEach(o=>{i[o]=n[o]}),i.mtime&&delete i.mtime,i},t.deepCopy=n=>{const i=t.getDataType(),o=e.values;t.shallowCopy(n),e.ranges=structuredClone(n.getRanges()),(o==null?void 0:o.length)>=n.getNumberOfValues()&&i===n.getDataType()?(o.set(n.getData()),e.values=o,t.dataChange()):t.setData(n.getData().slice())},t.interpolateTuple=(n,i,o,a,s,c)=>{const l=e.numberOfComponents||1;(l!==i.getNumberOfComponents()||l!==a.getNumberOfComponents())&&iX("numberOfComponents must match");const f=i.getTuple(o),u=a.getTuple(s),d=[];switch(d.length=l,l){case 4:d[3]=f[3]+(u[3]-f[3])*c;case 3:d[2]=f[2]+(u[2]-f[2])*c;case 2:d[1]=f[1]+(u[1]-f[1])*c;case 1:d[0]=f[0]+(u[0]-f[0])*c;break;default:for(let h=0;h2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,fX,r),Array.isArray(r.values)&&r.dataType===void 0&&console.warn("vtkDataArray.newInstance: no dataType provided, converting to Float32Array"),!e.empty&&!e.values&&!e.size)throw new TypeError("Cannot create vtkDataArray object without: size > 0, values");if(e.values?Array.isArray(e.values)&&(e.values=Y5(e.dataType,e.values)):e.values=Fh(e.dataType,e.size),e.values&&(e.size=e.size??e.values.length,e.dataType=H_(e.values)),yr(t,e),K1(t,e,["name","numberOfComponents"]),e.size%e.numberOfComponents!==0)throw new RangeError("model.size is not a multiple of model.numberOfComponents");uX(t,e)}const wR=$n(yR,"vtkDataArray");var Bt={newInstance:wR,extend:yR,...lX,...WP};const{vtkErrorMacro:dX}=J,hX=["Build","Render"];function gX(t,e){e.classHierarchy.push("vtkViewNode"),t.build=n=>{},t.render=n=>{},t.traverse=n=>{const i=n.getTraverseOperation(),o=t[i];if(o){o(n);return}t.apply(n,!0);for(let a=0;a{const o=t[n.getOperation()];o&&o(i,n)},t.getViewNodeFor=n=>{if(e.renderable===n)return t;for(let i=0;ie._parent?e._parent.isA(n)?e._parent:e._parent.getFirstAncestorOfType(n):null,t.getLastAncestorOfType=n=>{if(!e._parent)return null;const i=e._parent.getLastAncestorOfType(n);return i||(e._parent.isA(n)?e._parent:null)},t.addMissingNode=n=>{if(!n)return;const i=e._renderableChildMap.get(n);if(i!==void 0)return i.setVisited(!0),i;const o=t.createViewNode(n);if(o)return o.setParent(t),o.setVisited(!0),e._renderableChildMap.set(n,o),e.children.push(o),o},t.addMissingNodes=n=>{if(!(!n||!n.length))for(let i=0;i{if(!(!n||!n.length))for(let i=0;i{const i=e.children.findIndex(a=>a===n);if(i<0)return!1;const o=n.getRenderable();return o&&e._renderableChildMap.delete(o),n.delete(),e.children.splice(i,1),!0},t.prepareNodes=()=>{for(let n=0;n{e.visited=n},t.removeUnusedNodes=()=>{let n=0;for(let i=0;i{if(!e.myFactory)return dX("Cannot create view nodes without my own factory"),null;const i=e.myFactory.createNode(n);return i&&i.setRenderable(n),i};const r=t.delete;t.delete=()=>{for(let n=0;n2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,pX,r),J.obj(t,e),J.event(t,e,"event"),e._renderableChildMap=new Map,J.get(t,e,["visited"]),J.setGet(t,e,["_parent","renderable","myFactory"]),J.getArray(t,e,["children"]),J.moveToProtected(t,e,["parent"]),gX(t,e)}const mX=J.newInstance(xR,"vtkViewNode");var fr={newInstance:mX,extend:xR,PASS_TYPES:hX};function vX(t,e){e.overrides||(e.overrides={}),e.classHierarchy.push("vtkViewNodeFactory"),t.createNode=r=>{if(r.isDeleted())return null;let n=0,i=r.getClassName(n++),o=!1;const a=Object.keys(e.overrides);for(;i&&!o;)a.indexOf(i)!==-1?o=!0:i=r.getClassName(n++);if(!o)return null;const s=e.overrides[i]();return s.setMyFactory(t),s}}const yX={};function CR(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,yX,r),J.obj(t,e),vX(t,e)}const wX=J.newInstance(CR,"vtkViewNodeFactory");var K_={newInstance:wX,extend:CR};const SR=Object.create(null);function Mi(t,e){SR[t]=e}function xX(t,e){e.classHierarchy.push("vtkOpenGLViewNodeFactory")}const CX={};function TR(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,CX,r),e.overrides=SR,K_.extend(t,e,r),xX(t,e)}const SX=J.newInstance(TR,"vtkOpenGLViewNodeFactory");var TX={newInstance:SX,extend:TR};function _X(){try{const n=new Int16Array([0,32767]),i=[1,1],o=document.createElement("canvas");o.width=4,o.height=4;const a=o.getContext("webgl2");if(!a)return!1;const s=a.getExtension("EXT_texture_norm16");if(!s)return!1;const c=`#version 300 es +`+o.stack}return{value:t,source:e,stack:i,digest:null}}function Mx(t,e,r){return{value:t,source:null,stack:r??null,digest:e??null}}function P3(t,e){try{console.error(e.value)}catch(r){setTimeout(function(){throw r})}}var mH=typeof WeakMap=="function"?WeakMap:Map;function AM(t,e,r){r=Wl(-1,r),r.tag=3,r.payload={element:null};var n=e.value;return r.callback=function(){sy||(sy=!0,G3=n),P3(t,e)},r}function NM(t,e,r){r=Wl(-1,r),r.tag=3;var n=t.type.getDerivedStateFromError;if(typeof n=="function"){var i=e.value;r.payload=function(){return n(i)},r.callback=function(){P3(t,e)}}var o=t.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(r.callback=function(){P3(t,e),typeof n!="function"&&(Hu===null?Hu=new Set([this]):Hu.add(this));var a=e.stack;this.componentDidCatch(e.value,{componentStack:a!==null?a:""})}),r}function c6(t,e,r){var n=t.pingCache;if(n===null){n=t.pingCache=new mH;var i=new Set;n.set(e,i)}else i=n.get(e),i===void 0&&(i=new Set,n.set(e,i));i.has(r)||(i.add(r),t=MH.bind(null,t,e,r),e.then(t,t))}function l6(t){do{var e;if((e=t.tag===13)&&(e=t.memoizedState,e=e!==null?e.dehydrated!==null:!0),e)return t;t=t.return}while(t!==null);return null}function u6(t,e,r,n,i){return t.mode&1?(t.flags|=65536,t.lanes=i,t):(t===e?t.flags|=65536:(t.flags|=128,r.flags|=131072,r.flags&=-52805,r.tag===1&&(r.alternate===null?r.tag=17:(e=Wl(-1,1),e.tag=2,ju(r,e,1))),r.lanes|=1),t)}var vH=su.ReactCurrentOwner,va=!1;function Jo(t,e,r,n){e.child=t===null?uM(e,null,r,n):hh(e,t.child,r,n)}function f6(t,e,r,n,i){r=r.render;var o=e.ref;return $0(e,i),n=l_(t,e,r,n,o,i),r=u_(),t!==null&&!va?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~i,Yl(t,e,i)):(Wr&&r&&JT(e),e.flags|=1,Jo(t,e,n,i),e.child)}function d6(t,e,r,n,i){if(t===null){var o=r.type;return typeof o=="function"&&!x_(o)&&o.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(e.tag=15,e.type=o,kM(t,e,o,n,i)):(t=f2(r.type,null,n,e,e.mode,i),t.ref=e.ref,t.return=e,e.child=t)}if(o=t.child,!(t.lanes&i)){var a=o.memoizedProps;if(r=r.compare,r=r!==null?r:qp,r(a,n)&&t.ref===e.ref)return Yl(t,e,i)}return e.flags|=1,t=qu(o,n),t.ref=e.ref,t.return=e,e.child=t}function kM(t,e,r,n,i){if(t!==null){var o=t.memoizedProps;if(qp(o,n)&&t.ref===e.ref)if(va=!1,e.pendingProps=n=o,(t.lanes&i)!==0)t.flags&131072&&(va=!0);else return e.lanes=t.lanes,Yl(t,e,i)}return R3(t,e,r,n,i)}function VM(t,e,r){var n=e.pendingProps,i=n.children,o=t!==null?t.memoizedState:null;if(n.mode==="hidden")if(!(e.mode&1))e.memoizedState={baseLanes:0,cachePool:null,transitions:null},Or(x0,Ua),Ua|=r;else{if(!(r&1073741824))return t=o!==null?o.baseLanes|r:r,e.lanes=e.childLanes=1073741824,e.memoizedState={baseLanes:t,cachePool:null,transitions:null},e.updateQueue=null,Or(x0,Ua),Ua|=t,null;e.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=o!==null?o.baseLanes:r,Or(x0,Ua),Ua|=n}else o!==null?(n=o.baseLanes|r,e.memoizedState=null):n=r,Or(x0,Ua),Ua|=n;return Jo(t,e,i,r),e.child}function FM(t,e){var r=e.ref;(t===null&&r!==null||t!==null&&t.ref!==r)&&(e.flags|=512,e.flags|=2097152)}function R3(t,e,r,n,i){var o=Sa(r)?md:Fo.current;return o=fh(e,o),$0(e,i),r=l_(t,e,r,n,o,i),n=u_(),t!==null&&!va?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~i,Yl(t,e,i)):(Wr&&n&&JT(e),e.flags|=1,Jo(t,e,r,i),e.child)}function h6(t,e,r,n,i){if(Sa(r)){var o=!0;J2(e)}else o=!1;if($0(e,i),e.stateNode===null)c2(t,e),LM(e,r,n),M3(e,r,n,i),n=!0;else if(t===null){var a=e.stateNode,s=e.memoizedProps;a.props=s;var c=a.context,l=r.contextType;typeof l=="object"&&l!==null?l=Cs(l):(l=Sa(r)?md:Fo.current,l=fh(e,l));var f=r.getDerivedStateFromProps,u=typeof f=="function"||typeof a.getSnapshotBeforeUpdate=="function";u||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(s!==n||c!==l)&&s6(e,a,n,l),_u=!1;var d=e.memoizedState;a.state=d,ny(e,n,a,i),c=e.memoizedState,s!==n||d!==c||Ca.current||_u?(typeof f=="function"&&(O3(e,r,f,n),c=e.memoizedState),(s=_u||a6(e,r,s,n,d,c,l))?(u||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount=="function"&&(e.flags|=4194308)):(typeof a.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=n,e.memoizedState=c),a.props=n,a.state=c,a.context=l,n=s):(typeof a.componentDidMount=="function"&&(e.flags|=4194308),n=!1)}else{a=e.stateNode,dM(t,e),s=e.memoizedProps,l=e.type===e.elementType?s:qs(e.type,s),a.props=l,u=e.pendingProps,d=a.context,c=r.contextType,typeof c=="object"&&c!==null?c=Cs(c):(c=Sa(r)?md:Fo.current,c=fh(e,c));var h=r.getDerivedStateFromProps;(f=typeof h=="function"||typeof a.getSnapshotBeforeUpdate=="function")||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(s!==u||d!==c)&&s6(e,a,n,c),_u=!1,d=e.memoizedState,a.state=d,ny(e,n,a,i);var g=e.memoizedState;s!==u||d!==g||Ca.current||_u?(typeof h=="function"&&(O3(e,r,h,n),g=e.memoizedState),(l=_u||a6(e,r,l,n,d,g,c)||!1)?(f||typeof a.UNSAFE_componentWillUpdate!="function"&&typeof a.componentWillUpdate!="function"||(typeof a.componentWillUpdate=="function"&&a.componentWillUpdate(n,g,c),typeof a.UNSAFE_componentWillUpdate=="function"&&a.UNSAFE_componentWillUpdate(n,g,c)),typeof a.componentDidUpdate=="function"&&(e.flags|=4),typeof a.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof a.componentDidUpdate!="function"||s===t.memoizedProps&&d===t.memoizedState||(e.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||s===t.memoizedProps&&d===t.memoizedState||(e.flags|=1024),e.memoizedProps=n,e.memoizedState=g),a.props=n,a.state=g,a.context=c,n=l):(typeof a.componentDidUpdate!="function"||s===t.memoizedProps&&d===t.memoizedState||(e.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||s===t.memoizedProps&&d===t.memoizedState||(e.flags|=1024),n=!1)}return L3(t,e,r,n,o,i)}function L3(t,e,r,n,i,o){FM(t,e);var a=(e.flags&128)!==0;if(!n&&!a)return i&&Zb(e,r,!1),Yl(t,e,o);n=e.stateNode,vH.current=e;var s=a&&typeof r.getDerivedStateFromError!="function"?null:n.render();return e.flags|=1,t!==null&&a?(e.child=hh(e,t.child,null,o),e.child=hh(e,null,s,o)):Jo(t,e,s,o),e.memoizedState=n.state,i&&Zb(e,r,!0),e.child}function UM(t){var e=t.stateNode;e.pendingContext?Jb(t,e.pendingContext,e.pendingContext!==e.context):e.context&&Jb(t,e.context,!1),o_(t,e.containerInfo)}function g6(t,e,r,n,i){return dh(),QT(i),e.flags|=256,Jo(t,e,r,n),e.child}var A3={dehydrated:null,treeContext:null,retryLane:0};function N3(t){return{baseLanes:t,cachePool:null,transitions:null}}function BM(t,e,r){var n=e.pendingProps,i=ti.current,o=!1,a=(e.flags&128)!==0,s;if((s=a)||(s=t!==null&&t.memoizedState===null?!1:(i&2)!==0),s?(o=!0,e.flags&=-129):(t===null||t.memoizedState!==null)&&(i|=1),Or(ti,i&1),t===null)return D3(e),t=e.memoizedState,t!==null&&(t=t.dehydrated,t!==null)?(e.mode&1?t.data==="$!"?e.lanes=8:e.lanes=1073741824:e.lanes=1,null):(a=n.children,t=n.fallback,o?(n=e.mode,o=e.child,a={mode:"hidden",children:a},!(n&1)&&o!==null?(o.childLanes=0,o.pendingProps=a):o=$5(a,n,0,null),t=sd(t,n,r,null),o.return=e,t.return=e,o.sibling=t,e.child=o,e.child.memoizedState=N3(r),e.memoizedState=A3,t):h_(e,a));if(i=t.memoizedState,i!==null&&(s=i.dehydrated,s!==null))return yH(t,e,a,n,s,i,r);if(o){o=n.fallback,a=e.mode,i=t.child,s=i.sibling;var c={mode:"hidden",children:n.children};return!(a&1)&&e.child!==i?(n=e.child,n.childLanes=0,n.pendingProps=c,e.deletions=null):(n=qu(i,c),n.subtreeFlags=i.subtreeFlags&14680064),s!==null?o=qu(s,o):(o=sd(o,a,r,null),o.flags|=2),o.return=e,n.return=e,n.sibling=o,e.child=n,n=o,o=e.child,a=t.child.memoizedState,a=a===null?N3(r):{baseLanes:a.baseLanes|r,cachePool:null,transitions:a.transitions},o.memoizedState=a,o.childLanes=t.childLanes&~r,e.memoizedState=A3,n}return o=t.child,t=o.sibling,n=qu(o,{mode:"visible",children:n.children}),!(e.mode&1)&&(n.lanes=r),n.return=e,n.sibling=null,t!==null&&(r=e.deletions,r===null?(e.deletions=[t],e.flags|=16):r.push(t)),e.child=n,e.memoizedState=null,n}function h_(t,e){return e=$5({mode:"visible",children:e},t.mode,0,null),e.return=t,t.child=e}function Km(t,e,r,n){return n!==null&&QT(n),hh(e,t.child,null,r),t=h_(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function yH(t,e,r,n,i,o,a){if(r)return e.flags&256?(e.flags&=-257,n=Mx(Error(bt(422))),Km(t,e,a,n)):e.memoizedState!==null?(e.child=t.child,e.flags|=128,null):(o=n.fallback,i=e.mode,n=$5({mode:"visible",children:n.children},i,0,null),o=sd(o,i,a,null),o.flags|=2,n.return=e,o.return=e,n.sibling=o,e.child=n,e.mode&1&&hh(e,t.child,null,a),e.child.memoizedState=N3(a),e.memoizedState=A3,o);if(!(e.mode&1))return Km(t,e,a,null);if(i.data==="$!"){if(n=i.nextSibling&&i.nextSibling.dataset,n)var s=n.dgst;return n=s,o=Error(bt(419)),n=Mx(o,n,void 0),Km(t,e,a,n)}if(s=(a&t.childLanes)!==0,va||s){if(n=fo,n!==null){switch(a&-a){case 4:i=2;break;case 16:i=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:i=32;break;case 536870912:i=268435456;break;default:i=0}i=i&(n.suspendedLanes|a)?0:i,i!==0&&i!==o.retryLane&&(o.retryLane=i,Xl(t,i),lc(n,t,i,-1))}return w_(),n=Mx(Error(bt(421))),Km(t,e,a,n)}return i.data==="$?"?(e.flags|=128,e.child=t.child,e=PH.bind(null,t),i._reactRetry=e,null):(t=o.treeContext,Wa=$u(i.nextSibling),ja=e,Wr=!0,Zs=null,t!==null&&(hs[gs++]=Nl,hs[gs++]=kl,hs[gs++]=vd,Nl=t.id,kl=t.overflow,vd=e),e=h_(e,n.children),e.flags|=4096,e)}function p6(t,e,r){t.lanes|=e;var n=t.alternate;n!==null&&(n.lanes|=e),I3(t.return,e,r)}function Px(t,e,r,n,i){var o=t.memoizedState;o===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:i}:(o.isBackwards=e,o.rendering=null,o.renderingStartTime=0,o.last=n,o.tail=r,o.tailMode=i)}function GM(t,e,r){var n=e.pendingProps,i=n.revealOrder,o=n.tail;if(Jo(t,e,n.children,r),n=ti.current,n&2)n=n&1|2,e.flags|=128;else{if(t!==null&&t.flags&128)e:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&p6(t,r,e);else if(t.tag===19)p6(t,r,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;t=t.return}t.sibling.return=t.return,t=t.sibling}n&=1}if(Or(ti,n),!(e.mode&1))e.memoizedState=null;else switch(i){case"forwards":for(r=e.child,i=null;r!==null;)t=r.alternate,t!==null&&ry(t)===null&&(i=r),r=r.sibling;r=i,r===null?(i=e.child,e.child=null):(i=r.sibling,r.sibling=null),Px(e,!1,i,r,o);break;case"backwards":for(r=null,i=e.child,e.child=null;i!==null;){if(t=i.alternate,t!==null&&ry(t)===null){e.child=i;break}t=i.sibling,i.sibling=r,r=i,i=t}Px(e,!0,r,null,o);break;case"together":Px(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function c2(t,e){!(e.mode&1)&&t!==null&&(t.alternate=null,e.alternate=null,e.flags|=2)}function Yl(t,e,r){if(t!==null&&(e.dependencies=t.dependencies),wd|=e.lanes,!(r&e.childLanes))return null;if(t!==null&&e.child!==t.child)throw Error(bt(153));if(e.child!==null){for(t=e.child,r=qu(t,t.pendingProps),e.child=r,r.return=e;t.sibling!==null;)t=t.sibling,r=r.sibling=qu(t,t.pendingProps),r.return=e;r.sibling=null}return e.child}function wH(t,e,r){switch(e.tag){case 3:UM(e),dh();break;case 5:hM(e);break;case 1:Sa(e.type)&&J2(e);break;case 4:o_(e,e.stateNode.containerInfo);break;case 10:var n=e.type._context,i=e.memoizedProps.value;Or(ey,n._currentValue),n._currentValue=i;break;case 13:if(n=e.memoizedState,n!==null)return n.dehydrated!==null?(Or(ti,ti.current&1),e.flags|=128,null):r&e.child.childLanes?BM(t,e,r):(Or(ti,ti.current&1),t=Yl(t,e,r),t!==null?t.sibling:null);Or(ti,ti.current&1);break;case 19:if(n=(r&e.childLanes)!==0,t.flags&128){if(n)return GM(t,e,r);e.flags|=128}if(i=e.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),Or(ti,ti.current),n)break;return null;case 22:case 23:return e.lanes=0,VM(t,e,r)}return Yl(t,e,r)}var WM,k3,zM,$M;WM=function(t,e){for(var r=e.child;r!==null;){if(r.tag===5||r.tag===6)t.appendChild(r.stateNode);else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===e)break;for(;r.sibling===null;){if(r.return===null||r.return===e)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};k3=function(){};zM=function(t,e,r,n){var i=t.memoizedProps;if(i!==n){t=e.stateNode,td(Jc.current);var o=null;switch(r){case"input":i=i3(t,i),n=i3(t,n),o=[];break;case"select":i=oi({},i,{value:void 0}),n=oi({},n,{value:void 0}),o=[];break;case"textarea":i=s3(t,i),n=s3(t,n),o=[];break;default:typeof i.onClick!="function"&&typeof n.onClick=="function"&&(t.onclick=X2)}l3(r,n);var a;r=null;for(l in i)if(!n.hasOwnProperty(l)&&i.hasOwnProperty(l)&&i[l]!=null)if(l==="style"){var s=i[l];for(a in s)s.hasOwnProperty(a)&&(r||(r={}),r[a]="")}else l!=="dangerouslySetInnerHTML"&&l!=="children"&&l!=="suppressContentEditableWarning"&&l!=="suppressHydrationWarning"&&l!=="autoFocus"&&(Gp.hasOwnProperty(l)?o||(o=[]):(o=o||[]).push(l,null));for(l in n){var c=n[l];if(s=i!=null?i[l]:void 0,n.hasOwnProperty(l)&&c!==s&&(c!=null||s!=null))if(l==="style")if(s){for(a in s)!s.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(r||(r={}),r[a]="");for(a in c)c.hasOwnProperty(a)&&s[a]!==c[a]&&(r||(r={}),r[a]=c[a])}else r||(o||(o=[]),o.push(l,r)),r=c;else l==="dangerouslySetInnerHTML"?(c=c?c.__html:void 0,s=s?s.__html:void 0,c!=null&&s!==c&&(o=o||[]).push(l,c)):l==="children"?typeof c!="string"&&typeof c!="number"||(o=o||[]).push(l,""+c):l!=="suppressContentEditableWarning"&&l!=="suppressHydrationWarning"&&(Gp.hasOwnProperty(l)?(c!=null&&l==="onScroll"&&Lr("scroll",t),o||s===c||(o=[])):(o=o||[]).push(l,c))}r&&(o=o||[]).push("style",r);var l=o;(e.updateQueue=l)&&(e.flags|=4)}};$M=function(t,e,r,n){r!==n&&(e.flags|=4)};function vg(t,e){if(!Wr)switch(t.tailMode){case"hidden":e=t.tail;for(var r=null;e!==null;)e.alternate!==null&&(r=e),e=e.sibling;r===null?t.tail=null:r.sibling=null;break;case"collapsed":r=t.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:n.sibling=null}}function Io(t){var e=t.alternate!==null&&t.alternate.child===t.child,r=0,n=0;if(e)for(var i=t.child;i!==null;)r|=i.lanes|i.childLanes,n|=i.subtreeFlags&14680064,n|=i.flags&14680064,i.return=t,i=i.sibling;else for(i=t.child;i!==null;)r|=i.lanes|i.childLanes,n|=i.subtreeFlags,n|=i.flags,i.return=t,i=i.sibling;return t.subtreeFlags|=n,t.childLanes=r,e}function xH(t,e,r){var n=e.pendingProps;switch(ZT(e),e.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Io(e),null;case 1:return Sa(e.type)&&Y2(),Io(e),null;case 3:return n=e.stateNode,gh(),Fr(Ca),Fr(Fo),s_(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(t===null||t.child===null)&&(jm(e)?e.flags|=4:t===null||t.memoizedState.isDehydrated&&!(e.flags&256)||(e.flags|=1024,Zs!==null&&($3(Zs),Zs=null))),k3(t,e),Io(e),null;case 5:a_(e);var i=td(Qp.current);if(r=e.type,t!==null&&e.stateNode!=null)zM(t,e,r,n,i),t.ref!==e.ref&&(e.flags|=512,e.flags|=2097152);else{if(!n){if(e.stateNode===null)throw Error(bt(166));return Io(e),null}if(t=td(Jc.current),jm(e)){n=e.stateNode,r=e.type;var o=e.memoizedProps;switch(n[Kc]=e,n[Jp]=o,t=(e.mode&1)!==0,r){case"dialog":Lr("cancel",n),Lr("close",n);break;case"iframe":case"object":case"embed":Lr("load",n);break;case"video":case"audio":for(i=0;i<\/script>",t=t.removeChild(t.firstChild)):typeof n.is=="string"?t=a.createElement(r,{is:n.is}):(t=a.createElement(r),r==="select"&&(a=t,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):t=a.createElementNS(t,r),t[Kc]=e,t[Jp]=n,WM(t,e,!1,!1),e.stateNode=t;e:{switch(a=u3(r,n),r){case"dialog":Lr("cancel",t),Lr("close",t),i=n;break;case"iframe":case"object":case"embed":Lr("load",t),i=n;break;case"video":case"audio":for(i=0;imh&&(e.flags|=128,n=!0,vg(o,!1),e.lanes=4194304)}else{if(!n)if(t=ry(a),t!==null){if(e.flags|=128,n=!0,r=t.updateQueue,r!==null&&(e.updateQueue=r,e.flags|=4),vg(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!Wr)return Io(e),null}else 2*Di()-o.renderingStartTime>mh&&r!==1073741824&&(e.flags|=128,n=!0,vg(o,!1),e.lanes=4194304);o.isBackwards?(a.sibling=e.child,e.child=a):(r=o.last,r!==null?r.sibling=a:e.child=a,o.last=a)}return o.tail!==null?(e=o.tail,o.rendering=e,o.tail=e.sibling,o.renderingStartTime=Di(),e.sibling=null,r=ti.current,Or(ti,n?r&1|2:r&1),e):(Io(e),null);case 22:case 23:return y_(),n=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==n&&(e.flags|=8192),n&&e.mode&1?Ua&1073741824&&(Io(e),e.subtreeFlags&6&&(e.flags|=8192)):Io(e),null;case 24:return null;case 25:return null}throw Error(bt(156,e.tag))}function CH(t,e){switch(ZT(e),e.tag){case 1:return Sa(e.type)&&Y2(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return gh(),Fr(Ca),Fr(Fo),s_(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return a_(e),null;case 13:if(Fr(ti),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(bt(340));dh()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Fr(ti),null;case 4:return gh(),null;case 10:return n_(e.type._context),null;case 22:case 23:return y_(),null;case 24:return null;default:return null}}var qm=!1,Ao=!1,SH=typeof WeakSet=="function"?WeakSet:Set,Ht=null;function w0(t,e){var r=t.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){pi(t,e,n)}else r.current=null}function V3(t,e,r){try{r()}catch(n){pi(t,e,n)}}var m6=!1;function TH(t,e){if(x3=H2,t=XO(),YT(t)){if("selectionStart"in t)var r={start:t.selectionStart,end:t.selectionEnd};else e:{r=(r=t.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break e}var a=0,s=-1,c=-1,l=0,f=0,u=t,d=null;t:for(;;){for(var h;u!==r||i!==0&&u.nodeType!==3||(s=a+i),u!==o||n!==0&&u.nodeType!==3||(c=a+n),u.nodeType===3&&(a+=u.nodeValue.length),(h=u.firstChild)!==null;)d=u,u=h;for(;;){if(u===t)break t;if(d===r&&++l===i&&(s=a),d===o&&++f===n&&(c=a),(h=u.nextSibling)!==null)break;u=d,d=u.parentNode}u=h}r=s===-1||c===-1?null:{start:s,end:c}}else r=null}r=r||{start:0,end:0}}else r=null;for(C3={focusedElem:t,selectionRange:r},H2=!1,Ht=e;Ht!==null;)if(e=Ht,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Ht=t;else for(;Ht!==null;){e=Ht;try{var g=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var p=g.memoizedProps,v=g.memoizedState,y=e.stateNode,m=y.getSnapshotBeforeUpdate(e.elementType===e.type?p:qs(e.type,p),v);y.__reactInternalSnapshotBeforeUpdate=m}break;case 3:var w=e.stateNode.containerInfo;w.nodeType===1?w.textContent="":w.nodeType===9&&w.documentElement&&w.removeChild(w.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(bt(163))}}catch(x){pi(e,e.return,x)}if(t=e.sibling,t!==null){t.return=e.return,Ht=t;break}Ht=e.return}return g=m6,m6=!1,g}function dp(t,e,r){var n=e.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&t)===t){var o=i.destroy;i.destroy=void 0,o!==void 0&&V3(e,r,o)}i=i.next}while(i!==n)}}function W5(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var r=e=e.next;do{if((r.tag&t)===t){var n=r.create;r.destroy=n()}r=r.next}while(r!==e)}}function F3(t){var e=t.ref;if(e!==null){var r=t.stateNode;switch(t.tag){case 5:t=r;break;default:t=r}typeof e=="function"?e(t):e.current=t}}function jM(t){var e=t.alternate;e!==null&&(t.alternate=null,jM(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Kc],delete e[Jp],delete e[_3],delete e[oH],delete e[aH])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function HM(t){return t.tag===5||t.tag===3||t.tag===4}function v6(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||HM(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function U3(t,e,r){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?r.nodeType===8?r.parentNode.insertBefore(t,e):r.insertBefore(t,e):(r.nodeType===8?(e=r.parentNode,e.insertBefore(t,r)):(e=r,e.appendChild(t)),r=r._reactRootContainer,r!=null||e.onclick!==null||(e.onclick=X2));else if(n!==4&&(t=t.child,t!==null))for(U3(t,e,r),t=t.sibling;t!==null;)U3(t,e,r),t=t.sibling}function B3(t,e,r){var n=t.tag;if(n===5||n===6)t=t.stateNode,e?r.insertBefore(t,e):r.appendChild(t);else if(n!==4&&(t=t.child,t!==null))for(B3(t,e,r),t=t.sibling;t!==null;)B3(t,e,r),t=t.sibling}var vo=null,Ys=!1;function fu(t,e,r){for(r=r.child;r!==null;)KM(t,e,r),r=r.sibling}function KM(t,e,r){if(Yc&&typeof Yc.onCommitFiberUnmount=="function")try{Yc.onCommitFiberUnmount(A5,r)}catch{}switch(r.tag){case 5:Ao||w0(r,e);case 6:var n=vo,i=Ys;vo=null,fu(t,e,r),vo=n,Ys=i,vo!==null&&(Ys?(t=vo,r=r.stateNode,t.nodeType===8?t.parentNode.removeChild(r):t.removeChild(r)):vo.removeChild(r.stateNode));break;case 18:vo!==null&&(Ys?(t=vo,r=r.stateNode,t.nodeType===8?_x(t.parentNode,r):t.nodeType===1&&_x(t,r),Hp(t)):_x(vo,r.stateNode));break;case 4:n=vo,i=Ys,vo=r.stateNode.containerInfo,Ys=!0,fu(t,e,r),vo=n,Ys=i;break;case 0:case 11:case 14:case 15:if(!Ao&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&V3(r,e,a),i=i.next}while(i!==n)}fu(t,e,r);break;case 1:if(!Ao&&(w0(r,e),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(s){pi(r,e,s)}fu(t,e,r);break;case 21:fu(t,e,r);break;case 22:r.mode&1?(Ao=(n=Ao)||r.memoizedState!==null,fu(t,e,r),Ao=n):fu(t,e,r);break;default:fu(t,e,r)}}function y6(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var r=t.stateNode;r===null&&(r=t.stateNode=new SH),e.forEach(function(n){var i=RH.bind(null,t,n);r.has(n)||(r.add(n),n.then(i,i))})}}function Ws(t,e){var r=e.deletions;if(r!==null)for(var n=0;ni&&(i=a),n&=~o}if(n=i,n=Di()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*EH(n/1960))-n,10t?16:t,Lu===null)var n=!1;else{if(t=Lu,Lu=null,cy=0,nr&6)throw Error(bt(331));var i=nr;for(nr|=4,Ht=t.current;Ht!==null;){var o=Ht,a=o.child;if(Ht.flags&16){var s=o.deletions;if(s!==null){for(var c=0;cDi()-m_?ad(t,0):p_|=r),Ta(t,e)}function tP(t,e){e===0&&(t.mode&1?(e=Um,Um<<=1,!(Um&130023424)&&(Um=4194304)):e=1);var r=ea();t=Xl(t,e),t!==null&&(z1(t,e,r),Ta(t,r))}function PH(t){var e=t.memoizedState,r=0;e!==null&&(r=e.retryLane),tP(t,r)}function RH(t,e){var r=0;switch(t.tag){case 13:var n=t.stateNode,i=t.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=t.stateNode;break;default:throw Error(bt(314))}n!==null&&n.delete(e),tP(t,r)}var nP;nP=function(t,e,r){if(t!==null)if(t.memoizedProps!==e.pendingProps||Ca.current)va=!0;else{if(!(t.lanes&r)&&!(e.flags&128))return va=!1,wH(t,e,r);va=!!(t.flags&131072)}else va=!1,Wr&&e.flags&1048576&&aM(e,Q2,e.index);switch(e.lanes=0,e.tag){case 2:var n=e.type;c2(t,e),t=e.pendingProps;var i=fh(e,Fo.current);$0(e,r),i=l_(null,e,n,t,i,r);var o=u_();return e.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Sa(n)?(o=!0,J2(e)):o=!1,e.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,i_(e),i.updater=G5,e.stateNode=i,i._reactInternals=e,M3(e,n,t,r),e=L3(null,e,n,!0,o,r)):(e.tag=0,Wr&&o&&JT(e),Jo(null,e,i,r),e=e.child),e;case 16:n=e.elementType;e:{switch(c2(t,e),t=e.pendingProps,i=n._init,n=i(n._payload),e.type=n,i=e.tag=AH(n),t=qs(n,t),i){case 0:e=R3(null,e,n,t,r);break e;case 1:e=h6(null,e,n,t,r);break e;case 11:e=f6(null,e,n,t,r);break e;case 14:e=d6(null,e,n,qs(n.type,t),r);break e}throw Error(bt(306,n,""))}return e;case 0:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),R3(t,e,n,i,r);case 1:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),h6(t,e,n,i,r);case 3:e:{if(UM(e),t===null)throw Error(bt(387));n=e.pendingProps,o=e.memoizedState,i=o.element,dM(t,e),ny(e,n,null,r);var a=e.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},e.updateQueue.baseState=o,e.memoizedState=o,e.flags&256){i=ph(Error(bt(423)),e),e=g6(t,e,n,r,i);break e}else if(n!==i){i=ph(Error(bt(424)),e),e=g6(t,e,n,r,i);break e}else for(Wa=$u(e.stateNode.containerInfo.firstChild),ja=e,Wr=!0,Zs=null,r=uM(e,null,n,r),e.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(dh(),n===i){e=Yl(t,e,r);break e}Jo(t,e,n,r)}e=e.child}return e;case 5:return hM(e),t===null&&D3(e),n=e.type,i=e.pendingProps,o=t!==null?t.memoizedProps:null,a=i.children,S3(n,i)?a=null:o!==null&&S3(n,o)&&(e.flags|=32),FM(t,e),Jo(t,e,a,r),e.child;case 6:return t===null&&D3(e),null;case 13:return BM(t,e,r);case 4:return o_(e,e.stateNode.containerInfo),n=e.pendingProps,t===null?e.child=hh(e,null,n,r):Jo(t,e,n,r),e.child;case 11:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),f6(t,e,n,i,r);case 7:return Jo(t,e,e.pendingProps,r),e.child;case 8:return Jo(t,e,e.pendingProps.children,r),e.child;case 12:return Jo(t,e,e.pendingProps.children,r),e.child;case 10:e:{if(n=e.type._context,i=e.pendingProps,o=e.memoizedProps,a=i.value,Or(ey,n._currentValue),n._currentValue=a,o!==null)if(fc(o.value,a)){if(o.children===i.children&&!Ca.current){e=Yl(t,e,r);break e}}else for(o=e.child,o!==null&&(o.return=e);o!==null;){var s=o.dependencies;if(s!==null){a=o.child;for(var c=s.firstContext;c!==null;){if(c.context===n){if(o.tag===1){c=Wl(-1,r&-r),c.tag=2;var l=o.updateQueue;if(l!==null){l=l.shared;var f=l.pending;f===null?c.next=c:(c.next=f.next,f.next=c),l.pending=c}}o.lanes|=r,c=o.alternate,c!==null&&(c.lanes|=r),I3(o.return,r,e),s.lanes|=r;break}c=c.next}}else if(o.tag===10)a=o.type===e.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(bt(341));a.lanes|=r,s=a.alternate,s!==null&&(s.lanes|=r),I3(a,r,e),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===e){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}Jo(t,e,i.children,r),e=e.child}return e;case 9:return i=e.type,n=e.pendingProps.children,$0(e,r),i=Cs(i),n=n(i),e.flags|=1,Jo(t,e,n,r),e.child;case 14:return n=e.type,i=qs(n,e.pendingProps),i=qs(n.type,i),d6(t,e,n,i,r);case 15:return kM(t,e,e.type,e.pendingProps,r);case 17:return n=e.type,i=e.pendingProps,i=e.elementType===n?i:qs(n,i),c2(t,e),e.tag=1,Sa(n)?(t=!0,J2(e)):t=!1,$0(e,r),LM(e,n,i),M3(e,n,i,r),L3(null,e,n,!0,t,r);case 19:return GM(t,e,r);case 22:return VM(t,e,r)}throw Error(bt(156,e.tag))};function rP(t,e){return MO(t,e)}function LH(t,e,r,n){this.tag=t,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ys(t,e,r,n){return new LH(t,e,r,n)}function x_(t){return t=t.prototype,!(!t||!t.isReactComponent)}function AH(t){if(typeof t=="function")return x_(t)?1:0;if(t!=null){if(t=t.$$typeof,t===UT)return 11;if(t===BT)return 14}return 2}function qu(t,e){var r=t.alternate;return r===null?(r=ys(t.tag,e,t.key,t.mode),r.elementType=t.elementType,r.type=t.type,r.stateNode=t.stateNode,r.alternate=t,t.alternate=r):(r.pendingProps=e,r.type=t.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=t.flags&14680064,r.childLanes=t.childLanes,r.lanes=t.lanes,r.child=t.child,r.memoizedProps=t.memoizedProps,r.memoizedState=t.memoizedState,r.updateQueue=t.updateQueue,e=t.dependencies,r.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},r.sibling=t.sibling,r.index=t.index,r.ref=t.ref,r}function f2(t,e,r,n,i,o){var a=2;if(n=t,typeof t=="function")x_(t)&&(a=1);else if(typeof t=="string")a=5;else e:switch(t){case u0:return sd(r.children,i,o,e);case FT:a=8,i|=8;break;case e3:return t=ys(12,r,e,i|2),t.elementType=e3,t.lanes=o,t;case t3:return t=ys(13,r,e,i),t.elementType=t3,t.lanes=o,t;case n3:return t=ys(19,r,e,i),t.elementType=n3,t.lanes=o,t;case hO:return $5(r,i,o,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case fO:a=10;break e;case dO:a=9;break e;case UT:a=11;break e;case BT:a=14;break e;case Tu:a=16,n=null;break e}throw Error(bt(130,t==null?t:typeof t,""))}return e=ys(a,r,e,i),e.elementType=t,e.type=n,e.lanes=o,e}function sd(t,e,r,n){return t=ys(7,t,n,e),t.lanes=r,t}function $5(t,e,r,n){return t=ys(22,t,n,e),t.elementType=hO,t.lanes=r,t.stateNode={isHidden:!1},t}function Rx(t,e,r){return t=ys(6,t,null,e),t.lanes=r,t}function Lx(t,e,r){return e=ys(4,t.children!==null?t.children:[],t.key,e),e.lanes=r,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function NH(t,e,r,n,i){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=hx(0),this.expirationTimes=hx(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=hx(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function C_(t,e,r,n,i,o,a,s,c){return t=new NH(t,e,r,s,c),e===1?(e=1,o===!0&&(e|=8)):e=0,o=ys(3,null,null,e),t.current=o,o.stateNode=t,o.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},i_(o),t}function kH(t,e,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(sP)}catch(t){console.error(t)}}sP(),sO.exports=Ja;var GH=sO.exports,j3,b6=GH;j3=b6.createRoot,b6.hydrateRoot;var rt;(function(t){t.ERROR_EVENT="CORNERSTONE_ERROR",t.CACHE_SIZE_EXCEEDED="CACHE_SIZE_EXCEEDED",t.IMAGE_LOAD_ERROR="IMAGE_LOAD_ERROR",t.CAMERA_MODIFIED="CORNERSTONE_CAMERA_MODIFIED",t.CAMERA_RESET="CORNERSTONE_CAMERA_RESET",t.VOI_MODIFIED="CORNERSTONE_VOI_MODIFIED",t.PRESET_MODIFIED="CORNERSTONE_VIEWPORT_RENDERING_PRESET_MODIFIED",t.DISPLAY_AREA_MODIFIED="CORNERSTONE_DISPLAY_AREA_MODIFIED",t.ELEMENT_DISABLED="CORNERSTONE_ELEMENT_DISABLED",t.ELEMENT_ENABLED="CORNERSTONE_ELEMENT_ENABLED",t.IMAGE_RENDERED="CORNERSTONE_IMAGE_RENDERED",t.IMAGE_VOLUME_MODIFIED="CORNERSTONE_IMAGE_VOLUME_MODIFIED",t.IMAGE_VOLUME_LOADING_COMPLETED="CORNERSTONE_IMAGE_VOLUME_LOADING_COMPLETED",t.IMAGE_LOADED="CORNERSTONE_IMAGE_LOADED",t.IMAGE_RETRIEVAL_STAGE="CORNERSTONE_IMAGE_RETRIEVAL_STAGE",t.IMAGE_LOAD_FAILED="CORNERSTONE_IMAGE_LOAD_FAILED",t.VOLUME_VIEWPORT_NEW_VOLUME="CORNERSTONE_VOLUME_VIEWPORT_NEW_VOLUME",t.VOLUME_LOADED="CORNERSTONE_VOLUME_LOADED",t.VOLUME_LOADED_FAILED="CORNERSTONE_VOLUME_LOADED_FAILED",t.IMAGE_CACHE_IMAGE_ADDED="CORNERSTONE_IMAGE_CACHE_IMAGE_ADDED",t.IMAGE_CACHE_IMAGE_REMOVED="CORNERSTONE_IMAGE_CACHE_IMAGE_REMOVED",t.VOLUME_CACHE_VOLUME_ADDED="CORNERSTONE_VOLUME_CACHE_VOLUME_ADDED",t.VOLUME_CACHE_VOLUME_REMOVED="CORNERSTONE_VOLUME_CACHE_VOLUME_REMOVED",t.STACK_NEW_IMAGE="CORNERSTONE_STACK_NEW_IMAGE",t.VOLUME_NEW_IMAGE="CORNERSTONE_VOLUME_NEW_IMAGE",t.PRE_STACK_NEW_IMAGE="CORNERSTONE_PRE_STACK_NEW_IMAGE",t.IMAGE_SPACING_CALIBRATED="CORNERSTONE_IMAGE_SPACING_CALIBRATED",t.VIEWPORT_NEW_IMAGE_SET="CORNERSTONE_VIEWPORT_NEW_IMAGE_SET",t.STACK_VIEWPORT_SCROLL="CORNERSTONE_STACK_VIEWPORT_SCROLL",t.STACK_SCROLL_OUT_OF_BOUNDS="STACK_SCROLL_OUT_OF_BOUNDS",t.GEOMETRY_CACHE_GEOMETRY_ADDED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",t.GEOMETRY_CACHE_GEOMETRY_REMOVED="CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_REMOVED",t.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS="VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",t.VOLUME_VIEWPORT_SCROLL="VOLUME_VIEWPORT_SCROLL",t.CLIPPING_PLANES_UPDATED="CORNERSTONE_CLIPPING_PLANES_UPDATED",t.WEB_WORKER_PROGRESS="CORNERSTONE_WEB_WORKER_PROGRESS",t.COLORMAP_MODIFIED="CORNERSTONE_COLORMAP_MODIFIED",t.DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED="DYNAMIC_VOLUME_DIMENSION_GROUP_CHANGED",t.DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED="DYNAMIC_VOLUME_TIME_POINT_INDEX_CHANGED",t.DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED="DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED",t.DYNAMIC_VOLUME_TIME_POINT_LOADED="DYNAMIC_VOLUME_TIME_POINT_LOADED",t.GEOMETRY_LOADED="GEOMETRY_LOADED",t.GEOMETRY_LOAD_PROGRESS="GEOMETRY_LOAD_PROGRESS",t.GEOMETRY_LOADED_FAILED="GEOMETRY_LOADED_FAILED",t.ACTORS_CHANGED="CORNERSTONE_ACTORS_CHANGED"})(rt||(rt={}));var pn;(function(t){t.Interaction="interaction",t.Thumbnail="thumbnail",t.Prefetch="prefetch",t.Compute="compute"})(pn||(pn={}));var vr;(function(t){t.STACK="stack",t.ORTHOGRAPHIC="orthographic",t.PERSPECTIVE="perspective",t.VOLUME_3D="volume3d",t.VIDEO="video",t.WHOLE_SLIDE="wholeSlide"})(vr||(vr={}));var Vl;(function(t){t[t.NEAREST=0]="NEAREST",t[t.LINEAR=1]="LINEAR",t[t.FAST_LINEAR=2]="FAST_LINEAR"})(Vl||(Vl={}));const d2={COMPOSITE_BLEND:0,MAXIMUM_INTENSITY_BLEND:1,MINIMUM_INTENSITY_BLEND:2,AVERAGE_INTENSITY_BLEND:3,ADDITIVE_INTENSITY_BLEND:4,RADON_TRANSFORM_BLEND:5,LABELMAP_EDGE_PROJECTION_BLEND:6},WH={OFF:0,NORMALIZED:1,RAW:2};var cP={BlendMode:d2,FilterMode:WH};const{BlendMode:wg}=cP;var Zc;(function(t){t[t.COMPOSITE=wg.COMPOSITE_BLEND]="COMPOSITE",t[t.MAXIMUM_INTENSITY_BLEND=wg.MAXIMUM_INTENSITY_BLEND]="MAXIMUM_INTENSITY_BLEND",t[t.MINIMUM_INTENSITY_BLEND=wg.MINIMUM_INTENSITY_BLEND]="MINIMUM_INTENSITY_BLEND",t[t.AVERAGE_INTENSITY_BLEND=wg.AVERAGE_INTENSITY_BLEND]="AVERAGE_INTENSITY_BLEND",t[t.LABELMAP_EDGE_PROJECTION_BLEND=wg.LABELMAP_EDGE_PROJECTION_BLEND]="LABELMAP_EDGE_PROJECTION_BLEND"})(Zc||(Zc={}));var Cd;(function(t){t.AXIAL="axial",t.CORONAL="coronal",t.SAGITTAL="sagittal",t.ACQUISITION="acquisition"})(Cd||(Cd={}));var Qc;(function(t){t.CONTOUR="CONTOUR",t.SURFACE="SURFACE",t.MESH="MESH"})(Qc||(Qc={}));var H3;(function(t){t.CLOSED_PLANAR="CLOSED_PLANAR",t.OPEN_PLANAR="OPEN_PLANAR"})(H3||(H3={}));const zH=H3;var za;(function(t){t.PLY="PLY",t.STL="STL",t.OBJ="OBJ",t.VTP="VTP"})(za||(za={}));var wo;(function(t){t.LINEAR="LINEAR",t.SAMPLED_SIGMOID="SIGMOID",t.LINEAR_EXACT="LINEAR_EXACT"})(wo||(wo={}));var K3;(function(t){t.SUM="SUM",t.AVERAGE="AVERAGE",t.SUBTRACT="SUBTRACT"})(K3||(K3={}));const $H=K3;var Qs;(function(t){t.NOT_APPLICABLE="",t.ERMF="ERMF",t.USER="User",t.PROJECTION="Proj",t.REGION="Region",t.ERROR="Error",t.UNCALIBRATED="Uncalibrated",t.CALIBRATED="Calibrated",t.UNKNOWN="Unknown"})(Qs||(Qs={}));var Lo;(function(t){t.NO_DATA="noData",t.LOADING="loading",t.PRE_RENDER="preRender",t.RESIZE="resize",t.RENDERED="rendered"})(Lo||(Lo={}));var ya;(function(t){t[t.FAR_REPLICATE=1]="FAR_REPLICATE",t[t.ADJACENT_REPLICATE=3]="ADJACENT_REPLICATE",t[t.SUBRESOLUTION=6]="SUBRESOLUTION",t[t.LOSSY=7]="LOSSY",t[t.FULL_RESOLUTION=8]="FULL_RESOLUTION"})(ya||(ya={}));var i1;(function(t){t.FRAME="f",t.SECOND="s"})(i1||(i1={}));const jH=Object.freeze(Object.defineProperty({__proto__:null,get SpeedUnit(){return i1}},Symbol.toStringTag,{value:"Module"}));var Qo;(function(t){t.CALIBRATION="calibrationModule",t.CINE="cineModule",t.GENERAL_IMAGE="generalImageModule",t.GENERAL_SERIES="generalSeriesModule",t.GENERAL_STUDY="generalStudyModule",t.IMAGE_PIXEL="imagePixelModule",t.IMAGE_PLANE="imagePlaneModule",t.IMAGE_URL="imageUrlModule",t.MODALITY_LUT="modalityLutModule",t.MULTIFRAME="multiframeModule",t.NM_MULTIFRAME_GEOMETRY="nmMultiframeGeometryModule",t.OVERLAY_PLANE="overlayPlaneModule",t.PATIENT="patientModule",t.PATIENT_STUDY="patientStudyModule",t.PET_IMAGE="petImageModule",t.PET_ISOTOPE="petIsotopeModule",t.PET_SERIES="petSeriesModule",t.SOP_COMMON="sopCommonModule",t.ULTRASOUND_ENHANCED_REGION="ultrasoundEnhancedRegionModule",t.VOI_LUT="voiLutModule",t.WADO_WEB_CLIENT="wadoWebClient"})(Qo||(Qo={}));var H0;(function(t){t.SUM="SUM",t.SUBTRACT="SUBTRACT",t.AVERAGE="AVERAGE"})(H0||(H0={}));var fy;(function(t){t.RLE="RLE",t.Volume="Volume"})(fy||(fy={}));const Qa=Object.freeze(Object.defineProperty({__proto__:null,BlendModes:Zc,CalibrationTypes:Qs,ContourType:zH,DynamicOperatorType:$H,Events:rt,get GenerateImageType(){return H0},GeometryType:Qc,ImageQualityStatus:ya,InterpolationType:Vl,MeshType:za,MetadataModules:Qo,OrientationAxis:Cd,RequestType:pn,VOILUTFunctionType:wo,VideoEnums:jH,ViewportStatus:Lo,ViewportType:vr,VoxelManagerEnum:fy},Symbol.toStringTag,{value:"Module"})),q3={hotIron:{name:"Hot Iron",numOfColors:256,colors:[[0,0,0,255],[2,0,0,255],[4,0,0,255],[6,0,0,255],[8,0,0,255],[10,0,0,255],[12,0,0,255],[14,0,0,255],[16,0,0,255],[18,0,0,255],[20,0,0,255],[22,0,0,255],[24,0,0,255],[26,0,0,255],[28,0,0,255],[30,0,0,255],[32,0,0,255],[34,0,0,255],[36,0,0,255],[38,0,0,255],[40,0,0,255],[42,0,0,255],[44,0,0,255],[46,0,0,255],[48,0,0,255],[50,0,0,255],[52,0,0,255],[54,0,0,255],[56,0,0,255],[58,0,0,255],[60,0,0,255],[62,0,0,255],[64,0,0,255],[66,0,0,255],[68,0,0,255],[70,0,0,255],[72,0,0,255],[74,0,0,255],[76,0,0,255],[78,0,0,255],[80,0,0,255],[82,0,0,255],[84,0,0,255],[86,0,0,255],[88,0,0,255],[90,0,0,255],[92,0,0,255],[94,0,0,255],[96,0,0,255],[98,0,0,255],[100,0,0,255],[102,0,0,255],[104,0,0,255],[106,0,0,255],[108,0,0,255],[110,0,0,255],[112,0,0,255],[114,0,0,255],[116,0,0,255],[118,0,0,255],[120,0,0,255],[122,0,0,255],[124,0,0,255],[126,0,0,255],[128,0,0,255],[130,0,0,255],[132,0,0,255],[134,0,0,255],[136,0,0,255],[138,0,0,255],[140,0,0,255],[142,0,0,255],[144,0,0,255],[146,0,0,255],[148,0,0,255],[150,0,0,255],[152,0,0,255],[154,0,0,255],[156,0,0,255],[158,0,0,255],[160,0,0,255],[162,0,0,255],[164,0,0,255],[166,0,0,255],[168,0,0,255],[170,0,0,255],[172,0,0,255],[174,0,0,255],[176,0,0,255],[178,0,0,255],[180,0,0,255],[182,0,0,255],[184,0,0,255],[186,0,0,255],[188,0,0,255],[190,0,0,255],[192,0,0,255],[194,0,0,255],[196,0,0,255],[198,0,0,255],[200,0,0,255],[202,0,0,255],[204,0,0,255],[206,0,0,255],[208,0,0,255],[210,0,0,255],[212,0,0,255],[214,0,0,255],[216,0,0,255],[218,0,0,255],[220,0,0,255],[222,0,0,255],[224,0,0,255],[226,0,0,255],[228,0,0,255],[230,0,0,255],[232,0,0,255],[234,0,0,255],[236,0,0,255],[238,0,0,255],[240,0,0,255],[242,0,0,255],[244,0,0,255],[246,0,0,255],[248,0,0,255],[250,0,0,255],[252,0,0,255],[254,0,0,255],[255,0,0,255],[255,2,0,255],[255,4,0,255],[255,6,0,255],[255,8,0,255],[255,10,0,255],[255,12,0,255],[255,14,0,255],[255,16,0,255],[255,18,0,255],[255,20,0,255],[255,22,0,255],[255,24,0,255],[255,26,0,255],[255,28,0,255],[255,30,0,255],[255,32,0,255],[255,34,0,255],[255,36,0,255],[255,38,0,255],[255,40,0,255],[255,42,0,255],[255,44,0,255],[255,46,0,255],[255,48,0,255],[255,50,0,255],[255,52,0,255],[255,54,0,255],[255,56,0,255],[255,58,0,255],[255,60,0,255],[255,62,0,255],[255,64,0,255],[255,66,0,255],[255,68,0,255],[255,70,0,255],[255,72,0,255],[255,74,0,255],[255,76,0,255],[255,78,0,255],[255,80,0,255],[255,82,0,255],[255,84,0,255],[255,86,0,255],[255,88,0,255],[255,90,0,255],[255,92,0,255],[255,94,0,255],[255,96,0,255],[255,98,0,255],[255,100,0,255],[255,102,0,255],[255,104,0,255],[255,106,0,255],[255,108,0,255],[255,110,0,255],[255,112,0,255],[255,114,0,255],[255,116,0,255],[255,118,0,255],[255,120,0,255],[255,122,0,255],[255,124,0,255],[255,126,0,255],[255,128,4,255],[255,130,8,255],[255,132,12,255],[255,134,16,255],[255,136,20,255],[255,138,24,255],[255,140,28,255],[255,142,32,255],[255,144,36,255],[255,146,40,255],[255,148,44,255],[255,150,48,255],[255,152,52,255],[255,154,56,255],[255,156,60,255],[255,158,64,255],[255,160,68,255],[255,162,72,255],[255,164,76,255],[255,166,80,255],[255,168,84,255],[255,170,88,255],[255,172,92,255],[255,174,96,255],[255,176,100,255],[255,178,104,255],[255,180,108,255],[255,182,112,255],[255,184,116,255],[255,186,120,255],[255,188,124,255],[255,190,128,255],[255,192,132,255],[255,194,136,255],[255,196,140,255],[255,198,144,255],[255,200,148,255],[255,202,152,255],[255,204,156,255],[255,206,160,255],[255,208,164,255],[255,210,168,255],[255,212,172,255],[255,214,176,255],[255,216,180,255],[255,218,184,255],[255,220,188,255],[255,222,192,255],[255,224,196,255],[255,226,200,255],[255,228,204,255],[255,230,208,255],[255,232,212,255],[255,234,216,255],[255,236,220,255],[255,238,224,255],[255,240,228,255],[255,242,232,255],[255,244,236,255],[255,246,240,255],[255,248,244,255],[255,250,248,255],[255,252,252,255],[255,255,255,255]]},pet:{name:"PET",numColors:256,colors:[[0,0,0,255],[0,2,1,255],[0,4,3,255],[0,6,5,255],[0,8,7,255],[0,10,9,255],[0,12,11,255],[0,14,13,255],[0,16,15,255],[0,18,17,255],[0,20,19,255],[0,22,21,255],[0,24,23,255],[0,26,25,255],[0,28,27,255],[0,30,29,255],[0,32,31,255],[0,34,33,255],[0,36,35,255],[0,38,37,255],[0,40,39,255],[0,42,41,255],[0,44,43,255],[0,46,45,255],[0,48,47,255],[0,50,49,255],[0,52,51,255],[0,54,53,255],[0,56,55,255],[0,58,57,255],[0,60,59,255],[0,62,61,255],[0,65,63,255],[0,67,65,255],[0,69,67,255],[0,71,69,255],[0,73,71,255],[0,75,73,255],[0,77,75,255],[0,79,77,255],[0,81,79,255],[0,83,81,255],[0,85,83,255],[0,87,85,255],[0,89,87,255],[0,91,89,255],[0,93,91,255],[0,95,93,255],[0,97,95,255],[0,99,97,255],[0,101,99,255],[0,103,101,255],[0,105,103,255],[0,107,105,255],[0,109,107,255],[0,111,109,255],[0,113,111,255],[0,115,113,255],[0,117,115,255],[0,119,117,255],[0,121,119,255],[0,123,121,255],[0,125,123,255],[0,128,125,255],[1,126,127,255],[3,124,129,255],[5,122,131,255],[7,120,133,255],[9,118,135,255],[11,116,137,255],[13,114,139,255],[15,112,141,255],[17,110,143,255],[19,108,145,255],[21,106,147,255],[23,104,149,255],[25,102,151,255],[27,100,153,255],[29,98,155,255],[31,96,157,255],[33,94,159,255],[35,92,161,255],[37,90,163,255],[39,88,165,255],[41,86,167,255],[43,84,169,255],[45,82,171,255],[47,80,173,255],[49,78,175,255],[51,76,177,255],[53,74,179,255],[55,72,181,255],[57,70,183,255],[59,68,185,255],[61,66,187,255],[63,64,189,255],[65,63,191,255],[67,61,193,255],[69,59,195,255],[71,57,197,255],[73,55,199,255],[75,53,201,255],[77,51,203,255],[79,49,205,255],[81,47,207,255],[83,45,209,255],[85,43,211,255],[86,41,213,255],[88,39,215,255],[90,37,217,255],[92,35,219,255],[94,33,221,255],[96,31,223,255],[98,29,225,255],[100,27,227,255],[102,25,229,255],[104,23,231,255],[106,21,233,255],[108,19,235,255],[110,17,237,255],[112,15,239,255],[114,13,241,255],[116,11,243,255],[118,9,245,255],[120,7,247,255],[122,5,249,255],[124,3,251,255],[126,1,253,255],[128,0,255,255],[130,2,252,255],[132,4,248,255],[134,6,244,255],[136,8,240,255],[138,10,236,255],[140,12,232,255],[142,14,228,255],[144,16,224,255],[146,18,220,255],[148,20,216,255],[150,22,212,255],[152,24,208,255],[154,26,204,255],[156,28,200,255],[158,30,196,255],[160,32,192,255],[162,34,188,255],[164,36,184,255],[166,38,180,255],[168,40,176,255],[170,42,172,255],[171,44,168,255],[173,46,164,255],[175,48,160,255],[177,50,156,255],[179,52,152,255],[181,54,148,255],[183,56,144,255],[185,58,140,255],[187,60,136,255],[189,62,132,255],[191,64,128,255],[193,66,124,255],[195,68,120,255],[197,70,116,255],[199,72,112,255],[201,74,108,255],[203,76,104,255],[205,78,100,255],[207,80,96,255],[209,82,92,255],[211,84,88,255],[213,86,84,255],[215,88,80,255],[217,90,76,255],[219,92,72,255],[221,94,68,255],[223,96,64,255],[225,98,60,255],[227,100,56,255],[229,102,52,255],[231,104,48,255],[233,106,44,255],[235,108,40,255],[237,110,36,255],[239,112,32,255],[241,114,28,255],[243,116,24,255],[245,118,20,255],[247,120,16,255],[249,122,12,255],[251,124,8,255],[253,126,4,255],[255,128,0,255],[255,130,4,255],[255,132,8,255],[255,134,12,255],[255,136,16,255],[255,138,20,255],[255,140,24,255],[255,142,28,255],[255,144,32,255],[255,146,36,255],[255,148,40,255],[255,150,44,255],[255,152,48,255],[255,154,52,255],[255,156,56,255],[255,158,60,255],[255,160,64,255],[255,162,68,255],[255,164,72,255],[255,166,76,255],[255,168,80,255],[255,170,85,255],[255,172,89,255],[255,174,93,255],[255,176,97,255],[255,178,101,255],[255,180,105,255],[255,182,109,255],[255,184,113,255],[255,186,117,255],[255,188,121,255],[255,190,125,255],[255,192,129,255],[255,194,133,255],[255,196,137,255],[255,198,141,255],[255,200,145,255],[255,202,149,255],[255,204,153,255],[255,206,157,255],[255,208,161,255],[255,210,165,255],[255,212,170,255],[255,214,174,255],[255,216,178,255],[255,218,182,255],[255,220,186,255],[255,222,190,255],[255,224,194,255],[255,226,198,255],[255,228,202,255],[255,230,206,255],[255,232,210,255],[255,234,214,255],[255,236,218,255],[255,238,222,255],[255,240,226,255],[255,242,230,255],[255,244,234,255],[255,246,238,255],[255,248,242,255],[255,250,246,255],[255,252,250,255],[255,255,255,255]]},hotMetalBlue:{name:"Hot Metal Blue",numColors:256,colors:[[0,0,0,255],[0,0,2,255],[0,0,4,255],[0,0,6,255],[0,0,8,255],[0,0,10,255],[0,0,12,255],[0,0,14,255],[0,0,16,255],[0,0,17,255],[0,0,19,255],[0,0,21,255],[0,0,23,255],[0,0,25,255],[0,0,27,255],[0,0,29,255],[0,0,31,255],[0,0,33,255],[0,0,35,255],[0,0,37,255],[0,0,39,255],[0,0,41,255],[0,0,43,255],[0,0,45,255],[0,0,47,255],[0,0,49,255],[0,0,51,255],[0,0,53,255],[0,0,55,255],[0,0,57,255],[0,0,59,255],[0,0,61,255],[0,0,63,255],[0,0,65,255],[0,0,67,255],[0,0,69,255],[0,0,71,255],[0,0,73,255],[0,0,75,255],[0,0,77,255],[0,0,79,255],[0,0,81,255],[0,0,83,255],[0,0,84,255],[0,0,86,255],[0,0,88,255],[0,0,90,255],[0,0,92,255],[0,0,94,255],[0,0,96,255],[0,0,98,255],[0,0,100,255],[0,0,102,255],[0,0,104,255],[0,0,106,255],[0,0,108,255],[0,0,110,255],[0,0,112,255],[0,0,114,255],[0,0,116,255],[0,0,117,255],[0,0,119,255],[0,0,121,255],[0,0,123,255],[0,0,125,255],[0,0,127,255],[0,0,129,255],[0,0,131,255],[0,0,133,255],[0,0,135,255],[0,0,137,255],[0,0,139,255],[0,0,141,255],[0,0,143,255],[0,0,145,255],[0,0,147,255],[0,0,149,255],[0,0,151,255],[0,0,153,255],[0,0,155,255],[0,0,157,255],[0,0,159,255],[0,0,161,255],[0,0,163,255],[0,0,165,255],[0,0,167,255],[3,0,169,255],[6,0,171,255],[9,0,173,255],[12,0,175,255],[15,0,177,255],[18,0,179,255],[21,0,181,255],[24,0,183,255],[26,0,184,255],[29,0,186,255],[32,0,188,255],[35,0,190,255],[38,0,192,255],[41,0,194,255],[44,0,196,255],[47,0,198,255],[50,0,200,255],[52,0,197,255],[55,0,194,255],[57,0,191,255],[59,0,188,255],[62,0,185,255],[64,0,182,255],[66,0,179,255],[69,0,176,255],[71,0,174,255],[74,0,171,255],[76,0,168,255],[78,0,165,255],[81,0,162,255],[83,0,159,255],[85,0,156,255],[88,0,153,255],[90,0,150,255],[93,2,144,255],[96,4,138,255],[99,6,132,255],[102,8,126,255],[105,9,121,255],[108,11,115,255],[111,13,109,255],[114,15,103,255],[116,17,97,255],[119,19,91,255],[122,21,85,255],[125,23,79,255],[128,24,74,255],[131,26,68,255],[134,28,62,255],[137,30,56,255],[140,32,50,255],[143,34,47,255],[146,36,44,255],[149,38,41,255],[152,40,38,255],[155,41,35,255],[158,43,32,255],[161,45,29,255],[164,47,26,255],[166,49,24,255],[169,51,21,255],[172,53,18,255],[175,55,15,255],[178,56,12,255],[181,58,9,255],[184,60,6,255],[187,62,3,255],[190,64,0,255],[194,66,0,255],[198,68,0,255],[201,70,0,255],[205,72,0,255],[209,73,0,255],[213,75,0,255],[217,77,0,255],[221,79,0,255],[224,81,0,255],[228,83,0,255],[232,85,0,255],[236,87,0,255],[240,88,0,255],[244,90,0,255],[247,92,0,255],[251,94,0,255],[255,96,0,255],[255,98,3,255],[255,100,6,255],[255,102,9,255],[255,104,12,255],[255,105,15,255],[255,107,18,255],[255,109,21,255],[255,111,24,255],[255,113,26,255],[255,115,29,255],[255,117,32,255],[255,119,35,255],[255,120,38,255],[255,122,41,255],[255,124,44,255],[255,126,47,255],[255,128,50,255],[255,130,53,255],[255,132,56,255],[255,134,59,255],[255,136,62,255],[255,137,65,255],[255,139,68,255],[255,141,71,255],[255,143,74,255],[255,145,76,255],[255,147,79,255],[255,149,82,255],[255,151,85,255],[255,152,88,255],[255,154,91,255],[255,156,94,255],[255,158,97,255],[255,160,100,255],[255,162,103,255],[255,164,106,255],[255,166,109,255],[255,168,112,255],[255,169,115,255],[255,171,118,255],[255,173,121,255],[255,175,124,255],[255,177,126,255],[255,179,129,255],[255,181,132,255],[255,183,135,255],[255,184,138,255],[255,186,141,255],[255,188,144,255],[255,190,147,255],[255,192,150,255],[255,194,153,255],[255,196,156,255],[255,198,159,255],[255,200,162,255],[255,201,165,255],[255,203,168,255],[255,205,171,255],[255,207,174,255],[255,209,176,255],[255,211,179,255],[255,213,182,255],[255,215,185,255],[255,216,188,255],[255,218,191,255],[255,220,194,255],[255,222,197,255],[255,224,200,255],[255,226,203,255],[255,228,206,255],[255,229,210,255],[255,231,213,255],[255,233,216,255],[255,235,219,255],[255,237,223,255],[255,239,226,255],[255,240,229,255],[255,242,232,255],[255,244,236,255],[255,246,239,255],[255,248,242,255],[255,250,245,255],[255,251,249,255],[255,253,252,255],[255,255,255,255]]},pet20Step:{name:"PET 20 Step",numColors:256,colors:[[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[0,0,0,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[96,0,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,80,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[48,48,112,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[80,80,128,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[96,96,176,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[112,112,192,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[128,128,224,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,96,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[48,144,48,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[80,192,80,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[64,224,64,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[224,224,80,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,208,96,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,176,64,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[208,144,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[192,96,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[176,48,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,0,0,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255],[255,255,255,255]]},gray:{name:"Gray",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,1,1]]}},jet:{name:"Jet",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.35,0,0],[.66,1,1],[.89,1,1],[1,.5,.5]],green:[[0,0,0],[.125,0,0],[.375,1,1],[.64,1,1],[.91,0,0],[1,0,0]],blue:[[0,.5,.5],[.11,1,1],[.34,1,1],[.65,0,0],[1,0,0]]}},hsv:{name:"HSV",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[.15873,1,1],[.174603,.96875,.96875],[.333333,.03125,.03125],[.349206,0,0],[.666667,0,0],[.68254,.03125,.03125],[.84127,.96875,.96875],[.857143,1,1],[1,1,1]],green:[[0,0,0],[.15873,.9375,.9375],[.174603,1,1],[.507937,1,1],[.666667,.0625,.0625],[.68254,0,0],[1,0,0]],blue:[[0,0,0],[.333333,0,0],[.349206,.0625,.0625],[.507937,1,1],[.84127,1,1],[.857143,.9375,.9375],[1,.09375,.09375]]}},hot:{name:"Hot",numColors:256,gamma:1,segmentedData:{red:[[0,.0416,.0416],[.365079,1,1],[1,1,1]],green:[[0,0,0],[.365079,0,0],[.746032,1,1],[1,1,1]],blue:[[0,0,0],[.746032,0,0],[1,1,1]]}},cool:{name:"Cool",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,1,1],[1,0,0]],blue:[[0,1,1],[1,1,1]]}},spring:{name:"Spring",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,0,0]]}},summer:{name:"Summer",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,1,1]],green:[[0,.5,.5],[1,1,1]],blue:[[0,.4,.4],[1,.4,.4]]}},autumn:{name:"Autumn",numColors:256,gamma:1,segmentedData:{red:[[0,1,1],[1,1,1]],green:[[0,0,0],[1,1,1]],blue:[[0,0,0],[1,0,0]]}},winter:{name:"Winter",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[1,0,0]],green:[[0,0,0],[1,1,1]],blue:[[0,1,1],[1,.5,.5]]}},bone:{name:"Bone",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.746032,.652778,.652778],[1,1,1]],green:[[0,0,0],[.365079,.319444,.319444],[.746032,.777778,.777778],[1,1,1]],blue:[[0,0,0],[.365079,.444444,.444444],[1,1,1]]}},copper:{name:"Copper",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.809524,1,1],[1,1,1]],green:[[0,0,0],[1,.7812,.7812]],blue:[[0,0,0],[1,.4975,.4975]]}},spectral:{name:"Spectral",numColors:256,gamma:1,segmentedData:{red:[[0,0,0],[.05,.4667,.4667],[.1,.5333,.5333],[.15,0,0],[.2,0,0],[.25,0,0],[.3,0,0],[.35,0,0],[.4,0,0],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,.7333,.7333],[.7,.9333,.9333],[.75,1,1],[.8,1,1],[.85,1,1],[.9,.8667,.8667],[.95,.8,.8],[1,.8,.8]],green:[[0,0,0],[.05,0,0],[.1,0,0],[.15,0,0],[.2,0,0],[.25,.4667,.4667],[.3,.6,.6],[.35,.6667,.6667],[.4,.6667,.6667],[.45,.6,.6],[.5,.7333,.7333],[.55,.8667,.8667],[.6,1,1],[.65,1,1],[.7,.9333,.9333],[.75,.8,.8],[.8,.6,.6],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]],blue:[[0,0,0],[.05,.5333,.5333],[.1,.6,.6],[.15,.6667,.6667],[.2,.8667,.8667],[.25,.8667,.8667],[.3,.8667,.8667],[.35,.6667,.6667],[.4,.5333,.5333],[.45,0,0],[.5,0,0],[.55,0,0],[.6,0,0],[.65,0,0],[.7,0,0],[.75,0,0],[.8,0,0],[.85,0,0],[.9,0,0],[.95,0,0],[1,.8,.8]]}},coolwarm:{name:"CoolWarm",numColors:256,gamma:1,segmentedData:{red:[[0,.2298057,.2298057],[.03125,.26623388,.26623388],[.0625,.30386891,.30386891],[.09375,.342804478,.342804478],[.125,.38301334,.38301334],[.15625,.424369608,.424369608],[.1875,.46666708,.46666708],[.21875,.509635204,.509635204],[.25,.552953156,.552953156],[.28125,.596262162,.596262162],[.3125,.639176211,.639176211],[.34375,.681291281,.681291281],[.375,.722193294,.722193294],[.40625,.761464949,.761464949],[.4375,.798691636,.798691636],[.46875,.833466556,.833466556],[.5,.865395197,.865395197],[.53125,.897787179,.897787179],[.5625,.924127593,.924127593],[.59375,.944468518,.944468518],[.625,.958852946,.958852946],[.65625,.96732803,.96732803],[.6875,.969954137,.969954137],[.71875,.966811177,.966811177],[.75,.958003065,.958003065],[.78125,.943660866,.943660866],[.8125,.923944917,.923944917],[.84375,.89904617,.89904617],[.875,.869186849,.869186849],[.90625,.834620542,.834620542],[.9375,.795631745,.795631745],[.96875,.752534934,.752534934],[1,.705673158,.705673158]],green:[[0,.298717966,.298717966],[.03125,.353094838,.353094838],[.0625,.406535296,.406535296],[.09375,.458757618,.458757618],[.125,.50941904,.50941904],[.15625,.558148092,.558148092],[.1875,.604562568,.604562568],[.21875,.648280772,.648280772],[.25,.688929332,.688929332],[.28125,.726149107,.726149107],[.3125,.759599947,.759599947],[.34375,.788964712,.788964712],[.375,.813952739,.813952739],[.40625,.834302879,.834302879],[.4375,.849786142,.849786142],[.46875,.860207984,.860207984],[.5,.86541021,.86541021],[.53125,.848937047,.848937047],[.5625,.827384882,.827384882],[.59375,.800927443,.800927443],[.625,.769767752,.769767752],[.65625,.734132809,.734132809],[.6875,.694266682,.694266682],[.71875,.650421156,.650421156],[.75,.602842431,.602842431],[.78125,.551750968,.551750968],[.8125,.49730856,.49730856],[.84375,.439559467,.439559467],[.875,.378313092,.378313092],[.90625,.312874446,.312874446],[.9375,.24128379,.24128379],[.96875,.157246067,.157246067],[1,.01555616,.01555616]],blue:[[0,.753683153,.753683153],[.03125,.801466763,.801466763],[.0625,.84495867,.84495867],[.09375,.883725899,.883725899],[.125,.917387822,.917387822],[.15625,.945619588,.945619588],[.1875,.968154911,.968154911],[.21875,.98478814,.98478814],[.25,.995375608,.995375608],[.28125,.999836203,.999836203],[.3125,.998151185,.998151185],[.34375,.990363227,.990363227],[.375,.976574709,.976574709],[.40625,.956945269,.956945269],[.4375,.931688648,.931688648],[.46875,.901068838,.901068838],[.5,.865395561,.865395561],[.53125,.820880546,.820880546],[.5625,.774508472,.774508472],[.59375,.726736146,.726736146],[.625,.678007945,.678007945],[.65625,.628751763,.628751763],[.6875,.579375448,.579375448],[.71875,.530263762,.530263762],[.75,.481775914,.481775914],[.78125,.434243684,.434243684],[.8125,.387970225,.387970225],[.84375,.343229596,.343229596],[.875,.300267182,.300267182],[.90625,.259301199,.259301199],[.9375,.220525627,.220525627],[.96875,.184115123,.184115123],[1,.150232812,.150232812]]}},blues:{name:"Blues",numColors:256,gamma:1,segmentedData:{red:[[0,.9686274528503418,.9686274528503418],[.125,.8705882430076599,.8705882430076599],[.25,.7764706015586853,.7764706015586853],[.375,.6196078658103943,.6196078658103943],[.5,.41960784792900085,.41960784792900085],[.625,.25882354378700256,.25882354378700256],[.75,.12941177189350128,.12941177189350128],[.875,.0313725508749485,.0313725508749485],[1,.0313725508749485,.0313725508749485]],green:[[0,.9843137264251709,.9843137264251709],[.125,.9215686321258545,.9215686321258545],[.25,.8588235378265381,.8588235378265381],[.375,.7921568751335144,.7921568751335144],[.5,.6823529601097107,.6823529601097107],[.625,.572549045085907,.572549045085907],[.75,.4431372582912445,.4431372582912445],[.875,.3176470696926117,.3176470696926117],[1,.1882352977991104,.1882352977991104]],blue:[[0,1,1],[.125,.9686274528503418,.9686274528503418],[.25,.9372549057006836,.9372549057006836],[.375,.8823529481887817,.8823529481887817],[.5,.8392156958580017,.8392156958580017],[.625,.7764706015586853,.7764706015586853],[.75,.7098039388656616,.7098039388656616],[.875,.6117647290229797,.6117647290229797],[1,.41960784792900085,.41960784792900085]]}}},Qr={MINIMUM_SLAB_THICKNESS:.05,MAXIMUM_RAY_DISTANCE:1e6};Object.freeze(Qr);const qa=.001;function lP(t){const e=Object.getOwnPropertyNames(t);for(const r of e){const n=t[r];n&&typeof n=="object"&&lP(n)}return Object.freeze(t)}const HH={axial:{viewPlaneNormal:[0,0,-1],viewUp:[0,-1,0],viewRight:[1,0,0]},sagittal:{viewPlaneNormal:[1,0,0],viewUp:[0,0,1],viewRight:[0,1,0]},coronal:{viewPlaneNormal:[0,-1,0],viewUp:[0,0,1],viewRight:[1,0,0]}},Au=lP(HH),uP=[{name:"CT-AAA",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 143.556 0 166.222 0.686275 214.389 0.696078 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 143.556 0.615686 0.356863 0.184314 166.222 0.882353 0.603922 0.290196 214.389 1 1 1 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-AAA2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"16 -3024 0 129.542 0 145.244 0.166667 157.02 0.5 169.918 0.627451 395.575 0.8125 1578.73 0.8125 3071 0.8125",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"32 -3024 0 0 0 129.542 0.54902 0.25098 0.14902 145.244 0.6 0.627451 0.843137 157.02 0.890196 0.47451 0.6 169.918 0.992157 0.870588 0.392157 395.575 1 0.886275 0.658824 1578.73 1 0.829256 0.957922 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -16.4458 0 641.385 0.715686 3071 0.705882",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -16.4458 0.729412 0.254902 0.301961 641.385 0.905882 0.815686 0.552941 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Bones",gradientOpacity:"4 0 1 985.12 1",specularPower:"1",scalarOpacity:"8 -1000 0 152.19 0 278.93 0.190476 952 0.2",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -1000 0.3 0.3 1 -488 0.3 1 0.3 463.28 1 0 0 659.15 1 0.912535 0.0374849 953 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-Cardiac",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 -77.6875 0 94.9518 0.285714 179.052 0.553571 260.439 0.848214 3071 0.875",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 -77.6875 0.54902 0.25098 0.14902 94.9518 0.882353 0.603922 0.290196 179.052 1 0.937033 0.954531 260.439 0.615686 0 0 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac2",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"12 -3024 0 42.8964 0 163.488 0.428571 277.642 0.776786 1587 0.754902 3071 0.754902",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"24 -3024 0 0 0 42.8964 0.54902 0.25098 0.14902 163.488 0.917647 0.639216 0.0588235 277.642 1 0.878431 0.623529 1587 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cardiac3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -3024 0 -86.9767 0 45.3791 0.169643 139.919 0.589286 347.907 0.607143 1224.16 0.607143 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -3024 0 0 0 -86.9767 0 0.25098 1 45.3791 1 0 0 139.919 1 0.894893 0.894893 347.907 1 1 0.25098 1224.16 1 1 1 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Contrast-Enhanced",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 67.0106 0 251.105 0.446429 439.291 0.625 3071 0.616071",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 67.0106 0.54902 0.25098 0.14902 251.105 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Chest-Vessels",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -3024 0 -1278.35 0 22.8277 0.428571 439.291 0.625 3071 0.616071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"20 -3024 0 0 0 -1278.35 0.54902 0.25098 0.14902 22.8277 0.882353 0.603922 0.290196 439.291 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 136.47 0 159.215 0.258929 318.43 0.571429 478.693 0.776786 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 136.47 0 0 0 159.215 0.159804 0.159804 0.159804 318.43 0.764706 0.764706 0.764706 478.693 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-2",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 142.677 0 145.016 0.116071 192.174 0.5625 217.24 0.776786 384.347 0.830357 3661 0.830357",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 142.677 0 0 0 145.016 0.615686 0 0.0156863 192.174 0.909804 0.454902 0 217.24 0.972549 0.807843 0.611765 384.347 0.909804 0.909804 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Coronary-Arteries-3",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"14 -2048 0 128.643 0 129.982 0.0982143 173.636 0.669643 255.884 0.857143 584.878 0.866071 3661 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"28 -2048 0 0 0 128.643 0 0 0 129.982 0.615686 0 0.0156863 173.636 0.909804 0.454902 0 255.884 0.886275 0.886275 0.886275 584.878 0.968627 0.968627 0.968627 3661 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Cropped-Volume-Bone",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -451 0 -450 1 1050 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -451 0 0 0 -450 0.0556356 0.0556356 0.0556356 1050 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Fat",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"14 -1000 0 -100 0 -99 0.15 -60 0.15 -59 0 101.2 0 952 0",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"36 -1000 0.3 0.3 1 -497.5 0.3 1 0.3 -99 0 0 1 -76.946 0 1 0 -65.481 0.835431 0.888889 0.0165387 83.89 1 0 0 463.28 1 0 0 659.15 1 0.912535 0.0374849 2952 1 0.300267 0.299886",diffuse:"1",interpolation:"1"},{name:"CT-Liver-Vasculature",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 149.113 0 157.884 0.482143 339.96 0.660714 388.526 0.830357 1197.95 0.839286 3661 0.848214",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 149.113 0 0 0 157.884 0.501961 0.25098 0 339.96 0.695386 0.59603 0.36886 388.526 0.854902 0.85098 0.827451 1197.95 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Lung",gradientOpacity:"6 0 1 985.12 1 988 1",specularPower:"1",scalarOpacity:"12 -1000 0 -600 0 -599 0.15 -400 0.15 -399 0 2952 0",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -1000 0.3 0.3 1 -600 0 0 1 -530 0.134704 0.781726 0.0724558 -460 0.929244 1 0.109473 -400 0.888889 0.254949 0.0240258 2952 1 0.3 0.3",diffuse:"1",interpolation:"1"},{name:"CT-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0 -637.62 0 700 1 3071 1",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 0 0 0 -637.62 1 1 1 700 1 1 1 3071 1 1 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Muscle",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"10 -3024 0 -155.407 0 217.641 0.676471 419.736 0.833333 3071 0.803922",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"20 -3024 0 0 0 -155.407 0.54902 0.25098 0.14902 217.641 0.882353 0.603922 0.290196 419.736 1 0.937033 0.954531 3071 0.827451 0.658824 1",diffuse:"0.9",interpolation:"1"},{name:"CT-Pulmonary-Arteries",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"14 -2048 0 -568.625 0 -364.081 0.0714286 -244.813 0.401786 18.2775 0.607143 447.798 0.830357 3592.73 0.839286",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"28 -2048 0 0 0 -568.625 0 0 0 -364.081 0.396078 0.301961 0.180392 -244.813 0.611765 0.352941 0.0705882 18.2775 0.843137 0.0156863 0.156863 447.798 0.752941 0.752941 0.752941 3592.73 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Soft-Tissue",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"10 -2048 0 -167.01 0 -160 1 240 1 3661 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"20 -2048 0 0 0 -167.01 0 0 0 -160 0.0556356 0.0556356 0.0556356 240 1 1 1 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"CT-Air",gradientOpacity:"4 0 1 255 1",specularPower:"10",scalarOpacity:"8 -3024 0.705882 -900.0 0.715686 -500.0 0 3071 0",specular:"0.2",shade:"1",ambient:"0.1",colorTransfer:"16 -3024 1 1 1 -900.0 0.2 1.0 1.0 -500.0 0.3 0.3 1.0 3071 0 0 0 ",diffuse:"0.9",interpolation:"1"},{name:"MR-Angio",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 -2048 0 151.354 0 158.279 0.4375 190.112 0.580357 200.873 0.732143 3661 0.741071",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 -2048 0 0 0 151.354 0 0 0 158.279 0.74902 0.376471 0 190.112 1 0.866667 0.733333 200.873 0.937255 0.937255 0.937255 3661 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-Default",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"12 0 0 20 0 40 0.15 120 0.3 220 0.375 1024 0.5",specular:"0",shade:"1",ambient:"0.2",colorTransfer:"24 0 0 0 0 20 0.168627 0 0 40 0.403922 0.145098 0.0784314 120 0.780392 0.607843 0.380392 220 0.847059 0.835294 0.788235 1024 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-MIP",gradientOpacity:"4 0 1 255 1",specularPower:"1",scalarOpacity:"8 0 0 98.3725 0 416.637 1 2800 1",specular:"0",shade:"0",ambient:"0.2",colorTransfer:"16 0 1 1 1 98.3725 1 1 1 416.637 1 1 1 2800 1 1 1",diffuse:"1",interpolation:"1"},{name:"MR-T2-Brain",gradientOpacity:"4 0 1 160.25 1",specularPower:"40",scalarOpacity:"10 0 0 36.05 0 218.302 0.171429 412.406 1 641 1",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"16 0 0 0 0 98.7223 0.956863 0.839216 0.192157 412.406 0 0.592157 0.807843 641 1 1 1",diffuse:"0.6",interpolation:"1"},{name:"DTI-FA-Brain",gradientOpacity:"4 0 1 0.9950 1",specularPower:"40",scalarOpacity:"16 0 0 0 0 0.3501 0.0158 0.49379 0.7619 0.6419 1 0.9920 1 0.9950 0 0.9950 0",specular:"0.5",shade:"1",ambient:"0.3",colorTransfer:"28 0 1 0 0 0 1 0 0 0.24974 0.4941 1 0 0.49949 0 0.9882 1 0.7492 0.51764 0 1 0.9950 1 0 0 0.9950 1 0 0",diffuse:"0.9",interpolation:"1"}],KH={slicer3D:[160/255,164/255,217/255]},wf=Object.freeze(Object.defineProperty({__proto__:null,BACKGROUND_COLORS:KH,CPU_COLORMAPS:q3,EPSILON:qa,MPR_CAMERA_VALUES:Au,RENDERING_DEFAULTS:Qr,VIEWPORT_PRESETS:uP},Symbol.toStringTag,{value:"Module"})),xg={},o1={get:t=>xg[t],set:t=>{const e=t.id;xg[e]=t},delete:t=>delete xg[t],getAll:()=>{const e=Object.keys(xg).map(r=>xg[r]);return e.sort((r,n)=>r.id[0]==="_"&&n.id[0]!=="_"?1:r.id[0]!=="_"&&n.id[0]==="_"?-1:0),e}};class qH{constructor(){this.listeners={},this.debouncedListeners={}}reset(){this.listeners={},this.debouncedListeners={}}addEventListenerOnce(e,r){const n=i=>{this.removeEventListener(e,n),r.call(this,i)};this.addEventListener(e,n)}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].indexOf(r)===-1&&this.listeners[e].push(r)}addEventListenerDebounced(e,r,n){this.debouncedListeners[e]=this.debouncedListeners[e]||{};const i=this.debouncedListeners[e];if(!i[r]){const o=a=>{i[r]&&clearTimeout(i[r].timeoutId),i[r].timeoutId=setTimeout(()=>{r.call(this,a)},n)};i[r]={original:r,handle:o,timeoutId:null},this.addEventListener(e,o)}}removeEventListenerDebounced(e,r){var n;if((n=this.debouncedListeners[e])!=null&&n[r]){const i=this.debouncedListeners[e][r];this.removeEventListener(e,i.handle),clearTimeout(i.timeoutId),delete this.debouncedListeners[e][r]}}removeEventListener(e,r){if(!this.listeners[e])return;const n=this.listeners[e],i=n.length;for(let o=0;o(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16))}function ut(t=et,e,r=null){if(!e)throw new Error("Event type was not defined");const n=new CustomEvent(e,{detail:r,cancelable:!0});return t==null?void 0:t.dispatchEvent(n)}var XH=function t(e,r){if(e===r)return!0;if(e&&r&&typeof e=="object"&&typeof r=="object"){if(e.constructor!==r.constructor)return!1;var n,i,o;if(Array.isArray(e)){if(n=e.length,n!=r.length)return!1;for(i=n;i--!==0;)if(!t(e[i],r[i]))return!1;return!0}if(e.constructor===RegExp)return e.source===r.source&&e.flags===r.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===r.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===r.toString();if(o=Object.keys(e),n=o.length,n!==Object.keys(r).length)return!1;for(i=n;i--!==0;)if(!Object.prototype.hasOwnProperty.call(r,o[i]))return!1;for(i=n;i--!==0;){var a=o[i];if(!t(e[a],r[a]))return!1}return!0}return e!==e&&r!==r};const E_=pl(XH);var D6=Object.prototype.toString,fP=function(e){var r=D6.call(e),n=r==="[object Arguments]";return n||(n=r!=="[object Array]"&&e!==null&&typeof e=="object"&&typeof e.length=="number"&&e.length>=0&&D6.call(e.callee)==="[object Function]"),n},Ax,I6;function YH(){if(I6)return Ax;I6=1;var t;if(!Object.keys){var e=Object.prototype.hasOwnProperty,r=Object.prototype.toString,n=fP,i=Object.prototype.propertyIsEnumerable,o=!i.call({toString:null},"toString"),a=i.call(function(){},"prototype"),s=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],c=function(d){var h=d.constructor;return h&&h.prototype===d},l={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},f=function(){if(typeof window>"u")return!1;for(var d in window)try{if(!l["$"+d]&&e.call(window,d)&&window[d]!==null&&typeof window[d]=="object")try{c(window[d])}catch{return!0}}catch{return!0}return!1}(),u=function(d){if(typeof window>"u"||!f)return c(d);try{return c(d)}catch{return!1}};t=function(h){var g=h!==null&&typeof h=="object",p=r.call(h)==="[object Function]",v=n(h),y=g&&r.call(h)==="[object String]",m=[];if(!g&&!p&&!v)throw new TypeError("Object.keys called on a non-object");var w=a&&p;if(y&&h.length>0&&!e.call(h,0))for(var x=0;x0)for(var C=0;C3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new Hd("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new Hd("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new Hd("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new Hd("`loose`, if provided, must be a boolean");var i=arguments.length>3?arguments[3]:null,o=arguments.length>4?arguments[4]:null,a=arguments.length>5?arguments[5]:null,s=arguments.length>6?arguments[6]:!1,c=!!R6&&R6(e,r);if(P6)P6(e,r,{configurable:a===null&&c?c.configurable:!a,enumerable:i===null&&c?c.enumerable:!i,value:n,writable:o===null&&c?c.writable:!o});else if(s||!i&&!o&&!a)e[r]=n;else throw new iK("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},X3=dP,hP=function(){return!!X3};hP.hasArrayLengthDefineBug=function(){if(!X3)return null;try{return X3([],"length",{value:1}).length!==1}catch{return!0}};var aK=hP,sK=QH,cK=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",lK=Object.prototype.toString,uK=Array.prototype.concat,L6=oK,fK=function(t){return typeof t=="function"&&lK.call(t)==="[object Function]"},gP=aK(),dK=function(t,e,r,n){if(e in t){if(n===!0){if(t[e]===r)return}else if(!fK(n)||!n())return}gP?L6(t,e,r,!0):L6(t,e,r)},pP=function(t,e){var r=arguments.length>2?arguments[2]:{},n=sK(e);cK&&(n=uK.call(n,Object.getOwnPropertySymbols(e)));for(var i=0;inull};function ic(t){if(t==null||t.isA)return t;if(!t.vtkClass)return ec.console&&ec.console.error&&ec.console.error("Invalid VTK object"),null;const e=CP[t.vtkClass];if(!e)return ec.console&&ec.console.error&&ec.console.error(`No vtk class found for Object of type ${t.vtkClass}`),null;const r={...t};Object.keys(r).forEach(i=>{r[i]&&typeof r[i]=="object"&&r[i].vtkClass&&(r[i]=ic(r[i]))});const n=e(r);return n&&n.modified&&n.modified(),n}function TK(t,e){CP[t]=e}ic.register=TK;class Nx extends Array{push(){for(let e=0;e{TP[t]=jf});ec.console=console.hasOwnProperty("log")?console:TP;const nf={debug:jf,error:ec.console.error||jf,info:ec.console.info||jf,log:ec.console.log||jf,warn:ec.console.warn||jf};function _P(t,e){nf[t]&&(nf[t]=e||jf)}function EP(){nf.log(...arguments)}function bP(){nf.info(...arguments)}function dy(){nf.debug(...arguments)}function Ln(){nf.error(...arguments)}function X5(){nf.warn(...arguments)}const A6={};function DP(t){A6[t]||(nf.error(t),A6[t]=!0)}const Uo=Object.create(null);Uo.Float32Array=Float32Array;Uo.Float64Array=Float64Array;Uo.Uint8Array=Uint8Array;Uo.Int8Array=Int8Array;Uo.Uint16Array=Uint16Array;Uo.Int16Array=Int16Array;Uo.Uint32Array=Uint32Array;Uo.Int32Array=Int32Array;Uo.Uint8ClampedArray=Uint8ClampedArray;try{Uo.BigInt64Array=BigInt64Array,Uo.BigUint64Array=BigUint64Array}catch{}function Fh(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n1?e-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:2,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1e3;const n=["TB","GB","MB","KB"];let i=Number(t),o="B";for(;i>r;)i/=r,o=n.pop();return`${i.toFixed(e)} ${o}`}function MP(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:" ";const r=[];let n=t;for(;n>1e3;)r.push(`000${n%1e3}`.slice(-3)),n=Math.floor(n/1e3);return n>0&&r.push(n),r.reverse(),r.join(e)}function PP(t){Object.keys(t).forEach(e=>{Array.isArray(t[e])&&(t[e]=[].concat(t[e]))})}function bK(t){return Object.values(Uo).some(e=>t instanceof e)}function DK(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(let r=0;rt[r]===e)}function RP(t){return t&&t.isA?t.getState():t}function b_(t){setTimeout(t,0)}function LP(t,e){const r=performance.now();t.finally(()=>{const n=performance.now()-r;e(n)})}function yr(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};PP(e);const r=[];if(Number.isInteger(e.mtime)||(e.mtime=++Y3),!("classHierarchy"in e))e.classHierarchy=new Nx("vtkObject");else if(!(e.classHierarchy instanceof Nx)){const o=new Nx;for(let a=0;a!!e.deleted,t.modified=o=>{if(e.deleted){Ln("instance deleted - cannot call any method");return}o&&oa&&a(t)))},t.onModified=o=>{if(e.deleted)return Ln("instance deleted - cannot call any method"),null;const a=r.length;return r.push(o),i(a)},t.getMTime=()=>e.mtime,t.isA=o=>{let a=e.classHierarchy.length;for(;a--;)if(e.classHierarchy[a]===o)return!0;return!1},t.getClassName=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.classHierarchy[e.classHierarchy.length-1-o]},t.set=function(){let o=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,c=!1;return Object.keys(o).forEach(l=>{const f=s?null:t[`set${J5(l)}`];f&&Array.isArray(o[l])&&f.length>1?c=f(...o[l])||c:f?c=f(o[l])||c:(["mtime"].indexOf(l)===-1&&!a&&X5(`Warning: Set value to model directly ${l}, ${o[l]}`),c=e[l]!==o[l]||c,e[l]=o[l])}),c},t.get=function(){for(var o=arguments.length,a=new Array(o),s=0;s{c[l]=e[l]}),c},t.getReferenceByName=o=>e[o],t.delete=()=>{Object.keys(e).forEach(o=>delete e[o]),r.forEach((o,a)=>n(a)),e.deleted=!0},t.getState=()=>{if(e.deleted)return null;const o={...e,vtkClass:t.getClassName()};Object.keys(o).forEach(s=>{o[s]===null||o[s]===void 0||s[0]==="_"?delete o[s]:o[s].isA?o[s]=o[s].getState():Array.isArray(o[s])?o[s]=o[s].map(RP):bK(o[s])&&(o[s]=Array.from(o[s]))});const a={};return Object.keys(o).sort().forEach(s=>{a[s]=o[s]}),a.mtime&&delete a.mtime,a},t.shallowCopy=function(o){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(o.getClassName()!==t.getClassName())throw new Error(`Cannot ShallowCopy ${o.getClassName()} into ${t.getClassName()}`);const s=o.get(),c=Object.keys(e).sort();Object.keys(s).sort().forEach(f=>{const u=c.indexOf(f);u===-1?a&&dy(`add ${f} in shallowCopy`):c.splice(u,1),e[f]=s[f]}),c.length&&a&&dy(`Untouched keys: ${c.join(", ")}`),t.modified()},t.toJSON=function(){return t.getState()},t}const OK={object(t,e,r){return function(){return{...e[r.name]}}}};function Go(t,e,r){r.forEach(n=>{if(typeof n=="object"){const i=OK[n.type];i?t[`get${mi(n.name)}`]=i(t,e,n):t[`get${mi(n.name)}`]=()=>e[n.name]}else t[`get${mi(n)}`]=()=>e[n]})}const AP={enum(t,e,r){const n=`_on${mi(r.name)}Changed`;return i=>{var o;if(typeof i=="string"){if(r.enum[i]!==void 0)return e[r.name]!==r.enum[i]?(e[r.name]=r.enum[i],t.modified(),!0):!1;throw Ln(`Set Enum with invalid argument ${r}, ${i}`),new RangeError("Set Enum with invalid string argument")}if(typeof i=="number"){if(e[r.name]!==i){if(Object.keys(r.enum).map(a=>r.enum[a]).indexOf(i)!==-1){const a=e[r.name];return e[r.name]=i,(o=e[n])==null||o.call(e,t,e,i,a),t.modified(),!0}throw Ln(`Set Enum outside numeric range ${r}, ${i}`),new RangeError("Set Enum outside numeric range")}return!1}throw Ln(`Set Enum with invalid argument (String/Number) ${r}, ${i}`),new TypeError("Set Enum with invalid argument (String/Number)")}},object(t,e,r){var i;((i=r.params)==null?void 0:i.length)===1&&X5('Setter of type "object" with a single "param" field is not supported');const n=`_on${mi(r.name)}Changed`;return function(){var l,f;for(var o=arguments.length,a=new Array(o),s=0;s1&&((l=r.params)!=null&&l.length)?c=r.params.reduce((u,d,h)=>Object.assign(u,{[d]:a[h]}),{}):c=a[0],!E_(e[r.name],c)){const u=e[r.name];return e[r.name]=c,(f=e[n])==null||f.call(e,t,e,c,u),t.modified(),!0}return!1}}};function N6(t){if(typeof t=="object"){const e=AP[t.type];if(e)return(r,n)=>e(r,n,t);throw Ln(`No setter for field ${t}`),new TypeError("No setter for field")}return function(r,n){const i=`_on${mi(t)}Changed`;return function(a){var s;if(n.deleted)return Ln("instance deleted - cannot call any method"),!1;if(n[t]!==a){const c=n[t.name];return n[t]=a,(s=n[i])==null||s.call(n,r,n,a,c),r.modified(),!0}return!1}}}function K1(t,e,r){r.forEach(n=>{typeof n=="object"?t[`set${mi(n.name)}`]=N6(n)(t,e):t[`set${mi(n)}`]=N6(n)(t,e)})}function ci(t,e,r){Go(t,e,r),K1(t,e,r)}function Uh(t,e,r){r.forEach(n=>{t[`get${mi(n)}`]=()=>e[n]?Array.from(e[n]):e[n],t[`get${mi(n)}ByReference`]=()=>e[n]})}function D_(t,e,r,n){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0;r.forEach(o=>{if(e[o]&&n&&e[o].length!==n)throw new RangeError(`Invalid initial number of values for array (${o})`);const a=`_on${mi(o)}Changed`;t[`set${mi(o)}`]=function(){var h;if(e.deleted)return Ln("instance deleted - cannot call any method"),!1;for(var s=arguments.length,c=new Array(s),l=0;l=0)&&(f=f[0],d=!0),f==null)u=e[o]!==f;else{if(n&&f.length!==n)if(f.length{const c=e[o];s.forEach((l,f)=>{c[f]=l})}})}function I_(t,e,r,n){let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:void 0;Uh(t,e,r),D_(t,e,r,n,i)}function q1(t,e,r){for(let n=0;n1&&arguments[1]!==void 0?arguments[1]:0;if(e.deleted){Ln("instance deleted - cannot call any method");return}if(g>=e.numberOfInputs){Ln(`algorithm ${t.getClassName()} only has ${e.numberOfInputs} input ports. To add more input ports, use addInputData()`);return}(e.inputData[g]!==h||e.inputConnection[g])&&(e.inputData[g]=h,e.inputConnection[g]=null,t.modified&&t.modified())}function o(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.inputConnection[h]&&(e.inputData[h]=e.inputConnection[h]()),e.inputData[h]}function a(h){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(e.deleted){Ln("instance deleted - cannot call any method");return}if(g>=e.numberOfInputs){let p=`algorithm ${t.getClassName()} only has `;p+=`${e.numberOfInputs}`,p+=" input ports. To add more input ports, use addInputConnection()",Ln(p);return}e.inputData[g]=null,e.inputConnection[g]=h}function s(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.inputConnection[h]}function c(){let h=e.numberOfInputs;for(;h&&!e.inputData[h-1]&&!e.inputConnection[h-1];)h--;return h===e.numberOfInputs&&e.numberOfInputs++,h}function l(h){if(e.deleted){Ln("instance deleted - cannot call any method");return}a(h,c())}function f(h){if(e.deleted){Ln("instance deleted - cannot call any method");return}i(h,c())}function u(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.deleted?(Ln("instance deleted - cannot call any method"),null):(t.shouldUpdate()&&t.update(),e.output[h])}t.shouldUpdate=()=>{var v,y;const h=t.getMTime();let g=1/0,p=n;for(;p--;){if(!e.output[p]||e.output[p].isDeleted())return!0;const m=e.output[p].getMTime();if(mg)return!0;return!1};function d(){let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;const g=()=>u(h);return g.filter=t,g}if(e.numberOfInputs){let h=e.numberOfInputs;for(;h--;)e.inputData.push(null),e.inputConnection.push(null);t.setInputData=i,t.setInputConnection=a,t.addInputData=f,t.addInputConnection=l,t.getInputData=o,t.getInputConnection=s}n&&(t.getOutputData=u,t.getOutputPort=d),t.update=()=>{const h=[];if(e.numberOfInputs){let g=0;for(;ge.numberOfInputs,t.getNumberOfOutputPorts=()=>n||e.output.length,t.getInputArrayToProcess=h=>{const g=e.inputArrayToProcess[h],p=e.inputData[h];return g&&p?p[`get${g.fieldAssociation}`]().getArray(g.arrayName):null},t.setInputArrayToProcess=function(h,g,p){let v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"Scalars";for(;e.inputArrayToProcess.lengthu.apply(t,arguments),1-d);else if(u.apply(t,arguments)===M_)break}}}t[`invoke${mi(r)}`]=c,t[`on${mi(r)}`]=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!l.apply)return console.error(`Invalid callback for event ${r}`),null;if(e.deleted)return Ln("instance deleted - cannot call any method"),null;const u=o++;return n.push([u,l,f]),n.sort((d,h)=>h[2]-d[2]),s(u)},t.delete=()=>{i(),n.forEach(l=>{let[f]=l;return a(f)})}}function $n(t,e){const r=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const i={},o={};return t(o,i,n),Object.freeze(o)};return e&&ic.register(e,r),r}function X1(){for(var t=arguments.length,e=new Array(t),r=0;r!!a).map(a=>a(...i))}}function R_(t){return t&&t.isA&&t.isA("vtkObject")}function hy(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];if(R_(t)){if(n.indexOf(t)>=0)return r;n.push(t);const i=e(t);i!==void 0&&r.push(i);const o=t.get();Object.keys(o).forEach(a=>{const s=o[a];Array.isArray(s)?s.forEach(c=>{hy(c,e,r,n)}):hy(s,e,r,n)})}return r}function NP(t,e,r){var n=this;let i;const o=function(){for(var a=arguments.length,s=new Array(a),c=0;c{i=null,r||t.apply(l,s)},u=r&&!i;clearTimeout(i),i=setTimeout(f,e),u&&t.apply(l,s)};return o.cancel=()=>clearTimeout(i),o}function kP(t,e){let r=!1,n=null;function i(){r=!1,n!==null&&(o(...n),n=null)}function o(){for(var a=arguments.length,s=new Array(a),c=0;c2&&arguments[2]!==void 0?arguments[2]:{};e.keystore=Object.assign(e.keystore||{},r),t.setKey=(n,i)=>{e.keystore[n]=i},t.getKey=n=>e.keystore[n],t.getAllKeys=()=>Object.keys(e.keystore),t.deleteKey=n=>delete e.keystore[n],t.clearKeystore=()=>t.getAllKeys().forEach(n=>delete e.keystore[n])}let MK=1;const Jm="__root__";function VP(t,e){L_(t,e);const r=t.delete;e.proxyId=`${MK++}`,e.ui=JSON.parse(JSON.stringify(e.ui||[])),Go(t,e,["proxyId","proxyGroup","proxyName"]),ci(t,e,["proxyManager"]);const n={},i={};function o(l,f){i[f]||(i[f]=[]);const u=i[f];for(let d=0;d{e.ui=JSON.parse(JSON.stringify(l||[])),Object.keys(n).forEach(f=>delete n[f]),Object.keys(i).forEach(f=>delete i[f]),o(e.ui,Jm),t.modified()};function a(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jm;return i[l]}t.updateProxyProperty=(l,f)=>{const u=n[l];u?Object.assign(u,f):n[l]={...f}},t.activate=()=>{if(e.proxyManager){const l=`setActive${mi(t.getProxyGroup().slice(0,-1))}`;e.proxyManager[l]&&e.proxyManager[l](t)}},e.propertyLinkSubscribers={},t.registerPropertyLinkForGC=(l,f)=>{f in e.propertyLinkSubscribers||(e.propertyLinkSubscribers[f]=[]),e.propertyLinkSubscribers[f].push(l)},t.gcPropertyLinks=l=>{const f=e.propertyLinkSubscribers[l]||[];for(;f.length;)f.pop().unbind(t)},e.propertyLinkMap={},t.getPropertyLink=function(l){let f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(e.propertyLinkMap[l])return e.propertyLinkMap[l];let u=null;const d=[];let h=0,g=!1;function p(x){let C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(g)return null;const S=[];let T=null;for(h=d.length;h--;){const E=d[h];E.instance===x?T=E:S.push(E)}if(!T)return null;const _=T.instance[`get${mi(T.propertyName)}`]();if(!DK(_,u)||C){for(u=_,g=!0;S.length;){const E=S.pop();E.instance.set({[E.propertyName]:u})}g=!1}return e.propertyLinkMap[l].persistent&&(e.propertyLinkMap[l].value=_),_}function v(x,C){const S=[];for(h=d.length;h--;){const T=d[h];T.instance===x&&(T.propertyName===C||C===void 0)&&(T.subscription.unsubscribe(),S.push(h))}for(;S.length;)d.splice(S.pop(),1)}function y(x,C){let S=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const T=x.onModified(p),_=d[0];return d.push({instance:x,propertyName:C,subscription:T}),S&&(e.propertyLinkMap[l].persistent&&e.propertyLinkMap[l].value!==void 0?x.set({[C]:e.propertyLinkMap[l].value}):_&&p(_.instance,!0)),{unsubscribe:()=>v(x,C)}}function m(){for(;d.length;)d.pop().subscription.unsubscribe()}const w={bind:y,unbind:v,unsubscribe:m,persistent:f};return e.propertyLinkMap[l]=w,w};function s(){let l=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Jm;const f=[],u=e.proxyId,d=a(l)||[];for(let h=0;hs().map(l=>l.name),t.getPropertyByName=l=>s().find(f=>f.name===l),t.getPropertyDomainByName=l=>(n[l]||{}).domain,t.getProxySection=()=>({id:e.proxyId,name:e.proxyGroup,ui:e.ui,properties:s()}),t.delete=()=>{const l=Object.keys(e.propertyLinkMap);let f=l.length;for(;f--;)e.propertyLinkMap[l[f]].unsubscribe();Object.keys(e.propertyLinkSubscribers).forEach(t.gcPropertyLinks),r()},t.getState=()=>null;function c(){if(e.links)for(let l=0;l{for(;i.length;)i.pop().unsubscribe();n()}}function UP(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};e.this=t;function i(s){const c=Object.keys(s);let l=c.length;for(;l--;){const f=c[l];e[f].set(s[f])}}const o=Object.keys(n);let a=o.length;for(;a--;){const s=o[a];e[s]=n[s];const c=r[s];t[`set${mi(s)}`]=l=>{if(l!==e[s]){e[s]=l;const f=c[l];i(f),t.modified()}}}o.length&&Go(t,e,o)}const k6=10,V6=40,F6=800;function BP(t){let e=0,r=0,n=0,i=0;return"detail"in t&&(r=t.detail),"wheelDelta"in t&&(r=-t.wheelDelta/120),"wheelDeltaY"in t&&(r=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=r,r=0),n=e*k6,i=r*k6,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(n=t.deltaX),(n||i)&&t.deltaMode&&(t.deltaMode===1?(n*=V6,i*=V6):(n*=F6,i*=F6)),n&&!e&&(e=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:e,spinY:r||e,pixelX:n,pixelY:i||n}}var J={algo:O_,capitalize:J5,chain:X1,debounce:NP,enumToString:IK,event:P_,EVENT_ABORT:M_,formatBytesToProperUnit:OP,formatNumbersWithThousandSeparator:MP,get:Go,getArray:Uh,getCurrentGlobalMTime:_K,getStateArrayMapFunc:RP,isVtkObject:R_,keystore:L_,measurePromiseExecution:LP,moveToProtected:q1,newInstance:$n,newTypedArray:Fh,newTypedArrayFrom:Y5,normalizeWheel:BP,obj:yr,proxy:VP,proxyPropertyMapping:FP,proxyPropertyState:UP,safeArrays:PP,set:K1,setArray:D_,setGet:ci,setGetArray:I_,setImmediate:b_,setLoggerFunction:_P,throttle:kP,traverseInstanceTree:hy,TYPED_ARRAYS:Uo,uncapitalize:IP,VOID:SP,vtkDebugMacro:dy,vtkErrorMacro:Ln,vtkInfoMacro:bP,vtkLogMacro:EP,vtkOnceErrorMacro:DP,vtkWarningMacro:X5,objectSetterMap:AP},_o=Object.freeze({__proto__:null,VOID:SP,setLoggerFunction:_P,vtkLogMacro:EP,vtkInfoMacro:bP,vtkDebugMacro:dy,vtkErrorMacro:Ln,vtkWarningMacro:X5,vtkOnceErrorMacro:DP,TYPED_ARRAYS:Uo,newTypedArray:Fh,newTypedArrayFrom:Y5,capitalize:J5,_capitalize:mi,uncapitalize:IP,formatBytesToProperUnit:OP,formatNumbersWithThousandSeparator:MP,setImmediateVTK:b_,measurePromiseExecution:LP,obj:yr,get:Go,set:K1,setGet:ci,getArray:Uh,setArray:D_,setGetArray:I_,moveToProtected:q1,algo:O_,EVENT_ABORT:M_,event:P_,newInstance:$n,chain:X1,isVtkObject:R_,traverseInstanceTree:hy,debounce:NP,throttle:kP,keystore:L_,proxy:VP,proxyPropertyMapping:FP,proxyPropertyState:UP,normalizeWheel:BP,default:J});const GP={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},xn={VOID:"",CHAR:"Int8Array",SIGNED_CHAR:"Int8Array",UNSIGNED_CHAR:"Uint8Array",UNSIGNED_CHAR_CLAMPED:"Uint8ClampedArray",SHORT:"Int16Array",UNSIGNED_SHORT:"Uint16Array",INT:"Int32Array",UNSIGNED_INT:"Uint32Array",FLOAT:"Float32Array",DOUBLE:"Float64Array"},PK=xn.FLOAT;var WP={DefaultDataType:PK,DataTypeByteSize:GP,VtkDataTypes:xn};const RK="WebGL",gy=Object.create(null);function zP(t,e){gy[t]=e}function LK(){return Object.keys(gy)}function $P(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return gy[t]&&gy[t](e)}function AK(t,e){e.classHierarchy.push("vtkRenderWindow"),t.addRenderer=r=>{t.hasRenderer(r)||(r.setRenderWindow(t),e.renderers.push(r),t.modified())},t.removeRenderer=r=>{e.renderers=e.renderers.filter(n=>n!==r),t.modified()},t.hasRenderer=r=>e.renderers.indexOf(r)!==-1,t.newAPISpecificView=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return $P(r||e.defaultViewAPI,n)},t.addView=r=>{t.hasView(r)||(r.setRenderable(t),e._views.push(r),t.modified())},t.removeView=r=>{e._views=e._views.filter(n=>n!==r),t.modified()},t.hasView=r=>e._views.indexOf(r)!==-1,t.preRender=()=>{e.renderers.forEach(r=>{r.isActiveCameraCreated()||r.resetCamera()})},t.render=()=>{t.preRender(),e.interactor?e.interactor.render():e._views.forEach(r=>r.traverseAllPasses())},t.getStatistics=()=>{const r={propCount:0,invisiblePropCount:0,gpuMemoryMB:0};return e._views.forEach(n=>{n.getGraphicsMemoryInfo&&(r.gpuMemoryMB+=n.getGraphicsMemoryInfo()/1e6)}),e.renderers.forEach(n=>{const i=n.getViewProps(),o=e._views[0].getViewNodeFor(n);i.forEach(a=>{if(a.getVisibility()){r.propCount+=1;const s=a.getMapper&&a.getMapper();if(s&&s.getPrimitiveCount){const c=o.getViewNodeFor(s);if(c){c.getAllocatedGPUMemoryInBytes&&(r.gpuMemoryMB+=c.getAllocatedGPUMemoryInBytes()/1e6);const l=s.getPrimitiveCount();Object.keys(l).forEach(f=>{r[f]||(r[f]=0),r[f]+=l[f]})}}}else r.invisiblePropCount+=1})}),r.str=Object.keys(r).map(n=>`${n}: ${r[n]}`).join(` +`),r},t.captureImages=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"image/png",n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return J.setImmediate(t.render),e._views.map(i=>i.captureNextImage?i.captureNextImage(r,n):void 0).filter(i=>!!i)},t.addRenderWindow=r=>e.childRenderWindows.includes(r)?!1:(e.childRenderWindows.push(r),t.modified(),!0),t.removeRenderWindow=r=>{const n=e.childRenderWindows.findIndex(i=>i===r);return n<0?!1:(e.childRenderWindows.splice(n,1),t.modified(),!0)}}const NK={defaultViewAPI:RK,renderers:[],views:[],interactor:null,neverRendered:!0,numberOfLayers:1,childRenderWindows:[]};function jP(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,NK,r),J.obj(t,e),J.setGet(t,e,["interactor","numberOfLayers","_views","defaultViewAPI"]),J.get(t,e,["neverRendered"]),J.getArray(t,e,["renderers","childRenderWindows"]),J.moveToProtected(t,e,["views"]),J.event(t,e,"completion"),AK(t,e)}const kK=J.newInstance(jP,"vtkRenderWindow");var VK={newInstance:kK,extend:jP,registerViewConstructor:zP,listViewAPIs:LK,newAPISpecificView:$P};const a1={CLAMP_TO_EDGE:0,REPEAT:1,MIRRORED_REPEAT:2},Xt={NEAREST:0,LINEAR:1,NEAREST_MIPMAP_NEAREST:2,NEAREST_MIPMAP_LINEAR:3,LINEAR_MIPMAP_NEAREST:4,LINEAR_MIPMAP_LINEAR:5};var HP={Wrap:a1,Filter:Xt};const KP=new Float32Array(1),FK=new Int32Array(KP.buffer);function UK(t){KP[0]=t;const e=FK[0];let r=e>>16&32768,n=e>>12&2047;const i=e>>23&255;return i<103?r:i>142?(r|=31744,r|=(i===255?0:1)&&e&8388607,r):i<113?(n|=2048,r|=(n>>114-i)+(n>>113-i&1),r):(r|=i-112<<10|n>>1,r+=n&1,r)}function BK(t){const e=(t&32768)>>15,r=(t&31744)>>10,n=t&1023;return r===0?(e?-1:1)*2**-14*(n/2**10):r===31?n?NaN:(e?-1:1)*(1/0):(e?-1:1)*2**(r-15)*(1+n/2**10)}var Hf={fromHalf:BK,toHalf:UK},A_={exports:{}};A_.exports;(function(t){(function(e,r,n){function i(c){var l=this,f=s();l.next=function(){var u=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=u-(l.c=u|0)},l.c=1,l.s0=f(" "),l.s1=f(" "),l.s2=f(" "),l.s0-=f(c),l.s0<0&&(l.s0+=1),l.s1-=f(c),l.s1<0&&(l.s1+=1),l.s2-=f(c),l.s2<0&&(l.s2+=1),f=null}function o(c,l){return l.c=c.c,l.s0=c.s0,l.s1=c.s1,l.s2=c.s2,l}function a(c,l){var f=new i(c),u=l&&l.state,d=f.next;return d.int32=function(){return f.next()*4294967296|0},d.double=function(){return d()+(d()*2097152|0)*11102230246251565e-32},d.quick=d,u&&(typeof u=="object"&&o(u,f),d.state=function(){return o(f,{})}),d}function s(){var c=4022871197,l=function(f){f=String(f);for(var u=0;u>>0,d-=c,d*=c,c=d>>>0,d-=c,c+=d*4294967296}return(c>>>0)*23283064365386963e-26};return l}r&&r.exports?r.exports=a:this.alea=a})(Xi,t)})(A_);var GK=A_.exports,N_={exports:{}};N_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var u=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^u^u>>>8},s===(s|0)?c.x=s:l+=s;for(var f=0;f>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xor128=a})(Xi,t)})(N_);var WK=N_.exports,k_={exports:{}};k_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.next=function(){var u=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(u^u<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,s===(s|0)?c.x=s:l+=s;for(var f=0;f>>4),c.next()}function o(s,c){return c.x=s.x,c.y=s.y,c.z=s.z,c.w=s.w,c.v=s.v,c.d=s.d,c}function a(s,c){var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xorwow=a})(Xi,t)})(k_);var zK=k_.exports,V_={exports:{}};V_.exports;(function(t){(function(e,r,n){function i(s){var c=this;c.next=function(){var f=c.x,u=c.i,d,h;return d=f[u],d^=d>>>7,h=d^d<<24,d=f[u+1&7],h^=d^d>>>10,d=f[u+3&7],h^=d^d>>>3,d=f[u+4&7],h^=d^d<<7,d=f[u+7&7],d=d^d<<13,h^=d^d<<9,f[u]=h,c.i=u+1&7,h};function l(f,u){var d,h=[];if(u===(u|0))h[0]=u;else for(u=""+u,d=0;d0;--d)f.next()}l(c,s)}function o(s,c){return c.x=s.x.slice(),c.i=s.i,c}function a(s,c){s==null&&(s=+new Date);var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(f.x&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xorshift7=a})(Xi,t)})(V_);var $K=V_.exports,F_={exports:{}};F_.exports;(function(t){(function(e,r,n){function i(s){var c=this;c.next=function(){var f=c.w,u=c.X,d=c.i,h,g;return c.w=f=f+1640531527|0,g=u[d+34&127],h=u[d=d+1&127],g^=g<<13,h^=h<<17,g^=g>>>15,h^=h>>>12,g=u[d]=g^h,c.i=d,g+(f^f>>>16)|0};function l(f,u){var d,h,g,p,v,y=[],m=128;for(u===(u|0)?(h=u,u=null):(u=u+"\0",h=0,m=Math.max(m,u.length)),g=0,p=-32;p>>15,h^=h<<4,h^=h>>>13,p>=0&&(v=v+1640531527|0,d=y[p&127]^=h+v,g=d==0?g+1:0);for(g>=128&&(y[(u&&u.length||0)&127]=-1),g=127,p=4*128;p>0;--p)h=y[g+34&127],d=y[g=g+1&127],h^=h<<13,d^=d<<17,h^=h>>>15,d^=d>>>12,y[g]=h^d;f.w=v,f.X=y,f.i=g}l(c,s)}function o(s,c){return c.i=s.i,c.w=s.w,c.X=s.X.slice(),c}function a(s,c){s==null&&(s=+new Date);var l=new i(s),f=c&&c.state,u=function(){return(l.next()>>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(f.X&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.xor4096=a})(Xi,t)})(F_);var jK=F_.exports,U_={exports:{}};U_.exports;(function(t){(function(e,r,n){function i(s){var c=this,l="";c.next=function(){var u=c.b,d=c.c,h=c.d,g=c.a;return u=u<<25^u>>>7^d,d=d-h|0,h=h<<24^h>>>8^g,g=g-u|0,c.b=u=u<<20^u>>>12^d,c.c=d=d-h|0,c.d=h<<16^d>>>16^g,c.a=g-u|0},c.a=0,c.b=0,c.c=-1640531527,c.d=1367130551,s===Math.floor(s)?(c.a=s/4294967296|0,c.b=s|0):l+=s;for(var f=0;f>>0)/4294967296};return u.double=function(){do var d=l.next()>>>11,h=(l.next()>>>0)/4294967296,g=(d+h)/(1<<21);while(g===0);return g},u.int32=l.next,u.quick=u,f&&(typeof f=="object"&&o(f,l),u.state=function(){return o(l,{})}),u}r&&r.exports?r.exports=a:this.tychei=a})(Xi,t)})(U_);var HK=U_.exports,qP={exports:{}};const KK={},qK=Object.freeze(Object.defineProperty({__proto__:null,default:KK},Symbol.toStringTag,{value:"Module"})),al=p$(qK);(function(t){(function(e,r,n){var i=256,o=6,a=52,s="random",c=n.pow(i,o),l=n.pow(2,a),f=l*2,u=i-1,d;function h(x,C,S){var T=[];C=C==!0?{entropy:!0}:C||{};var _=y(v(C.entropy?[x,w(r)]:x??m(),3),T),E=new g(T),b=function(){for(var D=E.g(o),I=c,P=0;D=f;)D/=2,I/=2,P>>>=1;return(D+P)/I};return b.int32=function(){return E.g(4)|0},b.quick=function(){return E.g(4)/4294967296},b.double=b,y(w(E.S),r),(C.pass||S||function(D,I,P,O){return O&&(O.S&&p(O,E),D.state=function(){return p(E,{})}),P?(n[s]=D,I):D})(b,_,"global"in C?C.global:this==n,C.state)}function g(x){var C,S=x.length,T=this,_=0,E=T.i=T.j=0,b=T.S=[];for(S||(x=[S++]);_XP(`vtkMath::${t} - NOT IMPLEMENTED`)}function pp(t,e,r,n){let i;for(let o=0;o0&&arguments[0]!==void 0?arguments[0]:3;const e=Array(t);for(let r=0;rMath.PI;function aq(t,e){return e>1023?t*2**1023*2**(e-1023):e<-1074?t*2**-1074*2**(e+1074):t*2**e}function Zr(t){return t/180*Math.PI}function py(t){return t*180/Math.PI}const{round:$g,floor:z_,ceil:sq,min:cq,max:lq}=Math;function uq(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=1/0;for(let i=e,o=t.length;i1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=-1/0;for(let i=e,o=t.length;i1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,n=1/0,i=-1/0;for(let o=e,a=t.length;o=0;--i)if(r[i]0&&arguments[0]!==void 0?arguments[0]:0;const r=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:1)-t;return t+r*Math.random()}const Cq=Y1("gaussian");function my(t,e,r){return r[0]=t[0]+e[0],r[1]=t[1]+e[1],r[2]=t[2]+e[2],r}function zl(t,e,r){return r[0]=t[0]-e[0],r[1]=t[1]-e[1],r[2]=t[2]-e[2],r}function JP(t,e){return t[0]*=e,t[1]*=e,t[2]*=e,t}function ZP(t,e){return t[0]*=e,t[1]*=e,t}function J3(t,e,r,n){return n[0]=t[0]+e[0]*r,n[1]=t[1]+e[1]*r,n[2]=t[2]+e[2]*r,n}function Sq(t,e,r,n){return n[0]=t[0]+e[0]*r,n[1]=t[1]+e[1]*r,n}function _n(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Tq(t,e,r){r[0]=t[0]*e[0],r[1]=t[0]*e[1],r[2]=t[0]*e[2],r[3]=t[1]*e[0],r[4]=t[1]*e[1],r[5]=t[1]*e[2],r[6]=t[2]*e[0],r[7]=t[2]*e[1],r[8]=t[2]*e[2]}function sl(t,e,r){const n=t[1]*e[2]-t[2]*e[1],i=t[2]*e[0]-t[0]*e[2],o=t[0]*e[1]-t[1]*e[0];return r[0]=n,r[1]=i,r[2]=o,r}function Nu(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3;switch(e){case 1:return Math.abs(t);case 2:return Math.sqrt(t[0]*t[0]+t[1]*t[1]);case 3:return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);default:{let r=0;for(let n=0;no&&i>a?(c=0,l=1,f=2):o>a?(c=1,l=2,f=0):(c=2,l=0,f=1);const u=t[c]/s,d=t[l]/s,h=t[f]/s,g=Math.sqrt(u*u+h*h);if(n!==0){const p=Math.sin(n),v=Math.cos(n);e&&(e[c]=(h*v-u*d*p)/g,e[l]=p*g,e[f]=(-(u*v)-d*h*p)/g),r&&(r[c]=(-(h*p)-u*d*v)/g,r[l]=v*g,r[f]=(u*p-d*h*v)/g)}else e&&(e[c]=h/g,e[l]=0,e[f]=-u/g),r&&(r[c]=-u*d/g,r[l]=g,r[f]=-d*h/g)}function Eq(t,e,r){const n=_n(e,e);if(n===0)return r[0]=0,r[1]=0,r[2]=0,!1;const i=_n(t,e)/n;for(let o=0;o<3;o++)r[o]=e[o];return JP(r,i),!0}function Z3(t,e){return t[0]*e[0]+t[1]*e[1]}function bq(t,e,r){const n=Z3(e,e);if(n===0)return r[0]=0,r[1]=0,!1;const i=Z3(t,e)/n;for(let o=0;o<2;o++)r[o]=e[o];return ZP(r,i),!0}function $c(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])+(t[2]-e[2])*(t[2]-e[2])}function Dq(t,e){const r=[0,0,0];return sl(t,e,r),Math.atan2(Nu(r),_n(t,e))}function Iq(t,e,r){const n=Math.abs(t-r);return 1/Math.sqrt(2*Math.PI*e)*Math.exp(-(n**2)/(2*e))}function Oq(t,e,r){const n=Math.abs(t-r);return Math.exp(-(n**2)/(2*e))}function Mq(t,e,r){r[0]=t[0]*e[0],r[1]=t[0]*e[1],r[2]=t[1]*e[0],r[3]=t[1]*e[1]}function QP(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function eR(t){const e=QP(t);return e!==0&&(t[0]/=e,t[1]/=e),e}function ei(){for(var t=arguments.length,e=new Array(t),r=0;ri&&(i=n),(n=Math.abs(t[a*3+2]))>i&&(i=n),o[a]=1/i;i=o[0]*Math.abs(t[0]),r=0,(n=o[1]*Math.abs(t[3]))>=i&&(i=n,r=1),(n=o[2]*Math.abs(t[6]))>=i&&(r=2),r!==0&&(pp(t,3,r,0),o[r]=o[0]),e[0]=r,t[3]/=t[0],t[6]/=t[0],t[4]-=t[3]*t[1],t[7]-=t[6]*t[1],i=o[1]*Math.abs(t[4]),r=1,(n=o[2]*Math.abs(t[7]))>=i&&(r=2,pp(t,3,1,2),o[2]=o[1]),e[1]=r,t[7]/=t[4],t[5]-=t[3]*t[2],t[8]-=t[6]*t[2]+t[7]*t[5],e[2]=2}function Rq(t,e,r){let n=r[e[0]];r[e[0]]=r[0],r[0]=n,n=r[e[1]],r[e[1]]=r[1],r[1]=n-t[3]*r[0],n=r[e[2]],r[e[2]]=r[2],r[2]=n-t[6]*r[0]-t[7]*r[1],r[2]/=t[8],r[1]=(r[1]-t[5]*r[2])/t[4],r[0]=(r[0]-t[1]*r[1]-t[2]*r[2])/t[0]}function Lq(t,e,r){const n=t[0],i=t[1],o=t[2],a=t[3],s=t[4],c=t[5],l=t[6],f=t[7],u=t[8],d=+ei(s,f,c,u),h=-ei(a,l,c,u),g=+ei(a,l,s,f),p=-ei(i,f,o,u),v=+ei(n,l,o,u),y=-ei(n,l,i,f),m=+ei(i,s,o,c),w=-ei(n,a,o,c),x=+ei(n,a,i,s),C=n*d+i*h+o*g,S=d*e[0]+p*e[1]+m*e[2],T=h*e[0]+v*e[1]+w*e[2],_=g*e[0]+y*e[1]+x*e[2];r[0]=S/C,r[1]=T/C,r[2]=_/C}function v2(t,e,r){const n=t[0]*e[0]+t[1]*e[1]+t[2]*e[2],i=t[3]*e[0]+t[4]*e[1]+t[5]*e[2],o=t[6]*e[0]+t[7]*e[1]+t[8]*e[2];r[0]=n,r[1]=i,r[2]=o}function Q3(t,e,r){const n=[...t],i=[...e];for(let o=0;o<3;o++)r[o]=n[0]*i[o]+n[1]*i[o+3]+n[2]*i[o+6],r[o+3]=n[3]*i[o]+n[4]*i[o+3]+n[5]*i[o+6],r[o+6]=n[6]*i[o]+n[7]*i[o+3]+n[8]*i[o+6]}function Aq(t,e,r,n,i,o,a){n!==i&&XP("Number of columns of A must match number of rows of B.");const s=[...t],c=[...e];for(let l=0;l2&&arguments[2]!==void 0?arguments[2]:G_;if(t.length!==e.length)return!1;function n(i,o){return Math.abs(i-e[o])<=r}return t.every(n)}const J1=tR;function nR(t){for(let e=0;e<3;e++)t[e*3]=t[e*3+1]=t[e*3+2]=0,t[e*3+e]=1}function rR(t,e){for(let r=0;r1&&arguments[1]!==void 0?arguments[1]:G_;return J1(t,B_,e)}function Vq(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:G_;return J1(t,iq,e)}function iR(t,e){const r=t[0]*t[0],n=t[0]*t[1],i=t[0]*t[2],o=t[0]*t[3],a=t[1]*t[1],s=t[2]*t[2],c=t[3]*t[3],l=t[1]*t[2],f=t[1]*t[3],u=t[2]*t[3],d=a+s+c;let h=1/(r+d);const g=(r-d)*h;h*=2,e[0]=a*h+g,e[3]=(l+o)*h,e[6]=(f-i)*h,e[1]=(l-o)*h,e[4]=s*h+g,e[7]=(u+n)*h,e[2]=(f+i)*h,e[5]=(u-n)*h,e[8]=c*h+g}function y2(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!`${t}`.includes("e"))return+`${Math.round(`${t}e+${e}`)}e-${e}`;const r=`${t}`.split("e");let n="";return+r[1]+e>0&&(n="+"),+`${Math.round(`${+r[0]}e${n}${+r[1]+e}`)}e-${e}`}function eS(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0,0,0],r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;return e[0]=y2(t[0],r),e[1]=y2(t[1],r),e[2]=y2(t[2],r),e}function Z1(t,e,r,n){let i,o,a,s,c,l,f,u,d,h,g,p,v,y,m,w;const x=Dr(e),C=Dr(e),S=(_,E,b)=>{y=_[E],v=_[b],_[E]=y-p*(v+y*h),_[b]=v+p*(y-v*h)};for(rR(e,n),c=0;c3&&Math.abs(r[c])+y===Math.abs(r[c])&&Math.abs(r[s])+y===Math.abs(r[s]))t[c*e+s]=0;else if(Math.abs(t[c*e+s])>f){for(v=r[s]-r[c],Math.abs(v)+y===Math.abs(v)?d=t[c*e+s]/v:(u=.5*v/t[c*e+s],d=1/(Math.abs(u)+Math.sqrt(1+u*u)),u<0&&(d=-d)),m=1/Math.sqrt(1+d*d),p=d*m,h=p/(1+m),v=d*t[c*e+s],C[c]-=v,C[s]+=v,r[c]-=v,r[s]+=v,t[c*e+s]=0,o=0;o<=c-1;o++)S(t,o*e+c,o*e+s);for(o=c+1;o<=s-1;o++)S(t,c*e+o,o*e+s);for(o=s+1;o=U6)return Sd("vtkMath::Jacobi: Error extracting eigenfunctions"),0;for(o=0;o=w||Math.abs(r[i]-w)>1)+(e&1);for(l=0,i=0;i=0&&l++;if(lh?g:h,i=p>i?p:i,r[d]=1,i!==0&&(r[d]/=i)}const o=Math.abs(e[0])*r[0],a=Math.abs(e[3])*r[1],s=Math.abs(e[6])*r[2];n[0]=0,i=o,a>=i&&(i=a,n[0]=1),s>=i&&(n[0]=2),n[0]!==0&&(zg(e,3,n[0],0),r[n[0]]=r[0]);const c=Math.abs(e[4])*r[1],l=Math.abs(e[7])*r[2];n[1]=1,i=c,l>=i&&(n[1]=2,zg(e,3,1,2)),n[2]=2;let f=0;if(Z5(e)<0){f=1;for(let d=0;d<9;d++)e[d]=-e[d]}const u=Dr(4);if(oR(e,u),iR(u,e),f)for(let d=0;d<9;d++)e[d]=-e[d];n[1]!==1&&zg(e,3,n[1],1),n[0]!==0&&zg(e,3,n[0],0)}function sR(t,e,r){let n,i,o,a,s,c;const l=[...t];if(Z1(l,3,e,r),e[0]===e[1]&&e[0]===e[2]){nR(r);return}for(K0(r,r),n=0;n<3;n++)if(e[(n+1)%3]===e[(n+2)%3]){for(c=Math.abs(r[n*3]),a=0,i=1;i<3;i++)c<(s=Math.abs(r[n*3+i]))&&(c=s,a=i);a!==n&&(s=e[a],e[a]=e[n],e[n]=s,pp(r,3,n,a)),r[a*3+a]<0&&(r[a*3]=-r[a*3],r[a*3+1]=-r[a*3+1],r[a*3+2]=-r[a*3+2]),i=(a+1)%3,o=(a+2)%3,r[i*3]=0,r[i*3+1]=0,r[i*3+2]=0,r[i*3+i]=1;const f=sl([r[a*3],r[a*3+1],r[a*3+2]],[r[i*3],r[i*3+1],r[i*3+2]],[]);Td(f);const u=sl(f,[r[a*3],r[a*3+1],r[a*3+2]],[]);for(let d=0;d<3;d++)r[o*3+d]=f[d],r[i*3+d]=u[d];K0(r,r);return}for(c=Math.abs(r[0]),a=0,n=1;n<3;n++)c<(s=Math.abs(r[n*3]))&&(c=s,a=n);if(a!==0){const f=e[a];e[a]=e[0],e[0]=f,pp(r,3,a,0)}if(Math.abs(r[4])a&&(a=f);if(a===0)return Sd("Unable to factor linear system"),0;u[n]=1/a}for(i=0;i=a&&(a=l,s=n)}if(i!==s){for(o=0;o=0)for(o=a;o<=i-1;o++)c-=t[i*n+o]*r[o];else c!==0&&(a=i);r[i]=c}for(i=n-1;i>=0;i--){for(c=r[i],o=i+1;o3&&arguments[3]!==void 0?arguments[3]:null,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:null;const o=n||Dr(r),a=i||Dr(r);if($_(t,o,r)===0)return null;for(let s=0;sn&&(n=Math.abs(t[i*e+o]));for(let i=0;i6&&arguments[6]!==void 0?arguments[6]:!0;if(tW_&&(c=0,s[d]=0);if(c&&i===1)return Sd("Detected homogeneous system (Y=0), calling SolveHomogeneousLeastSquares()"),tS(t,e,r,o);if(c)g=1;else for(d=0;d1&&arguments[1]!==void 0?arguments[1]:[0,.5,1];switch(t.length){case 3:return e[0]=parseInt(t[0],16)*17/255,e[1]=parseInt(t[1],16)*17/255,e[2]=parseInt(t[2],16)*17/255,e;case 4:return e[0]=parseInt(t[1],16)*17/255,e[1]=parseInt(t[2],16)*17/255,e[2]=parseInt(t[3],16)*17/255,e;case 6:return e[0]=parseInt(t.substr(0,2),16)/255,e[1]=parseInt(t.substr(2,2),16)/255,e[2]=parseInt(t.substr(4,2),16)/255,e;case 7:return e[0]=parseInt(t.substr(1,2),16)/255,e[1]=parseInt(t.substr(3,2),16)/255,e[2]=parseInt(t.substr(5,2),16)/255,e;case 9:return e[0]=parseInt(t.substr(1,2),16)/255,e[1]=parseInt(t.substr(3,2),16)/255,e[2]=parseInt(t.substr(5,2),16)/255,e[3]=parseInt(t.substr(7,2),16)/255,e;default:return e}}function Hg(t,e){let r,n;const[i,o,a]=t,s=1/3,c=1/6,l=2/3;let f=i,u=i;o>f?f=o:of?f=a:a0?n=(f-u)/f:n=0,n>0?(i===f?r=c*(o-a)/(f-u):o===f?r=s+c*(a-i)/(f-u):r=l+c*(i-o)/(f-u),r<0&&(r+=1)):r=0,e[0]=r,e[1]=n,e[2]=d}function Kf(t,e){const[r,n,i]=t,o=1/3,a=1/6,s=2/3,c=5/6;let l,f,u;r>a&&r<=o?(f=1,l=(o-r)/a,u=0):r>o&&r<=.5?(f=1,u=(r-o)/a,l=0):r>.5&&r<=s?(u=1,f=(s-r)/a,l=0):r>s&&r<=c?(u=1,l=(r-s)/a,f=0):r>c&&r<=1?(l=1,u=(1-r)/a,f=0):(l=1,f=r/a,u=0),l=n*l+(1-n),f=n*f+(1-n),u=n*u+(1-n),l*=i,f*=i,u*=i,e[0]=l,e[1]=f,e[2]=u}function uR(t,e){const[r,n,i]=t;let o=(r+16)/116,a=n/500+o,s=o-i/200;o**3>.008856?o**=3:o=(o-16/116)/7.787,a**3>.008856?a**=3:a=(a-16/116)/7.787,s**3>.008856?s**=3:s=(s-16/116)/7.787;const c=.9505,l=1,f=1.089;e[0]=c*a,e[1]=l*o,e[2]=f*s}function fR(t,e){const[r,n,i]=t,o=.9505,a=1,s=1.089;let c=r/o,l=n/a,f=i/s;c>.008856?c**=1/3:c=7.787*c+16/116,l>.008856?l**=1/3:l=7.787*l+16/116,f>.008856?f**=1/3:f=7.787*f+16/116,e[0]=116*l-16,e[1]=500*(c-l),e[2]=200*(l-f)}function dR(t,e){const[r,n,i]=t;let o=r*3.2406+n*-1.5372+i*-.4986,a=r*-.9689+n*1.8758+i*.0415,s=r*.0557+n*-.204+i*1.057;o>.0031308?o=1.055*o**(1/2.4)-.055:o*=12.92,a>.0031308?a=1.055*a**(1/2.4)-.055:a*=12.92,s>.0031308?s=1.055*s**(1/2.4)-.055:s*=12.92;let c=o;c1&&(o/=c,a/=c,s/=c),o<0&&(o=0),a<0&&(a=0),s<0&&(s=0),e[0]=o,e[1]=a,e[2]=s}function hR(t,e){let[r,n,i]=t;r>.04045?r=((r+.055)/1.055)**2.4:r/=12.92,n>.04045?n=((n+.055)/1.055)**2.4:n/=12.92,i>.04045?i=((i+.055)/1.055)**2.4:i/=12.92,e[0]=r*.4124+n*.3576+i*.1805,e[1]=r*.2126+n*.7152+i*.0722,e[2]=r*.0193+n*.1192+i*.9505}function nd(t,e){const r=[0,0,0];hR(t,r),fR(r,e)}function vy(t,e){const r=[0,0,0];uR(t,r),dR(r,e)}function Bh(t){return t[0]=1,t[1]=-1,t[2]=1,t[3]=-1,t[4]=1,t[5]=-1,t}function w2(t){return!(t[1]-t[0]<0)}function $q(t,e,r){return r[0]=Math.min(t[0],e[0]),r[1]=Math.max(t[0],e[0]),r[2]=Math.min(t[1],e[1]),r[3]=Math.max(t[1],e[1]),r[4]=Math.min(t[2],e[2]),r[5]=Math.max(t[2],e[2]),r}function oc(t,e,r){return tr?r:t}function nS(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[0,0,0];return n[0]=oc(t[0],e[0],r[0]),n[1]=oc(t[1],e[1],r[1]),n[2]=oc(t[2],e[2],r[2]),n}function jq(t,e){let r=0;return e[0]!==e[1]&&(te[1]?r=e[1]:r=t,r=(r-e[0])/(e[1]-e[0])),r}const Hq=Y1("GetScalarTypeFittingRange"),Kq=Y1("GetAdjustedScalarRange");function qq(t,e){if(!t||!e)return 0;for(let r=0;r<6;r+=2)if(t[r]e[r+1]||t[r+1]e[r+1])return 0;return 1}function Xq(t,e,r){if(!t||!e)return 0;for(let n=0;n<6;n+=2)if(t[n]+r[n/2]e[n+1]||t[n+1]+r[n/2]e[n+1])return 0;return 1}function Yq(t,e,r){if(!t||!e||!r)return 0;for(let n=0;n<3;n++)if(t[n]+r[n]e[2*n+1])return 0;return 1}function Jq(t,e,r,n){const i=Dr(3),o=Dr(3),a=Dr(3),s=Dr(3),c=Dr(3),l=Dr(3);for(let x=0;x<3;++x)i[x]=t[x]-e[x],o[x]=e[x]-r[x],a[x]=r[x]-t[x],s[x]=-i[x],c[x]=-o[x],l[x]=-a[x];const f=Nu(s),u=Nu(c),d=Nu(a),h=Dr(3);sl(i,o,h);const g=Nu(h),p=f*u*d/(2*g),v=2*g*g,y=u*u*_n(i,l)/v,m=d*d*_n(s,o)/v,w=f*f*_n(a,c)/v;for(let x=0;x<3;++x)n[x]=y*t[x]+m*e[x]+w*r[x];return p}const Zq=1/0,Qq=-1/0,gR=t=>!Number.isFinite(t),{isFinite:eX,isNaN:rS}=Number,yy=rS;function rf(){return[].concat([Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE,Number.MAX_VALUE,-Number.MAX_VALUE])}function tX(t){let e=-1,r=-1;for(let n=0;ne&&(r=n,e=i)}return r}function pR(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3;const r=new Array(e),n=new Array(e);for(let o=0;o0;o--){let a=-1/0,s=0,c=0;for(let l=0;l<=o;++l){const f=r[l];for(let u=0;u<=o;++u){const d=n[u],h=Math.abs(t[f+e*d]);h>a&&(a=h,s=l,c=u)}}[r[o],r[s]]=[r[s],r[o]],[n[o],n[c]]=[n[c],n[o]]}const i=new Array(e*e).fill(0);for(let o=0;o15?e.toString(16):`0${e.toString(16)}`}function nX(t){return`${arguments.length>1&&arguments[1]!==void 0?arguments[1]:"#"}${t.map(mR).join("")}`}function Zm(t){return Math.round(t*255)}function rX(t){return t.length===3?`rgb(${t.map(Zm).join(", ")})`:`rgba(${Zm(t[0]||0)}, ${Zm(t[1]||0)}, ${Zm(t[2]||0)}, ${t[3]||0})`}var nn={Pi:oq,ldexp:aq,radiansFromDegrees:Zr,degreesFromRadians:py,round:$g,floor:z_,ceil:sq,ceilLog2:hq,min:cq,max:lq,arrayMin:uq,arrayMax:fq,arrayRange:dq,isPowerOfTwo:jg,nearestPowerOfTwo:ps,factorial:gq,binomial:pq,beginCombination:mq,nextCombination:vq,randomSeed:yq,getSeed:wq,random:xq,gaussian:Cq,add:my,subtract:zl,multiplyScalar:JP,multiplyScalar2D:ZP,multiplyAccumulate:J3,multiplyAccumulate2D:Sq,dot:_n,outer:Tq,cross:sl,norm:Nu,normalize:Td,perpendiculars:_q,projectVector:Eq,projectVector2D:bq,distance2BetweenPoints:$c,angleBetweenVectors:Dq,gaussianAmplitude:Iq,gaussianWeight:Oq,dot2D:Z3,outer2D:Mq,norm2D:QP,normalize2D:eR,determinant2x2:ei,LUFactor3x3:Pq,LUSolve3x3:Rq,linearSolve3x3:Lq,multiply3x3_vect3:v2,multiply3x3_mat3:Q3,multiplyMatrix:Aq,transpose3x3:K0,invert3x3:Nq,identity3x3:nR,identity:rR,isIdentity:kq,isIdentity3x3:Vq,determinant3x3:Z5,quaternionToMatrix3x3:iR,areEquals:tR,areMatricesEqual:J1,roundNumber:y2,roundVector:eS,matrix3x3ToQuaternion:oR,multiplyQuaternion:Fq,orthogonalize3x3:aR,diagonalize3x3:sR,singularValueDecomposition3x3:Uq,solveLinearSystem:cR,invertMatrix:lR,luFactorLinearSystem:$_,luSolveLinearSystem:j_,estimateMatrixCondition:Bq,jacobi:Gq,jacobiN:Z1,solveHomogeneousLeastSquares:tS,solveLeastSquares:Wq,hex2float:zq,rgb2hsv:Hg,hsv2rgb:Kf,lab2xyz:uR,xyz2lab:fR,xyz2rgb:dR,rgb2xyz:hR,rgb2lab:nd,lab2rgb:vy,uninitializeBounds:Bh,areBoundsInitialized:w2,computeBoundsFromPoints:$q,clampValue:oc,clampVector:nS,clampAndNormalizeValue:jq,getScalarTypeFittingRange:Hq,getAdjustedScalarRange:Kq,extentIsWithinOtherExtent:qq,boundsIsWithinOtherBounds:Xq,pointIsWithinBounds:Yq,solve3PointCircle:Jq,inf:Zq,negInf:Qq,isInf:gR,isNan:rS,isNaN:rS,isFinite:eX,createUninitializedBounds:rf,getMajorAxisIndex:tX,getSparseOrthogonalMatrix:pR,floatToHex2:mR,floatRGB2HexCode:nX,float2CssRGBA:rX};const{vtkErrorMacro:iX}=_o,{DefaultDataType:oX}=WP,aX=1e-6;function iS(t,e,r){const n=t.length;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,a,s;for(s=e;so&&(o=a);return{min:i,max:o}}function sX(){let t=Number.MAX_VALUE,e=-Number.MAX_VALUE,r=0,n=0;return{add(i){t>i&&(t=i),e1&&arguments[1]!==void 0?arguments[1]:0,r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;if(e<0&&r>1){const i=t.length/r,o=new Float64Array(i);for(let a=0,s=0;a1&&arguments[1]!==void 0?arguments[1]:0;const r=t||[];for(;r.length<=e;)r.push(null);return r}function H_(t){return Object.prototype.toString.call(t).slice(8,-1)}function cX(t){const e=t.getNumberOfComponents();let r=0;const n=new Array(e);for(let i=0;ir&&(r=o)}return r}const lX={computeRange:vR,createRangeHelper:sX,fastComputeRange:iS,getDataType:H_,getMaxNorm:cX};function uX(t,e){e.classHierarchy.push("vtkDataArray");function r(n){if(n<0)return!1;const i=t.getNumberOfComponents(),o=e.values.length/(i>0?i:1);if(n===o)return!0;if(n>o){const a=e.values;return e.values=Fh(e.dataType,(n+o)*i),e.values.set(a),!0}return e.size>n*i&&(e.size=n*i,t.dataChange()),!0}t.dataChange=()=>{e.ranges=null,t.modified()},t.resize=n=>{r(n);const i=n*t.getNumberOfComponents();return e.size!==i?(e.size=i,t.dataChange(),!0):!1},t.initialize=()=>{t.resize(0)},t.getElementComponentSize=()=>e.values.BYTES_PER_ELEMENT,t.getComponent=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.values[n*e.numberOfComponents+i]},t.setComponent=(n,i,o)=>{o!==e.values[n*e.numberOfComponents+i]&&(e.values[n*e.numberOfComponents+i]=o,t.dataChange())},t.getValue=n=>{const i=n/e.numberOfComponents,o=n%e.numberOfComponents;return t.getComponent(i,o)},t.setValue=(n,i)=>{const o=n/e.numberOfComponents,a=n%e.numberOfComponents;t.setComponent(o,a,i)},t.getData=()=>e.size===e.values.length?e.values:e.values.subarray(0,e.size),t.getRange=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:-1,i=n;i<0&&(i=e.numberOfComponents===1?0:e.numberOfComponents);let o=null;return e.ranges||(e.ranges=B6(e.ranges,e.numberOfComponents)),o=e.ranges[i],o?(e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple):(o=vR(t.getData(),n,e.numberOfComponents),e.ranges[i]=o,e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple)},t.setRange=(n,i)=>{e.ranges||(e.ranges=B6(e.ranges,e.numberOfComponents));const o={min:n.min,max:n.max};return e.ranges[i]=o,e.rangeTuple[0]=o.min,e.rangeTuple[1]=o.max,e.rangeTuple},t.getRanges=function(){if(!(arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0))return structuredClone(e.ranges);const i=[];for(let o=0;o1){const[o,a]=t.getRange(-1),s={min:o,max:a};i.push(s)}return i},t.setTuple=(n,i)=>{const o=n*e.numberOfComponents;for(let a=0;a{let o=n*e.numberOfComponents;const a=Math.min(i.length,e.size-o);for(let s=0;s(e.size<=n*e.numberOfComponents&&(e.size=(n+1)*e.numberOfComponents,r(n+1)),t.setTuple(n,i),n),t.insertTuples=(n,i)=>{const o=n+i.length/e.numberOfComponents;return e.size{const i=e.size/e.numberOfComponents;return t.insertTuple(i,n)},t.insertNextTuples=n=>{const i=e.size/e.numberOfComponents;return t.insertTuples(i,n)},t.findTuple=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:aX;for(let o=0;oi){a=!1;break}if(a)return o/e.numberOfComponents}return-1},t.getTuple=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];const o=e.numberOfComponents||1,a=n*o;switch(o){case 4:i[3]=e.values[a+3];case 3:i[2]=e.values[a+2];case 2:i[1]=e.values[a+1];case 1:i[0]=e.values[a];break;default:for(let s=o-1;s>=0;--s)i[s]=e.values[a+s]}return i},t.getTuples=(n,i)=>{const o=(n??0)*e.numberOfComponents,a=(i??t.getNumberOfTuples())*e.numberOfComponents,s=t.getData().subarray(o,a);return s.length>0?s:null},t.getTupleLocation=function(){return(arguments.length>0&&arguments[0]!==void 0?arguments[0]:1)*e.numberOfComponents},t.getNumberOfComponents=()=>e.numberOfComponents,t.getNumberOfValues=()=>e.size,t.getNumberOfTuples=()=>e.size/e.numberOfComponents,t.getDataType=()=>e.dataType,t.newClone=()=>wR({empty:!0,name:e.name,dataType:e.dataType,numberOfComponents:e.numberOfComponents}),t.getName=()=>(e.name||(t.modified(),e.name=`vtkDataArray${t.getMTime()}`),e.name),t.setData=(n,i)=>{e.values=n,e.size=n.length,e.dataType=H_(n),i&&(e.numberOfComponents=i),e.size%e.numberOfComponents!==0&&(e.numberOfComponents=1),t.dataChange()},t.getState=()=>{if(e.deleted)return null;const n={...e,vtkClass:t.getClassName()};n.values=Array.from(n.values),delete n.buffer,Object.keys(n).forEach(o=>{n[o]||delete n[o]});const i={};return Object.keys(n).sort().forEach(o=>{i[o]=n[o]}),i.mtime&&delete i.mtime,i},t.deepCopy=n=>{const i=t.getDataType(),o=e.values;t.shallowCopy(n),e.ranges=structuredClone(n.getRanges()),(o==null?void 0:o.length)>=n.getNumberOfValues()&&i===n.getDataType()?(o.set(n.getData()),e.values=o,t.dataChange()):t.setData(n.getData().slice())},t.interpolateTuple=(n,i,o,a,s,c)=>{const l=e.numberOfComponents||1;(l!==i.getNumberOfComponents()||l!==a.getNumberOfComponents())&&iX("numberOfComponents must match");const f=i.getTuple(o),u=a.getTuple(s),d=[];switch(d.length=l,l){case 4:d[3]=f[3]+(u[3]-f[3])*c;case 3:d[2]=f[2]+(u[2]-f[2])*c;case 2:d[1]=f[1]+(u[1]-f[1])*c;case 1:d[0]=f[0]+(u[0]-f[0])*c;break;default:for(let h=0;h2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,fX,r),Array.isArray(r.values)&&r.dataType===void 0&&console.warn("vtkDataArray.newInstance: no dataType provided, converting to Float32Array"),!e.empty&&!e.values&&!e.size)throw new TypeError("Cannot create vtkDataArray object without: size > 0, values");if(e.values?Array.isArray(e.values)&&(e.values=Y5(e.dataType,e.values)):e.values=Fh(e.dataType,e.size),e.values&&(e.size=e.size??e.values.length,e.dataType=H_(e.values)),yr(t,e),K1(t,e,["name","numberOfComponents"]),e.size%e.numberOfComponents!==0)throw new RangeError("model.size is not a multiple of model.numberOfComponents");uX(t,e)}const wR=$n(yR,"vtkDataArray");var Bt={newInstance:wR,extend:yR,...lX,...WP};const{vtkErrorMacro:dX}=J,hX=["Build","Render"];function gX(t,e){e.classHierarchy.push("vtkViewNode"),t.build=n=>{},t.render=n=>{},t.traverse=n=>{const i=n.getTraverseOperation(),o=t[i];if(o){o(n);return}t.apply(n,!0);for(let a=0;a{const o=t[n.getOperation()];o&&o(i,n)},t.getViewNodeFor=n=>{if(e.renderable===n)return t;for(let i=0;ie._parent?e._parent.isA(n)?e._parent:e._parent.getFirstAncestorOfType(n):null,t.getLastAncestorOfType=n=>{if(!e._parent)return null;const i=e._parent.getLastAncestorOfType(n);return i||(e._parent.isA(n)?e._parent:null)},t.addMissingNode=n=>{if(!n)return;const i=e._renderableChildMap.get(n);if(i!==void 0)return i.setVisited(!0),i;const o=t.createViewNode(n);if(o)return o.setParent(t),o.setVisited(!0),e._renderableChildMap.set(n,o),e.children.push(o),o},t.addMissingNodes=n=>{if(!(!n||!n.length))for(let i=0;i{if(!(!n||!n.length))for(let i=0;i{const i=e.children.findIndex(a=>a===n);if(i<0)return!1;const o=n.getRenderable();return o&&e._renderableChildMap.delete(o),n.delete(),e.children.splice(i,1),!0},t.prepareNodes=()=>{for(let n=0;n{e.visited=n},t.removeUnusedNodes=()=>{let n=0;for(let i=0;i{if(!e.myFactory)return dX("Cannot create view nodes without my own factory"),null;const i=e.myFactory.createNode(n);return i&&i.setRenderable(n),i};const r=t.delete;t.delete=()=>{for(let n=0;n2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,pX,r),J.obj(t,e),J.event(t,e,"event"),e._renderableChildMap=new Map,J.get(t,e,["visited"]),J.setGet(t,e,["_parent","renderable","myFactory"]),J.getArray(t,e,["children"]),J.moveToProtected(t,e,["parent"]),gX(t,e)}const mX=J.newInstance(xR,"vtkViewNode");var fr={newInstance:mX,extend:xR,PASS_TYPES:hX};function vX(t,e){e.overrides||(e.overrides={}),e.classHierarchy.push("vtkViewNodeFactory"),t.createNode=r=>{if(r.isDeleted())return null;let n=0,i=r.getClassName(n++),o=!1;const a=Object.keys(e.overrides);for(;i&&!o;)a.indexOf(i)!==-1?o=!0:i=r.getClassName(n++);if(!o)return null;const s=e.overrides[i]();return s.setMyFactory(t),s}}const yX={};function CR(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,yX,r),J.obj(t,e),vX(t,e)}const wX=J.newInstance(CR,"vtkViewNodeFactory");var K_={newInstance:wX,extend:CR};const SR=Object.create(null);function Mi(t,e){SR[t]=e}function xX(t,e){e.classHierarchy.push("vtkOpenGLViewNodeFactory")}const CX={};function TR(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,CX,r),e.overrides=SR,K_.extend(t,e,r),xX(t,e)}const SX=J.newInstance(TR,"vtkOpenGLViewNodeFactory");var TX={newInstance:SX,extend:TR};function _X(){try{const n=new Int16Array([0,32767]),i=[1,1],o=document.createElement("canvas");o.width=4,o.height=4;const a=o.getContext("webgl2");if(!a)return!1;const s=a.getExtension("EXT_texture_norm16");if(!s)return!1;const c=`#version 300 es void main() { gl_PointSize = ${4 .toFixed(1)}; gl_Position = vec4(0, 0, 0, 1); @@ -2726,7 +2726,7 @@ void main() `;let l;if(t&&(l=a.getExtension(t),!l))return!1;const f=a.createShader(a.VERTEX_SHADER);if(a.shaderSource(f,s),a.compileShader(f),!a.getShaderParameter(f,a.COMPILE_STATUS))return!1;const u=a.createShader(a.FRAGMENT_SHADER);if(a.shaderSource(u,c),a.compileShader(u),!a.getShaderParameter(u,a.COMPILE_STATUS))return!1;const d=a.createProgram();if(a.attachShader(d,f),a.attachShader(d,u),a.linkProgram(d),!a.getProgramParameter(d,a.LINK_STATUS))return!1;const h=a.createTexture();a.bindTexture(a.TEXTURE_2D,h),a.texImage2D(a.TEXTURE_2D,0,n(a,l),Pte,Rte,0,a.RED,i(a,l),r);const g=e==="LINEAR"?a.LINEAR:a.NEAREST;a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,g),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,g),a.useProgram(d),a.drawArrays(a.POINTS,0,1);const p=new Uint8Array(4);a.readPixels(wD[0],wD[1],1,1,a.RGBA,a.UNSIGNED_BYTE,p);const[v,y,m]=p,w=a.getExtension("WEBGL_lose_context");return w&&w.loseContext(),v===y&&y===m&&v!==0}catch{return!1}}function Lte(){const t=new Int16Array([32767,2e3,3e3,4e3,5e3,16784,7e3,8e3,9e3,32767]);return{norm16:xD({ext:"EXT_texture_norm16",filterType:"NEAREST",texData:t,internalFormat:(e,r)=>r.R16_SNORM_EXT,glDataType:e=>e.SHORT}),norm16Linear:xD({ext:"EXT_texture_norm16",filterType:"LINEAR",texData:t,internalFormat:(e,r)=>r.R16_SNORM_EXT,glDataType:e=>e.SHORT})}}let Vu=!1;const vS={gpuTier:{tier:2},isMobile:!1,rendering:{useCPURendering:!1,preferSizeOverAccuracy:!1,strictZSpacingForVolumeViewport:!0},peerImport:t=>null};let ac={...vS,rendering:{...vS.rendering}},yp=null,PA=!1;function Ate(){const t=document.createElement("canvas");return t.getContext("webgl2")||t.getContext("webgl")||t.getContext("experimental-webgl")}function RA(){const t=Ate();return t instanceof WebGLRenderingContext||t instanceof WebGL2RenderingContext}function Nte(){const t=Lte();return t.norm16&&t.norm16Linear}function LA(){return/iPad|iPhone|iPod/.test(navigator.platform)?!0:navigator.maxTouchPoints&&navigator.maxTouchPoints>2&&navigator.platform.includes("MacIntel")}function AA(t=ac){var r;return Vu||(PA=Nte(),ac=Ui(vS,t),LA()&&((r=t.rendering)!=null&&r.preferSizeOverAccuracy?ac.rendering.preferSizeOverAccuracy=!0:console.log("norm16 texture not supported, you can turn on the preferSizeOverAccuracy flag to use native data type, but be aware of the inaccuracy of the rendering in high bits")),RA()?console.log("CornerstoneRender: using GPU rendering"):(console.log("CornerstoneRender: GPU not detected, using CPU rendering"),ac.rendering.useCPURendering=!0),Vu=!0,yp||(yp=new MA),Vu)}function kte(){return PA}function Vte(t,e=!0){ac.rendering.useCPURendering=t,Vu=!0,e&&hw()}function Fte(t){ac.rendering.preferSizeOverAccuracy=t,Vu=!0,hw()}function fw(){return!LA()}function Ute(){ac.rendering.useCPURendering=!RA(),hw()}function q0(){return ac.rendering.useCPURendering}function NA(){return Vu}function Bte(){Vu=!1}function dw(){return ac}function Gte(t){ac=t,hw()}function hw(){Bo().forEach(t=>{t.getViewports().forEach(e=>{e.updateRenderingPipeline()})})}function vl(){return yp||(yp=new MA),yp}async function kA(t){return ac.peerImport(t)}function Wte(t,e){e.classHierarchy.push("vtkStreamingOpenGLVolumeMapper"),t.buildBufferObjects=(r,n)=>{var p;const i=e.currentInput;if(!i)return;const o=n.getProperty();if(!e.jitterTexture.getHandle()){const v=new Uint8Array(1024);for(let y=0;y<32*32;++y)v[y]=255*Math.random();e.jitterTexture.setMinificationFilter(Xt.LINEAR),e.jitterTexture.setMagnificationFilter(Xt.LINEAR),e.jitterTexture.create2DFromRaw(32,32,1,xn.UNSIGNED_CHAR,v)}const{numberOfComponents:a}=i.get("numberOfComponents"),s=t.useIndependentComponents(o),c=o.getScalarOpacity(),l=e._openGLRenderWindow.getGraphicsResourceForObject(c);let f=ul(c,s,a);if(!(l!=null&&l.oglObject)||l.hash!==f){e.opacityTexture=Mr.newInstance(),e.opacityTexture.setOpenGLRenderWindow(e._openGLRenderWindow);const v=1024,y=v*2*a,m=new Float32Array(y),w=new Float32Array(v);for(let x=0;x1?1:-1,v[x*3+2]=-1;const y=new Uint16Array(8);y[0]=3,y[1]=0,y[2]=1,y[3]=3,y[4]=3,y[5]=0,y[6]=3,y[7]=2;const m=Bt.newInstance({numberOfComponents:3,values:v});m.setName("points");const w=Bt.newInstance({numberOfComponents:1,values:y});e.tris.getCABO().createVBO(w,"polys",xo.SURFACE,{points:m,cellOffset:0})}e.VBOBuildTime.modified()},t.getNeedToRebuildBufferObjects=(r,n)=>{var i,o,a,s,c,l;return e.VBOBuildTime.getMTime(){if(r.isDeleted())return null;let n=0,i=r.getClassName(n++),o=!1;const a=Object.keys(e.overrides);for(;i&&!o;)a.includes(i)?o=!0:i=r.getClassName(n++);if(!o)return null;const s=e.getModelInitialValues(r),c=e.overrides[i](s);return c.setMyFactory(t),c},e.overrides=VA,e.getModelInitialValues=r=>{const n={};return r.getClassName()==="vtkSharedVolumeMapper"&&(n.scalarTexture=r.getScalarTexture()),n}}const qte={};function FA(t,e,r={}){Object.assign(e,qte,r),K_.extend(t,e,r),Kte(t,e),lo("vtkActor",$Z.newInstance),lo("vtkActor2D",qZ.newInstance),lo("vtkCamera",ZZ.newInstance),lo("vtkGlyph3DMapper",Cee.newInstance),lo("vtkImageMapper",Iee.newInstance),lo("vtkImageCPRMapper",Lee.newInstance),lo("vtkImageSlice",Vee.newInstance),lo("vtkMapper",lw.newInstance),lo("vtkPixelSpaceCallbackMapper",Wee.newInstance),lo("vtkRenderer",Kee.newInstance),lo("vtkSkybox",Jee.newInstance),lo("vtkSphereMapper",rte.newInstance),lo("vtkStickMapper",cte.newInstance),lo("vtkTexture",Mr.newInstance),lo("vtkVolume",dte.newInstance),lo("vtkVolumeMapper",CA.newInstance),lo("vtkSharedVolumeMapper",Hte.newInstance)}const Xte=J.newInstance(FA,"vtkStreamingOpenGLViewNodeFactory"),Yte={newInstance:Xte,extend:FA};function Jte(t,e){e.classHierarchy.push("vtkStreamingOpenGLRenderWindow")}function UA(t,e,r={}){Object.assign(e,r),BZ.extend(t,e,r),e.myFactory=Yte.newInstance(),lo("vtkRenderWindow",BA),Jte(t,e)}const BA=J.newInstance(UA,"vtkStreamingOpenGLRenderWindow"),Zte={newInstance:BA,extend:UA},{vtkDebugMacro:lv}=J;function Qte(t,e){e.classHierarchy.push("vtkCamera");const r=new Float64Array(3),n=new Float64Array([0,0,-1]),i=new Float64Array([0,1,0]),o=Wt(new Float64Array(16)),a=Wt(new Float64Array(16)),s=new Float64Array(3),c=new Float64Array(3),l=new Float64Array(3),f=Wt(new Float64Array(16)),u=Wt(new Float64Array(16)),d=new Float64Array(3),h=new Float64Array(3);function g(){e.viewPlaneNormal[0]=-e.directionOfProjection[0],e.viewPlaneNormal[1]=-e.directionOfProjection[1],e.viewPlaneNormal[2]=-e.directionOfProjection[2]}t.orthogonalizeViewUp=()=>{const p=t.getViewMatrix();e.viewUp[0]=p[4],e.viewUp[1]=p[5],e.viewUp[2]=p[6],t.modified()},t.setPosition=(p,v,y)=>{p===e.position[0]&&v===e.position[1]&&y===e.position[2]||(e.position[0]=p,e.position[1]=v,e.position[2]=y,t.computeDistance(),t.modified())},t.setFocalPoint=(p,v,y)=>{p===e.focalPoint[0]&&v===e.focalPoint[1]&&y===e.focalPoint[2]||(e.focalPoint[0]=p,e.focalPoint[1]=v,e.focalPoint[2]=y,t.computeDistance(),t.modified())},t.setDistance=p=>{if(e.distance===p)return;e.distance=p,e.distance<1e-20&&(e.distance=1e-20,lv("Distance is set to minimum."));const v=e.directionOfProjection;e.focalPoint[0]=e.position[0]+v[0]*e.distance,e.focalPoint[1]=e.position[1]+v[1]*e.distance,e.focalPoint[2]=e.position[2]+v[2]*e.distance,t.modified()},t.computeDistance=()=>{const p=e.focalPoint[0]-e.position[0],v=e.focalPoint[1]-e.position[1],y=e.focalPoint[2]-e.position[2];if(e.distance=Math.sqrt(p*p+v*v+y*y),e.distance<1e-20){e.distance=1e-20,lv("Distance is set to minimum.");const m=e.directionOfProjection;e.focalPoint[0]=e.position[0]+m[0]*e.distance,e.focalPoint[1]=e.position[1]+m[1]*e.distance,e.focalPoint[2]=e.position[2]+m[2]*e.distance}e.directionOfProjection[0]=p/e.distance,e.directionOfProjection[1]=v/e.distance,e.directionOfProjection[2]=y/e.distance,g()},t.dolly=p=>{if(p<=0)return;const v=e.distance/p;t.setPosition(e.focalPoint[0]-v*e.directionOfProjection[0],e.focalPoint[1]-v*e.directionOfProjection[1],e.focalPoint[2]-v*e.directionOfProjection[2])},t.roll=p=>{const v=e.position,y=e.focalPoint,m=e.viewUp,w=new Float64Array([m[0],m[1],m[2],0]);Wt(f);const x=new Float64Array([y[0]-v[0],y[1]-v[1],y[2]-v[2]]);Ro(f,f,Zr(p),x),ku(w,w,f),e.viewUp[0]=w[0],e.viewUp[1]=w[1],e.viewUp[2]=w[2],t.modified()},t.azimuth=p=>{const v=e.focalPoint;Wt(u),dr(u,u,v),Ro(u,u,Zr(p),e.viewUp),dr(u,u,[-v[0],-v[1],-v[2]]),Yt(d,e.position,u),t.setPosition(d[0],d[1],d[2])},t.yaw=p=>{const v=e.position;Wt(u),dr(u,u,v),Ro(u,u,Zr(p),e.viewUp),dr(u,u,[-v[0],-v[1],-v[2]]),Yt(h,e.focalPoint,u),t.setFocalPoint(h[0],h[1],h[2])},t.elevation=p=>{const v=e.focalPoint,y=t.getViewMatrix(),m=[-y[0],-y[1],-y[2]];Wt(u),dr(u,u,v),Ro(u,u,Zr(p),m),dr(u,u,[-v[0],-v[1],-v[2]]),Yt(d,e.position,u),t.setPosition(d[0],d[1],d[2])},t.pitch=p=>{const v=e.position,y=t.getViewMatrix(),m=[y[0],y[1],y[2]];Wt(u),dr(u,u,v),Ro(u,u,Zr(p),m),dr(u,u,[-v[0],-v[1],-v[2]]),Yt(h,e.focalPoint,u),t.setFocalPoint(...h)},t.zoom=p=>{p<=0||(e.parallelProjection?e.parallelScale/=p:e.viewAngle/=p,t.modified())},t.translate=(p,v,y)=>{const m=[p,v,y];my(e.position,m,e.position),my(e.focalPoint,m,e.focalPoint),t.computeDistance(),t.modified()},t.applyTransform=p=>{const v=[...e.viewUp,1],y=[],m=[],w=[];v[0]+=e.position[0],v[1]+=e.position[1],v[2]+=e.position[2],ku(y,[...e.position,1],p),ku(m,[...e.focalPoint,1],p),ku(w,v,p),w[0]-=y[0],w[1]-=y[1],w[2]-=y[2],t.setPosition(...y.slice(0,3)),t.setFocalPoint(...m.slice(0,3)),t.setViewUp(...w.slice(0,3))},t.getThickness=()=>e.clippingRange[1]-e.clippingRange[0],t.setThickness=p=>{let v=p;v<1e-20&&(v=1e-20,lv("Thickness is set to minimum.")),t.setClippingRange(e.clippingRange[0],e.clippingRange[0]+v)},t.setThicknessFromFocalPoint=p=>{let v=p;v<1e-20&&(v=1e-20,lv("Thickness is set to minimum.")),t.setClippingRange(e.distance-v/2,e.distance+v/2)},t.setRoll=p=>{},t.getRoll=()=>{},t.setObliqueAngles=(p,v)=>{},t.getOrientation=()=>{},t.getOrientationWXYZ=()=>{},t.getFrustumPlanes=p=>{},t.getCameraLightTransformMatrix=p=>(kr(p,e.cameraLightTransform),p),t.computeCameraLightTransform=()=>{kr(o,t.getViewMatrix()),$r(o,o),t4(a,[e.distance,e.distance,e.distance]),An(o,o,a),Wt(e.cameraLightTransform),dr(e.cameraLightTransform,o,[0,0,-1])},t.deepCopy=p=>{},t.physicalOrientationToWorldDirection=p=>{const v=H6(p[0],p[1],p[2],p[3]),y=af(),m=H6(0,0,1,0);return BY(y,v),j6(m,v,m),j6(m,m,y),[m[0],m[1],m[2]]},t.getPhysicalToWorldMatrix=p=>{t.getWorldToPhysicalMatrix(p),$r(p,p)},t.getWorldToPhysicalMatrix=p=>{Wt(p);const v=[3];sl(e.physicalViewNorth,e.physicalViewUp,v),p[0]=v[0],p[1]=v[1],p[2]=v[2],p[4]=e.physicalViewUp[0],p[5]=e.physicalViewUp[1],p[6]=e.physicalViewUp[2],p[8]=-e.physicalViewNorth[0],p[9]=-e.physicalViewNorth[1],p[10]=-e.physicalViewNorth[2],En(p,p),tr(s,1/e.physicalScale,1/e.physicalScale,1/e.physicalScale),cl(p,p,s),dr(p,p,e.physicalTranslation)},t.computeViewParametersFromViewMatrix=p=>{$r(o,p),Yt(s,r,o),t.computeDistance();const v=e.distance;t.setPosition(s[0],s[1],s[2]),Yt(c,n,o),qn(c,c,s),Qn(c,c),t.setDirectionOfProjection(c[0],c[1],c[2]),Yt(l,i,o),qn(l,l,s),Qn(l,l),t.setViewUp(l[0],l[1],l[2]),t.setDistance(v)},t.computeViewParametersFromPhysicalMatrix=p=>{t.getWorldToPhysicalMatrix(o),An(o,p,o),t.computeViewParametersFromViewMatrix(o)},t.setViewMatrix=p=>{e.viewMatrix=p,e.viewMatrix&&(kr(o,e.viewMatrix),t.computeViewParametersFromViewMatrix(o),En(e.viewMatrix,e.viewMatrix))},t.getViewMatrix=()=>{if(e.viewMatrix)return e.viewMatrix;i4(o,e.position,e.focalPoint,e.viewUp),En(o,o);const p=new Float64Array(16);return kr(p,o),p},t.setProjectionMatrix=p=>{e.projectionMatrix=p},t.getProjectionMatrix=(p,v,y)=>{const m=new Float64Array(16);if(Wt(m),e.projectionMatrix){const C=1/e.physicalScale;return tr(s,C,C,C),kr(m,e.projectionMatrix),cl(m,m,s),En(m,m),m}Wt(o);const w=e.clippingRange[1]-e.clippingRange[0],x=[e.clippingRange[0]+(v+1)*w/2,e.clippingRange[0]+(y+1)*w/2];if(e.parallelProjection){const C=e.parallelScale*p,S=e.parallelScale,T=(e.windowCenter[0]-1)*C,_=(e.windowCenter[0]+1)*C,E=(e.windowCenter[1]-1)*S,b=(e.windowCenter[1]+1)*S;r4(o,T,_,E,b,x[0],x[1]),En(o,o)}else{if(e.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const C=Math.tan(Zr(e.viewAngle)/2);let S,T;e.useHorizontalViewAngle===!0?(S=e.clippingRange[0]*C,T=e.clippingRange[0]*C/p):(S=e.clippingRange[0]*C*p,T=e.clippingRange[0]*C);const _=(e.windowCenter[0]-1)*S,E=(e.windowCenter[0]+1)*S,b=(e.windowCenter[1]-1)*T,D=(e.windowCenter[1]+1)*T,I=x[0],P=x[1];o[0]=2*I/(E-_),o[5]=2*I/(D-b),o[2]=(_+E)/(E-_),o[6]=(b+D)/(D-b),o[10]=-(I+P)/(P-I),o[14]=-1,o[11]=-2*I*P/(P-I),o[15]=0}}return kr(m,o),m},t.getCompositeProjectionMatrix=(p,v,y)=>{const m=t.getViewMatrix(),w=t.getProjectionMatrix(p,v,y);return An(w,m,w),w},t.setDirectionOfProjection=(p,v,y)=>{if(e.directionOfProjection[0]===p&&e.directionOfProjection[1]===v&&e.directionOfProjection[2]===y)return;e.directionOfProjection[0]=p,e.directionOfProjection[1]=v,e.directionOfProjection[2]=y;const m=e.directionOfProjection;e.focalPoint[0]=e.position[0]+m[0]*e.distance,e.focalPoint[1]=e.position[1]+m[1]*e.distance,e.focalPoint[2]=e.position[2]+m[2]*e.distance,g()},t.setDeviceAngles=(p,v,y,m)=>{const w=[3];sl(e.physicalViewNorth,e.physicalViewUp,w);const x=Wt(new Float64Array(16));Ro(x,x,Zr(p),e.physicalViewUp),Ro(x,x,Zr(v),w),Ro(x,x,Zr(y),e.physicalViewNorth),Ro(x,x,Zr(-m),e.physicalViewUp);const C=new Float64Array([-e.physicalViewUp[0],-e.physicalViewUp[1],-e.physicalViewUp[2]]),S=new Float64Array(e.physicalViewNorth);Yt(C,C,x),Yt(S,S,x),t.setDirectionOfProjection(C[0],C[1],C[2]),t.setViewUp(S[0],S[1],S[2]),t.modified()},t.setOrientationWXYZ=(p,v,y,m)=>{const w=Wt(new Float64Array(16));if(p!==0&&(v!==0||y!==0||m!==0)){const S=Zr(p),T=af();tw(T,[v,y,m],S),wy(w,T)}const x=new Float64Array(3);Yt(x,[0,0,-1],w);const C=new Float64Array(3);Yt(C,[0,1,0],w),t.setDirectionOfProjection(...x),t.setViewUp(...C),t.modified()},t.computeClippingRange=p=>{let v=null,y=null;v=e.viewPlaneNormal,y=e.position;const m=-v[0],w=-v[1],x=-v[2],C=-(m*y[0]+w*y[1]+x*y[2]),S=[m*p[0]+w*p[2]+x*p[4]+C,1e-18];for(let T=0;T<2;T++)for(let _=0;_<2;_++)for(let E=0;E<2;E++){const b=m*p[E]+w*p[2+_]+x*p[4+T]+C;S[0]=bS[1]?b:S[1]}return S}}const ene={position:[0,0,1],focalPoint:[0,0,0],viewUp:[0,1,0],directionOfProjection:[0,0,-1],parallelProjection:!1,useHorizontalViewAngle:!1,viewAngle:30,parallelScale:1,clippingRange:[.01,1000.01],windowCenter:[0,0],viewPlaneNormal:[0,0,1],useOffAxisProjection:!1,screenBottomLeft:[-.5,-.5,-.5],screenBottomRight:[.5,-.5,-.5],screenTopRight:[.5,.5,-.5],freezeFocalPoint:!1,projectionMatrix:null,viewMatrix:null,cameraLightTransform:ba(),physicalTranslation:[0,0,0],physicalScale:1,physicalViewUp:[0,1,0],physicalViewNorth:[0,0,-1]};function GA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ene,r),J.obj(t,e),J.get(t,e,["distance"]),J.setGet(t,e,["parallelProjection","useHorizontalViewAngle","viewAngle","parallelScale","useOffAxisProjection","freezeFocalPoint","physicalScale"]),J.getArray(t,e,["directionOfProjection","viewPlaneNormal","position","focalPoint"]),J.setGetArray(t,e,["clippingRange","windowCenter"],2),J.setGetArray(t,e,["viewUp","screenBottomLeft","screenBottomRight","screenTopRight","physicalTranslation","physicalViewUp","physicalViewNorth"],3),Qte(t,e)}const tne=J.newInstance(GA,"vtkCamera");var I4={newInstance:tne,extend:GA};function nne(t,e){e.classHierarchy.push("vtkLight");const r=new Float64Array(3);t.getTransformedPosition=()=>(e.transformMatrix?Yt(r,e.position,e.transformMatrix):tr(r,e.position[0],e.position[1],e.position[2]),r),t.getTransformedFocalPoint=()=>(e.transformMatrix?Yt(r,e.focalPoint,e.transformMatrix):tr(r,e.focalPoint[0],e.focalPoint[1],e.focalPoint[2]),r),t.getDirection=()=>(e.directionMTime{const i=new Float64Array(3);Mn(i,e.position,n),e.focalPoint=i},t.setDirectionAngle=(n,i)=>{const o=Zr(n),a=Zr(i);t.setPosition(Math.cos(o)*Math.sin(a),Math.sin(o),Math.cos(o)*Math.cos(a)),t.setFocalPoint(0,0,0),t.setPositional(0)},t.setLightTypeToHeadLight=()=>{t.setLightType("HeadLight")},t.setLightTypeToCameraLight=()=>{t.setLightType("CameraLight")},t.setLightTypeToSceneLight=()=>{t.setTransformMatrix(null),t.setLightType("SceneLight")},t.lightTypeIsHeadLight=()=>e.lightType==="HeadLight",t.lightTypeIsSceneLight=()=>e.lightType==="SceneLight",t.lightTypeIsCameraLight=()=>e.lightType==="CameraLight"}const rne={switch:!0,intensity:1,color:[1,1,1],position:[0,0,1],focalPoint:[0,0,0],positional:!1,exponent:1,coneAngle:30,coneFalloff:5,attenuationValues:[1,0,0],transformMatrix:null,lightType:"SceneLight",shadowAttenuation:1,direction:[0,0,0],directionMTime:0};function ine(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,rne,r),J.obj(t,e),J.setGet(t,e,["intensity","switch","positional","exponent","coneAngle","coneFalloff","transformMatrix","lightType","shadowAttenuation","attenuationValues"]),J.setGetArray(t,e,["color","position","focalPoint","attenuationValues"],3),nne(t,e)}const one=J.newInstance(ine,"vtkLight");var ane={newInstance:one};const{vtkErrorMacro:b2}=J;function sne(t){return()=>b2(`vtkViewport::${t} - NOT IMPLEMENTED`)}function cne(t,e){e.classHierarchy.push("vtkViewport"),t.getViewProps=()=>e.props,t.hasViewProp=n=>e.props.includes(n),t.addViewProp=n=>{n&&!t.hasViewProp(n)&&e.props.push(n)},t.removeViewProp=n=>{const i=e.props.filter(o=>o!==n);e.props.length!==i.length&&(e.props=i)},t.removeAllViewProps=()=>{e.props=[]};function r(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];i.push(n);const o=n.getNestedProps();if(o&&o.length)for(let a=0;a{const n=[];for(let i=0;i{t.removeViewProp(n)},t.getActors2D=()=>(e.actors2D=[],e.props.forEach(n=>{e.actors2D=e.actors2D.concat(n.getActors2D())}),e.actors2D),t.displayToView=()=>b2("call displayToView on your view instead"),t.viewToDisplay=()=>b2("callviewtodisplay on your view instead"),t.getSize=()=>b2("call getSize on your View instead"),t.normalizedDisplayToProjection=(n,i,o)=>{const a=t.normalizedDisplayToNormalizedViewport(n,i,o);return t.normalizedViewportToProjection(a[0],a[1],a[2])},t.normalizedDisplayToNormalizedViewport=(n,i,o)=>{const a=[e.viewport[2]-e.viewport[0],e.viewport[3]-e.viewport[1]];return[(n-e.viewport[0])/a[0],(i-e.viewport[1])/a[1],o]},t.normalizedViewportToProjection=(n,i,o)=>[n*2-1,i*2-1,o*2-1],t.projectionToNormalizedDisplay=(n,i,o)=>{const a=t.projectionToNormalizedViewport(n,i,o);return t.normalizedViewportToNormalizedDisplay(a[0],a[1],a[2])},t.normalizedViewportToNormalizedDisplay=(n,i,o)=>{const a=[e.viewport[2]-e.viewport[0],e.viewport[3]-e.viewport[1]];return[n*a[0]+e.viewport[0],i*a[1]+e.viewport[1],o]},t.projectionToNormalizedViewport=(n,i,o)=>[(n+1)*.5,(i+1)*.5,(o+1)*.5],t.PickPropFrom=sne("PickPropFrom")}const lne={background:[0,0,0],background2:[.2,.2,.2],gradientBackground:!1,viewport:[0,0,1,1],aspect:[1,1],pixelAspect:[1,1],props:[],actors2D:[]};function WA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,lne,r),J.obj(t,e),J.event(t,e,"event"),J.setGetArray(t,e,["viewport"],4),J.setGetArray(t,e,["background","background2"],3),cne(t,e)}const une=J.newInstance(WA,"vtkViewport");var fne={newInstance:une,extend:WA};const{vtkDebugMacro:Tg,vtkErrorMacro:Cu,vtkWarningMacro:dne}=_o;function CD(t){return()=>Cu(`vtkRenderer::${t} - NOT IMPLEMENTED`)}function hne(t,e){e.classHierarchy.push("vtkRenderer");const r={type:"ComputeVisiblePropBoundsEvent",renderer:t},n={type:"ResetCameraClippingRangeEvent",renderer:t},i={type:"ResetCameraEvent",renderer:t};t.updateCamera=()=>(e.activeCamera||(Tg("No cameras are on, creating one."),t.getActiveCameraAndResetIfCreated()),e.activeCamera.render(t),!0),t.updateLightsGeometryToFollowCamera=()=>{const o=t.getActiveCameraAndResetIfCreated();e.lights.forEach(a=>{a.lightTypeIsSceneLight()||(a.lightTypeIsHeadLight()?(a.setPositionFrom(o.getPositionByReference()),a.setFocalPointFrom(o.getFocalPointByReference()),a.modified(o.getMTime())):a.lightTypeIsCameraLight()?a.setTransformMatrix(o.getCameraLightTransformMatrix(ba())):Cu("light has unknown light type",a.get()))})},t.updateLightGeometry=()=>e.lightFollowCamera?t.updateLightsGeometryToFollowCamera():!0,t.allocateTime=CD("allocateTime"),t.updateGeometry=CD("updateGeometry"),t.getVTKWindow=()=>e._renderWindow,t.setLayer=o=>{Tg(t.getClassName(),t,"setting Layer to ",o),e.layer!==o&&(e.layer=o,t.modified()),t.setPreserveColorBuffer(!!o)},t.setActiveCamera=o=>e.activeCamera===o?!1:(e.activeCamera=o,t.modified(),t.invokeEvent({type:"ActiveCameraEvent",camera:o}),!0),t.makeCamera=()=>{const o=I4.newInstance();return t.invokeEvent({type:"CreateCameraEvent",camera:o}),o},t.getActiveCamera=()=>(e.activeCamera||(e.activeCamera=t.makeCamera()),e.activeCamera),t.getActiveCameraAndResetIfCreated=()=>(e.activeCamera||(t.getActiveCamera(),t.resetCamera()),e.activeCamera),t.getActors=()=>(e.actors=[],e.props.forEach(o=>{e.actors=e.actors.concat(o.getActors())}),e.actors),t.addActor=t.addViewProp,t.removeActor=o=>{e.actors=e.actors.filter(a=>a!==o),t.removeViewProp(o),t.modified()},t.removeAllActors=()=>{t.getActors().forEach(a=>{t.removeViewProp(a)}),e.actors=[],t.modified()},t.getVolumes=()=>(e.volumes=[],e.props.forEach(o=>{e.volumes=e.volumes.concat(o.getVolumes())}),e.volumes),t.addVolume=t.addViewProp,t.removeVolume=o=>{e.volumes=e.volumes.filter(a=>a!==o),t.removeViewProp(o),t.modified()},t.removeAllVolumes=()=>{t.getVolumes().forEach(a=>{t.removeViewProp(a)}),e.volumes=[],t.modified()},t.hasLight=o=>e.lights.includes(o),t.addLight=o=>{o&&!t.hasLight(o)&&(e.lights.push(o),t.modified())},t.removeLight=o=>{e.lights=e.lights.filter(a=>a!==o),t.modified()},t.removeAllLights=()=>{e.lights=[],t.modified()},t.setLightCollection=o=>{e.lights=o,t.modified()},t.makeLight=ane.newInstance,t.createLight=()=>{e.automaticLightCreation&&(e._createdLight&&(t.removeLight(e._createdLight),e._createdLight.delete(),e._createdLight=null),e._createdLight=t.makeLight(),t.addLight(e._createdLight),e._createdLight.setLightTypeToHeadLight(),e._createdLight.setPosition(t.getActiveCamera().getPosition()),e._createdLight.setFocalPoint(t.getActiveCamera().getFocalPoint()))},t.normalizedDisplayToWorld=(o,a,s,c)=>{let l=t.normalizedDisplayToProjection(o,a,s);return l=t.projectionToView(l[0],l[1],l[2],c),t.viewToWorld(l[0],l[1],l[2])},t.worldToNormalizedDisplay=(o,a,s,c)=>{let l=t.worldToView(o,a,s);return l=t.viewToProjection(l[0],l[1],l[2],c),t.projectionToNormalizedDisplay(l[0],l[1],l[2])},t.viewToWorld=(o,a,s)=>{if(e.activeCamera===null)return Cu("ViewToWorld: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const c=e.activeCamera.getViewMatrix();$r(c,c),En(c,c);const l=new Float64Array([o,a,s]);return Yt(l,l,c),l},t.projectionToView=(o,a,s,c)=>{if(e.activeCamera===null)return Cu("ProjectionToView: no active camera, cannot compute projection to view, returning 0,0,0"),[0,0,0];const l=e.activeCamera.getProjectionMatrix(c,-1,1);$r(l,l),En(l,l);const f=new Float64Array([o,a,s]);return Yt(f,f,l),f},t.worldToView=(o,a,s)=>{if(e.activeCamera===null)return Cu("WorldToView: no active camera, cannot compute view to world, returning 0,0,0"),[0,0,0];const c=e.activeCamera.getViewMatrix();En(c,c);const l=new Float64Array([o,a,s]);return Yt(l,l,c),l},t.viewToProjection=(o,a,s,c)=>{if(e.activeCamera===null)return Cu("ViewToProjection: no active camera, cannot compute view to projection, returning 0,0,0"),[0,0,0];const l=e.activeCamera.getProjectionMatrix(c,-1,1);En(l,l);const f=new Float64Array([o,a,s]);return Yt(f,f,l),f},t.computeVisiblePropBounds=()=>{e.allBounds[0]=ir.INIT_BOUNDS[0],e.allBounds[1]=ir.INIT_BOUNDS[1],e.allBounds[2]=ir.INIT_BOUNDS[2],e.allBounds[3]=ir.INIT_BOUNDS[3],e.allBounds[4]=ir.INIT_BOUNDS[4],e.allBounds[5]=ir.INIT_BOUNDS[5];let o=!0;t.invokeEvent(r);for(let a=0;ae.allBounds[1]&&(e.allBounds[1]=c[1]),c[2]e.allBounds[3]&&(e.allBounds[3]=c[3]),c[4]e.allBounds[5]&&(e.allBounds[5]=c[5]))}}return o&&(Bh(e.allBounds),Tg("Can't compute bounds, no 3D props are visible")),e.allBounds},t.resetCamera=function(){const a=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:null)||t.computeVisiblePropBounds(),s=[0,0,0];if(!w2(a))return Tg("Cannot reset camera!"),!1;let c=null;if(t.getActiveCamera())c=e.activeCamera.getViewPlaneNormal();else return Cu("Trying to reset non-existent camera"),!1;e.activeCamera.setViewAngle(30),s[0]=(a[0]+a[1])/2,s[1]=(a[2]+a[3])/2,s[2]=(a[4]+a[5])/2;let l=a[1]-a[0],f=a[3]-a[2],u=a[5]-a[4];l*=l,f*=f,u*=u;let d=l+f+u;d=d===0?1:d,d=Math.sqrt(d)*.5;const h=Zr(e.activeCamera.getViewAngle()),g=d,p=d/Math.sin(h*.5),v=e.activeCamera.getViewUp();return Math.abs(_n(v,c))>.999&&(dne("Resetting view-up since view plane normal is parallel"),e.activeCamera.setViewUp(-v[2],v[0],v[1])),e.activeCamera.setFocalPoint(s[0],s[1],s[2]),e.activeCamera.setPosition(s[0]+p*c[0],s[1]+p*c[1],s[2]+p*c[2]),t.resetCameraClippingRange(a),e.activeCamera.setParallelScale(g),e.activeCamera.setPhysicalScale(d),e.activeCamera.setPhysicalTranslation(-s[0],-s[1],-s[2]),t.invokeEvent(i),!0},t.resetCameraClippingRange=function(){const a=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:null)||t.computeVisiblePropBounds();if(!w2(a))return Tg("Cannot reset camera clipping range!"),!1;if(t.getActiveCameraAndResetIfCreated(),!e.activeCamera)return Cu("Trying to reset clipping range of non-existent camera"),!1;const s=e.activeCamera.computeClippingRange(a);let c=0;if(e.activeCamera.getParallelProjection())c=.2*e.activeCamera.getParallelScale();else{const l=Zr(e.activeCamera.getViewAngle());c=.2*Math.tan(l/2)*s[1]}return s[1]-s[0]=s[1]?.01*s[1]:s[0],e.nearClippingPlaneTolerance||(e.nearClippingPlaneTolerance=.01),s[0]{o!==e._renderWindow&&(e._vtkWindow=o,e._renderWindow=o)},t.visibleActorCount=()=>e.props.filter(o=>o.getVisibility()).length,t.visibleVolumeCount=t.visibleActorCount,t.getMTime=()=>{let o=e.mtime;const a=e.activeCamera?e.activeCamera.getMTime():0;a>o&&(o=a);const s=e._createdLight?e._createdLight.getMTime():0;return s>o&&(o=s),o},t.getTransparent=()=>!!e.preserveColorBuffer,t.isActiveCameraCreated=()=>!!e.activeCamera}const gne={pickedProp:null,activeCamera:null,allBounds:[],ambient:[1,1,1],allocatedRenderTime:100,timeFactor:1,automaticLightCreation:!0,twoSidedLighting:!0,lastRenderTimeInSeconds:-1,renderWindow:null,lights:[],actors:[],volumes:[],lightFollowCamera:!0,numberOfPropsRendered:0,propArray:null,pathArray:null,layer:0,preserveColorBuffer:!1,preserveDepthBuffer:!1,computeVisiblePropBounds:rf(),interactive:!0,nearClippingPlaneTolerance:0,clippingRangeExpansion:.05,erase:!0,draw:!0,useShadows:!1,useDepthPeeling:!1,occlusionRatio:0,maximumNumberOfPeels:4,selector:null,delegate:null,texturedBackground:!1,backgroundTexture:null,environmentTexture:null,environmentTextureDiffuseStrength:1,environmentTextureSpecularStrength:1,useEnvironmentTextureAsBackground:!1,pass:0};function zA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};for(Object.assign(e,gne,r),fne.extend(t,e,r),e.background||(e.background=[0,0,0,1]);e.background.length<3;)e.background.push(0);e.background.length===3&&e.background.push(1),Go(t,e,["_renderWindow","allocatedRenderTime","timeFactor","lastRenderTimeInSeconds","numberOfPropsRendered","lastRenderingUsedDepthPeeling","selector"]),ci(t,e,["twoSidedLighting","lightFollowCamera","automaticLightCreation","erase","draw","nearClippingPlaneTolerance","clippingRangeExpansion","backingStore","interactive","layer","preserveColorBuffer","preserveDepthBuffer","useDepthPeeling","occlusionRatio","maximumNumberOfPeels","delegate","backgroundTexture","texturedBackground","environmentTexture","environmentTextureDiffuseStrength","environmentTextureSpecularStrength","useEnvironmentTextureAsBackground","useShadows","pass"]),Uh(t,e,["actors","volumes","lights"]),I_(t,e,["background"],4,1),q1(t,e,["renderWindow"]),hne(t,e)}const pne=$n(zA,"vtkRenderer");var $A={newInstance:pne,extend:zA};const mne={Unknown:0,LeftController:1,RightController:2},vne={Unknown:0,Trigger:1,TrackPad:2,Grip:3,Thumbstick:4,A:5,B:6,ApplicationMenu:7},yne={Unknown:0,TouchpadX:1,TouchpadY:2,ThumbstickX:3,ThumbstickY:4};var jA={Device:mne,Input:vne,Axis:yne};const{Device:uv,Input:zf}=jA,{vtkWarningMacro:fv,vtkErrorMacro:dv,normalizeWheel:wne,vtkOnceErrorMacro:xne}=J,Yd={ctrlKey:!1,altKey:!1,shiftKey:!1},jx={"xr-standard":[zf.Trigger,zf.Grip,zf.TrackPad,zf.Thumbstick,zf.A,zf.B]},O4=["StartAnimation","Animation","EndAnimation","PointerEnter","PointerLeave","MouseEnter","MouseLeave","StartMouseMove","MouseMove","EndMouseMove","LeftButtonPress","LeftButtonRelease","MiddleButtonPress","MiddleButtonRelease","RightButtonPress","RightButtonRelease","KeyPress","KeyDown","KeyUp","StartMouseWheel","MouseWheel","EndMouseWheel","StartPinch","Pinch","EndPinch","StartPan","Pan","EndPan","StartRotate","Rotate","EndRotate","Button3D","Move3D","StartPointerLock","EndPointerLock","StartInteraction","Interaction","EndInteraction","AnimationFrameRateUpdate"];function _g(t){t.cancelable&&t.preventDefault()}function hv(t){const e=Object.create(null);return t.forEach(r=>{let{pointerId:n,position:i}=r;e[n]=i}),e}function Cne(t,e){e.classHierarchy.push("vtkRenderWindowInteractor");const r={...t},n=new Set,i=new Map;let o=1;t.start=()=>{!e.initialized&&(t.initialize(),!e.initialized)||t.startEventLoop()},t.setRenderWindow=p=>{dv("you want to call setView(view) instead of setRenderWindow on a vtk.js interactor")},t.setInteractorStyle=p=>{e.interactorStyle!==p&&(e.interactorStyle!=null&&e.interactorStyle.setInteractor(null),e.interactorStyle=p,e.interactorStyle!=null&&e.interactorStyle.getInteractor()!==t&&e.interactorStyle.setInteractor(t))},t.initialize=()=>{e.initialized=!0,t.enable(),t.render()},t.enable=()=>t.setEnabled(!0),t.disable=()=>t.setEnabled(!1),t.startEventLoop=()=>fv("empty event loop");function a(p,v){e._forcedRenderer||(e.currentRenderer=t.findPokedRenderer(p,v))}t.getCurrentRenderer=()=>(e.currentRenderer||a(0,0),e.currentRenderer);function s(p){const v=e._view.getCanvas(),y=v.getBoundingClientRect(),m=v.width/y.width,w=v.height/y.height,x={x:m*(p.clientX-y.left),y:w*(y.height-p.clientY+y.top),z:0};return(i.size<=1||!e.currentRenderer)&&a(x.x,x.y),x}const c=e._getScreenEventPositionFor||s;function l(p){return{controlKey:p.ctrlKey,altKey:p.altKey,shiftKey:p.shiftKey}}function f(p){const v=l(p);return{key:p.key,keyCode:p.charCode,...v}}function u(p){return p.pointerType||""}const d=()=>{if(e.container===null)return;const{container:p}=e;p.addEventListener("contextmenu",_g),p.addEventListener("wheel",t.handleWheel),p.addEventListener("DOMMouseScroll",t.handleWheel),p.addEventListener("pointerenter",t.handlePointerEnter),p.addEventListener("pointerleave",t.handlePointerLeave),p.addEventListener("pointermove",t.handlePointerMove,{passive:!1}),p.addEventListener("pointerdown",t.handlePointerDown,{passive:!1}),p.addEventListener("pointerup",t.handlePointerUp),p.addEventListener("pointercancel",t.handlePointerCancel),document.addEventListener("keypress",t.handleKeyPress),document.addEventListener("keydown",t.handleKeyDown),document.addEventListener("keyup",t.handleKeyUp),document.addEventListener("pointerlockchange",t.handlePointerLockChange),p.style.touchAction="none",p.style.userSelect="none",p.style.webkitTapHighlightColor="rgba(0,0,0,0)"};t.bindEvents=p=>{if(p===null)return;r.setContainer(p)&&d()};const h=()=>{clearTimeout(e.moveTimeoutID),clearTimeout(e.wheelTimeoutID),e.moveTimeoutID=0,e.wheelTimeoutID=0,o=1;const{container:p}=e;p&&(p.removeEventListener("contextmenu",_g),p.removeEventListener("wheel",t.handleWheel),p.removeEventListener("DOMMouseScroll",t.handleWheel),p.removeEventListener("pointerenter",t.handlePointerEnter),p.removeEventListener("pointerleave",t.handlePointerLeave),p.removeEventListener("pointermove",t.handlePointerMove,{passive:!1}),p.removeEventListener("pointerdown",t.handlePointerDown,{passive:!1}),p.removeEventListener("pointerup",t.handlePointerUp),p.removeEventListener("pointercancel",t.handlePointerCancel)),document.removeEventListener("keypress",t.handleKeyPress),document.removeEventListener("keydown",t.handleKeyDown),document.removeEventListener("keyup",t.handleKeyUp),document.removeEventListener("pointerlockchange",t.handlePointerLockChange),i.clear()};t.unbindEvents=()=>{h(),r.setContainer(null)},t.handleKeyPress=p=>{const v=f(p);t.keyPressEvent(v)},t.handleKeyDown=p=>{const v=f(p);t.keyDownEvent(v)},t.handleKeyUp=p=>{const v=f(p);t.keyUpEvent(v)},t.handlePointerEnter=p=>{const v={...l(p),position:c(p),deviceType:u(p)};t.pointerEnterEvent(v),v.deviceType==="mouse"&&t.mouseEnterEvent(v)},t.handlePointerLeave=p=>{const v={...l(p),position:c(p),deviceType:u(p)};t.pointerLeaveEvent(v),v.deviceType==="mouse"&&t.mouseLeaveEvent(v)},t.handlePointerDown=p=>{if(!(p.button>2||t.isPointerLocked()))switch(e.preventDefaultOnPointerDown&&_g(p),p.target.hasPointerCapture(p.pointerId)&&p.target.releasePointerCapture(p.pointerId),e.container.setPointerCapture(p.pointerId),i.has(p.pointerId)&&fv("[RenderWindowInteractor] duplicate pointerId detected"),i.set(p.pointerId,{pointerId:p.pointerId,position:c(p)}),p.pointerType){case"pen":case"touch":t.handleTouchStart(p);break;case"mouse":default:t.handleMouseDown(p);break}},t.handlePointerUp=p=>{if(i.has(p.pointerId))switch(e.preventDefaultOnPointerUp&&_g(p),i.delete(p.pointerId),e.container.releasePointerCapture(p.pointerId),p.pointerType){case"pen":case"touch":t.handleTouchEnd(p);break;case"mouse":default:t.handleMouseUp(p);break}},t.handlePointerCancel=p=>{if(i.has(p.pointerId))switch(i.delete(p.pointerId),p.pointerType){case"pen":case"touch":t.handleTouchEnd(p);break;case"mouse":default:t.handleMouseUp(p);break}},t.handlePointerMove=p=>{if(i.has(p.pointerId)){const v=i.get(p.pointerId);v.position=c(p)}switch(p.pointerType){case"pen":case"touch":t.handleTouchMove(p);break;case"mouse":default:t.handleMouseMove(p);break}},t.handleMouseDown=p=>{const v={...l(p),position:c(p),deviceType:u(p)};switch(p.button){case 0:t.leftButtonPressEvent(v);break;case 1:t.middleButtonPressEvent(v);break;case 2:t.rightButtonPressEvent(v);break;default:dv(`Unknown mouse button pressed: ${p.button}`);break}},t.requestPointerLock=()=>{e.container&&e.container.requestPointerLock()},t.exitPointerLock=()=>{var p;return(p=document.exitPointerLock)==null?void 0:p.call(document)},t.isPointerLocked=()=>!!e.container&&document.pointerLockElement===e.container,t.handlePointerLockChange=()=>{t.isPointerLocked()?t.startPointerLockEvent():t.endPointerLockEvent()};function g(){e._view&&e.enabled&&e.enableRender&&(e.inRender=!0,e._view.traverseAllPasses(),e.inRender=!1),t.invokeRenderEvent()}t.requestAnimation=p=>{if(p===void 0){dv("undefined requester, can not start animating");return}if(n.has(p)){fv("requester is already registered for animating");return}n.add(p),!e.animationRequest&&n.size===1&&!e.xrAnimation&&(e._animationStartTime=Date.now(),e._animationFrameCount=0,e.animationRequest=requestAnimationFrame(t.handleAnimation),t.startAnimationEvent())},t.extendAnimation=p=>{const v=Date.now()+p;e._animationExtendedEnd=Math.max(e._animationExtendedEnd,v),!e.animationRequest&&n.size===0&&!e.xrAnimation&&(e._animationStartTime=Date.now(),e._animationFrameCount=0,e.animationRequest=requestAnimationFrame(t.handleAnimation),t.startAnimationEvent())},t.isAnimating=()=>e.xrAnimation||e.animationRequest!==null,t.cancelAnimation=function(p){let v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!n.has(p)){if(!v){const y=p&&p.getClassName?p.getClassName():p;fv(`${y} did not request an animation`)}return}n.delete(p),e.animationRequest&&n.size===0&&Date.now()>e._animationExtendedEnd&&(cancelAnimationFrame(e.animationRequest),e.animationRequest=null,t.endAnimationEvent(),t.render())},t.switchToXRAnimation=()=>{e.animationRequest&&(cancelAnimationFrame(e.animationRequest),e.animationRequest=null),e.xrAnimation=!0},t.returnFromXRAnimation=()=>{e.xrAnimation=!1,n.size!==0&&(e.recentAnimationFrameRate=10,e.animationRequest=requestAnimationFrame(t.handleAnimation))},t.updateXRGamepads=(p,v,y)=>{p.inputSources.forEach(m=>{const w=m.gripSpace==null?null:v.getPose(m.gripSpace,y),x=m.gripSpace==null?null:v.getPose(m.targetRaySpace,y),C=m.gamepad,S=m.handedness;if(C){C.index in e.lastGamepadValues||(e.lastGamepadValues[C.index]={left:{buttons:{}},right:{buttons:{}},none:{buttons:{}}});for(let T=0;T{const v={...l(p),position:c(p),deviceType:u(p)};e.moveTimeoutID===0?t.startMouseMoveEvent(v):(t.mouseMoveEvent(v),clearTimeout(e.moveTimeoutID)),e.moveTimeoutID=setTimeout(()=>{t.endMouseMoveEvent(),e.moveTimeoutID=0},200)},t.handleAnimation=()=>{const p=Date.now();e._animationFrameCount++,p-e._animationStartTime>1e3&&e._animationFrameCount>1&&(e.recentAnimationFrameRate=1e3*(e._animationFrameCount-1)/(p-e._animationStartTime),e.lastFrameTime=1/e.recentAnimationFrameRate,t.animationFrameRateUpdateEvent(),e._animationStartTime=p,e._animationFrameCount=1),t.animationEvent(),g(),n.size>0||Date.now(){_g(p);const v={...wne(p),...l(p),position:c(p),deviceType:u(p)};e.wheelTimeoutID===0&&(Math.abs(v.spinY)>=.3?o=Math.abs(v.spinY):o=1),v.spinY/=o,e.wheelTimeoutID===0?(t.startMouseWheelEvent(v),t.mouseWheelEvent(v)):(t.mouseWheelEvent(v),clearTimeout(e.wheelTimeoutID)),e.mouseScrollDebounceByPass?(t.extendAnimation(600),t.endMouseWheelEvent(),e.wheelTimeoutID=0):e.wheelTimeoutID=setTimeout(()=>{t.extendAnimation(600),t.endMouseWheelEvent(),e.wheelTimeoutID=0},200)},t.handleMouseUp=p=>{const v={...l(p),position:c(p),deviceType:u(p)};switch(p.button){case 0:t.leftButtonReleaseEvent(v);break;case 1:t.middleButtonReleaseEvent(v);break;case 2:t.rightButtonReleaseEvent(v);break;default:dv(`Unknown mouse button released: ${p.button}`);break}},t.handleTouchStart=p=>{const v=[...i.values()];if(e.recognizeGestures&&v.length>1){const y=hv(i);if(v.length===2){const m={...l(Yd),position:v[0].position,deviceType:u(p)};t.leftButtonReleaseEvent(m)}t.recognizeGesture("TouchStart",y)}else if(v.length===1){const y={...l(Yd),position:c(p),deviceType:u(p)};t.leftButtonPressEvent(y)}},t.handleTouchMove=p=>{const v=[...i.values()];if(e.recognizeGestures&&v.length>1){const y=hv(i);t.recognizeGesture("TouchMove",y)}else if(v.length===1){const y={...l(Yd),position:v[0].position,deviceType:u(p)};t.mouseMoveEvent(y)}},t.handleTouchEnd=p=>{const v=[...i.values()];if(e.recognizeGestures)if(v.length===0){const y={...l(Yd),position:c(p),deviceType:u(p)};t.leftButtonReleaseEvent(y)}else if(v.length===1){const y=hv(i);t.recognizeGesture("TouchEnd",y);const m={...l(Yd),position:v[0].position,deviceType:u(p)};t.leftButtonPressEvent(m)}else{const y=hv(i);t.recognizeGesture("TouchMove",y)}else if(v.length===1){const y={...l(Yd),position:v[0].position,deviceType:u(p)};t.leftButtonReleaseEvent(y)}},t.setView=p=>{e._view!==p&&(e._view=p,e._view.getRenderable().setInteractor(t),t.modified())},t.getFirstRenderer=()=>{var p,v,y;return(y=(v=(p=e._view)==null?void 0:p.getRenderable())==null?void 0:v.getRenderersByReference())==null?void 0:y[0]},t.findPokedRenderer=function(){var S,T;let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!e._view)return null;const y=(T=(S=e._view)==null?void 0:S.getRenderable())==null?void 0:T.getRenderers();if(!y||y.length===0)return null;y.sort((_,E)=>_.getLayer()-E.getLayer());let m=null,w=null,x=null,C=y.length;for(;C--;){const _=y[C];if(e._view.isInViewport(p,v,_)&&_.getInteractive()){x=_;break}m===null&&_.getInteractive()&&(m=_),w===null&&e._view.isInViewport(p,v,_)&&(w=_)}return x===null&&(x=m),x===null&&(x=w),x==null&&(x=y[0]),x},t.render=()=>{!t.isAnimating()&&!e.inRender&&g()},O4.forEach(p=>{const v=p.charAt(0).toLowerCase()+p.slice(1);t[`${v}Event`]=y=>{if(!e.enabled)return;if(!t.getCurrentRenderer()){xne(` Can not forward events without a current renderer on the interactor. `);return}const w={type:p,pokedRenderer:e.currentRenderer,firstRenderer:t.getFirstRenderer(),...y};t[`invoke${p}`](w)}}),t.recognizeGesture=(p,v)=>{if(Object.keys(v).length>2)return;if(e.startingEventPositions||(e.startingEventPositions={}),p==="TouchStart"){Object.keys(v).forEach(b=>{e.startingEventPositions[b]=v[b]}),e.currentGesture="Start";return}if(p==="TouchEnd"){e.currentGesture==="Pinch"&&(t.render(),t.endPinchEvent()),e.currentGesture==="Rotate"&&(t.render(),t.endRotateEvent()),e.currentGesture==="Pan"&&(t.render(),t.endPanEvent()),e.currentGesture="Start",e.startingEventPositions={};return}let y=0;const m=[],w=[];Object.keys(v).forEach(b=>{m[y]=v[b],w[y]=e.startingEventPositions[b],y++});const x=Math.sqrt((w[0].x-w[1].x)*(w[0].x-w[1].x)+(w[0].y-w[1].y)*(w[0].y-w[1].y)),C=Math.sqrt((m[0].x-m[1].x)*(m[0].x-m[1].x)+(m[0].y-m[1].y)*(m[0].y-m[1].y));let S=py(Math.atan2(w[1].y-w[0].y,w[1].x-w[0].x)),T=py(Math.atan2(m[1].y-m[0].y,m[1].x-m[0].x)),_=T-S;T=T+180>=360?T-180:T+180,S=S+180>=360?S-180:S+180,Math.abs(T-S)b&&D>I&&D>P){e.currentGesture="Pinch";const O={scale:1,touches:v};t.startPinchEvent(O)}else if(I>b&&I>P){e.currentGesture="Rotate";const O={rotation:0,touches:v};t.startRotateEvent(O)}else if(P>b){e.currentGesture="Pan";const O={translation:[0,0],touches:v};t.startPanEvent(O)}}else{if(e.currentGesture==="Rotate"){const b={rotation:_,touches:v};t.rotateEvent(b)}if(e.currentGesture==="Pinch"){const b={scale:C/x,touches:v};t.pinchEvent(b)}if(e.currentGesture==="Pan"){const b={translation:E,touches:v};t.panEvent(b)}}},t.handleVisibilityChange=()=>{e._animationStartTime=Date.now(),e._animationFrameCount=0},t.setCurrentRenderer=p=>{e._forcedRenderer=!!p,e.currentRenderer=p},t.setContainer=p=>{h();const v=r.setContainer(p??null);return v&&d(),v},t.delete=()=>{for(;n.size;)t.cancelAnimation(n.values().next().value);typeof document.hidden<"u"&&document.removeEventListener("visibilitychange",t.handleVisibilityChange),e.container&&t.setContainer(null),r.delete()},typeof document.hidden<"u"&&document.addEventListener("visibilitychange",t.handleVisibilityChange,!1)}const Sne={renderWindow:null,interactorStyle:null,picker:null,pickingManager:null,initialized:!1,enabled:!1,enableRender:!0,currentRenderer:null,lightFollowCamera:!0,desiredUpdateRate:30,stillUpdateRate:2,container:null,recognizeGestures:!0,currentGesture:"Start",animationRequest:null,lastFrameTime:.1,recentAnimationFrameRate:10,wheelTimeoutID:0,moveTimeoutID:0,lastGamepadValues:{},preventDefaultOnPointerDown:!1,preventDefaultOnPointerUp:!1,mouseScrollDebounceByPass:!1};function HA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Sne,r),J.obj(t,e),e._animationExtendedEnd=0,J.event(t,e,"RenderEvent"),O4.forEach(n=>J.event(t,e,n)),J.get(t,e,["initialized","interactorStyle","lastFrameTime","recentAnimationFrameRate","_view"]),J.setGet(t,e,["container","lightFollowCamera","enabled","enableRender","recognizeGestures","desiredUpdateRate","stillUpdateRate","picker","preventDefaultOnPointerDown","preventDefaultOnPointerUp","mouseScrollDebounceByPass"]),J.moveToProtected(t,e,["view"]),Cne(t,e)}const Tne=J.newInstance(HA,"vtkRenderWindowInteractor");var _ne={newInstance:Tne,extend:HA,handledEvents:O4,...jA};const{vtkErrorMacro:Ene}=J,bne=[1,-1,1,-1,1,-1];function Dne(t,e){e.classHierarchy.push("vtkPoints"),t.getNumberOfPoints=t.getNumberOfTuples,t.setNumberOfPoints=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:3;t.getNumberOfPoints()!==r&&(e.size=r*n,e.values=J.newTypedArray(e.dataType,e.size),t.setNumberOfComponents(n),t.modified())},t.setPoint=function(r){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;ot.insertNextTuple([r,n,i]),t.getBounds=()=>{if(t.getNumberOfComponents()===3){const i=t.getRange(0);e.bounds[0]=i[0],e.bounds[1]=i[1];const o=t.getRange(1);e.bounds[2]=o[0],e.bounds[3]=o[1];const a=t.getRange(2);return e.bounds[4]=a[0],e.bounds[5]=a[1],e.bounds}if(t.getNumberOfComponents()!==2)return Ene(`getBounds called on an array with components of - ${t.getNumberOfComponents()}`),bne;const r=t.getRange(0);e.bounds[0]=r[0],e.bounds[1]=r[1];const n=t.getRange(1);return e.bounds[2]=n[0],e.bounds[3]=n[1],e.bounds[4]=0,e.bounds[5]=0,e.bounds},t.computeBounds=t.getBounds,t.setNumberOfComponents(e.numberOfComponents<2?3:e.numberOfComponents)}const Ine={empty:!0,numberOfComponents:3,dataType:xn.FLOAT,bounds:[1,-1,1,-1,1,-1]};function KA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ine,r),Bt.extend(t,e,r),Dne(t,e)}const One=J.newInstance(KA,"vtkPoints");var l1={newInstance:One,extend:KA};function qA(t){let e=0;return t.filter((r,n)=>n===e?(e+=r+1,!0):!1)}function XA(t){let e=0;for(let r=0;r(e.numberOfCells!==void 0&&!n||(e.cellSizes?e.numberOfCells=e.cellSizes.length:e.numberOfCells=XA(t.getData())),e.numberOfCells),t.getCellSizes=n=>(e.cellSizes!==void 0&&!n||(e.cellSizes=qA(t.getData())),e.cellSizes),t.resize=n=>{const i=t.getNumberOfTuples();r.resize(n);const o=t.getNumberOfTuples();o{r.setData(n,1),e.numberOfCells=void 0,e.cellSizes=void 0},t.getCell=n=>{let i=n;const o=e.values[i++];return e.values.subarray(i,i+o)},t.insertNextCell=n=>{const i=t.getNumberOfCells();return t.insertNextTuples([n.length,...n]),++e.numberOfCells,e.cellSizes!=null&&e.cellSizes.push(n.length),i}}function Rne(t){return{empty:!0,numberOfComponents:1,dataType:xn.UNSIGNED_INT,...t}}function YA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Bt.extend(t,e,Rne(r)),Pne(t,e)}const Lne=J.newInstance(YA,"vtkCellArray");var _d={newInstance:Lne,extend:YA,...Mne};function Ane(t,e){e.classHierarchy.push("vtkCell"),t.initialize=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(n){e.pointsIds=n;let i=e.points.getData();i.length!==3*e.pointsIds.length&&(i=J.newTypedArray(r.getDataType(),3*e.pointsIds.length));const o=r.getData();e.pointsIds.forEach((a,s)=>{let c=3*a,l=3*s;i[l]=o[c],i[++l]=o[++c],i[++l]=o[++c]}),e.points.setData(i)}else{e.points=r,e.pointsIds=new Array(r.getNumberOfPoints());for(let i=r.getNumberOfPoints()-1;i>=0;--i)e.pointsIds[i]=i}},t.getBounds=()=>{const r=e.points.getNumberOfPoints(),n=[];if(r){e.points.getPoint(0,n),e.bounds[0]=n[0],e.bounds[1]=n[0],e.bounds[2]=n[1],e.bounds[3]=n[1],e.bounds[4]=n[2],e.bounds[5]=n[2];for(let i=1;ie.bounds[1]?n[0]:e.bounds[1],e.bounds[2]=n[1]e.bounds[3]?n[1]:e.bounds[3],e.bounds[4]=n[2]e.bounds[5]?n[2]:e.bounds[5]}else Bh(e.bounds);return e.bounds},t.getLength2=()=>{t.getBounds();let r=0,n=0;for(let i=0;i<3;i++)n=e.bounds[2*i+1]-e.bounds[2*i],r+=n*n;return r},t.getParametricDistance=r=>{let n,i=0;for(let o=0;o<3;o++)r[o]<0?n=-r[o]:r[o]>1?n=r[o]-1:n=0,n>i&&(i=n);return i},t.getNumberOfPoints=()=>e.points.getNumberOfPoints(),t.deepCopy=r=>{r.initialize(e.points,e.pointsIds)},t.getCellDimension=()=>{},t.intersectWithLine=(r,n,i,o,a,s,c)=>{},t.evaluatePosition=(r,n,i,o,a,s)=>{J.vtkErrorMacro("vtkCell.evaluatePosition is not implemented.")}}const Nne={bounds:[-1,-1,-1,-1,-1,-1],pointsIds:[]};function JA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Nne,r),J.obj(t,e),e.points||(e.points=l1.newInstance()),J.get(t,e,["points","pointsIds"]),Ane(t,e)}const kne=J.newInstance(JA,"vtkCell");var Ly={newInstance:kne,extend:JA};function Vne(t,e){let r=e;for(e>=t.array.length&&(r+=t.array.length);r>t.array.length;)t.array.push({ncells:0,cells:null});t.array.length=r}function Fne(t,e){e.classHierarchy.push("vtkCellLinks"),t.buildLinks=r=>{const n=r.getPoints().getNumberOfPoints(),i=r.getNumberOfCells(),o=new Uint32Array(n);if(r.isA("vtkPolyData")){for(let a=0;a{t.incrementLinkCount(c)})}t.allocateLinks(n),e.maxId=n-1;for(let a=0;a{t.insertCellReference(c,o[c]++,a)})}}else{for(let a=0;a{t.incrementLinkCount(c)});t.allocateLinks(n),e.maxId=n-1;for(let a=0;a{t.insertCellReference(c,o[c]++,a)})}},t.allocate=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e3;e.array=Array(r).fill().map(()=>({ncells:0,cells:null})),e.extend=n,e.maxId=-1},t.initialize=()=>{e.array=null},t.getLink=r=>e.array[r],t.getNcells=r=>e.array[r].ncells,t.getCells=r=>e.array[r].cells,t.insertNextPoint=r=>{e.array.push({ncells:r,cells:Array(r)}),++e.maxId},t.insertNextCellReference=(r,n)=>{e.array[r].cells[e.array[r].ncells++]=n},t.deletePoint=r=>{e.array[r].ncells=0,e.array[r].cells=null},t.removeCellReference=(r,n)=>{e.array[n].cells=e.array[n].cells.filter(i=>i!==r),e.array[n].ncells=e.array[n].cells.length},t.addCellReference=(r,n)=>{e.array[n].cells[e.array[n].ncells++]=r},t.resizeCellList=(r,n)=>{e.array[r].cells.length=n},t.squeeze=()=>{Vne(e,e.maxId+1)},t.reset=()=>{e.maxId=-1},t.deepCopy=r=>{e.array=[...r.array],e.extend=r.extend,e.maxId=r.maxId},t.incrementLinkCount=r=>{++e.array[r].ncells},t.allocateLinks=r=>{for(let n=0;n{e.array[r].cells[n]=i}}const Une={array:null,maxId:0,extend:0};function ZA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Une,r),J.obj(t,e),Fne(t,e)}const Bne=J.newInstance(ZA,"vtkCellLinks");var Gne={newInstance:Bne,extend:ZA};const br={VTK_EMPTY_CELL:0,VTK_VERTEX:1,VTK_POLY_VERTEX:2,VTK_LINE:3,VTK_POLY_LINE:4,VTK_TRIANGLE:5,VTK_TRIANGLE_STRIP:6,VTK_POLYGON:7,VTK_QUAD:9,VTK_QUADRATIC_EDGE:21,VTK_CONVEX_POINT_SET:41,VTK_POLYHEDRON:42},yS=["vtkEmptyCell","vtkVertex","vtkPolyVertex","vtkLine","vtkPolyLine","vtkTriangle","vtkTriangleStrip","vtkPolygon","vtkPixel","vtkQuad","vtkTetra","vtkVoxel","vtkHexahedron","vtkWedge","vtkPyramid","vtkPentagonalPrism","vtkHexagonalPrism","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkQuadraticEdge","vtkQuadraticTriangle","vtkQuadraticQuad","vtkQuadraticTetra","vtkQuadraticHexahedron","vtkQuadraticWedge","vtkQuadraticPyramid","vtkBiQuadraticQuad","vtkTriQuadraticHexahedron","vtkQuadraticLinearQuad","vtkQuadraticLinearWedge","vtkBiQuadraticQuadraticWedge","vtkBiQuadraticQuadraticHexahedron","vtkBiQuadraticTriangle","vtkCubicLine","vtkQuadraticPolygon","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkConvexPointSet","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkParametricCurve","vtkParametricSurface","vtkParametricTriSurface","vtkParametricQuadSurface","vtkParametricTetraRegion","vtkParametricHexRegion","UnknownClass","UnknownClass","UnknownClass","vtkHigherOrderEdge","vtkHigherOrderTriangle","vtkHigherOrderQuad","vtkHigherOrderPolygon","vtkHigherOrderTetrahedron","vtkHigherOrderWedge","vtkHigherOrderPyramid","vtkHigherOrderHexahedron"];function Wne(t){return t0&&arguments[0]!==void 0?arguments[0]:512,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e3;e.size=r>0?r:1,e.extend=n>0?n:1,e.maxId=-1,e.typeArray=new Uint8Array(r),e.locationArray=new Uint32Array(r)},t.insertCell=(r,n,i)=>{e.typeArray[r]=n,e.locationArray[r]=i,r>e.maxId&&(e.maxId=r)},t.insertNextCell=(r,n)=>(t.insertCell(++e.maxId,r,n),e.maxId),t.setCellTypes=(r,n,i)=>{e.size=r,e.typeArray=n,e.locationArray=i,e.maxId=r-1},t.getCellLocation=r=>e.locationArray[r],t.deleteCell=r=>{e.typeArray[r]=br.VTK_EMPTY_CELL},t.getNumberOfTypes=()=>e.maxId+1,t.isType=r=>{const n=t.getNumberOfTypes();for(let i=0;it.insertNextCell(r,-1),t.getCellType=r=>e.typeArray[r],t.reset=()=>{e.maxId=-1},t.deepCopy=r=>{t.allocate(r.getSize(),r.getExtend()),e.typeArray.set(r.getTypeArray()),e.locationArray.set(r.getLocationArray()),e.maxId=r.getMaxId()}}const qne={size:0,maxId:-1,extend:1e3};function QA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,qne,r),J.obj(t,e),J.get(t,e,["size","maxId","extend"]),J.getArray(t,e,["typeArray","locationArray"]),Kne(t,e)}const Xne=J.newInstance(QA,"vtkCellTypes");var Yne={newInstance:Xne,extend:QA,...Hne};const Jne={NO_INTERSECTION:0,YES_INTERSECTION:1,ON_LINE:2};var eN={IntersectionState:Jne};const{IntersectionState:D2}=eN;function C0(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;const i={t:Number.MIN_VALUE,distance:0},o=[];let a;o[0]=r[0]-e[0],o[1]=r[1]-e[1],o[2]=r[2]-e[2];const s=o[0]*(t[0]-e[0])+o[1]*(t[1]-e[1])+o[2]*(t[2]-e[2]),c=_n(o,o);let l=1e-5*s;return c!==0&&(i.t=s/c),l<0&&(l=-l),-l1?a=r:(a=o,o[0]=e[0]+i.t*o[0],o[1]=e[1]+i.t*o[1],o[2]=e[2]+i.t*o[2]),n&&(n[0]=a[0],n[1]=a[1],n[2]=a[2]),i.distance=$c(a,t),i}function tN(t,e,r,n,i,o){const a=[],s=[],c=[];i[0]=0,o[0]=0,zl(e,t,a),zl(n,r,s),zl(r,t,c);const l=[_n(a,a),-_n(a,s),-_n(a,s),_n(s,s)],f=[];if(f[0]=_n(a,c),f[1]=-_n(s,c),cR(l,f,2)===0){let u=Number.MAX_VALUE;const d=[t,e,r,n],h=[r,r,t,t],g=[n,n,e,e];o[0],o[0],i[0],i[0],i[0],i[0],o[0],o[0];let p;for(let v=0;v<4;v++)p=C0(d[v],h[v],g[v]),p.distance=0&&i[0]<=1&&o[0]>=0&&o[0]<=1?D2.YES_INTERSECTION:D2.NO_INTERSECTION}const Zne={distanceToLine:C0,intersection:tN};function Qne(t,e){e.classHierarchy.push("vtkLine");function r(n){return n>=0&&n<=1}t.getCellDimension=()=>1,t.intersectWithLine=(n,i,o,a,s)=>{const c={intersect:0,t:Number.MAX_VALUE,subId:0,betweenPoints:null};s[1]=0,s[2]=0;const l=[],f=[],u=[];e.points.getPoint(0,f),e.points.getPoint(1,u);const d=[],h=[],g=tN(n,i,f,u,d,h);if(c.t=d[0],c.betweenPoints=r(c.t),s[0]=h[0],g===D2.YES_INTERSECTION){for(let p=0;p<3;p++)a[p]=f[p]+s[0]*(u[p]-f[p]),l[p]=n[p]+c.t*(i[p]-n[p]);if($c(a,l)<=o*o)return c.intersect=1,c}else{let p;if(c.t<0)return p=C0(n,f,u,a),p.distance<=o*o&&(c.t=0,c.intersect=1,c.betweenPoints=!0),c;if(c.t>1)return p=C0(i,f,u,a),p.distance<=o*o&&(c.t=1,c.intersect=1,c.betweenPoints=!0),c;if(s[0]<0)return s[0]=0,p=C0(f,n,i,a),c.t=p.t,p.distance<=o*o&&(c.intersect=1),c;if(s[0]>1)return s[0]=1,p=C0(u,n,i,a),c.t=p.t,p.distance<=o*o&&(c.intersect=1),c}return c},t.evaluateLocation=(n,i,o)=>{const a=[],s=[];e.points.getPoint(0,a),e.points.getPoint(1,s);for(let c=0;c<3;c++)i[c]=a[c]+n[0]*(s[c]-a[c]);o[0]=1-n[0],o[1]=n[0]},t.evaluateOrientation=(n,i,o)=>e.orientations?(S2(i,e.orientations[0],e.orientations[1],n[0]),o[0]=1-n[0],o[1]=n[0],!0):!1}const ere={orientations:null};function nN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ere,r),Ly.extend(t,e,r),J.setGet(t,e,["orientations"]),Qne(t,e)}const tre=J.newInstance(nN,"vtkLine");var ls={newInstance:tre,extend:nN,...Zne,...eN};function nre(t,e){e.classHierarchy.push("vtkPointSet"),e.points?e.points=ic(e.points):e.points=l1.newInstance(),t.getNumberOfPoints=()=>e.points.getNumberOfPoints(),t.getBounds=()=>e.points.getBounds(),t.computeBounds=()=>{t.getBounds()};const r=t.shallowCopy;t.shallowCopy=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;r(n,i),e.points=l1.newInstance(),e.points.shallowCopy(n.getPoints())}}const rre={};function rN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,rre,r),Gh.extend(t,e,r),J.setGet(t,e,["points"]),nre(t,e)}const ire=J.newInstance(rN,"vtkPointSet");var ore={newInstance:ire,extend:rN};function M4(t,e,r,n){const i=r[0]-e[0],o=r[1]-e[1],a=r[2]-e[2],s=t[0]-e[0],c=t[1]-e[1],l=t[2]-e[2];n[0]=o*l-a*c,n[1]=a*s-i*l,n[2]=i*c-o*s}function Ay(t,e,r,n){M4(t,e,r,n);const i=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);i!==0&&(n[0]/=i,n[1]/=i,n[2]/=i)}function are(t,e,r,n,i,o){let a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1e-6,s=!1;const c=[],l=[],f=[],u=[],d=[];Ay(t,e,r,u),Ay(n,i,o,d);const h=-_n(u,t),g=-_n(d,n),p=[_n(d,t)+g,_n(d,e)+g,_n(d,r)+g];if(p[0]*p[1]>a&&p[0]*p[2]>a)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};const v=[_n(u,n)+h,_n(u,i)+h,_n(u,o)+h];if(v[0]*v[1]>a&&v[0]*v[2]>a)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(Math.abs(u[0]-d[0])<1e-9&&Math.abs(u[1]-d[1])<1e-9&&Math.abs(u[2]-d[2])<1e-9&&Math.abs(h-g)<1e-9)return s=!0,{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};const y=[t,e,r],m=[n,i,o],w=_n(u,d),x=(h-g*w)/(w*w-1),C=(g-h*w)/(w*w-1),S=[x*u[0]+C*d[0],x*u[1]+C*d[1],x*u[2]+C*d[2]],T=sl(u,d,[]);Td(T);let _=0,E=0;const b=[],D=[];let I=50,P=50;for(let V=0;V<3;V++){const G=V,R=(V+1)%3,N=Vo.intersectWithLine(y[G],y[R],n,d);N.intersection&&N.t>0-a&&N.t<1+a&&(N.t<1+a&&N.t>1-a&&(I=_),b[_++]=_n(N.x,T)-_n(S,T));const F=Vo.intersectWithLine(m[G],m[R],t,u);F.intersection&&F.t>0-a&&F.t<1+a&&(F.t<1+a&&F.t>1-a&&(P=E),D[E++]=_n(F.x,T)-_n(S,T))}if(_>2){_--;const V=b[2];b[2]=b[I],b[I]=V}if(E>2){E--;const V=D[2];D[2]=D[P],D[P]=V}if(_!==2||E!==2)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(Number.isNaN(b[0])||Number.isNaN(b[1])||Number.isNaN(D[0])||Number.isNaN(D[1]))return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(b[0]>b[1]){const V=b[1];b[1]=b[0],b[0]=V}if(D[0]>D[1]){const V=D[1];D[1]=D[0],D[0]=V}let O,A;return b[1]2,t.intersectWithLine=(r,n,i,o,a)=>{const s={subId:0,t:Number.MAX_VALUE,intersect:0,betweenPoints:!1};a[2]=0;const c=[],l=i*i,f=[],u=[],d=[];e.points.getPoint(0,f),e.points.getPoint(1,u),e.points.getPoint(2,d);const h=[],g=[];if(Ay(f,u,d,h),h[0]!==0||h[1]!==0||h[2]!==0){const w=Vo.intersectWithLine(r,n,f,h);if(s.betweenPoints=w.betweenPoints,s.t=w.t,o[0]=w.x[0],o[1]=w.x[1],o[2]=w.x[2],!w.intersection)return a[0]=0,a[1]=0,s.intersect=0,s;const x=t.evaluatePosition(o,c,a,g);if(x.evaluation>=0)return x.dist2<=l?(s.intersect=1,s):(s.intersect=x.evaluation,s)}const p=$c(f,u),v=$c(u,d),y=$c(d,f);e.line||(e.line=ls.newInstance()),p>v&&p>y?(e.line.getPoints().setPoint(0,f),e.line.getPoints().setPoint(1,u)):v>y&&v>p?(e.line.getPoints().setPoint(0,u),e.line.getPoints().setPoint(1,d)):(e.line.getPoints().setPoint(0,d),e.line.getPoints().setPoint(1,f));const m=e.line.intersectWithLine(r,n,i,o,a);if(s.betweenPoints=m.betweenPoints,s.t=m.t,m.intersect){const w=[],x=[],C=[];for(let S=0;S<3;S++)w[S]=f[S]-d[S],x[S]=u[S]-d[S],C[S]=o[S]-d[S];return a[0]=_n(C,w)/y,a[1]=_n(C,x)/v,s.intersect=1,s}return a[0]=0,a[1]=0,s.intersect=0,s},t.evaluatePosition=(r,n,i,o)=>{const a={subId:0,dist2:0,evaluation:-1};let s,c;const l=[],f=[],u=[],d=[];let h;const g=[],p=[],v=[];let y=0,m=0;const w=[];let x,C,S,T=[];const _=[],E=[],b=[];a.subId=0,i[2]=0,e.points.getPoint(1,l),e.points.getPoint(2,f),e.points.getPoint(0,u),M4(l,f,u,d),Vo.generalizedProjectPoint(r,l,d,b);let D=0;for(s=0;s<3;s++)d[s]<0?h=-d[s]:h=d[s],h>D&&(D=h,m=s);for(c=0,s=0;s<3;s++)s!==m&&(w[c++]=s);for(s=0;s<2;s++)g[s]=b[w[s]]-u[w[s]],p[s]=l[w[s]]-u[w[s]],v[s]=f[w[s]]-u[w[s]];if(y=ei(p,v),y===0)return i[0]=0,i[1]=0,a.evaluation=-1,a;if(i[0]=ei(g,v)/y,i[1]=ei(p,g)/y,o[0]=1-(i[0]+i[1]),o[1]=i[0],o[2]=i[1],o[0]>=0&&o[0]<=1&&o[1]>=0&&o[1]<=1&&o[2]>=0&&o[2]<=1)n&&(a.dist2=$c(b,r),n[0]=b[0],n[1]=b[1],n[2]=b[2]),a.evaluation=1;else{let I;if(n){if(o[1]<0&&o[2]<0)for(x=$c(r,u),C=ls.distanceToLine(r,l,u,I,_),S=ls.distanceToLine(r,u,f,I,E),x{const o=[],a=[],s=[];e.points.getPoint(0,o),e.points.getPoint(1,a),e.points.getPoint(2,s);const c=1-r[0]-r[1];for(let l=0;l<3;l++)n[l]=o[l]*c+a[l]*r[0]+s[l]*r[1];i[0]=c,i[1]=r[0],i[2]=r[1]},t.getParametricDistance=r=>{let n,i=0;const o=[];o[0]=r[0],o[1]=r[1],o[2]=1-r[0]-r[1];for(let a=0;a<3;a++)o[a]<0?n=-o[a]:o[a]>1?n=o[a]-1:n=0,n>i&&(i=n);return i}}const lre={};function iN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,lre,r),Ly.extend(t,e,r),cre(t,e)}const ure=J.newInstance(iN,"vtkTriangle");var oN={newInstance:ure,extend:iN,...sre};const Hx=["verts","lines","polys","strips"],{vtkWarningMacro:SD}=J,fre={[br.VTK_LINE]:ls,[br.VTK_POLY_LINE]:ls,[br.VTK_TRIANGLE]:oN};function dre(t,e){e.classHierarchy.push("vtkPolyData");function r(i){return i.replace(/(?:^\w|[A-Z]|\b\w)/g,o=>o.toUpperCase()).replace(/\s+/g,"")}Hx.forEach(i=>{t[`getNumberOf${r(i)}`]=()=>e[i].getNumberOfCells(),e[i]?e[i]=ic(e[i]):e[i]=_d.newInstance()}),t.getNumberOfCells=()=>Hx.reduce((i,o)=>i+e[o].getNumberOfCells(),0);const n=t.shallowCopy;t.shallowCopy=function(i){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;n(i,o),Hx.forEach(a=>{e[a]=_d.newInstance(),e[a].shallowCopy(i.getReferenceByName(a))})},t.buildCells=()=>{const i=t.getNumberOfVerts(),o=t.getNumberOfLines(),a=t.getNumberOfPolys(),s=t.getNumberOfStrips(),c=i+o+a+s,l=new Uint8Array(c);let f=l;const u=new Uint32Array(c);let d=u;if(i){let h=0;e.verts.getCellSizes().forEach((g,p)=>{d[p]=h,f[p]=g>1?br.VTK_POLY_VERTEX:br.VTK_VERTEX,h+=g+1}),d=d.subarray(i),f=f.subarray(i)}if(o){let h=0;e.lines.getCellSizes().forEach((g,p)=>{d[p]=h,f[p]=g>2?br.VTK_POLY_LINE:br.VTK_LINE,g===1&&SD("Building VTK_LINE ",p," with only one point, but VTK_LINE needs at least two points. Check the input."),h+=g+1}),d=d.subarray(o),f=f.subarray(o)}if(a){let h=0;e.polys.getCellSizes().forEach((g,p)=>{switch(d[p]=h,g){case 3:f[p]=br.VTK_TRIANGLE;break;case 4:f[p]=br.VTK_QUAD;break;default:f[p]=br.VTK_POLYGON;break}g<3&&SD("Building VTK_TRIANGLE ",p," with less than three points, but VTK_TRIANGLE needs at least three points. Check the input."),h+=g+1}),d+=d.subarray(a),f+=f.subarray(a)}if(s){let h=0;f.fill(br.VTK_TRIANGLE_STRIP,0,s),e.strips.getCellSizes().forEach((g,p)=>{d[p]=h,h+=g+1})}e.cells=Yne.newInstance(),e.cells.setCellTypes(c,l,u)},t.buildLinks=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;e.cells===void 0&&t.buildCells(),e.links=Gne.newInstance(),i>0?e.links.allocate(i):e.links.allocate(t.getPoints().getNumberOfPoints()),e.links.buildLinks(t)},t.getCellType=i=>e.cells.getCellType(i),t.getCellPoints=i=>{const o=t.getCellType(i);let a=null;switch(o){case br.VTK_VERTEX:case br.VTK_POLY_VERTEX:a=e.verts;break;case br.VTK_LINE:case br.VTK_POLY_LINE:a=e.lines;break;case br.VTK_TRIANGLE:case br.VTK_QUAD:case br.VTK_POLYGON:a=e.polys;break;case br.VTK_TRIANGLE_STRIP:a=e.strips;break;default:return a=null,{type:0,cellPointIds:null}}const s=e.cells.getCellLocation(i),c=a.getCell(s);return{cellType:o,cellPointIds:c}},t.getPointCells=i=>e.links.getCells(i),t.getCellEdgeNeighbors=(i,o,a)=>{const s=e.links.getLink(o),c=e.links.getLink(a);return s.cells.filter(l=>l!==i&&c.cells.indexOf(l)!==-1)},t.getCell=function(i){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const a=t.getCellPoints(i),s=o||fre[a.cellType].newInstance();return s.initialize(t.getPoints(),a.cellPointIds),s}}const hre={};function aN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,hre,r),ore.extend(t,e,r),J.get(t,e,["cells","links"]),J.setGet(t,e,["verts","lines","polys","strips"]),dre(t,e)}const gre=J.newInstance(aN,"vtkPolyData");var Br={newInstance:gre,extend:aN};const pre=1e-6;function mre(t,e){e.classHierarchy.push("vtkProp3D"),t.addPosition=n=>{e.position=e.position.map((i,o)=>i+n[o]),t.modified()},t.getOrientationWXYZ=()=>{const n=af();oS(n,e.rotation);const i=new Float64Array(3),o=UY(i,n);return[py(o),i[0],i[1],i[2]]},t.getOrientationQuaternion=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return oS(n,e.rotation)},t.rotateX=n=>{n!==0&&(Z_(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateY=n=>{n!==0&&(Q_(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateZ=n=>{n!==0&&(e4(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateWXYZ=(n,i,o,a)=>{if(n===0||i===0&&o===0&&a===0)return;const s=Zr(n),c=af();tw(c,[i,o,a],s);const l=new Float64Array(16);wy(l,c),An(e.rotation,e.rotation,l),t.modified()},t.rotateQuaternion=n=>{if(Math.abs(n[3])>=1-pre)return;const i=wy(new Float64Array(16),n);An(e.rotation,e.rotation,i),t.modified()},t.setOrientation=(n,i,o)=>n===e.orientation[0]&&i===e.orientation[1]&&o===e.orientation[2]?!1:(e.orientation=[n,i,o],Wt(e.rotation),t.rotateZ(o),t.rotateX(n),t.rotateY(i),t.modified(),!0),t.setUserMatrix=n=>J1(e.userMatrix,n)?!1:(kr(e.userMatrix,n),t.modified(),!0),t.getMatrix=()=>(t.computeMatrix(),e.matrix),t.computeMatrix=()=>{if(t.getMTime()>e.matrixMTime.getMTime()){Wt(e.matrix),e.userMatrix&&An(e.matrix,e.matrix,e.userMatrix),dr(e.matrix,e.matrix,e.origin),dr(e.matrix,e.matrix,e.position),An(e.matrix,e.matrix,e.rotation),cl(e.matrix,e.matrix,e.scale),dr(e.matrix,e.matrix,[-e.origin[0],-e.origin[1],-e.origin[2]]),En(e.matrix,e.matrix),e.isIdentity=!0;for(let n=0;n<4;++n)for(let i=0;i<4;++i)(n===i?1:0)!==e.matrix[n+i*4]&&(e.isIdentity=!1);e.matrixMTime.modified()}},t.getCenter=()=>ir.getCenter(e.bounds),t.getLength=()=>ir.getLength(e.bounds),t.getXRange=()=>ir.getXRange(e.bounds),t.getYRange=()=>ir.getYRange(e.bounds),t.getZRange=()=>ir.getZRange(e.bounds),t.getUserMatrix=()=>e.userMatrix;function r(){t.computeMatrix()}t.onModified(r)}const vre={origin:[0,0,0],position:[0,0,0],orientation:[0,0,0],rotation:null,scale:[1,1,1],bounds:[1,-1,1,-1,1,-1],userMatrix:null,userMatrixMTime:null,cachedProp3D:null,isIdentity:!0,matrixMTime:null};function sN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,vre,r),nm.extend(t,e,r),e.matrixMTime={},J.obj(e.matrixMTime),J.get(t,e,["bounds","isIdentity"]),J.getArray(t,e,["orientation"]),J.setGetArray(t,e,["origin","position","scale"],3),e.matrix=Wt(new Float64Array(16)),e.rotation=Wt(new Float64Array(16)),e.userMatrix=Wt(new Float64Array(16)),e.transform=null,mre(t,e)}const yre=J.newInstance(sN,"vtkProp3D");var P4={newInstance:yre,extend:sN};const{vtkDebugMacro:wre}=J;function xre(t,e){e.classHierarchy.push("vtkActor");const r={...t};t.getActors=()=>[t],t.getIsOpaque=()=>{if(e.forceOpaque)return!0;if(e.forceTranslucent)return!1;e.property||t.getProperty();let n=e.property.getOpacity()>=1;return n=n&&(!e.texture||!e.texture.isTranslucent()),n=n&&(!e.mapper||e.mapper.getIsOpaque()),n},t.hasTranslucentPolygonalGeometry=()=>e.mapper===null?!1:(e.property===null&&t.setProperty(t.makeProperty()),!t.getIsOpaque()),t.makeProperty=Fd.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const n=e.mapper.getBounds();if(!n||n.length!==6)return n;if(n[0]>n[1])return e.mapperBounds=n.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),n;if(!e.mapperBounds||n[0]!==e.mapperBounds[0]||n[1]!==e.mapperBounds[1]||n[2]!==e.mapperBounds[2]||n[3]!==e.mapperBounds[3]||n[4]!==e.mapperBounds[4]||n[5]!==e.mapperBounds[5]||t.getMTime()>e.boundsMTime.getMTime()){wre("Recomputing bounds..."),e.mapperBounds=n.concat();const i=[];ir.getCorners(n,i),t.computeMatrix();const o=new Float64Array(16);En(o,e.matrix),i.forEach(a=>Yt(a,a,o)),e.bounds[0]=e.bounds[2]=e.bounds[4]=Number.MAX_VALUE,e.bounds[1]=e.bounds[3]=e.bounds[5]=-Number.MAX_VALUE,e.bounds=e.bounds.map((a,s)=>s%2===0?i.reduce((c,l)=>c>l[s/2]?l[s/2]:c,a):i.reduce((c,l)=>c{let n=r.getMTime();if(e.property!==null){const i=e.property.getMTime();n=i>n?i:n}if(e.backfaceProperty!==null){const i=e.backfaceProperty.getMTime();n=i>n?i:n}return n},t.getRedrawMTime=()=>{let n=e.mtime;if(e.mapper!==null){let i=e.mapper.getMTime();n=i>n?i:n,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),i=e.mapper.getInput().getMTime(),n=i>n?i:n)}return n},t.getSupportsSelection=()=>e.mapper?e.mapper.getSupportsSelection():!1,t.processSelectorPixelBuffers=(n,i)=>{e.mapper&&e.mapper.processSelectorPixelBuffers&&e.mapper.processSelectorPixelBuffers(n,i)}}const Cre={mapper:null,property:null,backfaceProperty:null,forceOpaque:!1,forceTranslucent:!1,bounds:[1,-1,1,-1,1,-1]};function cN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Cre,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["backfaceProperty","forceOpaque","forceTranslucent","mapper"]),xre(t,e)}const Sre=J.newInstance(cN,"vtkActor");var dc={newInstance:Sre,extend:cN};function Tre(t,e){const r=t.invokeResize;delete t.invokeResize,e.renderWindow=VK.newInstance(),e.rendererMap={},e.openGLRenderWindow=Zte.newInstance(),e.renderWindow.addView(e.openGLRenderWindow),e.interactor=_ne.newInstance(),e.interactor.setView(e.openGLRenderWindow),e.interactor.initialize(),t.addRenderer=({viewport:n,id:i,background:o})=>{const a=$A.newInstance({viewport:n,background:o||e.background});e.renderWindow.addRenderer(a),e.rendererMap[i]=a},t.destroy=()=>{e.renderWindow.getInteractor().delete()},t.removeRenderer=n=>{const i=t.getRenderer(n);e.renderWindow.removeRenderer(i),i.delete(),delete e.rendererMap[n]},t.getRenderer=n=>e.rendererMap[n],t.getRenderers=()=>{const{rendererMap:n}=e;return Object.keys(n).map(o=>({id:o,renderer:n[o]}))},t.resize=()=>{if(e.container){const{width:n,height:i}=e.container;e.openGLRenderWindow.setSize(Math.floor(n),Math.floor(i)),r(),e.renderWindow.render()}},t.setContainer=n=>{e.container=n,e.openGLRenderWindow.setContainer(e.container)},t.delete=J.chain(t.setContainer,t.destroy,e.openGLRenderWindow.delete,t.delete),t.resize()}const _re={background:[0,0,0],container:null};function lN(t,e,r={}){Object.assign(e,_re,r),J.obj(t,e),J.get(t,e,["renderWindow","openGLRenderWindow","interactor","container"]),J.event(t,e,"resize"),Tre(t,e)}const Ere=J.newInstance(lN),bre={newInstance:Ere,extend:lN},{vtkErrorMacro:gv}=J;function Dre(t,e){e.classHierarchy.push("vtkPiecewiseFunction"),t.getSize=()=>e.nodes.length,t.getType=()=>{let r,n=0,i=0;e.nodes.length>0&&(n=e.nodes[0].y);for(let o=1;on)switch(i){case 0:case 1:i=1;break;case 2:default:i=3;break}else switch(i){case 0:case 2:i=2;break;case 1:default:i=3;break}if(n=r,i===3)break}switch(i){case 0:return"Constant";case 1:return"NonDecreasing";case 2:return"NonIncreasing";case 3:default:return"Varied"}},t.getDataPointer=()=>{const r=e.nodes.length;if(e.function=null,r>0){e.function=[];for(let n=0;n{if(e.nodes.length===0)return 0;let r=1,n=0,i=0;for(;i0?n=e.nodes[i-1].x:e.clamping?n=-Number.MAX_VALUE:n=e.nodes[0].x,n},t.getNodeValue=(r,n)=>{const i=e.nodes.length;return r<0||r>=i?(gv("Index out of range!"),-1):(n[0]=e.nodes[r].x,n[1]=e.nodes[r].y,n[2]=e.nodes[r].midpoint,n[3]=e.nodes[r].sharpness,1)},t.setNodeValue=(r,n)=>{const i=e.nodes.length;if(r<0||r>=i)return gv("Index out of range!"),-1;const o=e.nodes[r].x;return e.nodes[r].x=n[0],e.nodes[r].y=n[1],e.nodes[r].midpoint=n[2],e.nodes[r].sharpness=n[3],o!==n[0]?t.sortAndUpdateRange():t.modified(),1},t.addPoint=(r,n)=>t.addPointLong(r,n,.5,0),t.addPointLong=(r,n,i,o)=>{if(i<0||i>1)return gv("Midpoint outside range [0.0, 1.0]"),-1;if(o<0||o>1)return gv("Sharpness outside range [0.0, 1.0]"),-1;e.allowDuplicateScalars||t.removePoint(r);const a={x:r,y:n,midpoint:i,sharpness:o};e.nodes.push(a),t.sortAndUpdateRange();let s;for(s=0;s{e.nodes!==r&&(e.nodes=r,t.sortAndUpdateRange())},t.sortAndUpdateRange=()=>{e.nodes.sort((n,i)=>n.x-i.x),t.updateRange()||t.modified()},t.updateRange=()=>{const r=e.range.slice(),n=e.nodes.length;return n?(e.range[0]=e.nodes[0].x,e.range[1]=e.nodes[n-1].x):(e.range[0]=0,e.range[1]=0),r[0]===e.range[0]&&r[1]===e.range[1]?!1:(t.modified(),!0)},t.removePoint=r=>{let n;for(n=0;n=e.nodes.length)return-1;const i=n;let o=!1;return e.nodes.splice(n,1),(n===0||n===e.nodes.length)&&(o=t.updateRange()),o||t.modified(),i},t.removeAllPoints=()=>{e.nodes=[],t.sortAndUpdateRange()},t.addSegment=(r,n,i,o)=>{t.sortAndUpdateRange();for(let a=0;a=r&&e.nodes[a].x<=i?e.nodes.splice(a,1):a++;t.addPoint(r,n,.5,0),t.addPoint(i,o,.5,0)},t.getValue=r=>{const n=[];return t.getTable(r,r,1,n),n[0]},t.adjustRange=r=>{if(r.length<2)return 0;const n=t.getRange();n[0]r[1]?t.addPoint(r[1],t.getValue(r[1])):t.addPoint(r[1],t.getValue(n[1])),t.sortAndUpdateRange();for(let i=0;i=r[0]&&e.nodes[i].x<=r[1]?e.nodes.splice(i,1):++i;return t.sortAndUpdateRange(),1},t.estimateMinNumberOfSamples=(r,n)=>{const i=t.findMinimumXDistance();return Math.ceil((n-r)/i)},t.findMinimumXDistance=()=>{const r=e.nodes.length;if(r<2)return-1;let n=e.nodes[1].x-e.nodes[0].x;for(let i=0;i4&&arguments[4]!==void 0?arguments[4]:1,s,c=0;const l=e.nodes.length;let f=0;l!==0&&(f=e.nodes[l-1].y);let u=0,d=0,h=0,g=0,p=0,v=0,y=0;for(s=0;s1?u=r+s/(i-1)*(n-r):u=.5*(r+n);ce.nodes[c].x;)c++,c.99999&&(v=.99999));if(c>=l)o[m]=e.clamping?f:0;else if(c===0)o[m]=e.clamping?e.nodes[0].y:0;else{let w=(u-d)/(h-d);if(w.99)if(w<.5){o[m]=g;continue}else{o[m]=p;continue}if(y<.01){o[m]=(1-w)*g+w*p;continue}w<.5?w=.5*(w*2)**(1+10*y):w>.5&&(w=1-.5*((1-w)*2)**(1+10*y));const x=w*w,C=x*w,S=2*C-3*x+1,T=-2*C+3*x,_=C-2*x+w,E=C-x,b=p-g,D=(1-y)*b;o[m]=S*g+T*p+_*D+E*D;const I=gp?g:p;o[m]=o[m]P?P:o[m]}}}}const Ire={range:[0,0],clamping:!0,allowDuplicateScalars:!1};function uN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ire,r),J.obj(t,e),e.nodes=[],J.setGet(t,e,["allowDuplicateScalars","clamping"]),J.setArray(t,e,["range"],2),J.getArray(t,e,["range"]),Dre(t,e)}const Ore=J.newInstance(uN,"vtkPiecewiseFunction");var Ed={newInstance:Ore,extend:uN};const{BlendMode:Su,FilterMode:Yg}=cP;function Mre(t,e,r,n,i){let o=null;return i?(o=i,o.removeAllPoints()):o=Ed.newInstance(),o.addPointLong(-1024,0,1,1),o.addPoint(t,e),o.addPoint(r,n),o}const Pre={createRadonTransferFunction:Mre};function Rre(t,e){e.classHierarchy.push("vtkVolumeMapper");const r={...t};t.getBounds=()=>{const n=t.getInputData();return n?(e.static||t.update(),e.bounds=n.getBounds()):e.bounds=rf(),e.bounds},t.update=()=>{t.getInputData()},t.setBlendModeToComposite=()=>{t.setBlendMode(Su.COMPOSITE_BLEND)},t.setBlendModeToMaximumIntensity=()=>{t.setBlendMode(Su.MAXIMUM_INTENSITY_BLEND)},t.setBlendModeToMinimumIntensity=()=>{t.setBlendMode(Su.MINIMUM_INTENSITY_BLEND)},t.setBlendModeToAverageIntensity=()=>{t.setBlendMode(Su.AVERAGE_INTENSITY_BLEND)},t.setBlendModeToAdditiveIntensity=()=>{t.setBlendMode(Su.ADDITIVE_INTENSITY_BLEND)},t.setBlendModeToRadonTransform=()=>{t.setBlendMode(Su.RADON_TRANSFORM_BLEND)},t.getBlendModeAsString=()=>J.enumToString(Su,e.blendMode),t.setAverageIPScalarRange=(n,i)=>{console.warn("setAverageIPScalarRange is deprecated use setIpScalarRange"),t.setIpScalarRange(n,i)},t.getFilterModeAsString=()=>J.enumToString(Yg,e.filterMode),t.setFilterModeToOff=()=>{t.setFilterMode(Yg.OFF)},t.setFilterModeToNormalized=()=>{t.setFilterMode(Yg.NORMALIZED)},t.setFilterModeToRaw=()=>{t.setFilterMode(Yg.RAW)},t.setGlobalIlluminationReach=n=>r.setGlobalIlluminationReach(oc(n,0,1)),t.setVolumetricScatteringBlending=n=>r.setVolumetricScatteringBlending(oc(n,0,1)),t.setVolumeShadowSamplingDistFactor=n=>r.setVolumeShadowSamplingDistFactor(n>=1?n:1),t.setAnisotropy=n=>r.setAnisotropy(oc(n,-.99,.99)),t.setLAOKernelSize=n=>r.setLAOKernelSize(z_(oc(n,1,32))),t.setLAOKernelRadius=n=>r.setLAOKernelRadius(n>=1?n:1)}const Lre=t=>({bounds:[1,-1,1,-1,1,-1],sampleDistance:1,imageSampleDistance:1,maximumSamplesPerRay:1e3,autoAdjustSampleDistances:!0,initialInteractionScale:1,interactionSampleDistanceFactor:1,blendMode:Su.COMPOSITE_BLEND,ipScalarRange:[-1e6,1e6],filterMode:Yg.OFF,preferSizeOverAccuracy:!1,computeNormalFromOpacity:!1,volumetricScatteringBlending:0,globalIlluminationReach:0,volumeShadowSamplingDistFactor:5,anisotropy:0,localAmbientOcclusion:!1,LAOKernelSize:15,LAOKernelRadius:7,updatedExtents:[],...t});function fN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Lre(r)),w4.extend(t,e,r),J.setGet(t,e,["sampleDistance","imageSampleDistance","maximumSamplesPerRay","autoAdjustSampleDistances","initialInteractionScale","interactionSampleDistanceFactor","blendMode","filterMode","preferSizeOverAccuracy","computeNormalFromOpacity","volumetricScatteringBlending","globalIlluminationReach","volumeShadowSamplingDistFactor","anisotropy","localAmbientOcclusion","LAOKernelSize","LAOKernelRadius","updatedExtents"]),J.setGetArray(t,e,["ipScalarRange"],2),J.event(t,e,"lightingActivated"),Rre(t,e)}const Are=J.newInstance(fN,"vtkVolumeMapper");var dN={newInstance:Are,extend:fN,...Pre};function Nre(t,e){e.classHierarchy.push("vtkSharedVolumeMapper");const r=t.delete;t.delete=()=>{e.scalarTexture=null,r()}}const kre={scalarTexture:null};function hN(t,e,r={}){Object.assign(e,kre,r),dN.extend(t,e,r),J.setGet(t,e,["scalarTexture"]),Nre(t,e)}const Vre=J.newInstance(hN,"vtkSharedVolumeMapper"),Fre={newInstance:Vre,extend:hN};function Ur(t){const e=t.indexOf(":");return t.substring(e+1)}function gN(t){let e=2166136261;for(let r=0;r>>0).toString(36)}const Ure=1073741824;class Bre{constructor(){this._imageCache=new Map,this._volumeCache=new Map,this._imageIdsToVolumeIdCache=new Map,this._referencedImageIdToImageIdCache=new Map,this._geometryCache=new Map,this._imageCacheSize=0,this._maxCacheSize=3*Ure,this._geometryCacheSize=0,this.setMaxCacheSize=e=>{if(!e||typeof e!="number"){const r=`New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;throw new Error(r)}this._maxCacheSize=e},this.isCacheable=e=>{const r=this.getBytesAvailable(),n=Array.from(this._imageCache.values()).reduce((o,a)=>a.sharedCacheKey?o:o+a.sizeInBytes,0);return r+n>=e},this.getMaxCacheSize=()=>this._maxCacheSize,this.getCacheSize=()=>this._imageCacheSize,this._decacheImage=(e,r=!1)=>{var o;const n=this._imageCache.get(e);if(!n)return;if(n.sharedCacheKey&&!r)throw new Error("Cannot decache an image with a shared cache key. You need to manually decache the volume first.");const{imageLoadObject:i}=n;(o=n.image)!=null&&o.referencedImageId&&this._referencedImageIdToImageIdCache.delete(n.image.referencedImageId),i!=null&&i.cancelFn&&i.cancelFn(),i!=null&&i.decache&&i.decache(),this._imageCache.delete(e)},this._decacheVolume=e=>{const r=this._volumeCache.get(e);if(!r)return;const{volumeLoadObject:n,volume:i}=r;i&&(i.cancelLoading&&i.cancelLoading(),i.imageData&&i.imageData.delete(),n.cancelFn&&n.cancelFn(),i.imageIds&&i.imageIds.forEach(o=>{const a=this._imageCache.get(o);a&&a.sharedCacheKey===e&&(a.sharedCacheKey=void 0)}),this._volumeCache.delete(e))},this.purgeCache=()=>{const e=this._imageCache.keys();for(this.purgeVolumeCache();;){const{value:r,done:n}=e.next();if(n)break;this.removeImageLoadObject(r,{force:!0}),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:r})}},this.purgeVolumeCache=()=>{const e=this._volumeCache.keys();for(;;){const{value:r,done:n}=e.next();if(n)break;this.removeVolumeLoadObject(r),ut(et,rt.VOLUME_CACHE_VOLUME_REMOVED,{volumeId:r})}},this.getVolumeLoadObject=e=>{if(e===void 0)throw new Error("getVolumeLoadObject: volumeId must not be undefined");const r=this._volumeCache.get(e);if(r)return r.timeStamp=Date.now(),r.volumeLoadObject},this.putGeometryLoadObject=(e,r)=>{if(e===void 0)throw new Error("putGeometryLoadObject: geometryId must not be undefined");if(r.promise===void 0)throw new Error("putGeometryLoadObject: geometryLoadObject.promise must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometryLoadObject: geometryId already present in geometryCache");if(r.cancelFn&&typeof r.cancelFn!="function")throw new Error("putGeometryLoadObject: geometryLoadObject.cancel must be a function");const n={loaded:!1,geometryId:e,geometryLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._geometryCache.set(e,n),r.promise.then(i=>{try{this._putGeometryCommon(e,i,n)}catch(o){throw console.debug(`Error in _putGeometryCommon for geometry ${e}:`,o),o}}).catch(i=>{throw console.debug(`Error caching geometry ${e}:`,i),this._geometryCache.delete(e),i})},this.getGeometry=e=>{if(e===void 0)throw new Error("getGeometry: geometryId must not be undefined");const r=this._geometryCache.get(e);if(r)return r.timeStamp=Date.now(),r.geometry},this.removeGeometryLoadObject=e=>{if(e===void 0)throw new Error("removeGeometryLoadObject: geometryId must not be undefined");const r=this._geometryCache.get(e);if(!r)throw new Error("removeGeometryLoadObject: geometryId was not present in geometryCache");this.decrementGeometryCacheSize(r.sizeInBytes);const n={geometry:r,geometryId:e};ut(et,rt.GEOMETRY_CACHE_GEOMETRY_REMOVED,n),this._decacheGeometry(e)},this._decacheGeometry=e=>{const r=this._geometryCache.get(e);if(!r)return;const{geometryLoadObject:n}=r;n.cancelFn&&n.cancelFn(),n.decache&&n.decache(),this._geometryCache.delete(e)},this.incrementGeometryCacheSize=e=>{this._geometryCacheSize+=e},this.decrementGeometryCacheSize=e=>{this._geometryCacheSize-=e},this.getImageByReferencedImageId=e=>{var n;const r=this._referencedImageIdToImageIdCache.get(e);if(r)return(n=this._imageCache.get(r))==null?void 0:n.image},this.getImage=(e,r=ya.FAR_REPLICATE)=>{var i;if(e===void 0)throw new Error("getImage: imageId must not be undefined");const n=this._imageCache.get(e);if(n&&(n.timeStamp=Date.now(),!(((i=n.image)==null?void 0:i.imageQualityStatus){var i;if(e===void 0)throw new Error("getVolume: volumeId must not be undefined");const n=this._volumeCache.get(e);return n?(n.timeStamp=Date.now(),n.volume):r?(i=[...this._volumeCache.values()].find(o=>o.volumeId.includes(e)))==null?void 0:i.volume:void 0},this.getVolumes=()=>Array.from(this._volumeCache.values()).map(r=>r.volume),this.filterVolumesByReferenceId=e=>this.getVolumes().filter(n=>n.referencedVolumeId===e),this.removeImageLoadObject=(e,{force:r=!1}={})=>{if(e===void 0)throw new Error("removeImageLoadObject: imageId must not be undefined");const n=this._imageCache.get(e);if(!n)throw new Error("removeImageLoadObject: imageId was not present in imageCache");this._decacheImage(e,r),this.incrementImageCacheSize(-n.sizeInBytes);const i={image:n,imageId:e};ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,i)},this.removeVolumeLoadObject=e=>{if(e===void 0)throw new Error("removeVolumeLoadObject: volumeId must not be undefined");const r=this._volumeCache.get(e);if(!r)throw new Error("removeVolumeLoadObject: volumeId was not present in volumeCache");const n={volume:r,volumeId:e};ut(et,rt.VOLUME_CACHE_VOLUME_REMOVED,n),this._decacheVolume(e)},this.incrementImageCacheSize=e=>{this._imageCacheSize+=e},this.decrementImageCacheSize=e=>{this._imageCacheSize-=e},this.getGeometryLoadObject=e=>{if(e===void 0)throw new Error("getGeometryLoadObject: geometryId must not be undefined");const r=this._geometryCache.get(e);if(r)return r.timeStamp=Date.now(),r.geometryLoadObject}}generateVolumeId(e){const r=e.map(Ur).sort();let n=2166136261;for(const i of r){const o=gN(i);for(let a=0;a>>0).toString(36)}`}getImageIdsForVolumeId(e){return Array.from(this._imageIdsToVolumeIdCache.entries()).filter(([r,n])=>n===e).map(([r])=>r)}getBytesAvailable(){return this.getMaxCacheSize()-this.getCacheSize()}decacheIfNecessaryUntilBytesAvailable(e,r){let n=this.getBytesAvailable();if(n>=e)return n;const i=Array.from(this._imageCache.values()).filter(c=>!c.sharedCacheKey);function o(c,l){return c.timeStamp>l.timeStamp?1:c.timeStampc.imageId);let s=a;r&&(s=a.filter(c=>!r.includes(c)));for(const c of s)if(this.removeImageLoadObject(c),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:c}),n=this.getBytesAvailable(),n>=e)return n;for(const c of a)if(this.removeImageLoadObject(c),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:c}),n=this.getBytesAvailable(),n>=e)return n}_putImageCommon(e,r,n){if(!this._imageCache.has(e)){console.warn("The image was purged from the cache before it completed loading.");return}if(!r){console.warn("Image is undefined");return}if(r.sizeInBytes===void 0||Number.isNaN(r.sizeInBytes))throw new Error("_putImageCommon: image.sizeInBytes must not be undefined");if(r.sizeInBytes.toFixed===void 0)throw new Error("_putImageCommon: image.sizeInBytes is not a number");if(!this.isCacheable(r.sizeInBytes))throw new Error(rt.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(r.sizeInBytes),n.loaded=!0,n.image=r,n.sizeInBytes=r.sizeInBytes,this.incrementImageCacheSize(n.sizeInBytes);const i={image:n};r.referencedImageId&&this._referencedImageIdToImageIdCache.set(r.referencedImageId,e),ut(et,rt.IMAGE_CACHE_IMAGE_ADDED,i),n.sharedCacheKey=r.sharedCacheKey}async putImageLoadObject(e,r){if(e===void 0)throw console.error("putImageLoadObject: imageId must not be undefined"),new Error("putImageLoadObject: imageId must not be undefined");if(r.promise===void 0)throw console.error("putImageLoadObject: imageLoadObject.promise must not be undefined"),new Error("putImageLoadObject: imageLoadObject.promise must not be undefined");const n=this._imageCache.get(e);if(n!=null&&n.imageLoadObject)throw console.warn(`putImageLoadObject: imageId ${e} already in cache`),new Error("putImageLoadObject: imageId already in cache");if(r.cancelFn&&typeof r.cancelFn!="function")throw console.error("putImageLoadObject: imageLoadObject.cancel must be a function"),new Error("putImageLoadObject: imageLoadObject.cancel must be a function");const i={...n,loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._imageCache.set(e,i),this._imageCache.set(e,i),r.promise.then(o=>{try{this._putImageCommon(e,o,i)}catch(a){throw console.debug(`Error in _putImageCommon for image ${e}:`,a),a}}).catch(o=>{throw console.debug(`Error caching image ${e}:`,o),this._imageCache.delete(e),o})}putImageSync(e,r){if(e===void 0)throw new Error("putImageSync: imageId must not be undefined");if(this._imageCache.has(e))throw new Error("putImageSync: imageId already in cache");const n={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._imageCache.set(e,n);try{this._putImageCommon(e,r,n)}catch(i){throw this._imageCache.delete(e),i}}getImageLoadObject(e){if(e===void 0)throw new Error("getImageLoadObject: imageId must not be undefined");const r=this._imageCache.get(e);if(r)return r.timeStamp=Date.now(),r.imageLoadObject}isLoaded(e){const r=this._imageCache.get(e);return r?r.loaded:!1}getVolumeContainingImageId(e){const r=Array.from(this._volumeCache.keys()),n=Ur(e);for(const i of r){const o=this._volumeCache.get(i);if(!o)return;const{volume:a}=o;if(!a.imageIds.length)return;const s=a.getImageURIIndex(n);if(s>-1)return{volume:a,imageIdIndex:s}}}getCachedImageBasedOnImageURI(e){const r=Ur(e),i=Array.from(this._imageCache.keys()).find(o=>Ur(o)===r);if(i)return this._imageCache.get(i)}_putVolumeCommon(e,r,n){var o;if(!this._volumeCache.get(e)){console.warn("The volume was purged from the cache before it completed loading.");return}n.loaded=!0,n.volume=r,(o=r.imageIds)==null||o.forEach(a=>{const s=this._imageCache.get(a);s&&(s.sharedCacheKey=e)});const i={volume:n};ut(et,rt.VOLUME_CACHE_VOLUME_ADDED,i)}putVolumeSync(e,r){if(e===void 0)throw new Error("putVolumeSync: volumeId must not be undefined");if(this._volumeCache.has(e))throw new Error("putVolumeSync: volumeId already in cache");const n={loaded:!1,volumeId:e,volumeLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._volumeCache.set(e,n);try{this._putVolumeCommon(e,r,n)}catch(i){throw this._volumeCache.delete(e),i}}async putVolumeLoadObject(e,r){if(e===void 0)throw new Error("putVolumeLoadObject: volumeId must not be undefined");if(r.promise===void 0)throw new Error("putVolumeLoadObject: volumeLoadObject.promise must not be undefined");if(this._volumeCache.has(e))throw new Error(`putVolumeLoadObject: volumeId:${e} already in cache`);if(r.cancelFn&&typeof r.cancelFn!="function")throw new Error("putVolumeLoadObject: volumeLoadObject.cancel must be a function");const n={loaded:!1,volumeId:e,volumeLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._volumeCache.set(e,n),r.promise.then(i=>{try{this._putVolumeCommon(e,i,n)}catch(o){throw console.error(`Error in _putVolumeCommon for volume ${e}:`,o),this._volumeCache.delete(e),o}}).catch(i=>{throw this._volumeCache.delete(e),i})}_putGeometryCommon(e,r,n){if(!this._geometryCache.get(e)){console.warn("The geometry was purged from the cache before it completed loading.");return}if(!r){console.warn("Geometry is undefined");return}if(r.sizeInBytes===void 0||Number.isNaN(r.sizeInBytes))throw new Error("_putGeometryCommon: geometry.sizeInBytes must not be undefined");if(r.sizeInBytes.toFixed===void 0)throw new Error("_putGeometryCommon: geometry.sizeInBytes is not a number");if(!this.isCacheable(r.sizeInBytes))throw new Error(rt.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(r.sizeInBytes),n.loaded=!0,n.geometry=r,n.sizeInBytes=r.sizeInBytes,this.incrementGeometryCacheSize(n.sizeInBytes);const i={geometry:n};ut(et,rt.GEOMETRY_CACHE_GEOMETRY_ADDED,i)}putGeometrySync(e,r){if(e===void 0)throw new Error("putGeometrySync: geometryId must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometrySync: geometryId already in cache");const n={loaded:!1,geometryId:e,geometryLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._geometryCache.set(e,n);try{this._putGeometryCommon(e,r,n)}catch(i){throw this._geometryCache.delete(e),i}}setPartialImage(e,r){const n=this._imageCache.get(e);if(!n){r&&this._imageCache.set(e,{image:r,imageId:e,loaded:!1,timeStamp:Date.now(),sizeInBytes:0});return}n.loaded&&(n.loaded=!1,n.imageLoadObject=null,this.incrementImageCacheSize(-n.sizeInBytes),n.sizeInBytes=0),n.image=r||n.image}getImageQuality(e){var n;const r=(n=this._imageCache.get(e))==null?void 0:n.image;return r?r.imageQualityStatus||ya.FULL_RESOLUTION:void 0}}const $e=new Bre;function TD(t,e){const r=_4(e),n=new r(t.length);return n.set(t),n}function Gre(t,e){e.classHierarchy.push("vtkStreamingOpenGLTexture"),e.updatedFrames=[],e.volumeId=null;const r=t.create3DFilterableFromRaw;t.create3DFilterableFromRaw=(s,c,l,f,u,d,h)=>{e.inputDataType=u,e.inputNumComps=f,r(s,c,l,f,u,d,h)};const n=t.updateVolumeInfoForGL;t.updateVolumeInfoForGL=(s,c)=>{const l=n(s,c);return e.volumeInfo.dataComputedScale=[1],e.volumeInfo.dataComputedOffset=[0],l},t.update3DFromRaw=()=>{const{volumeId:s}=e;if(!s)return;const c=$e.getVolume(s);if(e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind(),c.isDynamicVolume()){a();return}return t.hasUpdatedFrames()&&o()};const i=t.modified;t.setUpdatedFrame=s=>{e.updatedFrames[s]=!0,i()},t.modified=()=>{i();const s=$e.getVolume(e.volumeId);if(!s)return;const c=s.imageIds;for(let l=0;l!e.updatedFrames.length||e.updatedFrames.some(s=>s),t.getUpdatedFrames=()=>e.updatedFrames,t.setVolumeId=s=>{e.volumeId=s},t.getVolumeId=()=>e.volumeId,t.setTextureParameters=({width:s,height:c,depth:l,numberOfComponents:f,dataType:u})=>{e.width??(e.width=s),e.height??(e.height=c),e.depth??(e.depth=l),e.inputNumComps??(e.inputNumComps=f),e.inputDataType??(e.inputDataType=u)},t.getTextureParameters=()=>({width:e.width,height:e.height,depth:e.depth,numberOfComponents:e.inputNumComps,dataType:e.inputDataType})}const Wre={updatedFrames:[]};function pN(t,e,r={}){Object.assign(e,Wre,r),Mr.extend(t,e,r),Gre(t,e)}const zre=J.newInstance(pN,"vtkStreamingOpenGLTexture"),$re={newInstance:zre,extend:pN},jre={isPerformingCoordinateTransformation:!1};function mN(t,e,r={}){Object.assign(e,jre,r),I4.extend(t,e,r),J.setGet(t,e,["isPerformingCoordinateTransformation"]),Kre(t,e)}const Hre=J.newInstance(mN,"vtkSlabCamera");function Kre(t,e){e.classHierarchy.push("vtkSlabCamera");const r=Wt(new Float64Array(16)),n=new Float64Array(3);t.getProjectionMatrix=(i,o,a)=>{const s=ba();if(e.projectionMatrix){const d=1/e.physicalScale;return tr(n,d,d,d),kr(s,e.projectionMatrix),cl(s,s,n),En(s,s),s}Wt(r);let c=e.clippingRange[0],l=e.clippingRange[1];e.isPerformingCoordinateTransformation&&(c=e.distance,l=e.distance+.1);const f=l-c,u=[c+(o+1)*f/2,c+(a+1)*f/2];if(e.parallelProjection){const d=e.parallelScale*i,h=e.parallelScale,g=(e.windowCenter[0]-1)*d,p=(e.windowCenter[0]+1)*d,v=(e.windowCenter[1]-1)*h,y=(e.windowCenter[1]+1)*h;r4(r,g,p,v,y,u[0],u[1]),En(r,r)}else{if(e.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const d=Math.tan(nn.radiansFromDegrees(e.viewAngle)/2);let h,g;e.useHorizontalViewAngle===!0?(h=c*d,g=c*d/i):(h=c*d*i,g=c*d);const p=(e.windowCenter[0]-1)*h,v=(e.windowCenter[0]+1)*h,y=(e.windowCenter[1]-1)*g,m=(e.windowCenter[1]+1)*g,w=u[0],x=u[1];r[0]=2*w/(v-p),r[5]=2*w/(m-y),r[2]=(p+v)/(v-p),r[6]=(y+m)/(m-y),r[10]=-(w+x)/(x-w),r[14]=-1,r[11]=-2*w*x/(x-w),r[15]=0}}return kr(s,r),s}}const qre={newInstance:Hre,extend:mN};function tc(t){return _a(t,"vtkVolume")||_a(t,"vtkImageSlice")}function _a(t,e){const r="isA"in t?t:t.actor;return r?!!r.isA(e):!1}const tl=[];function Wh(t,e=0){let r;for(r=0;r0;)tl.pop()}function wt(t,...e){for(let r=0;r=0&&I<=y.levels.SILENT)return I;throw new TypeError("log.setLevel() called with invalid level: "+D)}y.name=p,y.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},y.methodFactory=v||d,y.getLevel=function(){return x??w??m},y.setLevel=function(D,I){return x=E(D),I!==!1&&S(x),f.call(y)},y.setDefaultLevel=function(D){w=E(D),T()||y.setLevel(D,!1)},y.resetLevel=function(){x=null,_(),f.call(y)},y.enableAll=function(D){y.setLevel(y.levels.TRACE,D)},y.disableAll=function(D){y.setLevel(y.levels.SILENT,D)},y.rebuild=function(){if(a!==y&&(m=E(a.getLevel())),f.call(y),a===y)for(var D in o)o[D].rebuild()},m=E(a?a.getLevel():"WARN");var b=T();b!=null&&(x=E(b)),f.call(y)}a=new h,a.getLogger=function(v){if(typeof v!="symbol"&&typeof v!="string"||v==="")throw new TypeError("You must supply a name when creating a logger.");var y=o[v];return y||(y=o[v]=new h(v,a.methodFactory)),y};var g=typeof window!==r?window.log:void 0;return a.noConflict=function(){return typeof window!==r&&window.log===a&&(window.log=g),a},a.getLoggers=function(){return o},a.default=a,a})})(vN);var Jre=vN.exports;const Zre=pl(Jre),yN=Zre.noConflict();typeof window<"u"&&(window.log=yN);function gw(t){const e=yN.getLogger(t[0]);return e.getLogger=(...r)=>gw(`${t}.${r.join(".")}`),e}function L4(...t){return gw(t.join("."))}const zh=gw("cs3d"),A4=zh.getLogger("core"),Qre=zh.getLogger("tools"),eie=zh.getLogger("dicomImageLoader"),tie=zh.getLogger("ai"),nie=zh.getLogger("examples"),rie=L4("consistency","dicom"),iie=L4("consistency","image"),oie=Object.freeze(Object.defineProperty({__proto__:null,aiLog:tie,coreLog:A4,cs3dLog:zh,dicomConsistencyLog:rie,examplesLog:nie,getLogger:L4,getRootLogger:gw,imageConsistencyLog:iie,loaderLog:eie,toolsLog:Qre},Symbol.toStringTag,{value:"Module"}));function xf(t,e){const{direction:r,spacing:n}=t,i=r.slice(0,3),o=r.slice(3,6),a=r.slice(6,9),s=[kt(i,e),kt(o,e),kt(a,e)],c=Ke();return tr(c,s[0]*n[0],s[1]*n[1],s[2]*n[2]),ta(c)}const _D=A4.getLogger("utilities","getClosestImageId");function Zl(t,e,r,n){const{direction:i,spacing:o,imageIds:a}=t,{ignoreSpacing:s=!1}=n||{};if(!(a!=null&&a.length))return;const c=i.slice(6,9),l=kt(c,r);if(Math.abs(l)<1-qa)return;let f;s||(f=xf({direction:i,spacing:o},r)/2);let u,d=1/0;for(let h=0;ht,ED=1e-6;let wN=class{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;this.matrix=Wt(new Float64Array(16)),this.tmp=new Float64Array(3),this.angleConv=e?kX:aie}rotateFromDirections(e,r){const n=new Float64Array(3),i=new Float64Array(3),o=new Float64Array(16);tr(n,e[0],e[1],e[2]),tr(i,r[0],r[1],r[2]),Qn(n,n),Qn(i,i);const a=kt(n,i);return a>=1?this:(kn(this.tmp,n,i),ta(this.tmp)1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1;if(J1(B_,this.matrix))return this;const i=n===-1?e.length:r+n*3;for(let o=r;oMath.abs(Math.abs(t)-1)Kx(t[e])||Kx(t[e+1])||Kx(t[e+2]),uie=t=>qx(t,0)&&qx(t,3)&&qx(t,6);function pw(t,e,r){const n=t.getMapper().getInputData();let i;const o=n.getDirection();if(uie(o))i=xN(t);else{const[u,d,h]=n.getDimensions();i=[[0,0,0],[u-1,0,0],[0,d-1,0],[u-1,d-1,0],[0,0,h-1],[u-1,0,h-1],[0,d-1,h-1],[u-1,d-1,h-1]].map(p=>n.indexToWorld(p))}const a=Yi.buildFromDegree().identity().rotateFromDirections(e,[1,0,0]);i.forEach(u=>a.apply(u));const s=[...r];a.apply(s);const c=s[0];let l=1/0,f=-1/0;for(let u=0;u<8;u++){const d=i[u][0];d>f&&(f=d),df?h=f:h<0&&(h=0);const p=h*i;g=[g[0]+n[0]*p,g[1]+n[1]*p,g[2]+n[2]*p];const v=[g[0]+l[0],g[1]+l[1],g[2]+l[2]];return{newFocalPoint:g,newPosition:v}}const fie={RGB:0,HSV:1,LAB:2,DIVERGING:3},die={LINEAR:0,LOG10:1};var CN={ColorSpace:fie,Scale:die};const{ColorSpace:us,Scale:N4}=CN,{ScalarMappingTarget:pv}=aw,{vtkDebugMacro:hie,vtkErrorMacro:Tl,vtkWarningMacro:gie}=J;function bD(t,e){const r=t[0],n=t[1],i=t[2],o=Math.sqrt(r*r+n*n+i*i),a=o>.001?Math.acos(r/o):0,s=a>.001?Math.atan2(i,n):0;e[0]=o,e[1]=a,e[2]=s}function pie(t,e){const r=t[0],n=t[1],i=t[2];e[0]=r*Math.cos(n),e[1]=r*Math.sin(n)*Math.cos(i),e[2]=r*Math.sin(n)*Math.sin(i)}function DD(t,e){if(t[0]>=e-.1)return t[2];const r=t[1]*Math.sqrt(e*e-t[0]*t[0])/(t[0]*Math.sin(t[1]));return t[2]>-.3*Math.PI?t[2]+r:t[2]-r}function mie(t,e){let r=t-e;for(r<0&&(r=-r);r>=2*Math.PI;)r-=2*Math.PI;return r>Math.PI&&(r=2*Math.PI-r),r}function ID(t,e,r,n){const i=[],o=[];nd(e,i),nd(r,o);const a=[],s=[];bD(i,a),bD(o,s);let c=t;if(a[1]>.05&&s[1]>.05&&mie(a[2],s[2])>.33*Math.PI){let u=Math.max(a[0],s[0]);u=Math.max(88,u),t<.5?(s[0]=u,s[1]=0,s[2]=0,c*=2):(a[0]=u,a[1]=0,a[2]=0,c=2*c-1)}a[1]<.05&&s[1]>.05?a[2]=DD(s,a[0]):s[1]<.05&&a[1]>.05&&(s[2]=DD(a,s[0]));const l=[];l[0]=(1-c)*a[0]+c*s[0],l[1]=(1-c)*a[1]+c*s[1],l[2]=(1-c)*a[2]+c*s[2];const f=[];pie(l,f),vy(f,n)}function vie(t,e){e.classHierarchy.push("vtkColorTransferFunction"),t.getSize=()=>e.nodes.length,t.addRGBPoint=(r,n,i,o)=>t.addRGBPointLong(r,n,i,o,.5,0),t.addRGBPointLong=function(r,n,i,o){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:.5,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0;if(a<0||a>1)return Tl("Midpoint outside range [0.0, 1.0]"),-1;if(s<0||s>1)return Tl("Sharpness outside range [0.0, 1.0]"),-1;e.allowDuplicateScalars||t.removePoint(r);const c={x:r,r:n,g:i,b:o,midpoint:a,sharpness:s};e.nodes.push(c),t.sortAndUpdateRange();let l=0;for(;lt.addHSVPointLong(r,n,i,o,.5,0),t.addHSVPointLong=function(r,n,i,o){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:.5,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0;const c=[];return Kf([n,i,o],c),t.addRGBPoint(r,c[0],c[1],c[2],a,s)},t.setNodes=r=>{if(e.nodes!==r){const n=JSON.stringify(e.nodes);e.nodes=r;const i=JSON.stringify(e.nodes);if(t.sortAndUpdateRange()||n!==i)return t.modified(),!0}return!1},t.sortAndUpdateRange=()=>{const r=JSON.stringify(e.nodes);e.nodes.sort((o,a)=>o.x-a.x);const n=JSON.stringify(e.nodes),i=t.updateRange();return!i&&r!==n?(t.modified(),!0):i},t.updateRange=()=>{const r=[2];r[0]=e.mappingRange[0],r[1]=e.mappingRange[1];const n=e.nodes.length;return n?(e.mappingRange[0]=e.nodes[0].x,e.mappingRange[1]=e.nodes[n-1].x):(e.mappingRange[0]=0,e.mappingRange[1]=0),r[0]===e.mappingRange[0]&&r[1]===e.mappingRange[1]?!1:(t.modified(),!0)},t.removePoint=r=>{let n=0;for(;n=e.nodes.length)return-1;let o=!1;return e.nodes.splice(n,1),(n===0||n===e.nodes.length)&&(o=t.updateRange()),o||t.modified(),i},t.movePoint=(r,n)=>{if(r!==n){t.removePoint(n);for(let i=0;i{e.nodes=[],t.sortAndUpdateRange()},t.addRGBSegment=(r,n,i,o,a,s,c,l)=>{t.sortAndUpdateRange();for(let f=0;f=r&&e.nodes[f].x<=a?e.nodes.splice(f,1):f++;t.addRGBPointLong(r,n,i,o,.5,0),t.addRGBPointLong(a,s,c,l,.5,0),t.modified()},t.addHSVSegment=(r,n,i,o,a,s,c,l)=>{const f=[n,i,o],u=[s,c,l],d=[],h=[];Kf(f,d),Kf(u,h),t.addRGBSegment(r,d[0],d[1],d[2],a,h[0],h[1],h[2])},t.mapValue=r=>{const n=[];return t.getColor(r,n),[Math.floor(255*n[0]+.5),Math.floor(255*n[1]+.5),Math.floor(255*n[2]+.5),255]},t.getColor=(r,n)=>{if(e.indexedLookup){const i=t.getSize(),o=t.getAnnotatedValueIndexInternal(r);if(o<0||i===0){const a=t.getNanColorByReference();n[0]=a[0],n[1]=a[1],n[2]=a[2]}else{const a=[];t.getNodeValue(o%i,a),n[0]=a[1],n[1]=a[2],n[2]=a[3]}return}t.getTable(r,r,1,n)},t.getRedValue=r=>{const n=[];return t.getColor(r,n),n[0]},t.getGreenValue=r=>{const n=[];return t.getColor(r,n),n[1]},t.getBlueValue=r=>{const n=[];return t.getColor(r,n),n[2]},t.getTable=(r,n,i,o)=>{const a=Number(r),s=Number(n);if(yy(a)||yy(s)){for(let E=0;E0);let S=0,T=0,_=0;C&&(S=Math.log10(a),T=Math.log10(s));for(let E=0;E1?C?(_=S+E/(i-1)*(T-S),h=10**_):h=a+E/(i-1)*(s-a):C?(_=.5*(S+T),h=10**_):h=.5*(a+s),e.discretize){const D=e.mappingRange;if(h>=D[0]&&h<=D[1]){const I=e.numberOfValues,P=D[1]-D[0];if(I<=1)h=D[0]+P/2;else{const O=(h-D[0])/P,A=z_(I*O);h=D[0]+A/(I-1)*P}}}for(;ce.nodes[c].x;)c++,c.99999&&(m=.99999));if(h>e.mappingRange[1])o[b]=0,o[b+1]=0,o[b+2]=0,e.clamping&&(t.getUseAboveRangeColor()?(o[b]=e.aboveRangeColor[0],o[b+1]=e.aboveRangeColor[1],o[b+2]=e.aboveRangeColor[2]):(o[b]=f,o[b+1]=u,o[b+2]=d));else if(h0&&(o[b]=e.nodes[0].r,o[b+1]=e.nodes[0].g,o[b+2]=e.nodes[0].b));else if(c===0&&(Math.abs(h-a)<1e-6||e.discretize))l>0?(o[b]=e.nodes[0].r,o[b+1]=e.nodes[0].g,o[b+2]=e.nodes[0].b):(o[b]=0,o[b+1]=0,o[b+2]=0);else{let D=0;if(C?D=(_-g)/(p-g):D=(h-g)/(p-g),D.99)if(D<.5){o[b]=v[0],o[b+1]=v[1],o[b+2]=v[2];continue}else{o[b]=y[0],o[b+1]=y[1],o[b+2]=y[2];continue}if(w<.01){if(e.colorSpace===us.RGB)o[b]=(1-D)*v[0]+D*y[0],o[b+1]=(1-D)*v[1]+D*y[1],o[b+2]=(1-D)*v[2]+D*y[2];else if(e.colorSpace===us.HSV){const F=[],j=[];Hg(v,F),Hg(y,j),e.hSVWrap&&(F[0]-j[0]>.5||j[0]-F[0]>.5)&&(F[0]>j[0]?F[0]-=1:j[0]-=1);const te=[];te[0]=(1-D)*F[0]+D*j[0],te[0]<0&&(te[0]+=1),te[1]=(1-D)*F[1]+D*j[1],te[2]=(1-D)*F[2]+D*j[2],Kf(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else if(e.colorSpace===us.LAB){const F=[],j=[];nd(v,F),nd(y,j);const te=[];te[0]=(1-D)*F[0]+D*j[0],te[1]=(1-D)*F[1]+D*j[1],te[2]=(1-D)*F[2]+D*j[2],vy(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else e.colorSpace===us.DIVERGING?(ID(D,v,y,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]):Tl("ColorSpace set to invalid value.",e.colorSpace);continue}D<.5?D=.5*(D*2)**(1+10*w):D>.5&&(D=1-.5*((1-D)*2)**(1+10*w));const I=D*D,P=I*D,O=2*P-3*I+1,A=-2*P+3*I,V=P-2*I+D,G=P-I;let R,N;if(e.colorSpace===us.RGB)for(let F=0;F<3;F++)R=y[F]-v[F],N=(1-w)*R,o[b+F]=O*v[F]+A*y[F]+V*N+G*N;else if(e.colorSpace===us.HSV){const F=[],j=[];Hg(v,F),Hg(y,j),e.hSVWrap&&(F[0]-j[0]>.5||j[0]-F[0]>.5)&&(F[0]>j[0]?F[0]-=1:j[0]-=1);const te=[];for(let ie=0;ie<3;ie++)R=j[ie]-F[ie],N=(1-w)*R,te[ie]=O*F[ie]+A*j[ie]+V*N+G*N,ie===0&&te[ie]<0&&(te[ie]+=1);Kf(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else if(e.colorSpace===us.LAB){const F=[],j=[];nd(v,F),nd(y,j);const te=[];for(let ie=0;ie<3;ie++)R=j[ie]-F[ie],N=(1-w)*R,te[ie]=O*F[ie]+A*j[ie]+V*N+G*N;vy(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else e.colorSpace===us.DIVERGING?(ID(D,v,y,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]):Tl("ColorSpace set to invalid value.");for(let F=0;F<3;F++)o[b+F]=o[b+F]<0?0:o[b+F],o[b+F]=o[b+F]>1?1:o[b+F]}}},t.getUint8Table=function(r,n,i){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(t.getMTime()<=e.buildTime&&e.tableSize===i&&e.tableWithAlpha!==o)return e.table;if(e.nodes.length===0)return Tl("Attempting to lookup a value with no points in the function"),e.table;const a=o?4:3;(e.tableSize!==i||e.tableWithAlpha!==o)&&(e.table=new Uint8Array(i*a),e.tableSize=i,e.tableWithAlpha=o);const s=[];t.getTable(r,n,i,s);for(let c=0;c{t.removeAllPoints();const n=r.getNumberOfComponents();for(let i=0;i{let a=0;t.removeAllPoints(),i>1&&(a=(n-r)/(i-1));for(let s=0;sr<0||r>=e.nodes.length?(Tl("Index out of range!"),-1):(n[0]=e.nodes[r].x,n[1]=e.nodes[r].r,n[2]=e.nodes[r].g,n[3]=e.nodes[r].b,n[4]=e.nodes[r].midpoint,n[5]=e.nodes[r].sharpness,1),t.setNodeValue=(r,n)=>{if(r<0||r>=e.nodes.length)return Tl("Index out of range!"),-1;const i=e.nodes[r].x;return e.nodes[r].x=n[0],e.nodes[r].r=n[1],e.nodes[r].g=n[2],e.nodes[r].b=n[3],e.nodes[r].midpoint=n[4],e.nodes[r].sharpness=n[5],i!==n[0]?t.sortAndUpdateRange():t.modified(),1},t.getNumberOfAvailableColors=()=>{var n;if(e.indexedLookup&&t.getSize())return t.getSize();if(e.tableSize)return e.tableSize;const r=((n=e.nodes)==null?void 0:n.length)??0;return Math.max(4094,r)},t.getIndexedColor=(r,n)=>{const i=t.getSize();if(i>0&&r>=0){const a=[];t.getNodeValue(r%i,a);for(let s=0;s<3;++s)n[s]=a[s+1];n[3]=1;return}const o=t.getNanColorByReference();n[0]=o[0],n[1]=o[1],n[2]=o[2],n[3]=1},t.fillFromDataPointer=(r,n)=>{if(!(r<=0||!n)){t.removeAllPoints();for(let i=0;i{const i=[r,n],o=t.getRange();if(o[1]===i[1]&&o[0]===i[0])return;if(i[1]===i[0]){Tl("attempt to set zero width color range");return}const a=(i[1]-i[0])/(o[1]-o[0]),s=i[0]-o[0]*a;for(let c=0;c{const n=t.getRange(),i=[];n[0]r[1]?(t.getColor(r[1],i),t.addRGBPoint(r[1],i[0],i[1],i[2])):(t.getColor(n[1],i),t.addRGBPoint(r[1],i[0],i[1],i[2])),t.sortAndUpdateRange();for(let o=0;o=r[0]&&e.nodes[o].x<=r[1]?e.nodes.splice(o,1):++o;return 1},t.estimateMinNumberOfSamples=(r,n)=>{const i=t.findMinimumXDistance();return Math.ceil((n-r)/i)},t.findMinimumXDistance=()=>{if(e.nodes.length<2)return-1;let r=Number.MAX_VALUE;for(let n=0;n{if(t.getSize()===0){hie("Transfer Function Has No Points!");return}e.indexedLookup?t.mapDataIndexed(r,n,i,o):t.mapData(r,n,i,o)},t.mapData=(r,n,i,o)=>{if(t.getSize()===0){gie("Transfer Function Has No Points!");return}const a=Math.floor(t.getAlpha()*255+.5),s=r.getNumberOfTuples(),c=r.getNumberOfComponents(),l=n.getData(),f=r.getData(),u=[];if(i===pv.RGBA)for(let d=0;d{const n=JSON.stringify(e.colorSpace);r.ColorSpace&&(e.colorSpace=us[r.ColorSpace.toUpperCase()],e.colorSpace===void 0&&(Tl(`ColorSpace ${r.ColorSpace} not supported, using RGB instead`),e.colorSpace=us.RGB));let i=n!==JSON.stringify(e.colorSpace);const o=i||JSON.stringify(e.nanColor);if(r.NanColor)for(e.nanColor=[].concat(r.NanColor);e.nanColor.length<4;)e.nanColor.push(1);i=i||o!==JSON.stringify(e.nanColor);const a=i||JSON.stringify(e.nodes);if(r.RGBPoints){const l=r.RGBPoints.length;e.nodes=[];const f=.5,u=0;for(let d=0;d2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,yie,r),aw.extend(t,e,r),e.table=[],e.nodes=[],e.nanColor=[.5,0,0,1],e.belowRangeColor=[0,0,0,1],e.aboveRangeColor=[1,1,1,1],e.buildTime={},J.obj(e.buildTime),J.get(t,e,["buildTime","mappingRange"]),J.setGet(t,e,["useAboveRangeColor","useBelowRangeColor","discretize","numberOfValues",{type:"enum",name:"colorSpace",enum:us},{type:"enum",name:"scale",enum:N4}]),J.setArray(t,e,["nanColor","belowRangeColor","aboveRangeColor"],4),J.getArray(t,e,["nanColor","belowRangeColor","aboveRangeColor"]),vie(t,e)}const wie=J.newInstance(SN,"vtkColorTransferFunction");var Ql={newInstance:wie,extend:SN,...CN},xie=[{Name:"KAAMS",IndexedColors:[1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,.63,.63,1,.67,.5,.33,1,.5,.75,.53,.35,.7,1,.75,.5],Annotations:[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11]},{ColorSpace:"Diverging",Name:"Cool to Warm",NanColor:[1,1,0],RGBPoints:[0,.23137254902,.298039215686,.752941176471,.5,.865,.865,.865,1,.705882352941,.0156862745098,.149019607843]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Cool to Warm (Extended)",NanColor:[.25,0,0],RGBPoints:[0,0,0,.34902,.03125,.039216,.062745,.380392,.0625,.062745,.117647,.411765,.09375,.090196,.184314,.45098,.125,.12549,.262745,.501961,.15625,.160784,.337255,.541176,.1875,.2,.396078,.568627,.21875,.239216,.454902,.6,.25,.286275,.521569,.65098,.28125,.337255,.592157,.701961,.3125,.388235,.654902,.74902,.34375,.466667,.737255,.819608,.375,.572549,.819608,.878431,.40625,.654902,.866667,.909804,.4375,.752941,.917647,.941176,.46875,.823529,.956863,.968627,.5,.988235,.960784,.901961,.5,.941176,.984314,.988235,.52,.988235,.945098,.85098,.54,.980392,.898039,.784314,.5625,.968627,.835294,.698039,.59375,.94902,.733333,.588235,.625,.929412,.65098,.509804,.65625,.909804,.564706,.435294,.6875,.878431,.458824,.352941,.71875,.839216,.388235,.286275,.75,.760784,.294118,.211765,.78125,.701961,.211765,.168627,.8125,.65098,.156863,.129412,.84375,.6,.094118,.094118,.875,.54902,.066667,.098039,.90625,.501961,.05098,.12549,.9375,.45098,.054902,.172549,.96875,.4,.054902,.192157,1,.34902,.070588,.211765]},{ColorSpace:"Diverging",Name:"Warm to Cool",NanColor:[1,1,0],RGBPoints:[0,.705882352941,.0156862745098,.149019607843,.5,.865,.865,.865,1,.23137254902,.298039215686,.752941176471]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Warm to Cool (Extended)",NanColor:[.250004,0,0],RGBPoints:[0,.34902,0,.129412,.025,.4,.00392157,.101961,.05,.470588,.0156863,.0901961,.075,.54902,.027451,.0705882,.1,.619608,.0627451,.0431373,.125,.690196,.12549,.0627451,.15,.741176,.184314,.0745098,.175,.788235,.266667,.0941176,.2,.811765,.345098,.113725,.225,.831373,.411765,.133333,.25,.85098,.47451,.145098,.275,.870588,.54902,.156863,.3,.878431,.619608,.168627,.325,.890196,.658824,.196078,.35,.909804,.717647,.235294,.375,.929412,.776471,.278431,.395522,.94902,.823529,.321569,.418905,.968627,.87451,.407843,.444278,.980392,.917647,.509804,.470149,.988235,.956863,.643137,.483582,.992157,.964706,.713725,.499,.988235,.980392,.870588,.5,1,1,1,.501,.913725,.988235,.937255,.516418,.827451,.980392,.886275,.531343,.764706,.980392,.866667,.546766,.658824,.980392,.843137,.564179,.572549,.964706,.835294,.587562,.423529,.941176,.87451,.60597,.262745,.901961,.862745,.629851,.0705882,.854902,.870588,.651741,.0509804,.8,.85098,.681592,.0235294,.709804,.831373,.712935,.0313725,.615686,.811765,.75,.0313725,.537255,.788235,.775,.0392157,.466667,.768627,.8,.0509804,.396078,.741176,.825,.054902,.317647,.709804,.85,.054902,.243137,.678431,.875,.0431373,.164706,.639216,.9,.0313725,.0980392,.6,.925,.0392157,.0392157,.560784,.95,.105882,.0509804,.509804,.975,.113725,.0235294,.45098,1,.12549,0,.380392]},{ColorSpace:"RGB",Name:"Rainbow Desaturated",NanColor:[1,1,0],RGBPoints:[0,.278431372549,.278431372549,.858823529412,.143,0,0,.360784313725,.285,0,1,1,.429,0,.501960784314,0,.571,1,1,0,.714,1,.380392156863,0,.857,.419607843137,0,0,1,.878431372549,.301960784314,.301960784314]},{ColorSpace:"RGB",Name:"Cold and Hot",NanColor:[1,1,0],RGBPoints:[0,0,1,1,.45,0,0,1,.5,0,0,.501960784314,.55,1,0,0,1,1,1,0]},{ColorSpace:"RGB",Name:"Black-Body Radiation",NanColor:[0,.498039215686,1],RGBPoints:[0,0,0,0,.4,.901960784314,0,0,.8,.901960784314,.901960784314,0,1,1,1,1]},{ColorSpace:"RGB",Name:"X Ray",NanColor:[1,0,0],RGBPoints:[0,1,1,1,1,0,0,0]},{ColorSpace:"RGB",Name:"Grayscale",NanColor:[1,0,0],RGBPoints:[0,0,0,0,1,1,1,1]},{ColorSpace:"RGB",Name:"BkRd",NanColor:[0,1,1],RGBPoints:[0,0,0,0,1,1,0,0]},{ColorSpace:"RGB",Name:"BkGn",NanColor:[1,0,1],RGBPoints:[0,0,0,0,1,0,1,0]},{ColorSpace:"RGB",Name:"BkBu",NanColor:[1,1,0],RGBPoints:[0,0,0,0,1,0,0,1]},{ColorSpace:"RGB",Name:"BkMa",NanColor:[0,1,0],RGBPoints:[0,0,0,0,1,1,0,1]},{ColorSpace:"RGB",Name:"BkCy",NanColor:[0,1,1],RGBPoints:[0,0,0,0,1,0,1,1]},{ColorSpace:"RGB",Name:"Black, Blue and White",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.333,0,0,.501960784314,.666,0,.501960784314,1,1,1,1,1]},{ColorSpace:"RGB",Name:"Black, Orange and White",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.333,.501960784314,0,0,.666,1,.501960784314,0,1,1,1,1]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Linear YGB 1211g",NanColor:[.25,0,0],RGBPoints:[0,1,.988235,.968627,.02,1,.952941,.878431,.05,.968627,.905882,.776471,.1,.94902,.898039,.647059,.15,.901961,.878431,.556863,.2,.847059,.858824,.482353,.25,.690196,.819608,.435294,.3,.513725,.768627,.384314,.35,.337255,.721569,.337255,.4,.278431,.658824,.392157,.45,.231373,.639216,.435294,.5,.203922,.6,.486275,.55,.172549,.568627,.537255,.6,.141176,.517647,.54902,.65,.133333,.458824,.541176,.7,.12549,.396078,.529412,.75,.117647,.321569,.521569,.8,.121569,.258824,.509804,.85,.133333,.227451,.501961,.9,.145098,.192157,.490196,.95,.188235,.164706,.470588,1,.258824,.196078,.439216]},{ColorSpace:"CIELAB",Creator:"Francesca Samsel",Name:"Linear Green (Gr4L)",NanColor:[.25,0,0],RGBPoints:[0,.054902,.109804,.121569,.05,.07451,.172549,.180392,.1,.086275,.231373,.219608,.15,.094118,.278431,.25098,.2,.109804,.34902,.278431,.25,.113725,.4,.278431,.3,.117647,.45098,.270588,.35,.117647,.490196,.243137,.4,.113725,.521569,.203922,.45,.109804,.54902,.152941,.5,.082353,.588235,.082353,.55,.109804,.631373,.05098,.6,.211765,.678431,.082353,.65,.317647,.721569,.113725,.7,.431373,.760784,.160784,.75,.556863,.8,.239216,.8,.666667,.839216,.294118,.85,.784314,.878431,.396078,.9,.886275,.921569,.533333,.95,.960784,.94902,.670588,1,1,.984314,.901961]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Linear Blue (8_31f)",NanColor:[.25,0,0],RGBPoints:[0,.960784,1,.980392,.05,.815686,.960784,.913725,.1,.670588,.929412,.870588,.15,.556863,.901961,.843137,.2,.478431,.870588,.823529,.25,.439216,.831373,.803922,.3,.4,.8,.788235,.35,.376471,.768627,.768627,.4,.34902,.709804,.729412,.45,.32549,.654902,.690196,.5,.301961,.607843,.658824,.55,.247059,.545098,.619608,.6,.239216,.494118,.580392,.65,.227451,.439216,.541176,.7,.227451,.403922,.521569,.75,.231373,.368627,.501961,.8,.227451,.321569,.470588,.85,.219608,.282353,.439216,.9,.192157,.235294,.4,.95,.160784,.184314,.34902,1,.133333,.12549,.301961]},{ColorSpace:"HSV",Name:"Blue to Red Rainbow",NanColor:[.498039215686,.498039215686,.498039215686],RGBPoints:[0,0,0,1,1,1,0,0]},{ColorSpace:"HSV",Name:"Red to Blue Rainbow",NanColor:[.498039215686,.498039215686,.498039215686],RGBPoints:[0,1,0,0,1,0,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended White",NanColor:[1,1,0],RGBPoints:[0,1,1,1,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended Grey",NanColor:[1,1,0],RGBPoints:[0,.317647058824,.341176470588,.43137254902,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended Black",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Blue to Yellow",NanColor:[1,0,0],RGBPoints:[0,.0392156862745,.0392156862745,.949019607843,1,.949019607843,.949019607843,.0392156862745]},{ColorSpace:"HSV",Name:"blot",RGBPoints:[0,0,0,1,.166,0,0,1,.167,1,0,1,.332,1,0,1,.333,0,1,1,.5,0,1,1,.501,0,1,0,.666,0,1,0,.667,1,1,0,.832,1,1,0,.833,1,0,0,1,1,0,0]},{ColorSpace:"Lab",Name:"CIELab Blue to Red",NanColor:[1,1,0],RGBPoints:[0,0,.6,.749019607843,1,.76862745098,.466666666667,.341176470588]},{ColorSpace:"RGB",Name:"jet",RGBPoints:[-1,0,0,.5625,-.777778,0,0,1,-.269841,0,1,1,-.015873,.5,1,.5,.238095,1,1,0,.746032,1,0,0,1,.5,0,0]},{ColorSpace:"RGB",Name:"rainbow",RGBPoints:[-1,0,0,1,-.5,0,1,1,0,0,1,0,.5,1,1,0,1,1,0,0]},{ColorSpace:"Lab",Name:"erdc_rainbow_bright",RGBPoints:[-1,.32549,.14902,.960784,-.866221,.297047,.375586,.963836,-.732441,.180302,.536818,.964627,-.598662,.1302,.649207,.929647,-.464883,.0445143,.749654,.855998,-.331104,.0271325,.830713,.721527,-.197324,.259504,.866145,.543555,-.0635452,.428364,.890725,.329819,.0702341,.568503,.898508,.187623,.204013,.738259,.890317,.0825461,.337793,.84546,.86136,.0147555,.471572,.912191,.808018,0,.605351,.962848,.710445,0,.73913,.999469,.600258,.0176284,.87291,.994156,.445975,.193912,1,.980407,.247105,.262699]},{ColorSpace:"Lab",Name:"erdc_rainbow_dark",RGBPoints:[-1,0,0,.423499,-.866221,0,.119346,.529237,-.732441,0,.238691,.634976,-.598662,0,.346852,.68788,-.464883,0,.45022,.718141,-.331104,0,.553554,.664839,-.197324,0,.651082,.519303,-.0635452,.115841,.72479,.352857,.0702341,.326771,.781195,.140187,.204013,.522765,.798524,.0284624,.337793,.703162,.788685,.00885756,.471572,.845118,.751133,0,.605351,.955734,.690825,0,.73913,.995402,.567916,.0618524,.87291,.987712,.403398,.164851,1,.980407,.247105,.262699]},{ColorSpace:"Lab",Name:"nic_CubicL",RGBPoints:[-1,.479965,.0118108,.5307,-.87451,.522213,.0551282,.706919,-.74902,.50839,.237278,.867764,-.623529,.451617,.373834,.987255,-.498039,.39365,.497255,.97506,-.372549,.328631,.599639,.891843,-.247059,.250043,.690286,.778553,-.121569,.249656,.764905,.645857,.00392157,.297954,.821466,.50449,.129412,.337509,.872595,.358447,.254902,.430011,.913789,.297079,.380392,.587191,.931381,.333353,.505882,.727937,.93591,.353742,.631373,.826403,.921081,.365066,.756863,.893201,.846317,.372662,.882353,.965347,.73884,.378506,1,.983235,.597451,.366856]},{ColorSpace:"Lab",Name:"nic_CubicYF",RGBPoints:[-1,.5151,.0482,.6697,-.87451,.520711,.168955,.800574,-.74902,.493694,.278596,.911824,-.623529,.440026,.369475,.984978,-.498039,.398932,.457593,.987053,-.372549,.350651,.540644,.929608,-.247059,.298827,.615625,.857729,-.121569,.239928,.685061,.769531,.00392157,.228832,.739349,.673287,.129412,.263297,.78608,.569988,.254902,.298107,.828337,.460214,.380392,.33092,.864071,.352674,.505882,.38306,.898169,.287309,.631373,.49023,.917481,.307961,.756863,.62372,.926026,.332309,.882353,.717458,.92527,.342476,1,.8,.9255,.3529]},{ColorSpace:"Lab",Name:"gist_earth",RGBPoints:[-1,0,0,0,-.87451,.239216,.027451,.415686,-.74902,.0901961,.254902,.556863,-.623529,.0941176,.352941,.54902,-.498039,.105882,.435294,.533333,-.372549,.12549,.52549,.501961,-.247059,.156863,.596078,.443137,-.121569,.196078,.65098,.380392,.00392157,.282353,.717647,.301961,.129412,.466667,.772549,.27451,.254902,.678431,.784314,.309804,.380392,.901961,.756863,.376471,.505882,.992157,.705882,.521569,.631373,1,.721569,.701961,.756863,1,.784314,.784314,.882353,1,.866667,.866667,1,1,1,1]},{ColorSpace:"Lab",Name:"2hot",RGBPoints:[-1,.0416667,0,0,-.873016,.208333,0,0,-.746032,.375,0,0,-.619048,.541667,0,0,-.492063,.708333,0,0,-.365079,.854137,0,0,-.238095,.937488,.039062,0,-.111111,1,.208333,0,.015873,1,.375,0,.142857,1,.541667,0,.269841,1,.708333,0,.396825,1,.858805,.03125,.52381,1,.947392,.15625,.650794,1,1,.3125,.777778,1,1,.5625,.904762,1,1,.8125,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_red2yellow_BW",RGBPoints:[-1,754296e-12,0,109827e-10,-.87451,.18285,.0264094,0,-.74902,.3066,0,0,-.623529,.422841,0,0,-.498039,.522945,0,0,-.372549,.605721,0,0,-.247059,.672502,.14168,0,-.121569,.728167,.244025,0,.00392157,.781215,.333454,0,.129412,.825,.423586,0,.254902,.855893,.516793,0,.380392,.880491,.608846,0,.505882,.910305,.695505,0,.631373,.94109,.779067,.223528,.756863,.967873,.858572,.473521,.882353,.986815,.933211,.751583,1,1,1,.999997]},{ColorSpace:"Lab",Name:"erdc_marine2gold_BW",RGBPoints:[-1,111641e-12,0,162551e-11,-.87451,.0413146,.0619808,.209857,-.74902,.0185557,.101341,.350684,-.623529,.00486405,.149847,.461054,-.498039,.0836345,.210845,.517906,-.372549,.173222,.276134,.541793,-.247059,.259857,.343877,.535869,-.121569,.362299,.408124,.504293,.00392157,.468266,.468276,.468257,.129412,.582781,.527545,.374914,.254902,.691591,.585251,.274266,.380392,.784454,.645091,.247332,.505882,.862299,.710383,.27518,.631373,.920863,.782923,.351563,.756863,.955792,.859699,.533541,.882353,.976162,.93433,.780671,1,1,1,.999983]},{ColorSpace:"Lab",Name:"erdc_blue2gold_BW",RGBPoints:[-1,0,0,0,-.87451,.0742735,.0440331,.230013,-.74902,.125276,.0258685,.415826,-.623529,.143879,.0163031,.591346,-.498039,.212261,.0627855,.705239,-.372549,.306048,.141178,.763636,-.247059,.391537,.232286,.773263,-.121569,.461734,.336633,.708321,.00392157,.54209,.427581,.590007,.129412,.61704,.508623,.460978,.254902,.702703,.579586,.309117,.380392,.790336,.644811,.170397,.505882,.870173,.710733,.117134,.631373,.93656,.781991,.157144,.756863,.965672,.862068,.409836,.882353,.985751,.936296,.714162,1,1,1,.999999]},{ColorSpace:"Lab",Name:"erdc_sapphire2gold_BW",RGBPoints:[-1,.107704,.107708,.107694,-.87451,.1851,.112354,.308554,-.74902,.236782,.114233,.48788,-.623529,.28296,.126187,.639464,-.498039,.344787,.171643,.739713,-.372549,.413325,.242371,.76913,-.247059,.481863,.3131,.719841,-.121569,.550402,.383829,.612222,.00392157,.61894,.454558,.51126,.129412,.687478,.525287,.39993,.254902,.756017,.596016,.289923,.380392,.824555,.666745,.255498,.505882,.892979,.736822,.27696,.631373,.938851,.804966,.351734,.756863,.966491,.874853,.53572,.882353,.982105,.94153,.782579,1,1,1,.999986]},{ColorSpace:"Lab",Name:"erdc_red2purple_BW",RGBPoints:[-1,0,0,0,-.87451,.167793,.0166271,.0431278,-.74902,.262608,.0107595,.0791181,-.623529,.351902,.0101858,.100926,-.498039,.441257,.0160835,.131919,-.372549,.5221,.0555972,.195625,-.247059,.593852,.104294,.310234,-.121569,.654628,.158115,.448486,.00392157,.707443,.220914,.570253,.129412,.749504,.293268,.67897,.254902,.781587,.370517,.779269,.380392,.809951,.451099,.855831,.505882,.84424,.531462,.900451,.631373,.865174,.620901,.91606,.756863,.875041,.714054,.910284,.882353,.880764,.80554,.896276,1,.887572,.887591,.887556]},{ColorSpace:"Lab",Name:"erdc_purple2pink_BW",RGBPoints:[-1,0,0,0,-.87451,.117562,.0291202,.175876,-.74902,.178368,.0458476,.285454,-.623529,.237731,.0680173,.387717,-.498039,.300877,.0956291,.484802,-.372549,.370929,.136858,.554985,-.247059,.449033,.189273,.58863,-.121569,.529971,.245796,.598587,.00392157,.609914,.300643,.610244,.129412,.697079,.351286,.616371,.254902,.785858,.401991,.617376,.380392,.862517,.45745,.64463,.505882,.91359,.525462,.705336,.631373,.932583,.61064,.767412,.756863,.922478,.706966,.817522,.882353,.901302,.803071,.856311,1,.887571,.887591,.887549]},{ColorSpace:"Lab",Name:"erdc_pbj_lin",RGBPoints:[-1,0,0,0,-.87451,.091821,.0611476,.10617,-.74902,.160311,.0900022,.192713,-.623529,.22484,.12126,.272128,-.498039,.291263,.157469,.340828,-.372549,.360015,.200388,.388903,-.247059,.437497,.250058,.387201,-.121569,.512636,.304969,.355955,.00392157,.582603,.360874,.33488,.129412,.655126,.416374,.306351,.254902,.725889,.473329,.279051,.380392,.778125,.537928,.302697,.505882,.815894,.606931,.382431,.631373,.839159,.679308,.497608,.756863,.854748,.751666,.631792,.882353,.869483,.822508,.768592,1,.887572,.887589,.887565]},{ColorSpace:"Lab",Name:"erdc_blue2green_muted",RGBPoints:[-1,.107704,.107708,.107695,-.87451,.141522,.13066,.270741,-.74902,.180123,.146119,.42308,-.623529,.210161,.169674,.551795,-.498039,.239701,.212939,.634969,-.372549,.253916,.282947,.653641,-.247059,.242791,.366933,.608521,-.121569,.226302,.446776,.52693,.00392157,.236237,.514689,.458798,.129412,.274641,.577589,.376069,.254902,.349625,.633993,.288131,.380392,.4437,.683677,.260497,.505882,.536247,.731214,.285424,.631373,.628472,.777128,.349151,.756863,.718259,.819287,.496825,.882353,.804768,.856164,.703299,1,.887571,.887591,.887548]},{ColorSpace:"Lab",Name:"erdc_blue2green_BW",RGBPoints:[-1,363578e-12,0,529374e-11,-.87451,.0539915,.0577948,.212806,-.74902,.0620393,.0758942,.388959,-.623529,.0697499,.102032,.54177,-.498039,.113295,.156156,.64334,-.372549,.152047,.243196,.670283,-.247059,.158096,.344084,.622864,-.121569,.151142,.43922,.532767,.00392157,.17155,.521588,.457719,.129412,.225861,.599141,.363997,.254902,.32328,.67007,.259083,.380392,.442344,.733697,.223754,.505882,.558409,.794941,.257411,.631373,.673875,.854344,.340822,.756863,.787244,.909326,.524717,.882353,.896483,.958063,.775914,1,1,1,.999982]},{ColorSpace:"Lab",Name:"GREEN-WHITE_LINEAR",RGBPoints:[-1,0,0,0,-.87451,0,.062745,0,-.74902,0,.12549,0,-.623529,0,.188235,0,-.498039,0,.25098,0,-.372549,0,.313725,0,-.247059,0,.376471,0,-.121569,.094118,.439216,0,.00392157,.196078,.501961,0,.129412,.294118,.564706,0,.254902,.396078,.627451,0,.380392,.498039,.690196,0,.505882,.6,.752941,.145098,.631373,.701961,.815686,.364706,.756863,.8,.878431,.580392,.882353,.901961,.941176,.796078,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_green2yellow_BW",RGBPoints:[-1,0,0,0,-.87451,0,.105542,.0603919,-.74902,0,.159454,.104148,-.623529,0,.219502,.15542,-.498039,0,.282276,.203811,-.372549,0,.346331,.235652,-.247059,0,.411765,.235428,-.121569,0,.477177,.217977,.00392157,.0593644,.541635,.21361,.129412,.233081,.604722,.210591,.254902,.369803,.664942,.226536,.380392,.498446,.722367,.288237,.505882,.601929,.782244,.380815,.631373,.703207,.840497,.512134,.756863,.803186,.896433,.674462,.882353,.903834,.950266,.846715,1,1,1,.999981]},{ColorSpace:"Lab",Name:"blue2cyan",RGBPoints:[-1,0,0,0,-.87451,0,.152941,.364706,-.74902,0,.254902,.470588,-.623529,0,.34902,.572549,-.498039,0,.443137,.670588,-.372549,0,.537255,.772549,-.247059,0,.627451,.870588,-.121569,0,.717647,.964706,.00392157,.0784314,.772549,1,.129412,.207843,.858824,1,.254902,.32549,.941176,1,.380392,.45098,1,1,.505882,.560784,1,1,.631373,.662745,1,1,.756863,.760784,1,1,.882353,.870588,1,1,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_blue2cyan_BW",RGBPoints:[-1,405298e-12,0,59012e-10,-.87451,.0207526,.0740933,.18093,-.74902,0,.121033,.30343,-.623529,0,.166892,.416095,-.498039,0,.216768,.524796,-.372549,.0164769,.275471,.608585,-.247059,.0544527,.344824,.659267,-.121569,.0880643,.419118,.688675,.00392157,.127938,.492556,.720256,.129412,.149476,.566946,.756918,.254902,.188961,.641333,.792122,.380392,.245482,.715336,.827609,.505882,.329216,.786235,.874761,.631373,.453558,.852803,.918466,.756863,.626281,.910493,.954,.882353,.82257,.958709,.980146,1,1,1,.999989]},{ColorSpace:"Lab",Name:"erdc_blue_BW",RGBPoints:[-1,0,0,0,-.87451,.0425591,.0763529,.150682,-.74902,.0569472,.119154,.275403,-.623529,.0635978,.164772,.395427,-.498039,.0774342,.213851,.510014,-.372549,.106815,.267034,.615102,-.247059,.122093,.324649,.720068,-.121569,.160851,.387068,.806956,.00392157,.213754,.453516,.878012,.129412,.26722,.524656,.932436,.254902,.326844,.599279,.968038,.380392,.403403,.674712,.984784,.505882,.499703,.745519,1,.631373,.615055,.813983,1,.756863,.74405,.879228,1,.882353,.877909,.941913,1,1,1,1,.999996]},{ColorSpace:"Lab",Name:"BLUE-WHITE",RGBPoints:[-1,0,0,0,-.87451,0,0,.082353,-.74902,0,0,.168627,-.623529,0,0,.254902,-.498039,0,0,.337255,-.372549,0,0,.423529,-.247059,0,0,.509804,-.121569,0,.101961,.592157,.00392157,0,.203922,.678431,.129412,0,.301961,.764706,.254902,0,.403922,.85098,.380392,0,.505882,.933333,.505882,0,.603922,1,.631373,.254902,.705882,1,.756863,.509804,.807843,1,.882353,.764706,.905882,1,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_purple_BW",RGBPoints:[-1,4264e-11,0,620844e-12,-.87451,.100579,.0593111,.145666,-.74902,.167794,.0889224,.254953,-.623529,.231446,.123339,.360511,-.498039,.296699,.163027,.461278,-.372549,.363211,.209286,.55306,-.247059,.431136,.260776,.637195,-.121569,.498202,.320012,.705799,.00392157,.567456,.380459,.778091,.129412,.629381,.445284,.8448,.254902,.688373,.517374,.895694,.380392,.74891,.590906,.93976,.505882,.805017,.667956,.977626,.631373,.850914,.752618,.992396,.756863,.89724,.838454,.994093,.882353,.948461,.922603,.994449,1,1,1,.999967]},{ColorSpace:"Lab",Name:"erdc_magenta_BW",RGBPoints:[-1,0,0,254023e-10,-.87451,.128696,.0456782,.11635,-.74902,.228133,.0476299,.201452,-.623529,.327273,.0374065,.282107,-.498039,.420953,.0408166,.35709,-.372549,.511562,.0642203,.430511,-.247059,.599552,.102686,.504257,-.121569,.684646,.150536,.579429,.00392157,.765817,.205978,.656062,.129412,.839176,.27229,.731807,.254902,.89536,.357594,.797309,.380392,.930238,.457825,.846984,.505882,.945921,.564536,.880571,.631373,.948995,.670753,.902279,.756863,.947124,.772819,.918171,.882353,.947265,.869424,.934352,1,.954719,.95475,.954726]},{ColorSpace:"Lab",Name:"magenta",RGBPoints:[-1,0,0,0,-.87451,.364706,0,.152941,-.74902,.470588,0,.254902,-.623529,.572549,0,.34902,-.498039,.670588,0,.443137,-.372549,.772549,0,.537255,-.247059,.870588,0,.627451,-.121569,.964706,0,.717647,.00392157,1,.0784314,.772549,.129412,1,.207843,.858824,.254902,1,.32549,.941176,.380392,1,.45098,1,.505882,1,.560784,1,.631373,1,.662745,1,.756863,1,.760784,1,.882353,1,.870588,1,1,1,1,1]},{ColorSpace:"Lab",Name:"RED-PURPLE",RGBPoints:[-1,0,0,0,-.87451,.188235,0,.007843,-.74902,.345098,0,.035294,-.623529,.439216,0,.098039,-.498039,.533333,0,.152941,-.372549,.627451,.015686,.211765,-.247059,.721569,.031373,.266667,-.121569,.8,.047059,.329412,.00392157,.862745,.047059,.403922,.129412,.941176,.062745,.466667,.254902,.988235,.078431,.54902,.380392,.988235,.141176,.643137,.505882,.988235,.25098,.729412,.631373,.988235,.376471,.811765,.756863,.988235,.54902,.886275,.882353,.988235,.752941,.952941,1,.996078,.996078,.996078]},{ColorSpace:"Lab",Name:"erdc_red_BW",RGBPoints:[-1,0,0,0,-.87451,.147204,.0480135,.0401815,-.74902,.253411,.0617478,.0301333,-.623529,.356059,.0746331,.0446897,-.498039,.457731,.0934935,.0636931,-.372549,.557199,.122714,.0860013,-.247059,.665179,.144238,.105585,-.121569,.763833,.187056,.138326,.00392157,.847035,.254558,.189407,.129412,.905663,.345937,.258215,.254902,.941431,.447111,.346277,.380392,.962608,.546927,.457571,.505882,.987833,.637276,.569944,.631373,.994202,.732176,.687958,.756863,.993304,.826268,.800567,.882353,.994413,.917205,.906393,1,1,1,.999979]},{ColorSpace:"Lab",Name:"RED_TEMPERATURE",RGBPoints:[-1,0,0,0,-.87451,.090196,0,0,-.74902,.180392,0,0,-.623529,.270588,0,0,-.498039,.360784,0,0,-.372549,.45098,0,0,-.247059,.545098,0,0,-.121569,.635294,0,0,.00392157,.72549,.058824,0,.129412,.815686,.176471,0,.254902,.905882,.294118,0,.380392,1,.411765,0,.505882,1,.533333,.027451,.631373,1,.65098,.27451,.756863,1,.768627,.521569,.882353,1,.886275,.768627,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_orange_BW",RGBPoints:[-1,0,0,253806e-10,-.87451,.135871,.0593824,0,-.74902,.224328,.0907216,0,-.623529,.318083,.119647,0,-.498039,.414443,.150246,0,-.372549,.511077,.184884,0,-.247059,.605501,.226033,0,-.121569,.695274,.275491,0,.00392157,.777826,.334445,0,.129412,.851498,.402441,0,.254902,.915899,.47759,602975e-9,.380392,.971984,.557882,.0361443,.505882,1,.641287,.135967,.631373,1,.725198,.27997,.756863,1,.808205,.438135,.882353,1,.89306,.587036,1,1,.977928,.721599]},{ColorSpace:"Lab",Name:"heated_object",RGBPoints:[-1,0,0,0,-.87451,.34902,.0862745,0,-.74902,.45098,.172549,0,-.623529,.52549,.231373,0,-.498039,.580392,.278431,0,-.372549,.623529,.313725,0,-.247059,.670588,.352941,0,-.121569,.717647,.392157,0,.00392157,.772549,.439216,0,.129412,.839216,.494118,0,.254902,.901961,.541176,0,.380392,.968627,.6,0,.505882,1,.658824,0,.631373,1,.721569,0,.756863,1,.827451,.298039,.882353,1,.976471,.72549,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_gold_BW",RGBPoints:[-1,0,0,190933e-10,-.87451,.128363,.0636265,0,-.74902,.193795,.111057,0,-.623529,.25976,.15987,0,-.498039,.328546,.210589,0,-.372549,.399726,.26332,0,-.247059,.472969,.318261,0,-.121569,.546245,.375827,0,.00392157,.61745,.436719,0,.129412,.685545,.501113,0,.254902,.749578,.568799,0,.380392,.80962,.6394,0,.505882,.865572,.712699,.10257,.631373,.917709,.787569,.233665,.756863,.966914,.863138,.369608,.882353,1,.939405,.496104,1,.999225,1,.612275]},{ColorSpace:"Lab",Name:"erdc_brown_BW",RGBPoints:[-1,33216e-11,0,483629e-11,-.87451,.14693,.0518172,0,-.74902,.225806,.0814996,0,-.623529,.301681,.111452,0,-.498039,.370487,.150664,0,-.372549,.43108,.199477,0,-.247059,.4849,.255107,0,-.121569,.536798,.313486,0,.00392157,.59286,.371167,0,.129412,.653119,.428135,0,.254902,.714589,.485917,.0379541,.380392,.774667,.54565,.116634,.505882,.831222,.608047,.183895,.631373,.880305,.674199,.260298,.756863,.922314,.742472,.367086,.882353,.959408,.811222,.497258,1,.993548,.875183,.622093]},{ColorSpace:"Lab",Name:"copper_Matlab",RGBPoints:[-1,0,0,0,-.87451,.0784314,.0501961,.0313725,-.74902,.156863,.100392,.0627451,-.623529,.235294,.150588,.0941176,-.498039,.313725,.200784,.12549,-.372549,.392157,.25098,.156863,-.247059,.470588,.301176,.188235,-.121569,.54902,.351373,.219608,.00392157,.627451,.401569,.25098,.129412,.705882,.451765,.282353,.254902,.784314,.501961,.313725,.380392,.862745,.552157,.345098,.505882,.941176,.602353,.376471,.631373,1,.652549,.407843,.756863,1,.702745,.439216,.882353,1,.752941,.470588,1,1,.8,.5]},{ColorSpace:"Lab",Name:"pink_Matlab",RGBPoints:[-1,0,0,0,-.87451,.312416,.204524,.204524,-.74902,.441822,.289241,.289241,-.623529,.54112,.354246,.354246,-.498039,.624831,.409048,.409048,-.372549,.698582,.45733,.45733,-.247059,.764404,.502282,.500979,-.121569,.791292,.591516,.54112,.00392157,.817297,.66895,.578481,.129412,.842499,.738308,.613572,.254902,.866968,.801687,.646762,.380392,.890766,.86041,.678329,.505882,.913944,.913944,.711254,.631373,.936549,.936549,.79459,.756863,.958621,.958621,.869979,.882353,.980196,.980196,.939336,1,1,1,1]},{ColorSpace:"Lab",Name:"bone_Matlab",RGBPoints:[-1,0,0,0,-.87451,.054902,.054902,.075817,-.74902,.109804,.109804,.151634,-.623529,.164706,.164706,.227451,-.498039,.219608,.219608,.303268,-.372549,.27451,.27451,.379085,-.247059,.329412,.329902,.454412,-.121569,.384314,.405719,.509314,.00392157,.439216,.481536,.564216,.129412,.494118,.557353,.619118,.254902,.54902,.63317,.67402,.380392,.603922,.708987,.728922,.505882,.660294,.783824,.783824,.631373,.746569,.838725,.838725,.756863,.832843,.893627,.893627,.882353,.919118,.948529,.948529,1,1,1,1]},{ColorSpace:"Lab",Name:"gray_Matlab",RGBPoints:[-1,0,0,0,-.87451,.0627451,.0627451,.0627451,-.74902,.12549,.12549,.12549,-.623529,.188235,.188235,.188235,-.498039,.25098,.25098,.25098,-.372549,.313725,.313725,.313725,-.247059,.376471,.376471,.376471,-.121569,.439216,.439216,.439216,.00392157,.501961,.501961,.501961,.129412,.564706,.564706,.564706,.254902,.627451,.627451,.627451,.380392,.690196,.690196,.690196,.505882,.752941,.752941,.752941,.631373,.815686,.815686,.815686,.756863,.878431,.878431,.878431,.882353,.941176,.941176,.941176,1,1,1,1]},{ColorSpace:"Lab",Name:"Purples",RGBPoints:[-1,.247059,0,.490196,-.87451,.288397,.07677,.525629,-.74902,.32975,.153587,.561092,-.623529,.373057,.236263,.600461,-.498039,.416363,.319,.639923,-.372549,.459669,.405613,.685198,-.247059,.503345,.491534,.730058,-.121569,.562399,.54862,.757616,.00392157,.621453,.606075,.785544,.129412,.680508,.674971,.824914,.254902,.739562,.743406,.863899,.380392,.798616,.800492,.893426,.505882,.85684,.856655,.922491,.631373,.898178,.894056,.942176,.756863,.938654,.930919,.961646,.882353,.964245,.958478,.977393,1,.988235,.984314,.992157]},{ColorSpace:"Lab",Name:"Blues",RGBPoints:[-1,.031373,.188235,.419608,-.87451,.031373,.253195,.516063,-.74902,.031757,.318139,.612149,-.623529,.080969,.38113,.661361,-.498039,.130427,.444152,.710327,-.372549,.195386,.509112,.743791,-.247059,.260715,.573841,.777209,-.121569,.341423,.628958,.808704,.00392157,.422745,.684075,.839892,.129412,.523137,.739193,.861546,.254902,.622684,.793464,.883429,.380392,.701423,.826928,.910988,.505882,.778685,.8603,.937993,.631373,.825928,.891795,.953741,.756863,.87328,.923291,.969489,.882353,.922491,.954787,.985236,1,.968627,.984314,1]},{ColorSpace:"Lab",Name:"Greens",RGBPoints:[-1,0,.266667,.105882,-.87451,0,.347374,.139346,-.74902,538e-6,.427912,.172933,-.623529,.069435,.486967,.222145,-.498039,.138178,.546082,.271326,-.372549,.197232,.609073,.31857,-.247059,.257255,.671742,.365859,-.121569,.357647,.720953,.415071,.00392157,.45767,.769919,.465021,.129412,.546251,.811257,.537855,.254902,.634295,.852211,.610688,.380392,.709097,.883706,.683522,.505882,.78316,.914833,.755894,.631373,.842215,.938454,.818885,.756863,.899977,.961538,.880692,.882353,.935409,.975317,.92203,1,.968627,.988235,.960784]},{ColorSpace:"Lab",Name:"PuBu",RGBPoints:[-1,.301961,0,.294118,-.87451,.404321,.029527,.390573,-.74902,.50599,.059592,.486782,-.623529,.519769,.158016,.551742,-.498039,.533456,.256194,.616301,-.372549,.54133,.33887,.655671,-.247059,.54902,.421592,.695087,-.121569,.54902,.506236,.736424,.00392157,.550127,.590573,.777701,.129412,.585559,.665375,.81707,.254902,.622145,.739023,.855825,.380392,.687105,.784298,.879446,.505882,.752065,.829758,.903253,.631373,.817024,.87897,.930811,.756863,.880907,.927213,.957832,.882353,.926182,.958708,.975548,1,.968627,.988235,.992157]},{ColorSpace:"Lab",Name:"BuPu",RGBPoints:[-1,.007843,.219608,.345098,-.87451,.01178,.286536,.449427,-.74902,.015702,.35328,.553479,-.623529,.01767,.396586,.622376,-.498039,.021115,.4402,.690688,-.372549,.11757,.503191,.722184,-.247059,.214625,.565859,.753633,-.121569,.336671,.615071,.78316,.00392157,.457978,.663975,.812503,.129412,.556401,.703345,.836125,.254902,.65421,.742714,.859669,.380392,.736886,.782084,.881323,.505882,.81827,.821638,.903068,.631373,.873387,.864944,.92669,.756863,.927536,.907605,.949988,.882353,.964937,.9391,.967705,1,1,.968627,.984314]},{ColorSpace:"Lab",Name:"BuGn",RGBPoints:[-1,.031373,.25098,.505882,-.87451,.031373,.329719,.590527,-.74902,.031911,.408397,.674787,-.623529,.100807,.479262,.710219,-.498039,.169704,.550219,.745744,-.372549,.238601,.62699,.787082,-.247059,.307958,.703114,.826759,-.121569,.39654,.752326,.797232,.00392157,.485121,.801046,.767705,.129412,.573702,.83451,.738178,.254902,.661592,.867743,.711034,.380392,.732457,.895302,.74253,.505882,.801845,.922307,.774579,.631373,.841215,.938055,.817885,.756863,.880907,.95391,.861084,.882353,.926182,.971626,.902422,1,.968627,.988235,.941176]},{ColorSpace:"Lab",Name:"GnBu",RGBPoints:[-1,0,.266667,.105882,-.87451,0,.347374,.139346,-.74902,538e-6,.427912,.172933,-.623529,.069435,.486967,.222145,-.498039,.138178,.546175,.272095,-.372549,.197232,.615071,.368551,-.247059,.256609,.683276,.464867,-.121569,.329443,.722645,.555417,.00392157,.403137,.762138,.645413,.129412,.503529,.805444,.718247,.254902,.603922,.848597,.790465,.380392,.704314,.887966,.847551,.505882,.802307,.926321,.903714,.631373,.851519,.944037,.941115,.756863,.899977,.961538,.976901,.882353,.935409,.975317,.984775,1,.968627,.988235,.992157]},{ColorSpace:"Lab",Name:"GnBuPu",RGBPoints:[-1,.003922,.27451,.211765,-.87451,.003922,.349312,.280661,-.74902,.003937,.423852,.349773,-.623529,.005905,.46519,.446228,-.498039,.009443,.506344,.542837,-.372549,.111803,.535871,.649135,-.247059,.214025,.565859,.753633,-.121569,.310481,.615071,.78316,.00392157,.407797,.663975,.812503,.129412,.531811,.703345,.836125,.254902,.65421,.742714,.859669,.380392,.736886,.782084,.881323,.505882,.81827,.821176,.902884,.631373,.873387,.854641,.922568,.756863,.927536,.888535,.942361,.882353,.964937,.929873,.964014,1,1,.968627,.984314]},{ColorSpace:"Lab",Name:"BuGnYl",RGBPoints:[-1,.031373,.113725,.345098,-.87451,.088458,.159,.463206,-.74902,.145052,.204567,.5807,-.623529,.139146,.287243,.620069,-.498039,.13318,.370196,.659562,-.372549,.123337,.470588,.706805,-.247059,.115386,.570335,.753126,-.121569,.186251,.643168,.761,.00392157,.258716,.71514,.768074,.129412,.380761,.760415,.750358,.254902,.503576,.806075,.732795,.380392,.645306,.861192,.719016,.505882,.783899,.91511,.705606,.631373,.858701,.944637,.6997,.756863,.931349,.973303,.698424,.882353,.966782,.987082,.777163,1,1,1,.85098]},{ColorSpace:"Lab",Name:"PuRd",RGBPoints:[-1,.286275,0,.415686,-.87451,.38273,.001968,.441276,-.74902,.479231,.003922,.466774,-.623529,.581592,.003922,.480554,-.498039,.683799,.00549,.494887,-.372549,.776317,.105882,.544098,-.247059,.867866,.206321,.592618,-.121569,.919047,.308681,.612303,.00392157,.968812,.411226,.632603,.129412,.974717,.519493,.671972,.254902,.980546,.626451,.71065,.380392,.984483,.701253,.732303,.505882,.988328,.77504,.755617,.631373,.990296,.828189,.812703,.756863,.992372,.880907,.869035,.882353,.996309,.926182,.912341,1,1,.968627,.952941]},{ColorSpace:"Lab",Name:"RdPu",RGBPoints:[-1,.403922,0,.121569,-.87451,.500377,0,.192434,-.74902,.596909,277e-6,.263037,-.623529,.703206,.035709,.300438,-.498039,.808612,.071296,.338854,-.372549,.857824,.116571,.441215,-.247059,.905513,.163552,.54293,-.121569,.889765,.281661,.617732,.00392157,.873156,.39897,.691611,.129412,.82985,.491488,.736886,.254902,.789081,.583237,.781853,.380392,.810734,.656071,.819254,.505882,.833126,.729181,.85684,.631373,.870527,.80792,.898178,.756863,.907605,.884398,.938331,.882353,.9391,.921799,.958016,1,.968627,.956863,.976471]},{ColorSpace:"Lab",Name:"Oranges",RGBPoints:[-1,.498039,.152941,.015686,-.87451,.57481,.182468,.013718,-.74902,.651765,.212042,.011734,-.623529,.752157,.247474,.007797,-.498039,.851719,.283368,.004475,-.372549,.898962,.348328,.039908,-.247059,.945652,.413426,.076401,-.121569,.969273,.484291,.157109,.00392157,.992157,.554971,.238185,.129412,.992157,.619931,.330704,.254902,.992157,.684967,.423837,.380392,.992157,.751895,.532103,.505882,.992249,.817716,.639354,.631373,.994218,.861023,.725967,.756863,.996186,.903576,.810965,.882353,.998155,.933103,.868051,1,1,.960784,.921569]},{ColorSpace:"Lab",Name:"Reds",RGBPoints:[-1,.403922,0,.05098,-.87451,.525967,.029527,.066728,-.74902,.647643,.058962,.082476,-.623529,.722445,.076678,.098224,-.498039,.797186,.095194,.114187,-.372549,.868051,.164091,.143714,-.247059,.937809,.233541,.173933,-.121569,.96143,.326059,.232987,.00392157,.984375,.418147,.292657,.129412,.986344,.496886,.371396,.254902,.988235,.575702,.450673,.380392,.988235,.656409,.543191,.505882,.98842,.736747,.635894,.631373,.992357,.809581,.732349,.756863,.996186,.880692,.826759,.882353,.998155,.92203,.885813,1,1,.960784,.941176]},{ColorSpace:"Lab",Name:"RdOr",RGBPoints:[-1,.498039,0,0,-.87451,.6004,0,0,-.74902,.702514,738e-6,477e-6,-.623529,.773379,.095225,.061499,-.498039,.843875,.189865,.12283,-.372549,.891119,.294195,.203537,-.247059,.937855,.397924,.283137,-.121569,.963445,.476663,.316601,.00392157,.988297,.555771,.351665,.129412,.990265,.646321,.436309,.254902,.992157,.735256,.519646,.380392,.992157,.784468,.570827,.505882,.992249,.833218,.623483,.631373,.994218,.872587,.706159,.756863,.996186,.911419,.788189,.882353,.998155,.940946,.859054,1,1,.968627,.92549]},{ColorSpace:"Lab",Name:"BrOrYl",RGBPoints:[-1,.4,.145098,.023529,-.87451,.500392,.174625,.019592,-.74902,.600784,.204291,.015656,-.623529,.701176,.251534,.011719,-.498039,.800984,.299146,.008397,-.372549,.863975,.370012,.043829,-.247059,.926321,.441107,.0794,-.121569,.961753,.521815,.120738,.00392157,.996078,.602645,.163122,.129412,.996078,.68729,.237924,.254902,.996078,.771011,.314879,.380392,.996078,.832034,.444798,.505882,.996171,.892042,.572595,.631373,.998139,.931411,.65724,.756863,1,.969489,.741669,.882353,1,.985236,.822376,1,1,1,.898039]},{ColorSpace:"Lab",Name:"RdOrYl",RGBPoints:[-1,.501961,0,.14902,-.87451,.622038,0,.14902,-.74902,.741761,4e-4,.148866,-.623529,.816563,.05158,.129181,-.498039,.890965,.10356,.110235,-.372549,.940177,.205921,.137793,-.247059,.988281,.308789,.165536,-.121569,.99025,.432803,.200969,.00392157,.992218,.555217,.236278,.129412,.994187,.628051,.267774,.254902,.996078,.701038,.301269,.380392,.996078,.777809,.383945,.505882,.996171,.852826,.466621,.631373,.998139,.892195,.549296,.756863,1,.931349,.632188,.882353,1,.966782,.7188,1,1,1,.8]},{ColorSpace:"Lab",Name:"CIELab_blue2red",RGBPoints:[-1,0,.6,.74902,1,.76863,.46667,.34118]},{ColorSpace:"Lab",Name:"blue2yellow",RGBPoints:[-1,0,0,1,0,.5,.5,.5,1,1,1,0]},{ColorSpace:"Lab",Name:"erdc_blue2gold",RGBPoints:[-1,.175119,.0438468,1,-.874016,.22383,.159771,.94557,-.748031,.27254,.233611,.891216,-.622047,.321251,.296526,.836857,-.496063,.369962,.354296,.782359,-.370079,.418672,.409139,.72754,-.244094,.467383,.462152,.672148,-.11811,.51609,.51396,.615825,.00787402,.572863,.55452,.559172,.133858,.630269,.593822,.517729,.259843,.689588,.624668,.47446,.385827,.745394,.656113,.428638,.511811,.798624,.688104,.379105,.637795,.849926,.720593,.323834,.76378,.899765,.753543,.258657,.889764,.948487,.78692,.171778,1,.990413,.816451,.00729848]},{ColorSpace:"Lab",Name:"erdc_blue2yellow",RGBPoints:[-1,.0830122,0,.495617,-.87451,.141973,.0551288,.57363,-.74902,.193048,.110258,.604561,-.623529,.234231,.165386,.57643,-.498039,.275413,.220515,.548299,-.372549,.316596,.275644,.520169,-.247059,.357778,.330773,.492038,-.121569,.398961,.385901,.463908,.00392157,.449929,.438487,.426815,.129412,.511572,.488299,.379944,.254902,.581222,.53603,.325741,.380392,.650871,.583761,.271538,.505882,.720521,.631493,.217335,.631373,.79017,.679224,.163132,.756863,.85982,.726955,.108929,.882353,.910254,.774159,.14112,1,.927513,.81759,.306289]},{ColorSpace:"Lab",Name:"erdc_cyan2orange",RGBPoints:[-1,.0471513,.213874,.414329,-.87451,.0674702,.256648,.439027,-.74902,.0959957,.299331,.462089,-.623529,.132428,.341872,.483212,-.498039,.188743,.38277,.500597,-.372549,.268511,.420229,.512179,-.247059,.352945,.455602,.519101,-.121569,.43893,.489368,.521538,.00392157,.522445,.522495,.522436,.129412,.600089,.555682,.53205,.254902,.67988,.587981,.539163,.380392,.761011,.619586,.544439,.505882,.84278,.650741,.548567,.631373,.910713,.687347,.557822,.756863,.952232,.734972,.577775,.882353,.975642,.789858,.604868,1,.990752,.843643,.632857]},{ColorSpace:"Lab",Name:"erdc_purple2green",RGBPoints:[-1,.235006,.0483128,.530899,-.87451,.302968,.108419,.552391,-.74902,.360241,.166059,.569502,-.623529,.406746,.226782,.579373,-.498039,.444073,.28964,.582094,-.372549,.473648,.353774,.577947,-.247059,.497636,.418154,.567911,-.121569,.519086,.481741,.553968,.00392157,.542884,.542914,.542875,.129412,.566303,.603989,.527499,.254902,.595218,.662965,.516857,.380392,.628641,.720701,.510673,.505882,.665373,.777849,.508165,.631373,.704182,.834921,.508303,.756863,.743846,.892328,.50999,.882353,.783158,.950422,.512181,1,.818617,1,.513888]},{ColorSpace:"Lab",Name:"erdc_purple2green_dark",RGBPoints:[-1,.107656,0,.428682,-.87451,.1924,0,.449799,-.74902,.255118,.0648939,.466726,-.623529,.304256,.133066,.476703,-.498039,.343202,.19716,.479793,-.372549,.373876,.260353,.476241,-.247059,.398497,.322872,.466953,-.121569,.420016,.384252,.453785,.00392157,.44319,.443216,.443186,.129412,.465553,.502139,.428233,.254902,.492959,.559151,.417591,.380392,.524654,.615092,.411016,.505882,.55959,.670583,.40779,.631373,.596614,.726102,.406948,.756863,.634544,.782032,.407439,.882353,.672183,.838703,.408237,1,.706131,.892759,.408452]},{ColorSpace:"Lab",Name:"coolwarm",RGBPoints:[-1,.229806,.298718,.753683,-.875,.303869,.406535,.844959,-.75,.383013,.509419,.917388,-.625,.466667,.604563,.968155,-.5,.552953,.688929,.995376,-.375,.639176,.7596,.998151,-.25,.722193,.813953,.976575,-.125,.798692,.849786,.931689,0,.865395,.86541,.865396,.125,.924128,.827385,.774508,.25,.958853,.769768,.678008,.375,.969954,.694267,.579375,.5,.958003,.602842,.481776,.625,.923945,.497309,.38797,.75,.869187,.378313,.300267,.875,.795632,.241284,.220526,1,.705673,.0155562,.150233]},{ColorSpace:"Lab",Name:"BuRd",RGBPoints:[-1,.019608,.188235,.380392,-.87451,.088504,.321107,.564937,-.74902,.163399,.444983,.697501,-.623529,.247059,.555709,.754095,-.498039,.420684,.676432,.818685,-.372549,.606459,.789773,.880277,-.247059,.761476,.868512,.924567,-.121569,.878047,.925721,.951942,.00392157,.969089,.966474,.964937,.129412,.983852,.897578,.846828,.254902,.982468,.800692,.706113,.380392,.960323,.66782,.536332,.505882,.894579,.503806,.399769,.631373,.81707,.33218,.281046,.756863,.728489,.155017,.197386,.882353,.576932,.055363,.14925,1,.403922,0,.121569]},{ColorSpace:"Lab",Name:"Spectral_lowBlue",RGBPoints:[-1,.368627,.309804,.635294,-.87451,.260361,.450058,.70173,-.74902,.248058,.591311,.717186,-.623529,.376009,.734025,.658132,-.498039,.537947,.814764,.64506,-.372549,.702345,.879585,.636678,-.247059,.84752,.938639,.607151,-.121569,.940408,.976163,.656055,.00392157,.999923,.997616,.745021,.129412,.997463,.921338,.61707,.254902,.995002,.824606,.499885,.380392,.992541,.701576,.39654,.505882,.973472,.547405,.318108,.631373,.937793,.398539,.270127,.756863,.861515,.282891,.299654,.882353,.746482,.144637,.288812,1,.619608,.003922,.258824]},{ColorSpace:"Lab",Name:"GnRP",RGBPoints:[-1,0,.266667,.105882,-.87451,.066436,.394617,.174779,-.74902,.168858,.524567,.25767,-.623529,.323875,.657439,.361015,-.498039,.504883,.772318,.506344,-.372549,.678431,.870127,.654902,-.247059,.803922,.921799,.780392,-.121569,.897116,.951942,.882814,.00392157,.967397,.965936,.967474,.129412,.928028,.879815,.930565,.254902,.866052,.780777,.882891,.380392,.77501,.665129,.821376,.505882,.675663,.537024,.737024,.631373,.57847,.396155,.645982,.756863,.492349,.223914,.547559,.882353,.375548,.096886,.423299,1,.25098,0,.294118]},{ColorSpace:"Lab",Name:"GYPi",RGBPoints:[-1,.152941,.392157,.098039,-.87451,.246444,.505344,.117724,-.74902,.351942,.614533,.161399,-.623529,.474971,.717878,.240138,-.498039,.611995,.811226,.392849,-.372549,.746328,.893118,.565321,-.247059,.859516,.94233,.747405,-.121569,.928105,.96386,.875663,.00392157,.969089,.966859,.968012,.129412,.983852,.910265,.948328,.254902,.979239,.833218,.914648,.380392,.949712,.729873,.862976,.505882,.905652,.58293,.763552,.631373,.85521,.410073,.652211,.756863,.793695,.183699,.531642,.882353,.683737,.063899,.420761,1,.556863,.003922,.321569]},{ColorSpace:"Lab",Name:"GnYlRd",RGBPoints:[-1,0,.407843,.215686,-.87451,.063975,.525952,.277201,-.74902,.177932,.633064,.332718,-.623529,.364937,.724106,.379469,-.498039,.527951,.797155,.40223,-.372549,.678431,.862822,.433449,-.247059,.803922,.916955,.514648,-.121569,.909419,.961861,.625067,.00392157,.999923,.997616,.745021,.129412,.997463,.921338,.61707,.254902,.995002,.824606,.499885,.380392,.992541,.701576,.39654,.505882,.973472,.547405,.318108,.631373,.939023,.389927,.245521,.756863,.867666,.239831,.176624,.882353,.762399,.110727,.151326,1,.647059,0,.14902]},{ColorSpace:"Lab",Name:"GBBr",RGBPoints:[-1,0,.235294,.188235,-.87451,.002461,.338639,.301423,-.74902,.055902,.448981,.417609,-.623529,.183852,.56955,.538178,-.498039,.357785,.700115,.660746,-.372549,.540177,.819531,.77624,-.247059,.714879,.890888,.864821,-.121569,.851134,.934564,.922645,.00392157,.960861,.959785,.95694,.129412,.963322,.927797,.83391,.254902,.939946,.868897,.68935,.380392,.883353,.775394,.517109,.505882,.808074,.625836,.324106,.631373,.717647,.476355,.15494,.756863,.592157,.358247,.06882,.882353,.458593,.26436,.031142,1,.329412,.188235,.019608]},{ColorSpace:"Lab",Name:"PuOr",RGBPoints:[-1,.498039,.231373,.031373,-.87451,.62599,.30273,.026451,-.74902,.746943,.387082,.037524,-.623529,.85767,.490427,.071972,-.498039,.936409,.617762,.236371,-.372549,.992695,.743099,.43291,-.247059,.995156,.841523,.63714,-.121569,.985313,.913802,.813687,.00392157,.966244,.966398,.967705,.129412,.889965,.89504,.938178,.254902,.806151,.804306,.894656,.380392,.712649,.688658,.833141,.505882,.594233,.554325,.744637,.631373,.474894,.404229,.652364,.756863,.366628,.217224,.563783,.882353,.266436,.089965,.434833,1,.176471,0,.294118]},{ColorSpace:"Lab",Name:"PRGn",RGBPoints:[-1,.25098,0,.294118,-.87451,.383852,.103345,.431911,-.74902,.497732,.234679,.55371,-.623529,.583852,.40692,.652134,-.498039,.681968,.545175,.742561,-.372549,.7807,.672357,.825221,-.247059,.871742,.788005,.886736,-.121569,.930488,.885198,.932872,.00392157,.966321,.968089,.965859,.129412,.892503,.950865,.877278,.254902,.796078,.91857,.772549,.380392,.670588,.866897,.647059,.505882,.493195,.765398,.496655,.631373,.314187,.649135,.354556,.756863,.15917,.516263,.251211,.882353,.062284,.386621,.170473,1,0,.266667,.105882]},{ColorSpace:"Lab",Name:"PiYG",RGBPoints:[-1,.556863,.003922,.321569,-.87451,.692195,.067897,.427374,-.74902,.797539,.197847,.539177,-.623529,.859054,.424221,.659746,-.498039,.908574,.592618,.770319,-.372549,.951557,.736332,.866205,-.247059,.981084,.839677,.917878,-.121569,.98293,.913802,.949558,.00392157,.96732,.968474,.965629,.129412,.92549,.963552,.869666,.254902,.852441,.939254,.736025,.380392,.739254,.890042,.553941,.505882,.60323,.805536,.382238,.631373,.467282,.711419,.235217,.756863,.344252,.608074,.156478,.882353,.2406,.49827,.116494,1,.152941,.392157,.098039]},{ColorSpace:"Lab",Name:"OrPu",RGBPoints:[-1,.176471,0,.294118,-.87451,.272434,.095963,.444214,-.74902,.373395,.228912,.56932,-.623529,.481661,.415917,.657901,-.498039,.601922,.562937,.750481,-.372549,.718493,.695886,.836986,-.247059,.811995,.811534,.898501,-.121569,.894733,.8995,.940023,.00392157,.969166,.966859,.963629,.129412,.98639,.910265,.803691,.254902,.995002,.835371,.624375,.380392,.992541,.736947,.420146,.505882,.931949,.609458,.224221,.631373,.85075,.483968,.069819,.756863,.740023,.380623,.035371,.882353,.617993,.29827,.026759,1,.498039,.231373,.031373]},{ColorSpace:"Lab",Name:"BrBG",RGBPoints:[-1,.329412,.188235,.019608,-.87451,.467205,.269435,.031911,-.74902,.6,.365629,.074202,-.623529,.72549,.483737,.160323,-.498039,.812995,.635832,.336409,-.372549,.88689,.781238,.527874,-.247059,.943483,.87474,.700115,-.121569,.963168,.929796,.841599,.00392157,.957247,.959938,.959554,.129412,.84406,.932872,.920185,.254902,.70396,.886428,.859285,.380392,.529258,.815071,.770704,.505882,.346251,.691811,.653057,.631373,.175855,.562015,.530642,.756863,.047905,.441446,.410073,.882353,.002307,.33218,.294348,1,0,.235294,.188235]},{ColorSpace:"Lab",Name:"GyRd",RGBPoints:[-1,.101961,.101961,.101961,-.87451,.227451,.227451,.227451,-.74902,.359939,.359939,.359939,-.623529,.502653,.502653,.502653,-.498039,.631373,.631373,.631373,-.372549,.749865,.749865,.749865,-.247059,.843368,.843368,.843368,-.121569,.926105,.926105,.926105,.00392157,.999846,.997232,.995694,.129412,.994925,.908651,.857901,.254902,.982468,.800692,.706113,.380392,.960323,.66782,.536332,.505882,.894579,.503806,.399769,.631373,.81707,.33218,.281046,.756863,.728489,.155017,.197386,.882353,.576932,.055363,.14925,1,.403922,0,.121569]},{ColorSpace:"Lab",Name:"erdc_divHi_purpleGreen",RGBPoints:[-1,.297553,0,.489074,-.87451,.40259,.151146,.567754,-.74902,.516038,.284843,.658231,-.623529,.629783,.423646,.750938,-.498039,.735198,.563697,.835956,-.372549,.82408,.695541,.903582,-.247059,.889091,.807454,.944862,-.121569,.92334,.886917,.951839,.00392157,.921045,.921084,.921003,.129412,.877324,.907455,.845381,.254902,.797649,.849713,.734695,.380392,.691646,.75964,.600532,.505882,.568981,.649159,.453807,.631373,.438945,.529756,.304259,.756863,.30973,.412001,.158303,.882353,.187078,.305111,.00251458,1,.101655,.220836,0]},{ColorSpace:"Lab",Name:"erdc_divHi_purpleGreen_dim",RGBPoints:[-1,.404088,.131038,.592767,-.87451,.486469,.230957,.651243,-.74902,.575165,.339335,.717723,-.623529,.662741,.454332,.784263,-.498039,.742071,.570213,.842918,-.372549,.806935,.678992,.886227,-.247059,.852219,.771315,.90763,-.121569,.873345,.837327,.901572,.00392157,.866783,.86682,.866745,.129412,.82839,.858225,.796812,.254902,.762578,.814287,.700202,.380392,.676429,.744229,.585735,.505882,.577033,.65732,.461526,.631373,.47128,.562476,.33476,.756863,.365461,.467957,.21076,.882353,.264758,.381138,.0878313,1,.182591,.312249,0]},{ColorSpace:"Lab",Name:"erdc_divLow_icePeach",RGBPoints:[-1,.480048,.817441,.998056,-.87451,.425898,.726921,.883187,-.74902,.366682,.629445,.761936,-.623529,.308756,.531002,.640217,-.498039,.258021,.43705,.523433,-.372549,.219244,.352381,.416348,-.247059,.195127,.281032,.322979,-.121569,.186286,.22627,.246525,.00392157,.192352,.19236,.192364,.129412,.255927,.214469,.191756,.254902,.340459,.254426,.206666,.380392,.444655,.309315,.234029,.505882,.565353,.376004,.270969,.631373,.697917,.450748,.314293,.756863,.836657,.529064,.360227,.882353,.972695,.614884,.413123,1,1,.705904,.472699]},{ColorSpace:"Lab",Name:"erdc_divLow_purpleGreen",RGBPoints:[-1,.956034,.666487,.952663,-.87451,.874457,.572698,.936352,-.74902,.753465,.488253,.909063,-.623529,.63309,.413507,.763833,-.498039,.514491,.345878,.620015,-.372549,.405008,.288141,.484376,-.247059,.311388,.241986,.363556,-.121569,.238722,.209044,.263449,.00392157,.192352,.192366,.192362,.129412,.200379,.233201,.168618,.254902,.230151,.291737,.165227,.380392,.279481,.366076,.178607,.505882,.344927,.453267,.205703,.631373,.421554,.549449,.242643,.756863,.503334,.649999,.284377,.882353,.583497,.749672,.324969,1,.650705,.837228,.356264]},{ColorSpace:"Lab",Name:"Haze_green",RGBPoints:[-1,1,.835294,.886275,-.87451,.937255,.756863,.870443,-.74902,.875817,.666376,.857807,-.623529,.778359,.583007,.808134,-.498039,.676253,.494118,.745098,-.372549,.561365,.390123,.682353,-.247059,.438344,.262745,.621496,-.121569,.321133,.141031,.558751,.00392157,.203922,.0217865,.495861,.129412,.265505,.129412,.433261,.254902,.311692,.255338,.37008,.380392,.356282,.377342,.310821,.505882,.39971,.488889,.258243,.631373,.442556,.604357,.205519,.756863,.48671,.71968,.152941,.882353,.529847,.830356,.100944,1,.572549,.933333,.054902]},{ColorSpace:"Lab",Name:"Haze_lime",RGBPoints:[-1,.704034,.784196,1,-.87451,.633111,.691418,.956078,-.74902,.564021,.600606,.912157,-.623529,.496827,.51189,.868235,-.498039,.43157,.425416,.824314,-.372549,.368248,.341347,.780392,-.247059,.306767,.259855,.736471,-.121569,.246862,.181069,.692549,.00392157,.191619,.109542,.648627,.129412,.257404,.194031,.604706,.254902,.321794,.278775,.560784,.380392,.387909,.364617,.516863,.505882,.456569,.451881,.472941,.631373,.527424,.540773,.42902,.756863,.599759,.631427,.385098,.882353,.673065,.723898,.341176,1,.742751,.812252,.3]},{ColorSpace:"RGB",Name:"Haze",RGBPoints:[-1,1,.835294,.996078,-.00392157,.023529,.141176,.498039,.00392157,.015686,.137255,.494118,1,.984314,.764706,0]},{ColorSpace:"Lab",Name:"Haze_cyan",RGBPoints:[-1,.956863,1,.835294,-.87451,.933188,.921714,.760784,-.74902,.870588,.803486,.671605,-.623529,.807843,.684096,.583297,-.498039,.745098,.569208,.494118,-.372549,.682353,.437763,.390123,-.247059,.621496,.288163,.262745,-.121569,.558751,.144517,.141031,.00392157,.495861,.0217865,.0413943,.129412,.433261,.137255,.129412,.254902,.37008,.263181,.255338,.380392,.306318,.381845,.372694,.505882,.243137,.503994,.494263,.631373,.180392,.629484,.619753,.756863,.117647,.754975,.747131,.882353,.054902,.876398,.866812,1,0,.988235,.976471]},{ColorSpace:"Lab",Name:"nic_Edge",RGBPoints:[-1,.191208,.191208,.191208,-.87451,.239484,.00545035,.614821,-.74902,.220593,.0617459,.863547,-.623529,.17509,.278988,.97794,-.498039,.143526,.576069,.998553,-.372549,.166456,.871883,.96594,-.247059,.376202,.993555,.981833,-.121569,.681996,.991297,.999239,.00392157,.954172,.952734,.94374,.129412,.999735,.99301,.662896,.254902,.979399,.991466,.357973,.380392,.968771,.854967,.162659,.505882,.999245,.556697,.144323,.631373,.973959,.26223,.177946,.756863,.852358,.0526707,.222974,.882353,.593889,.00912724,.238855,1,.191208,.191208,.191208]},{ColorSpace:"Lab",Name:"erdc_iceFire_H",RGBPoints:[-1,405432e-12,0,590122e-11,-.87451,0,.120401,.302675,-.74902,0,.216583,.524574,-.623529,.0552475,.345025,.6595,-.498039,.128047,.492588,.720288,-.372549,.188955,.641309,.792092,-.247059,.327673,.784935,.873434,-.121569,.60824,.892164,.935547,.00392157,.881371,.912178,.818099,.129412,.951407,.835621,.449279,.254902,.904481,.690489,0,.380392,.85407,.510864,0,.505882,.777093,.33018,88199e-8,.631373,.672862,.139087,.00269398,.756863,.508815,0,0,.882353,.299417,366289e-9,547829e-9,1,.0157519,.00332021,455569e-13]},{ColorSpace:"Lab",Name:"erdc_iceFire_L",RGBPoints:[-1,.870485,.913768,.832905,-.87451,.586919,.887865,.934003,-.74902,.31583,.776442,.867858,-.623529,.18302,.632034,.787722,-.498039,.117909,.484134,.713825,-.372549,.0507239,.335979,.654741,-.247059,0,.209874,.511832,-.121569,0,.114689,.28935,.00392157,.0157519,.00332021,455569e-13,.129412,.312914,0,0,.254902,.520865,0,0,.380392,.680105,.15255,.0025996,.505882,.785109,.339479,797922e-9,.631373,.857354,.522494,0,.756863,.910974,.699774,0,.882353,.951921,.842817,.478545,1,.881371,.912178,.818099]},{ColorSpace:"RGB",Name:"hsv",RGBPoints:[-1,1,0,0,-.666666,1,0,1,-.333333,0,0,1,0,0,1,1,.33333,0,1,0,.66666,1,1,0,1,1,0,0]},{ColorSpace:"Lab",Name:"hue_L60",RGBPoints:[-1,.964784,.400592,.349549,-.87451,.964915,.372498,.53785,-.74902,.892353,.401039,.759569,-.623529,.79263,.446956,.903017,-.498039,.682208,.49954,.966673,-.372549,.56392,.553082,.968836,-.247059,.442031,.606396,.901601,-.121569,.305499,.65701,.765784,.00392157,.197251,.687914,.620914,.129412,.193882,.701887,.472654,.254902,.249866,.706123,.320005,.380392,.35132,.697417,.202919,.505882,.498097,.669467,.125232,.631373,.637477,.626239,.107431,.756863,.762115,.56872,.155812,.882353,.889434,.481116,.240445,1,.964784,.400592,.349549]},{IndexedColors:[0,0,0,.8941176470588236,.1019607843137255,.1098039215686274,.2156862745098039,.4941176470588236,.7215686274509804,.3019607843137255,.6862745098039216,.2901960784313726,.596078431372549,.3058823529411765,.6392156862745098,1,.4980392156862745,0,.6509803921568628,.3372549019607843,.1568627450980392],Name:"Spectrum",NanColor:[.6509803921568628,.3372549019607843,.1568627450980392]},{IndexedColors:[.4745098039215686,.09019607843137255,.09019607843137255,.7098039215686275,.00392156862745098,.00392156862745098,.9372549019607843,.2784313725490196,.09803921568627451,.9764705882352941,.5137254901960784,.1411764705882353,1,.7058823529411765,0,1,.8980392156862745,.02352941176470588],Name:"Warm",NanColor:[1,.8980392156862745,.02352941176470588]},{IndexedColors:[.4588235294117647,.6941176470588235,.00392156862745098,.3450980392156863,.5019607843137255,.1607843137254902,.3137254901960784,.8431372549019608,.7490196078431373,.1098039215686274,.5843137254901961,.803921568627451,.2313725490196079,.407843137254902,.6705882352941176,.6039215686274509,.407843137254902,1,.3725490196078431,.2,.5019607843137255],Name:"Cool",NanColor:[.3725490196078431,.2,.5019607843137255]},{IndexedColors:[.2313725490196079,.407843137254902,.6705882352941176,.1098039215686274,.5843137254901961,.803921568627451,.3058823529411765,.8509803921568627,.9176470588235294,.4509803921568628,.6039215686274509,.8352941176470589,.2588235294117647,.2392156862745098,.6627450980392157,.3137254901960784,.3294117647058823,.5294117647058824,.06274509803921569,.1647058823529412,.3215686274509804],Name:"Blues",NanColor:[.06274509803921569,.1647058823529412,.3215686274509804]},{IndexedColors:[.1098039215686274,.5843137254901961,.803921568627451,.2313725490196079,.407843137254902,.6705882352941176,.4,.2431372549019608,.7176470588235294,.6352941176470588,.3294117647058823,.8117647058823529,.8705882352941177,.3803921568627451,.807843137254902,.8627450980392157,.3803921568627451,.5843137254901961,.2392156862745098,.06274509803921569,.3215686274509804],Name:"Wild Flower",NanColor:[.2392156862745098,.06274509803921569,.3215686274509804]},{IndexedColors:[.396078431372549,.4862745098039216,.2156862745098039,.4588235294117647,.6941176470588235,.00392156862745098,.6980392156862745,.7294117647058823,.1882352941176471,1,.8980392156862745,.02352941176470588,1,.7058823529411765,0,.9764705882352941,.5137254901960784,.1411764705882353],Name:"Citrus",NanColor:[.9764705882352941,.5137254901960784,.1411764705882353]},{IndexedColors:[.4980392156862745,.2313725490196079,.03137254901960784,.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333,.1764705882352941,0,.2941176470588235],Name:"Brewer Diverging Purple-Orange (11)",NanColor:[.1764705882352941,0,.2941176470588235]},{IndexedColors:[.4980392156862745,.2313725490196079,.03137254901960784,.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333,.1764705882352941,0,.2941176470588235],Name:"Brewer Diverging Purple-Orange (10)",NanColor:[.1764705882352941,0,.2941176470588235]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (9)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (8)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.9450980392156862,.6392156862745098,.2509803921568627,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6,.5568627450980392,.7647058823529411,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (7)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.9450980392156862,.6392156862745098,.2509803921568627,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6,.5568627450980392,.7647058823529411,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (6)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.9019607843137255,.3803921568627451,.00392156862745098,.9921568627450981,.7215686274509804,.3882352941176471,.9686274509803922,.9686274509803922,.9686274509803922,.6980392156862745,.6705882352941176,.8235294117647058,.3686274509803922,.2352941176470588,.6],Name:"Brewer Diverging Purple-Orange (5)",NanColor:[.3686274509803922,.2352941176470588,.6]},{IndexedColors:[.9019607843137255,.3803921568627451,.00392156862745098,.9921568627450981,.7215686274509804,.3882352941176471,.6980392156862745,.6705882352941176,.8235294117647058,.3686274509803922,.2352941176470588,.6],Name:"Brewer Diverging Purple-Orange (4)",NanColor:[.3686274509803922,.2352941176470588,.6]},{IndexedColors:[.9450980392156862,.6392156862745098,.2509803921568627,.9686274509803922,.9686274509803922,.9686274509803922,.6,.5568627450980392,.7647058823529411],Name:"Brewer Diverging Purple-Orange (3)",NanColor:[.6,.5568627450980392,.7647058823529411]},{IndexedColors:[.6196078431372549,.00392156862745098,.2588235294117647,.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353,.3686274509803922,.3098039215686275,.6352941176470588],Name:"Brewer Diverging Spectral (11)",NanColor:[.3686274509803922,.3098039215686275,.6352941176470588]},{IndexedColors:[.6196078431372549,.00392156862745098,.2588235294117647,.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353,.3686274509803922,.3098039215686275,.6352941176470588],Name:"Brewer Diverging Spectral (10)",NanColor:[.3686274509803922,.3098039215686275,.6352941176470588]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (9)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (8)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9882352941176471,.5529411764705883,.3490196078431372,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6,.8352941176470589,.5803921568627451,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (7)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9882352941176471,.5529411764705883,.3490196078431372,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6,.8352941176470589,.5803921568627451,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (6)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8431372549019608,.09803921568627451,.1098039215686274,.9921568627450981,.6823529411764706,.3803921568627451,1,1,.7490196078431373,.6705882352941176,.8666666666666667,.6431372549019608,.1686274509803922,.5137254901960784,.7294117647058823],Name:"Brewer Diverging Spectral (5)",NanColor:[.1686274509803922,.5137254901960784,.7294117647058823]},{IndexedColors:[.8431372549019608,.09803921568627451,.1098039215686274,.9921568627450981,.6823529411764706,.3803921568627451,.6705882352941176,.8666666666666667,.6431372549019608,.1686274509803922,.5137254901960784,.7294117647058823],Name:"Brewer Diverging Spectral (4)",NanColor:[.1686274509803922,.5137254901960784,.7294117647058823]},{IndexedColors:[.9882352941176471,.5529411764705883,.3490196078431372,1,1,.7490196078431373,.6,.8352941176470589,.5803921568627451],Name:"Brewer Diverging Spectral (3)",NanColor:[.6,.8352941176470589,.5803921568627451]},{IndexedColors:[.3294117647058823,.1882352941176471,.0196078431372549,.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922,0,.2352941176470588,.1882352941176471],Name:"Brewer Diverging Brown-Blue-Green (11)",NanColor:[0,.2352941176470588,.1882352941176471]},{IndexedColors:[.3294117647058823,.1882352941176471,.0196078431372549,.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922,0,.2352941176470588,.1882352941176471],Name:"Brewer Diverging Brown-Blue-Green (10)",NanColor:[0,.2352941176470588,.1882352941176471]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (9)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (8)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.8470588235294118,.7019607843137254,.396078431372549,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.3529411764705883,.7058823529411765,.6745098039215687,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (7)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.8470588235294118,.7019607843137254,.396078431372549,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.3529411764705883,.7058823529411765,.6745098039215687,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (6)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.6509803921568628,.3803921568627451,.1019607843137255,.8745098039215686,.7607843137254902,.4901960784313725,.9607843137254902,.9607843137254902,.9607843137254902,.5019607843137255,.803921568627451,.7568627450980392,.00392156862745098,.5215686274509804,.4431372549019608],Name:"Brewer Diverging Brown-Blue-Green (5)",NanColor:[.00392156862745098,.5215686274509804,.4431372549019608]},{IndexedColors:[.6509803921568628,.3803921568627451,.1019607843137255,.8745098039215686,.7607843137254902,.4901960784313725,.5019607843137255,.803921568627451,.7568627450980392,.00392156862745098,.5215686274509804,.4431372549019608],Name:"Brewer Diverging Brown-Blue-Green (4)",NanColor:[.00392156862745098,.5215686274509804,.4431372549019608]},{IndexedColors:[.8470588235294118,.7019607843137254,.396078431372549,.9607843137254902,.9607843137254902,.9607843137254902,.3529411764705883,.7058823529411765,.6745098039215687],Name:"Brewer Diverging Brown-Blue-Green (3)",NanColor:[.3529411764705883,.7058823529411765,.6745098039215687]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8980392156862745,.9607843137254902,.9764705882352941,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.4274509803921568,.1725490196078431,0,.2666666666666667,.1058823529411765],Name:"Brewer Sequential Blue-Green (9)",NanColor:[0,.2666666666666667,.1058823529411765]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8980392156862745,.9607843137254902,.9764705882352941,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.3450980392156863,.1411764705882353],Name:"Brewer Sequential Blue-Green (8)",NanColor:[0,.3450980392156863,.1411764705882353]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.8,.9254901960784314,.9019607843137255,.8,.9254901960784314,.9019607843137255,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.3450980392156863,.1411764705882353],Name:"Brewer Sequential Blue-Green (7)",NanColor:[0,.3450980392156863,.1411764705882353]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.1725490196078431,.6352941176470588,.3725490196078431,0,.4274509803921568,.1725490196078431],Name:"Brewer Sequential Blue-Green (6)",NanColor:[0,.4274509803921568,.1725490196078431]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.6980392156862745,.8862745098039215,.8862745098039215,.4,.7607843137254902,.6431372549019608,.1725490196078431,.6352941176470588,.3725490196078431,0,.4274509803921568,.1725490196078431],Name:"Brewer Sequential Blue-Green (5)",NanColor:[0,.4274509803921568,.1725490196078431]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.6980392156862745,.8862745098039215,.8862745098039215,.4,.7607843137254902,.6431372549019608,.1372549019607843,.5450980392156862,.2705882352941176],Name:"Brewer Sequential Blue-Green (4)",NanColor:[.1372549019607843,.5450980392156862,.2705882352941176]},{IndexedColors:[.8980392156862745,.9607843137254902,.9764705882352941,.6,.8470588235294118,.788235294117647,.1725490196078431,.6352941176470588,.3725490196078431],Name:"Brewer Sequential Blue-Green (3)",NanColor:[.1725490196078431,.6352941176470588,.3725490196078431]},{IndexedColors:[1,1,.8980392156862745,1,.9686274509803922,.7372549019607844,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.6,.203921568627451,.01568627450980392,.4,.1450980392156863,.02352941176470588],Name:"Brewer Sequential Yellow-Orange-Brown (9)",NanColor:[.4,.1450980392156863,.02352941176470588]},{IndexedColors:[1,1,.8980392156862745,1,.9686274509803922,.7372549019607844,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.5490196078431373,.1764705882352941,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (8)",NanColor:[.5490196078431373,.1764705882352941,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.5490196078431373,.1764705882352941,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (7)",NanColor:[.5490196078431373,.1764705882352941,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.8509803921568627,.3725490196078431,.05490196078431372,.6,.203921568627451,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (6)",NanColor:[.6,.203921568627451,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8509803921568627,.5568627450980392,.996078431372549,.6,.1607843137254902,.8509803921568627,.3725490196078431,.05490196078431372,.6,.203921568627451,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (5)",NanColor:[.6,.203921568627451,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8509803921568627,.5568627450980392,.996078431372549,.6,.1607843137254902,.8,.2980392156862745,.00784313725490196],Name:"Brewer Sequential Yellow-Orange-Brown (4)",NanColor:[.8,.2980392156862745,.00784313725490196]},{IndexedColors:[1,.9686274509803922,.7372549019607844,.996078431372549,.7686274509803922,.3098039215686275,.8509803921568627,.3725490196078431,.05490196078431372],Name:"Brewer Sequential Yellow-Orange-Brown (3)",NanColor:[.8509803921568627,.3725490196078431,.05490196078431372]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8784313725490196,.9254901960784314,.9568627450980393,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.5058823529411764,.05882352941176471,.4862745098039216,.3019607843137255,0,.2941176470588235],Name:"Brewer Sequential Blue-Purple (9)",NanColor:[.3019607843137255,0,.2941176470588235]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8784313725490196,.9254901960784314,.9568627450980393,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.4313725490196079,.00392156862745098,.4196078431372549],Name:"Brewer Sequential Blue-Purple (8)",NanColor:[.4313725490196079,.00392156862745098,.4196078431372549]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.4313725490196079,.00392156862745098,.4196078431372549],Name:"Brewer Sequential Blue-Purple (7)",NanColor:[.4313725490196079,.00392156862745098,.4196078431372549]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.3372549019607843,.6549019607843137,.5058823529411764,.05882352941176471,.4862745098039216],Name:"Brewer Sequential Blue-Purple (6)",NanColor:[.5058823529411764,.05882352941176471,.4862745098039216]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7019607843137254,.803921568627451,.8901960784313725,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.3372549019607843,.6549019607843137,.5058823529411764,.05882352941176471,.4862745098039216],Name:"Brewer Sequential Blue-Purple (5)",NanColor:[.5058823529411764,.05882352941176471,.4862745098039216]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7019607843137254,.803921568627451,.8901960784313725,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.2549019607843137,.615686274509804],Name:"Brewer Sequential Blue-Purple (4)",NanColor:[.5333333333333333,.2549019607843137,.615686274509804]},{IndexedColors:[.8784313725490196,.9254901960784314,.9568627450980393,.6196078431372549,.7372549019607844,.8549019607843137,.5333333333333333,.3372549019607843,.6549019607843137],Name:"Brewer Sequential Blue-Purple (3)",NanColor:[.5333333333333333,.3372549019607843,.6549019607843137]},{IndexedColors:[.4980392156862745,.788235294117647,.4980392156862745,.7450980392156863,.6823529411764706,.8313725490196079,.9921568627450981,.7529411764705882,.5254901960784314,1,1,.6,.2196078431372549,.4235294117647059,.6901960784313725,.9411764705882353,.00784313725490196,.4980392156862745,.7490196078431373,.3568627450980392,.09019607843137255,.4,.4,.4],Name:"Brewer Qualitative Accent",NanColor:[.4,.4,.4]},{IndexedColors:[.1058823529411765,.6196078431372549,.4666666666666667,.8509803921568627,.3725490196078431,.00784313725490196,.4588235294117647,.4392156862745098,.7019607843137254,.9058823529411765,.1607843137254902,.5411764705882353,.4,.6509803921568628,.1176470588235294,.9019607843137255,.6705882352941176,.00784313725490196,.6509803921568628,.4627450980392157,.1137254901960784,.4,.4,.4],Name:"Brewer Qualitative Dark2",NanColor:[.4,.4,.4]},{IndexedColors:[.4,.7607843137254902,.6470588235294118,.9882352941176471,.5529411764705883,.3843137254901961,.5529411764705883,.6274509803921569,.796078431372549,.9058823529411765,.5411764705882353,.7647058823529411,.6509803921568628,.8470588235294118,.3294117647058823,1,.8509803921568627,.1843137254901961,.8980392156862745,.7686274509803922,.5803921568627451,.7019607843137254,.7019607843137254,.7019607843137254],Name:"Brewer Qualitative Set2",NanColor:[.7019607843137254,.7019607843137254,.7019607843137254]},{IndexedColors:[.7019607843137254,.8862745098039215,.803921568627451,.9921568627450981,.803921568627451,.6745098039215687,.796078431372549,.8352941176470589,.9098039215686274,.9568627450980393,.792156862745098,.8941176470588236,.9019607843137255,.9607843137254902,.788235294117647,1,.9490196078431372,.6823529411764706,.9450980392156862,.8862745098039215,.8,.8,.8,.8],Name:"Brewer Qualitative Pastel2",NanColor:[.8,.8,.8]},{IndexedColors:[.984313725490196,.7058823529411765,.6823529411764706,.7019607843137254,.803921568627451,.8901960784313725,.8,.9215686274509803,.7725490196078432,.8705882352941177,.796078431372549,.8941176470588236,.996078431372549,.8509803921568627,.6509803921568628,1,1,.8,.8980392156862745,.8470588235294118,.7411764705882353,.9921568627450981,.8549019607843137,.9254901960784314,.9490196078431372,.9490196078431372,.9490196078431372],Name:"Brewer Qualitative Pastel1",NanColor:[.9490196078431372,.9490196078431372,.9490196078431372]},{IndexedColors:[.8941176470588236,.1019607843137255,.1098039215686274,.2156862745098039,.4941176470588236,.7215686274509804,.3019607843137255,.6862745098039216,.2901960784313726,.596078431372549,.3058823529411765,.6392156862745098,1,.4980392156862745,0,1,1,.2,.6509803921568628,.3372549019607843,.1568627450980392,.9686274509803922,.5058823529411764,.7490196078431373,.6,.6,.6],Name:"Brewer Qualitative Set1",NanColor:[.6,.6,.6]},{IndexedColors:[.6509803921568628,.807843137254902,.8901960784313725,.1215686274509804,.4705882352941176,.7058823529411765,.6980392156862745,.8745098039215686,.5411764705882353,.2,.6274509803921569,.1725490196078431,.984313725490196,.6039215686274509,.6,.8901960784313725,.1019607843137255,.1098039215686274,.9921568627450981,.7490196078431373,.4352941176470588,1,.4980392156862745,0,.792156862745098,.6980392156862745,.8392156862745098,.4156862745098039,.2392156862745098,.6039215686274509,1,1,.6],Name:"Brewer Qualitative Paired",NanColor:[1,1,.6]},{IndexedColors:[.5529411764705883,.8274509803921568,.7803921568627451,1,1,.7019607843137254,.7450980392156863,.7294117647058823,.8549019607843137,.984313725490196,.5019607843137255,.4470588235294118,.5019607843137255,.6941176470588235,.8274509803921568,.9921568627450981,.7058823529411765,.3843137254901961,.7019607843137254,.8705882352941177,.4117647058823529,.9882352941176471,.803921568627451,.8980392156862745,.8509803921568627,.8509803921568627,.8509803921568627,.7372549019607844,.5019607843137255,.7411764705882353,.8,.9215686274509803,.7725490196078432,1,.9294117647058824,.4352941176470588],Name:"Brewer Qualitative Set3",NanColor:[1,.9294117647058824,.4352941176470588]},{IndexedColors:[1,0,0,1,.862745,0,0,.695201,0],Name:"Traffic Lights",NanColor:[.803922,0,.803922]},{IndexedColors:[.908659,.604013,.581857,1,.862745,0,0,.695201,0],Name:"Traffic Lights For Deuteranopes",NanColor:[.803922,0,.803922]},{IndexedColors:[.4196078431372549,0,.07058823529411765,.9019607843137255,.9411764705882353,.0196078431372549,.01568627450980392,.6196078431372549,.00784313725490196],Name:"Traffic Lights For Deuteranopes 2",NanColor:[.803922,0,.803922]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Muted Blue-Green",NanColor:[.25,0,0],RGBPoints:[0,.109804,.27451,.301961,.02,.129412,.309804,.341176,.05,.14902,.341176,.380392,.1,.188235,.403922,.458824,.15,.227451,.447059,.521569,.2,.290196,.494118,.588235,.25,.368627,.552941,.670588,.3,.458824,.619608,.74902,.35,.588235,.713725,.85098,.4,.72549,.815686,.941176,.45,.831373,.882353,.980392,.475,.909804,.933333,1,.5,.980392,.984314,1,.5,.996078,1,.94902,.5,1,1,.980392,.5,.980392,.984314,1,.525,.972549,.988235,.890196,.55,.917647,.960784,.835294,.6,.835294,.921569,.772549,.65,.768627,.901961,.737255,.7,.670588,.831373,.654902,.75,.576471,.760784,.584314,.8,.498039,.678431,.521569,.85,.392157,.560784,.427451,.9,.294118,.45098,.333333,.95,.211765,.34902,.254902,1,.152941,.278431,.196078]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Green-Blue Asymmetric Divergent (62Blbc)",NanColor:[.25,0,0],RGBPoints:[0,.121569,.2,.145098,.05,.196078,.301961,.223529,.1,.258824,.4,.278431,.2,.341176,.54902,.341176,.25,.419608,.619608,.376471,.3,.545098,.701961,.392157,.35,.643137,.780392,.403922,.4,.729412,.819608,.45098,.45,.811765,.870588,.521569,.5,.898039,.909804,.564706,.55,.941176,.92549,.686275,.6,.960784,.94902,.776471,.64,1,1,1,.65,.890196,.988235,.972549,.7,.721569,.894118,.901961,.75,.631373,.823529,.839216,.8,.517647,.662745,.701961,.85,.384314,.494118,.54902,.9,.298039,.360784,.45098,.95,.223529,.25098,.34902,.99,.156863,.172549,.25098,1,.137255,.137255,.188235]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Asymmtrical Earth Tones (6_21b)",NanColor:[.25,0,0],RGBPoints:[0,.141176,.14902,.2,.05,.215686,.258824,.321569,.1,.243137,.368627,.380392,.15,.27451,.439216,.4,.2,.32549,.501961,.384314,.25,.403922,.6,.419608,.3,.486275,.701961,.454902,.35,.556863,.74902,.494118,.4,.670588,.8,.545098,.5,.854902,.901961,.631373,.55,.92549,.941176,.694118,.6,.960784,.94902,.776471,.65,.988235,.968627,.909804,.7,.839216,.815686,.772549,.75,.701961,.662745,.615686,.8,.6,.529412,.478431,.85,.501961,.403922,.360784,.9,.439216,.313725,.290196,1,.301961,.164706,.176471]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Yellow 15",NanColor:[.25,0,0],RGBPoints:[0,1,1,.988235,.002,1,1,.988235,.05,.984314,.988235,.843137,.1,.988235,.988235,.741176,.15,.980392,.968627,.654902,.2,.980392,.945098,.576471,.25,.968627,.905882,.486275,.3,.968627,.862745,.388235,.35,.960784,.803922,.286275,.4,.94902,.741176,.219608,.45,.941176,.678431,.14902,.5,.929412,.607843,.094118,.55,.921569,.545098,.054902,.6,.909804,.486275,.035294,.65,.890196,.411765,.019608,.7,.8,.305882,0,.75,.760784,.239216,0,.8,.678431,.180392,.011765,.85,.6,.121569,.023529,.9,.501961,.054902,.031373,.95,.4,.039216,.058824,1,.301961,.047059,.090196]},{ColorSpace:"Diverging",Name:"Magma (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.001462,466e-6,.013866,.003922,.002258,.001295,.018331,.007843,.003279,.002305,.023708,.011765,.004512,.00349,.029965,.015686,.00595,.004843,.03713,.019608,.007588,.006356,.044973,.023529,.009426,.008022,.052844,.027451,.011465,.009828,.06075,.031373,.013708,.011771,.068667,.035294,.016156,.01384,.076603,.039216,.018815,.016026,.084584,.043137,.021692,.01832,.09261,.047059,.024792,.020715,.100676,.05098,.028123,.023201,.108787,.054902,.031696,.025765,.116965,.058824,.03552,.028397,.125209,.062745,.039608,.03109,.133515,.066667,.04383,.03383,.141886,.070588,.048062,.036607,.150327,.07451,.05232,.039407,.158841,.078431,.056615,.04216,.167446,.082353,.060949,.044794,.176129,.086275,.06533,.047318,.184892,.090196,.069764,.049726,.193735,.094118,.074257,.052017,.20266,.098039,.078815,.054184,.211667,.101961,.083446,.056225,.220755,.105882,.088155,.058133,.229922,.109804,.092949,.059904,.239164,.113725,.097833,.061531,.248477,.117647,.102815,.06301,.257854,.121569,.107899,.064335,.267289,.12549,.113094,.065492,.276784,.129412,.118405,.066479,.286321,.133333,.123833,.067295,.295879,.137255,.12938,.067935,.305443,.141176,.135053,.068391,.315,.145098,.140858,.068654,.324538,.14902,.146785,.068738,.334011,.152941,.152839,.068637,.343404,.156863,.159018,.068354,.352688,.160784,.165308,.067911,.361816,.164706,.171713,.067305,.370771,.168627,.178212,.066576,.379497,.172549,.184801,.065732,.387973,.176471,.19146,.064818,.396152,.180392,.198177,.063862,.404009,.184314,.204935,.062907,.411514,.188235,.211718,.061992,.418647,.192157,.218512,.061158,.425392,.196078,.225302,.060445,.431742,.2,.232077,.059889,.437695,.203922,.238826,.059517,.443256,.207843,.245543,.059352,.448436,.211765,.25222,.059415,.453248,.215686,.258857,.059706,.45771,.219608,.265447,.060237,.46184,.223529,.271994,.060994,.46566,.227451,.278493,.061978,.46919,.231373,.284951,.063168,.472451,.235294,.291366,.064553,.475462,.239216,.29774,.066117,.478243,.243137,.304081,.067835,.480812,.247059,.310382,.069702,.483186,.25098,.316654,.07169,.48538,.254902,.322899,.073782,.487408,.258824,.329114,.075972,.489287,.262745,.335308,.078236,.491024,.266667,.341482,.080564,.492631,.270588,.347636,.082946,.494121,.27451,.353773,.085373,.495501,.278431,.359898,.087831,.496778,.282353,.366012,.090314,.49796,.286275,.372116,.092816,.499053,.290196,.378211,.095332,.500067,.294118,.384299,.097855,.501002,.298039,.390384,.100379,.501864,.301961,.396467,.102902,.502658,.305882,.402548,.10542,.503386,.309804,.408629,.10793,.504052,.313725,.414709,.110431,.504662,.317647,.420791,.11292,.505215,.321569,.426877,.115395,.505714,.32549,.432967,.117855,.50616,.329412,.439062,.120298,.506555,.333333,.445163,.122724,.506901,.337255,.451271,.125132,.507198,.341176,.457386,.127522,.507448,.345098,.463508,.129893,.507652,.34902,.46964,.132245,.507809,.352941,.47578,.134577,.507921,.356863,.481929,.136891,.507989,.360784,.488088,.139186,.508011,.364706,.494258,.141462,.507988,.368627,.500438,.143719,.50792,.372549,.506629,.145958,.507806,.376471,.512831,.148179,.507648,.380392,.519045,.150383,.507443,.384314,.52527,.152569,.507192,.388235,.531507,.154739,.506895,.392157,.537755,.156894,.506551,.396078,.544015,.159033,.506159,.4,.550287,.161158,.505719,.403922,.556571,.163269,.50523,.407843,.562866,.165368,.504692,.411765,.569172,.167454,.504105,.415686,.57549,.16953,.503466,.419608,.581819,.171596,.502777,.423529,.588158,.173652,.502035,.427451,.594508,.175701,.501241,.431373,.600868,.177743,.500394,.435294,.607238,.179779,.499492,.439216,.613617,.181811,.498536,.443137,.620005,.18384,.497524,.447059,.626401,.185867,.496456,.45098,.632805,.187893,.495332,.454902,.639216,.189921,.49415,.458824,.645633,.191952,.49291,.462745,.652056,.193986,.491611,.466667,.658483,.196027,.490253,.470588,.664915,.198075,.488836,.47451,.671349,.200133,.487358,.478431,.677786,.202203,.485819,.482353,.684224,.204286,.484219,.486275,.690661,.206384,.482558,.490196,.697098,.208501,.480835,.494118,.703532,.210638,.479049,.498039,.709962,.212797,.477201,.501961,.716387,.214982,.47529,.505882,.722805,.217194,.473316,.509804,.729216,.219437,.471279,.513725,.735616,.221713,.46918,.517647,.742004,.224025,.467018,.521569,.748378,.226377,.464794,.52549,.754737,.228772,.462509,.529412,.761077,.231214,.460162,.533333,.767398,.233705,.457755,.537255,.773695,.236249,.455289,.541176,.779968,.238851,.452765,.545098,.786212,.241514,.450184,.54902,.792427,.244242,.447543,.552941,.798608,.24704,.444848,.556863,.804752,.249911,.442102,.560784,.810855,.252861,.439305,.564706,.816914,.255895,.436461,.568627,.822926,.259016,.433573,.572549,.828886,.262229,.430644,.576471,.834791,.26554,.427671,.580392,.840636,.268953,.424666,.584314,.846416,.272473,.421631,.588235,.852126,.276106,.418573,.592157,.857763,.279857,.415496,.596078,.86332,.283729,.412403,.6,.868793,.287728,.409303,.603922,.874176,.291859,.406205,.607843,.879464,.296125,.403118,.611765,.884651,.30053,.400047,.615686,.889731,.305079,.397002,.619608,.8947,.309773,.393995,.623529,.899552,.314616,.391037,.627451,.904281,.31961,.388137,.631373,.908884,.324755,.385308,.635294,.913354,.330052,.382563,.639216,.917689,.3355,.379915,.643137,.921884,.341098,.377376,.647059,.925937,.346844,.374959,.65098,.929845,.352734,.372677,.654902,.933606,.358764,.370541,.658824,.937221,.364929,.368567,.662745,.940687,.371224,.366762,.666667,.944006,.377643,.365136,.670588,.94718,.384178,.363701,.67451,.95021,.39082,.362468,.678431,.953099,.397563,.361438,.682353,.955849,.4044,.360619,.686275,.958464,.411324,.360014,.690196,.960949,.418323,.35963,.694118,.96331,.42539,.359469,.698039,.965549,.432519,.359529,.701961,.967671,.439703,.35981,.705882,.96968,.446936,.360311,.709804,.971582,.45421,.36103,.713725,.973381,.46152,.361965,.717647,.975082,.468861,.363111,.721569,.97669,.476226,.364466,.72549,.97821,.483612,.366025,.729412,.979645,.491014,.367783,.733333,.981,.498428,.369734,.737255,.982279,.505851,.371874,.741176,.983485,.51328,.374198,.745098,.984622,.520713,.376698,.74902,.985693,.528148,.379371,.752941,.9867,.535582,.38221,.756863,.987646,.543015,.38521,.760784,.988533,.550446,.388365,.764706,.989363,.557873,.391671,.768627,.990138,.565296,.395122,.772549,.990871,.572706,.398714,.776471,.991558,.580107,.402441,.780392,.992196,.587502,.406299,.784314,.992785,.594891,.410283,.788235,.993326,.602275,.41439,.792157,.993834,.609644,.418613,.796078,.994309,.616999,.42295,.8,.994738,.62435,.427397,.803922,.995122,.631696,.431951,.807843,.99548,.639027,.436607,.811765,.99581,.646344,.441361,.815686,.996096,.653659,.446213,.819608,.996341,.660969,.45116,.823529,.99658,.668256,.456192,.827451,.996775,.675541,.461314,.831373,.996925,.682828,.466526,.835294,.997077,.690088,.471811,.839216,.997186,.697349,.477182,.843137,.997254,.704611,.482635,.847059,.997325,.711848,.488154,.85098,.997351,.719089,.493755,.854902,.997351,.726324,.499428,.858824,.997341,.733545,.505167,.862745,.997285,.740772,.510983,.866667,.997228,.747981,.516859,.870588,.997138,.75519,.522806,.87451,.997019,.762398,.528821,.878431,.996898,.769591,.534892,.882353,.996727,.776795,.541039,.886275,.996571,.783977,.547233,.890196,.996369,.791167,.553499,.894118,.996162,.798348,.55982,.898039,.995932,.805527,.566202,.901961,.99568,.812706,.572645,.905882,.995424,.819875,.57914,.909804,.995131,.827052,.585701,.913725,.994851,.834213,.592307,.917647,.994524,.841387,.598983,.921569,.994222,.84854,.605696,.92549,.993866,.855711,.612482,.929412,.993545,.862859,.619299,.933333,.99317,.870024,.626189,.937255,.992831,.877168,.633109,.941176,.99244,.88433,.640099,.945098,.992089,.89147,.647116,.94902,.991688,.898627,.654202,.952941,.991332,.905763,.661309,.956863,.99093,.912915,.668481,.960784,.99057,.920049,.675675,.964706,.990175,.927196,.682926,.968627,.989815,.934329,.690198,.972549,.989434,.94147,.697519,.976471,.989077,.948604,.704863,.980392,.988717,.955742,.712242,.984314,.988367,.962878,.719649,.988235,.988033,.970012,.727077,.992157,.987691,.977154,.734536,.996078,.987387,.984288,.742002,1,.987053,.991438,.749504]},{ColorSpace:"Diverging",Name:"Inferno (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.001462,466e-6,.013866,.003922,.002267,.00127,.01857,.007843,.003299,.002249,.024239,.011765,.004547,.003392,.030909,.015686,.006006,.004692,.038558,.019608,.007676,.006136,.046836,.023529,.009561,.007713,.055143,.027451,.011663,.009417,.06346,.031373,.013995,.011225,.071862,.035294,.016561,.013136,.080282,.039216,.019373,.015133,.088767,.043137,.022447,.017199,.097327,.047059,.025793,.019331,.10593,.05098,.029432,.021503,.114621,.054902,.033385,.023702,.123397,.058824,.037668,.025921,.132232,.062745,.042253,.028139,.141141,.066667,.046915,.030324,.150164,.070588,.051644,.032474,.159254,.07451,.056449,.034569,.168414,.078431,.06134,.03659,.177642,.082353,.066331,.038504,.186962,.086275,.071429,.040294,.196354,.090196,.076637,.041905,.205799,.094118,.081962,.043328,.215289,.098039,.087411,.044556,.224813,.101961,.09299,.045583,.234358,.105882,.098702,.046402,.243904,.109804,.104551,.047008,.25343,.113725,.110536,.047399,.262912,.117647,.116656,.047574,.272321,.121569,.122908,.047536,.281624,.12549,.129285,.047293,.290788,.129412,.135778,.046856,.299776,.133333,.142378,.046242,.308553,.137255,.149073,.045468,.317085,.141176,.15585,.044559,.325338,.145098,.162689,.043554,.333277,.14902,.169575,.042489,.340874,.152941,.176493,.041402,.348111,.156863,.183429,.040329,.354971,.160784,.190367,.039309,.361447,.164706,.197297,.0384,.367535,.168627,.204209,.037632,.373238,.172549,.211095,.03703,.378563,.176471,.217949,.036615,.383522,.180392,.224763,.036405,.388129,.184314,.231538,.036405,.3924,.188235,.238273,.036621,.396353,.192157,.244967,.037055,.400007,.196078,.25162,.037705,.403378,.2,.258234,.038571,.406485,.203922,.26481,.039647,.409345,.207843,.271347,.040922,.411976,.211765,.27785,.042353,.414392,.215686,.284321,.043933,.416608,.219608,.290763,.045644,.418637,.223529,.297178,.04747,.420491,.227451,.303568,.049396,.422182,.231373,.309935,.051407,.423721,.235294,.316282,.05349,.425116,.239216,.32261,.055634,.426377,.243137,.328921,.057827,.427511,.247059,.335217,.06006,.428524,.25098,.3415,.062325,.429425,.254902,.347771,.064616,.430217,.258824,.354032,.066925,.430906,.262745,.360284,.069247,.431497,.266667,.366529,.071579,.431994,.270588,.372768,.073915,.4324,.27451,.379001,.076253,.432719,.278431,.385228,.078591,.432955,.282353,.391453,.080927,.433109,.286275,.397674,.083257,.433183,.290196,.403894,.08558,.433179,.294118,.410113,.087896,.433098,.298039,.416331,.090203,.432943,.301961,.422549,.092501,.432714,.305882,.428768,.09479,.432412,.309804,.434987,.097069,.432039,.313725,.441207,.099338,.431594,.317647,.447428,.101597,.43108,.321569,.453651,.103848,.430498,.32549,.459875,.106089,.429846,.329412,.4661,.108322,.429125,.333333,.472328,.110547,.428334,.337255,.478558,.112764,.427475,.341176,.484789,.114974,.426548,.345098,.491022,.117179,.425552,.34902,.497257,.119379,.424488,.352941,.503493,.121575,.423356,.356863,.50973,.123769,.422156,.360784,.515967,.12596,.420887,.364706,.522206,.12815,.419549,.368627,.528444,.130341,.418142,.372549,.534683,.132534,.416667,.376471,.54092,.134729,.415123,.380392,.547157,.136929,.413511,.384314,.553392,.139134,.411829,.388235,.559624,.141346,.410078,.392157,.565854,.143567,.408258,.396078,.572081,.145797,.406369,.4,.578304,.148039,.404411,.403922,.584521,.150294,.402385,.407843,.590734,.152563,.40029,.411765,.59694,.154848,.398125,.415686,.603139,.157151,.395891,.419608,.60933,.159474,.393589,.423529,.615513,.161817,.391219,.427451,.621685,.164184,.388781,.431373,.627847,.166575,.386276,.435294,.633998,.168992,.383704,.439216,.640135,.171438,.381065,.443137,.64626,.173914,.378359,.447059,.652369,.176421,.375586,.45098,.658463,.178962,.372748,.454902,.66454,.181539,.369846,.458824,.670599,.184153,.366879,.462745,.676638,.186807,.363849,.466667,.682656,.189501,.360757,.470588,.688653,.192239,.357603,.47451,.694627,.195021,.354388,.478431,.700576,.197851,.351113,.482353,.7065,.200728,.347777,.486275,.712396,.203656,.344383,.490196,.718264,.206636,.340931,.494118,.724103,.20967,.337424,.498039,.729909,.212759,.333861,.501961,.735683,.215906,.330245,.505882,.741423,.219112,.326576,.509804,.747127,.222378,.322856,.513725,.752794,.225706,.319085,.517647,.758422,.229097,.315266,.521569,.76401,.232554,.311399,.52549,.769556,.236077,.307485,.529412,.775059,.239667,.303526,.533333,.780517,.243327,.299523,.537255,.785929,.247056,.295477,.541176,.791293,.250856,.29139,.545098,.796607,.254728,.287264,.54902,.801871,.258674,.283099,.552941,.807082,.262692,.278898,.556863,.812239,.266786,.274661,.560784,.817341,.270954,.27039,.564706,.822386,.275197,.266085,.568627,.827372,.279517,.26175,.572549,.832299,.283913,.257383,.576471,.837165,.288385,.252988,.580392,.841969,.292933,.248564,.584314,.846709,.297559,.244113,.588235,.851384,.30226,.239636,.592157,.855992,.307038,.235133,.596078,.860533,.311892,.230606,.6,.865006,.316822,.226055,.603922,.869409,.321827,.221482,.607843,.873741,.326906,.216886,.611765,.878001,.33206,.212268,.615686,.882188,.337287,.207628,.619608,.886302,.342586,.202968,.623529,.890341,.347957,.198286,.627451,.894305,.353399,.193584,.631373,.898192,.358911,.18886,.635294,.902003,.364492,.184116,.639216,.905735,.37014,.17935,.643137,.90939,.375856,.174563,.647059,.912966,.381636,.169755,.65098,.916462,.387481,.164924,.654902,.919879,.393389,.16007,.658824,.923215,.399359,.155193,.662745,.92647,.405389,.150292,.666667,.929644,.411479,.145367,.670588,.932737,.417627,.140417,.67451,.935747,.423831,.13544,.678431,.938675,.430091,.130438,.682353,.941521,.436405,.125409,.686275,.944285,.442772,.120354,.690196,.946965,.449191,.115272,.694118,.949562,.45566,.110164,.698039,.952075,.462178,.105031,.701961,.954506,.468744,.099874,.705882,.956852,.475356,.094695,.709804,.959114,.482014,.089499,.713725,.961293,.488716,.084289,.717647,.963387,.495462,.079073,.721569,.965397,.502249,.073859,.72549,.967322,.509078,.068659,.729412,.969163,.515946,.063488,.733333,.970919,.522853,.058367,.737255,.97259,.529798,.053324,.741176,.974176,.53678,.048392,.745098,.975677,.543798,.043618,.74902,.977092,.55085,.03905,.752941,.978422,.557937,.034931,.756863,.979666,.565057,.031409,.760784,.980824,.572209,.028508,.764706,.981895,.579392,.02625,.768627,.982881,.586606,.024661,.772549,.983779,.593849,.02377,.776471,.984591,.601122,.023606,.780392,.985315,.608422,.024202,.784314,.985952,.61575,.025592,.788235,.986502,.623105,.027814,.792157,.986964,.630485,.030908,.796078,.987337,.63789,.034916,.8,.987622,.64532,.039886,.803922,.987819,.652773,.045581,.807843,.987926,.66025,.05175,.811765,.987945,.667748,.058329,.815686,.987874,.675267,.065257,.819608,.987714,.682807,.072489,.823529,.987464,.690366,.07999,.827451,.987124,.697944,.087731,.831373,.986694,.70554,.095694,.835294,.986175,.713153,.103863,.839216,.985566,.720782,.112229,.843137,.984865,.728427,.120785,.847059,.984075,.736087,.129527,.85098,.983196,.743758,.138453,.854902,.982228,.751442,.147565,.858824,.981173,.759135,.156863,.862745,.980032,.766837,.166353,.866667,.978806,.774545,.176037,.870588,.977497,.782258,.185923,.87451,.976108,.789974,.196018,.878431,.974638,.797692,.206332,.882353,.973088,.805409,.216877,.886275,.971468,.813122,.227658,.890196,.969783,.820825,.238686,.894118,.968041,.828515,.249972,.898039,.966243,.836191,.261534,.901961,.964394,.843848,.273391,.905882,.962517,.851476,.285546,.909804,.960626,.859069,.29801,.913725,.95872,.866624,.31082,.917647,.956834,.874129,.323974,.921569,.954997,.881569,.337475,.92549,.953215,.888942,.351369,.929412,.951546,.896226,.365627,.933333,.950018,.903409,.380271,.937255,.948683,.910473,.395289,.941176,.947594,.917399,.410665,.945098,.946809,.924168,.426373,.94902,.946392,.930761,.442367,.952941,.946403,.937159,.458592,.956863,.946903,.943348,.47497,.960784,.947937,.949318,.491426,.964706,.949545,.955063,.50786,.968627,.95174,.960587,.524203,.972549,.954529,.965896,.540361,.976471,.957896,.971003,.556275,.980392,.961812,.975924,.571925,.984314,.966249,.980678,.587206,.988235,.971162,.985282,.602154,.992157,.976511,.989753,.61676,.996078,.982257,.994109,.631017,1,.988362,.998364,.644924]},{ColorSpace:"Diverging",Name:"Plasma (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.050383,.029803,.527975,.003922,.063536,.028426,.533124,.007843,.075353,.027206,.538007,.011765,.086222,.026125,.542658,.015686,.096379,.025165,.547103,.019608,.10598,.024309,.551368,.023529,.115124,.023556,.555468,.027451,.123903,.022878,.559423,.031373,.132381,.022258,.56325,.035294,.140603,.021687,.566959,.039216,.148607,.021154,.570562,.043137,.156421,.020651,.574065,.047059,.16407,.020171,.577478,.05098,.171574,.019706,.580806,.054902,.17895,.019252,.584054,.058824,.186213,.018803,.587228,.062745,.193374,.018354,.59033,.066667,.200445,.017902,.593364,.070588,.207435,.017442,.596333,.07451,.21435,.016973,.599239,.078431,.221197,.016497,.602083,.082353,.227983,.016007,.604867,.086275,.234715,.015502,.607592,.090196,.241396,.014979,.610259,.094118,.248032,.014439,.612868,.098039,.254627,.013882,.615419,.101961,.261183,.013308,.617911,.105882,.267703,.012716,.620346,.109804,.274191,.012109,.622722,.113725,.280648,.011488,.625038,.117647,.287076,.010855,.627295,.121569,.293478,.010213,.62949,.12549,.299855,.009561,.631624,.129412,.30621,.008902,.633694,.133333,.312543,.008239,.6357,.137255,.318856,.007576,.63764,.141176,.32515,.006915,.639512,.145098,.331426,.006261,.641316,.14902,.337683,.005618,.643049,.152941,.343925,.004991,.64471,.156863,.35015,.004382,.646298,.160784,.356359,.003798,.64781,.164706,.362553,.003243,.649245,.168627,.368733,.002724,.650601,.172549,.374897,.002245,.651876,.176471,.381047,.001814,.653068,.180392,.387183,.001434,.654177,.184314,.393304,.001114,.655199,.188235,.399411,859e-6,.656133,.192157,.405503,678e-6,.656977,.196078,.41158,577e-6,.65773,.2,.417642,564e-6,.65839,.203922,.423689,646e-6,.658956,.207843,.429719,831e-6,.659425,.211765,.435734,.001127,.659797,.215686,.441732,.00154,.660069,.219608,.447714,.00208,.66024,.223529,.453677,.002755,.66031,.227451,.459623,.003574,.660277,.231373,.46555,.004545,.660139,.235294,.471457,.005678,.659897,.239216,.477344,.00698,.659549,.243137,.48321,.00846,.659095,.247059,.489055,.010127,.658534,.25098,.494877,.01199,.657865,.254902,.500678,.014055,.657088,.258824,.506454,.016333,.656202,.262745,.512206,.018833,.655209,.266667,.517933,.021563,.654109,.270588,.523633,.024532,.652901,.27451,.529306,.027747,.651586,.278431,.534952,.031217,.650165,.282353,.54057,.03495,.64864,.286275,.546157,.038954,.64701,.290196,.551715,.043136,.645277,.294118,.557243,.047331,.643443,.298039,.562738,.051545,.641509,.301961,.568201,.055778,.639477,.305882,.573632,.060028,.637349,.309804,.579029,.064296,.635126,.313725,.584391,.068579,.632812,.317647,.589719,.072878,.630408,.321569,.595011,.07719,.627917,.32549,.600266,.081516,.625342,.329412,.605485,.085854,.622686,.333333,.610667,.090204,.619951,.337255,.615812,.094564,.61714,.341176,.620919,.098934,.614257,.345098,.625987,.103312,.611305,.34902,.631017,.107699,.608287,.352941,.636008,.112092,.605205,.356863,.640959,.116492,.602065,.360784,.645872,.120898,.598867,.364706,.650746,.125309,.595617,.368627,.65558,.129725,.592317,.372549,.660374,.134144,.588971,.376471,.665129,.138566,.585582,.380392,.669845,.142992,.582154,.384314,.674522,.147419,.578688,.388235,.67916,.151848,.575189,.392157,.683758,.156278,.57166,.396078,.688318,.160709,.568103,.4,.69284,.165141,.564522,.403922,.697324,.169573,.560919,.407843,.701769,.174005,.557296,.411765,.706178,.178437,.553657,.415686,.710549,.182868,.550004,.419608,.714883,.187299,.546338,.423529,.719181,.191729,.542663,.427451,.723444,.196158,.538981,.431373,.72767,.200586,.535293,.435294,.731862,.205013,.531601,.439216,.736019,.209439,.527908,.443137,.740143,.213864,.524216,.447059,.744232,.218288,.520524,.45098,.748289,.222711,.516834,.454902,.752312,.227133,.513149,.458824,.756304,.231555,.509468,.462745,.760264,.235976,.505794,.466667,.764193,.240396,.502126,.470588,.76809,.244817,.498465,.47451,.771958,.249237,.494813,.478431,.775796,.253658,.491171,.482353,.779604,.258078,.487539,.486275,.783383,.2625,.483918,.490196,.787133,.266922,.480307,.494118,.790855,.271345,.476706,.498039,.794549,.27577,.473117,.501961,.798216,.280197,.469538,.505882,.801855,.284626,.465971,.509804,.805467,.289057,.462415,.513725,.809052,.293491,.45887,.517647,.812612,.297928,.455338,.521569,.816144,.302368,.451816,.52549,.819651,.306812,.448306,.529412,.823132,.311261,.444806,.533333,.826588,.315714,.441316,.537255,.830018,.320172,.437836,.541176,.833422,.324635,.434366,.545098,.836801,.329105,.430905,.54902,.840155,.33358,.427455,.552941,.843484,.338062,.424013,.556863,.846788,.342551,.420579,.560784,.850066,.347048,.417153,.564706,.853319,.351553,.413734,.568627,.856547,.356066,.410322,.572549,.85975,.360588,.406917,.576471,.862927,.365119,.403519,.580392,.866078,.36966,.400126,.584314,.869203,.374212,.396738,.588235,.872303,.378774,.393355,.592157,.875376,.383347,.389976,.596078,.878423,.387932,.3866,.6,.881443,.392529,.383229,.603922,.884436,.397139,.37986,.607843,.887402,.401762,.376494,.611765,.89034,.406398,.37313,.615686,.89325,.411048,.369768,.619608,.896131,.415712,.366407,.623529,.898984,.420392,.363047,.627451,.901807,.425087,.359688,.631373,.904601,.429797,.356329,.635294,.907365,.434524,.35297,.639216,.910098,.439268,.34961,.643137,.9128,.444029,.346251,.647059,.915471,.448807,.34289,.65098,.918109,.453603,.339529,.654902,.920714,.458417,.336166,.658824,.923287,.463251,.332801,.662745,.925825,.468103,.329435,.666667,.928329,.472975,.326067,.670588,.930798,.477867,.322697,.67451,.933232,.48278,.319325,.678431,.93563,.487712,.315952,.682353,.93799,.492667,.312575,.686275,.940313,.497642,.309197,.690196,.942598,.502639,.305816,.694118,.944844,.507658,.302433,.698039,.947051,.512699,.299049,.701961,.949217,.517763,.295662,.705882,.951344,.52285,.292275,.709804,.953428,.52796,.288883,.713725,.95547,.533093,.28549,.717647,.957469,.53825,.282096,.721569,.959424,.543431,.278701,.72549,.961336,.548636,.275305,.729412,.963203,.553865,.271909,.733333,.965024,.559118,.268513,.737255,.966798,.564396,.265118,.741176,.968526,.5697,.261721,.745098,.970205,.575028,.258325,.74902,.971835,.580382,.254931,.752941,.973416,.585761,.25154,.756863,.974947,.591165,.248151,.760784,.976428,.596595,.244767,.764706,.977856,.602051,.241387,.768627,.979233,.607532,.238013,.772549,.980556,.613039,.234646,.776471,.981826,.618572,.231287,.780392,.983041,.624131,.227937,.784314,.984199,.629718,.224595,.788235,.985301,.63533,.221265,.792157,.986345,.640969,.217948,.796078,.987332,.646633,.214648,.8,.98826,.652325,.211364,.803922,.989128,.658043,.2081,.807843,.989935,.663787,.204859,.811765,.990681,.669558,.201642,.815686,.991365,.675355,.198453,.819608,.991985,.681179,.195295,.823529,.992541,.68703,.19217,.827451,.993032,.692907,.189084,.831373,.993456,.69881,.186041,.835294,.993814,.704741,.183043,.839216,.994103,.710698,.180097,.843137,.994324,.716681,.177208,.847059,.994474,.722691,.174381,.85098,.994553,.728728,.171622,.854902,.994561,.734791,.168938,.858824,.994495,.74088,.166335,.862745,.994355,.746995,.163821,.866667,.994141,.753137,.161404,.870588,.993851,.759304,.159092,.87451,.993482,.765499,.156891,.878431,.993033,.77172,.154808,.882353,.992505,.777967,.152855,.886275,.991897,.784239,.151042,.890196,.991209,.790537,.149377,.894118,.990439,.796859,.14787,.898039,.989587,.803205,.146529,.901961,.988648,.809579,.145357,.905882,.987621,.815978,.144363,.909804,.986509,.822401,.143557,.913725,.985314,.828846,.142945,.917647,.984031,.835315,.142528,.921569,.982653,.841812,.142303,.92549,.98119,.848329,.142279,.929412,.979644,.854866,.142453,.933333,.977995,.861432,.142808,.937255,.976265,.868016,.143351,.941176,.974443,.874622,.144061,.945098,.97253,.88125,.144923,.94902,.970533,.887896,.145919,.952941,.968443,.894564,.147014,.956863,.966271,.901249,.14818,.960784,.964021,.90795,.14937,.964706,.961681,.914672,.15052,.968627,.959276,.921407,.151566,.972549,.956808,.928152,.152409,.976471,.954287,.934908,.152921,.980392,.951726,.941671,.152925,.984314,.949151,.948435,.152178,.988235,.946602,.95519,.150328,.992157,.944152,.961916,.146861,.996078,.941896,.96859,.140956,1,.940015,.975158,.131326]},{ColorSpace:"Diverging",Name:"Viridis (matplotlib)",NanColor:[1,0,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Eric Firing",RGBPoints:[0,.267004,.004874,.329415,.003922,.26851,.009605,.335427,.007843,.269944,.014625,.341379,.011765,.271305,.019942,.347269,.015686,.272594,.025563,.353093,.019608,.273809,.031497,.358853,.023529,.274952,.037752,.364543,.027451,.276022,.044167,.370164,.031373,.277018,.050344,.375715,.035294,.277941,.056324,.381191,.039216,.278791,.062145,.386592,.043137,.279566,.067836,.391917,.047059,.280267,.073417,.397163,.05098,.280894,.078907,.402329,.054902,.281446,.08432,.407414,.058824,.281924,.089666,.412415,.062745,.282327,.094955,.417331,.066667,.282656,.100196,.42216,.070588,.28291,.105393,.426902,.07451,.283091,.110553,.431554,.078431,.283197,.11568,.436115,.082353,.283229,.120777,.440584,.086275,.283187,.125848,.44496,.090196,.283072,.130895,.449241,.094118,.282884,.13592,.453427,.098039,.282623,.140926,.457517,.101961,.28229,.145912,.46151,.105882,.281887,.150881,.465405,.109804,.281412,.155834,.469201,.113725,.280868,.160771,.472899,.117647,.280255,.165693,.476498,.121569,.279574,.170599,.479997,.12549,.278826,.17549,.483397,.129412,.278012,.180367,.486697,.133333,.277134,.185228,.489898,.137255,.276194,.190074,.493001,.141176,.275191,.194905,.496005,.145098,.274128,.199721,.498911,.14902,.273006,.20452,.501721,.152941,.271828,.209303,.504434,.156863,.270595,.214069,.507052,.160784,.269308,.218818,.509577,.164706,.267968,.223549,.512008,.168627,.26658,.228262,.514349,.172549,.265145,.232956,.516599,.176471,.263663,.237631,.518762,.180392,.262138,.242286,.520837,.184314,.260571,.246922,.522828,.188235,.258965,.251537,.524736,.192157,.257322,.25613,.526563,.196078,.255645,.260703,.528312,.2,.253935,.265254,.529983,.203922,.252194,.269783,.531579,.207843,.250425,.27429,.533103,.211765,.248629,.278775,.534556,.215686,.246811,.283237,.535941,.219608,.244972,.287675,.53726,.223529,.243113,.292092,.538516,.227451,.241237,.296485,.539709,.231373,.239346,.300855,.540844,.235294,.237441,.305202,.541921,.239216,.235526,.309527,.542944,.243137,.233603,.313828,.543914,.247059,.231674,.318106,.544834,.25098,.229739,.322361,.545706,.254902,.227802,.326594,.546532,.258824,.225863,.330805,.547314,.262745,.223925,.334994,.548053,.266667,.221989,.339161,.548752,.270588,.220057,.343307,.549413,.27451,.21813,.347432,.550038,.278431,.21621,.351535,.550627,.282353,.214298,.355619,.551184,.286275,.212395,.359683,.55171,.290196,.210503,.363727,.552206,.294118,.208623,.367752,.552675,.298039,.206756,.371758,.553117,.301961,.204903,.375746,.553533,.305882,.203063,.379716,.553925,.309804,.201239,.38367,.554294,.313725,.19943,.387607,.554642,.317647,.197636,.391528,.554969,.321569,.19586,.395433,.555276,.32549,.1941,.399323,.555565,.329412,.192357,.403199,.555836,.333333,.190631,.407061,.556089,.337255,.188923,.41091,.556326,.341176,.187231,.414746,.556547,.345098,.185556,.41857,.556753,.34902,.183898,.422383,.556944,.352941,.182256,.426184,.55712,.356863,.180629,.429975,.557282,.360784,.179019,.433756,.55743,.364706,.177423,.437527,.557565,.368627,.175841,.44129,.557685,.372549,.174274,.445044,.557792,.376471,.172719,.448791,.557885,.380392,.171176,.45253,.557965,.384314,.169646,.456262,.55803,.388235,.168126,.459988,.558082,.392157,.166617,.463708,.558119,.396078,.165117,.467423,.558141,.4,.163625,.471133,.558148,.403922,.162142,.474838,.55814,.407843,.160665,.47854,.558115,.411765,.159194,.482237,.558073,.415686,.157729,.485932,.558013,.419608,.15627,.489624,.557936,.423529,.154815,.493313,.55784,.427451,.153364,.497,.557724,.431373,.151918,.500685,.557587,.435294,.150476,.504369,.55743,.439216,.149039,.508051,.55725,.443137,.147607,.511733,.557049,.447059,.14618,.515413,.556823,.45098,.144759,.519093,.556572,.454902,.143343,.522773,.556295,.458824,.141935,.526453,.555991,.462745,.140536,.530132,.555659,.466667,.139147,.533812,.555298,.470588,.13777,.537492,.554906,.47451,.136408,.541173,.554483,.478431,.135066,.544853,.554029,.482353,.133743,.548535,.553541,.486275,.132444,.552216,.553018,.490196,.131172,.555899,.552459,.494118,.129933,.559582,.551864,.498039,.128729,.563265,.551229,.501961,.127568,.566949,.550556,.505882,.126453,.570633,.549841,.509804,.125394,.574318,.549086,.513725,.124395,.578002,.548287,.517647,.123463,.581687,.547445,.521569,.122606,.585371,.546557,.52549,.121831,.589055,.545623,.529412,.121148,.592739,.544641,.533333,.120565,.596422,.543611,.537255,.120092,.600104,.54253,.541176,.119738,.603785,.5414,.545098,.119512,.607464,.540218,.54902,.119423,.611141,.538982,.552941,.119483,.614817,.537692,.556863,.119699,.61849,.536347,.560784,.120081,.622161,.534946,.564706,.120638,.625828,.533488,.568627,.12138,.629492,.531973,.572549,.122312,.633153,.530398,.576471,.123444,.636809,.528763,.580392,.12478,.640461,.527068,.584314,.126326,.644107,.525311,.588235,.128087,.647749,.523491,.592157,.130067,.651384,.521608,.596078,.132268,.655014,.519661,.6,.134692,.658636,.517649,.603922,.137339,.662252,.515571,.607843,.14021,.665859,.513427,.611765,.143303,.669459,.511215,.615686,.146616,.67305,.508936,.619608,.150148,.676631,.506589,.623529,.153894,.680203,.504172,.627451,.157851,.683765,.501686,.631373,.162016,.687316,.499129,.635294,.166383,.690856,.496502,.639216,.170948,.694384,.493803,.643137,.175707,.6979,.491033,.647059,.180653,.701402,.488189,.65098,.185783,.704891,.485273,.654902,.19109,.708366,.482284,.658824,.196571,.711827,.479221,.662745,.202219,.715272,.476084,.666667,.20803,.718701,.472873,.670588,.214,.722114,.469588,.67451,.220124,.725509,.466226,.678431,.226397,.728888,.462789,.682353,.232815,.732247,.459277,.686275,.239374,.735588,.455688,.690196,.24607,.73891,.452024,.694118,.252899,.742211,.448284,.698039,.259857,.745492,.444467,.701961,.266941,.748751,.440573,.705882,.274149,.751988,.436601,.709804,.281477,.755203,.432552,.713725,.288921,.758394,.428426,.717647,.296479,.761561,.424223,.721569,.304148,.764704,.419943,.72549,.311925,.767822,.415586,.729412,.319809,.770914,.411152,.733333,.327796,.77398,.40664,.737255,.335885,.777018,.402049,.741176,.344074,.780029,.397381,.745098,.35236,.783011,.392636,.74902,.360741,.785964,.387814,.752941,.369214,.788888,.382914,.756863,.377779,.791781,.377939,.760784,.386433,.794644,.372886,.764706,.395174,.797475,.367757,.768627,.404001,.800275,.362552,.772549,.412913,.803041,.357269,.776471,.421908,.805774,.35191,.780392,.430983,.808473,.346476,.784314,.440137,.811138,.340967,.788235,.449368,.813768,.335384,.792157,.458674,.816363,.329727,.796078,.468053,.818921,.323998,.8,.477504,.821444,.318195,.803922,.487026,.823929,.312321,.807843,.496615,.826376,.306377,.811765,.506271,.828786,.300362,.815686,.515992,.831158,.294279,.819608,.525776,.833491,.288127,.823529,.535621,.835785,.281908,.827451,.545524,.838039,.275626,.831373,.555484,.840254,.269281,.835294,.565498,.84243,.262877,.839216,.575563,.844566,.256415,.843137,.585678,.846661,.249897,.847059,.595839,.848717,.243329,.85098,.606045,.850733,.236712,.854902,.616293,.852709,.230052,.858824,.626579,.854645,.223353,.862745,.636902,.856542,.21662,.866667,.647257,.8584,.209861,.870588,.657642,.860219,.203082,.87451,.668054,.861999,.196293,.878431,.678489,.863742,.189503,.882353,.688944,.865448,.182725,.886275,.699415,.867117,.175971,.890196,.709898,.868751,.169257,.894118,.720391,.87035,.162603,.898039,.730889,.871916,.156029,.901961,.741388,.873449,.149561,.905882,.751884,.874951,.143228,.909804,.762373,.876424,.137064,.913725,.772852,.877868,.131109,.917647,.783315,.879285,.125405,.921569,.79376,.880678,.120005,.92549,.804182,.882046,.114965,.929412,.814576,.883393,.110347,.933333,.82494,.88472,.106217,.937255,.83527,.886029,.102646,.941176,.845561,.887322,.099702,.945098,.85581,.888601,.097452,.94902,.866013,.889868,.095953,.952941,.876168,.891125,.09525,.956863,.886271,.892374,.095374,.960784,.89632,.893616,.096335,.964706,.906311,.894855,.098125,.968627,.916242,.896091,.100717,.972549,.926106,.89733,.104071,.976471,.935904,.89857,.108131,.980392,.945636,.899815,.112838,.984314,.9553,.901065,.118128,.988235,.964894,.902323,.123941,.992157,.974417,.90359,.130215,.996078,.983868,.904867,.136897,1,.993248,.906157,.143936]},{ShowIndexedColorActiveValues:1,IndexedColors:[.07,.5,.7,1,1,1,.85,1,1,.8,.5,1,.76,1,0,1,.71,.71,.5,.5,.5,.05,.05,1,1,.05,.05,.7,1,1,.7,.89,.96,.67,.36,.95,.54,1,0,.75,.65,.65,.5,.6,.6,1,.5,0,1,1,.19,.12,.94,.12,.5,.82,.89,.56,.25,.83,.24,1,0,.9,.9,.9,.75,.76,.78,.65,.65,.67,.54,.6,.78,.61,.48,.78,.5,.48,.78,.44,.48,.78,.36,.48,.76,1,.48,.38,.49,.5,.69,.76,.56,.56,.4,.56,.56,.74,.5,.89,1,.63,0,.65,.16,.16,.36,.72,.82,.44,.18,.69,0,1,0,.58,1,1,.58,.88,.88,.45,.76,.79,.33,.71,.71,.23,.62,.62,.14,.56,.56,.04,.49,.55,0,.41,.52,.88,.88,1,1,.85,.56,.65,.46,.45,.4,.5,.5,.62,.39,.71,.83,.48,0,.58,0,.58,.26,.62,.69,.34,.09,.56,0,.79,0,.44,.83,1,1,1,.78,.85,1,.78,.78,1,.78,.64,1,.78,.56,1,.78,.38,1,.78,.27,1,.78,.19,1,.78,.12,1,.78,0,1,.61,0,.9,.46,0,.83,.32,0,.75,.22,0,.67,.14,.3,.76,1,.3,.65,1,.13,.58,.84,.15,.49,.67,.15,.4,.59,.09,.33,.53,.96,.93,.82,.8,.82,.12,.71,.71,.76,.65,.33,.3,.34,.35,.38,.62,.31,.71,.67,.36,0,.46,.31,.27,.26,.51,.59,.26,0,.4,0,.49,0,.44,.67,.98,0,.73,1,0,.63,1,0,.56,1,0,.5,1,0,.42,1,.33,.36,.95,.47,.36,.89,.54,.31,.89,.63,.21,.83,.7,.12,.83,.7,.12,.73,.7,.05,.65,.74,.05,.53,.78,0,.4,.8,0,.35,.82,0,.31,.85,0,.27,.88,0,.22,.9,0,.18,.91,0,.15,.92,0,.14,.93,0,.13,.94,0,.12,.95,0,.11,.96,0,.1,.97,0,.09,.98,0,.08,.99,0,.07,1,0,.06],Annotations:[0,"Xx",1,"H",2,"He",3,"Li",4,"Be",5,"B",6,"C",7,"N",8,"O",9,"F",10,"Ne",11,"Na",12,"Mg",13,"Al",14,"Si",15,"P",16,"S",17,"Cl",18,"Ar",19,"K",20,"Ca",21,"Sc",22,"Ti",23,"V",24,"Cr",25,"Mn",26,"Fe",27,"Co",28,"Ni",29,"Cu",30,"Zn",31,"Ga",32,"Ge",33,"As",34,"Se",35,"Br",36,"Kr",37,"Rb",38,"Sr",39,"Y",40,"Zr",41,"Nb",42,"Mo",43,"Tc",44,"Ru",45,"Rh",46,"Pd",47,"Ag",48,"Cd",49,"In",50,"Sn",51,"Sb",52,"Te",53,"I",54,"Xe",55,"Cs",56,"Ba",57,"La",58,"Ce",59,"Pr",60,"Nd",61,"Pm",62,"Sm",63,"Eu",64,"Gd",65,"Tb",66,"Dy",67,"Ho",68,"Er",69,"Tm",70,"Yb",71,"Lu",72,"Hf",73,"Ta",74,"W",75,"Re",76,"Os",77,"Ir",78,"Pt",79,"Au",80,"Hg",81,"Tl",82,"Pb",83,"Bi",84,"Po",85,"At",86,"Rn",87,"Fr",88,"Ra",89,"Ac",90,"Th",91,"Pa",92,"U",93,"Np",94,"Pu",95,"Am",96,"Cm",97,"Bk",98,"Cf",99,"Es",100,"Fm",101,"Md",102,"No",103,"Lr",104,"Rf",105,"Db",106,"Sg",107,"Bh",108,"Hs",109,"Mt",110,"Ds",111,"Rg",112,"Cn",113,"Uut",114,"Uuq",115,"Uup",116,"Uuh",117,"Uus",118,"Uuo"],Name:"BlueObeliskElements"}];const wh=Object.create(null);xie.filter(t=>t.RGBPoints).filter(t=>t.ColorSpace!=="CIELAB").forEach(t=>{wh[t.Name]=t});const xh=Object.keys(wh);xh.sort();function Cie(t){return wh[t]}function Sie(t){!t.RGBPoints||t.ColorSpace==="CIELAB"||(wh[t.Name]||(xh.push(t.Name),xh.sort()),wh[t.Name]=t)}function Tie(t){const e=xh.indexOf(t);e>-1&&xh.splice(e,1),delete wh[t]}var u1={addPreset:Sie,removePresetByName:Tie,getPresetByName:Cie,rgbPresetNames:xh};function TN(t,e,r){return Math.abs(t-e)<=r}function _ie(t,e,r=1e-5){if(t.length!==e.length)return!1;for(let n=0;n0&&typeof t[0]=="number"}function Zt(t,e,r=1e-5){return typeof t!=typeof e||t===null||e===null?!1:OD(t)&&OD(e)?TN(t,e,r):MD(t)&&MD(e)?_ie(t,e,r):!1}const _N=t=>typeof t=="number"?-t:t!=null&&t.map?t.map(_N):!t,wS=t=>typeof t=="number"?Math.abs(t):t!=null&&t.map?t.map(wS):t,EN=(t,e,r=void 0)=>Zt(t,_N(e),r),Eie=(t,e,r=void 0)=>Zt(wS(t),wS(e),r);function Ar(t){return Array.isArray(t)?Ar(t[0]):isFinite(t)&&!isNaN(t)}const k4=new Map;function bie(t){t.name=t.name||t.Name,k4.set(t.name,t)}function f1(t){return k4.get(t)}function bN(){return Array.from(k4.keys())}function V4(t,e){const r=u1.rgbPresetNames.map(s=>u1.getPresetByName(s)),n=bN().map(s=>f1(s)),o=r.concat(n).find(s=>{const{RGBPoints:c}=s;if(c.length!==t.length)return!1;for(let l=0;l0)return o}return null}function B4(t){const e=t.getProperty().getScalarOpacity(0);if(!e)return 1;const r=e.getDataPointer();if(!r||r.length===0)return 1;let n=0;for(let i=1;in&&(n=r[i]);return n}const Iie=Object.freeze(Object.defineProperty({__proto__:null,findMatchingColormap:V4,getColormap:f1,getColormapNames:bN,getMaxOpacity:B4,getThresholdValue:U4,registerColormap:bie,setColorMapTransferFunctionForVolumeActor:Die,updateOpacity:DN,updateThreshold:IN},Symbol.toStringTag,{value:"Module"}));function wp(t){if(!t)return;const e=t.getSize();for(let r=0;re-r/4*Math.log((1-t)/t);function im(t,e){const r=Math.abs(e-t)+1,n=(t+e+1)/2;return{windowWidth:r,windowCenter:n}}function Xu(t,e,r=wo.LINEAR){if(r===wo.LINEAR)return{lower:e-.5-(t-1)/2,upper:e-.5+(t-1)/2};if(r===wo.LINEAR_EXACT)return{lower:e-t/2,upper:e+t/2};if(r===wo.SAMPLED_SIGMOID){const n=xS(.01,e,t),i=xS(.99,e,t);return{lower:n,upper:i}}else throw new Error("Invalid VOI LUT function")}const Oie=Object.freeze(Object.defineProperty({__proto__:null,toLowHighRange:Xu,toWindowLevel:im},Symbol.toStringTag,{value:"Module"}));function G4(t,e=1024){const{windowWidth:r,windowCenter:n}=im(t.lower,t.upper),o=Array.from({length:e},(s,c)=>(c+1)/(e+2)).flatMap(s=>[xS(s,n,r),s,s,s,.5,0]),a=Ql.newInstance();return a.buildFunctionFromArray(Bt.newInstance({values:o,numberOfComponents:6})),a}function zr(t,e){return t.worldToIndex(e).map(Math.round)}function I2(t,e){return t.worldToIndex(e)}function Ny(t){const e=t.getSize(),r=[];for(let n=0;n{t.addRGBPoint(...r)}))}const Mie=Object.freeze(Object.defineProperty({__proto__:null,getTransferFunctionNodes:Ny,setTransferFunctionNodes:mw},Symbol.toStringTag,{value:"Module"})),{InterpolationType:Jg,OpacityMode:Pie}=yA,{vtkErrorMacro:Xx}=J,O2=4;function Rie(t,e){e.classHierarchy.push("vtkVolumeProperty"),t.getMTime=()=>{let i=e.mtime,o;for(let a=0;ao?i:o):e.componentData[a].colorChannels===3&&e.componentData[a].rGBTransferFunction&&(o=e.componentData[a].rGBTransferFunction.getMTime(),i=i>o?i:o),e.componentData[a].scalarOpacity&&(o=e.componentData[a].scalarOpacity.getMTime(),i=i>o?i:o),e.componentData[a].gradientOpacity&&(e.componentData[a].disableGradientOpacity||(o=e.componentData[a].gradientOpacity.getMTime(),i=i>o?i:o));return i},t.getColorChannels=i=>i<0||i>3?(Xx("Bad index - must be between 0 and 3"),0):e.componentData[i].colorChannels,t.setGrayTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,a=!1;return e.componentData[i].grayTransferFunction!==o&&(e.componentData[i].grayTransferFunction=o,a=!0),e.componentData[i].colorChannels!==1&&(e.componentData[i].colorChannels=1,a=!0),a&&t.modified(),a},t.getGrayTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].grayTransferFunction===null&&(e.componentData[i].grayTransferFunction=Ed.newInstance(),e.componentData[i].grayTransferFunction.addPoint(0,0),e.componentData[i].grayTransferFunction.addPoint(1024,1),e.componentData[i].colorChannels!==1&&(e.componentData[i].colorChannels=1),t.modified()),e.componentData[i].grayTransferFunction},t.setRGBTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,a=!1;return e.componentData[i].rGBTransferFunction!==o&&(e.componentData[i].rGBTransferFunction=o,a=!0),e.componentData[i].colorChannels!==3&&(e.componentData[i].colorChannels=3,a=!0),a&&t.modified(),a},t.getRGBTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].rGBTransferFunction===null&&(e.componentData[i].rGBTransferFunction=Ql.newInstance(),e.componentData[i].rGBTransferFunction.addRGBPoint(0,0,0,0),e.componentData[i].rGBTransferFunction.addRGBPoint(1024,1,1,1),e.componentData[i].colorChannels!==3&&(e.componentData[i].colorChannels=3),t.modified()),e.componentData[i].rGBTransferFunction},t.setScalarOpacity=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return e.componentData[i].scalarOpacity!==o?(e.componentData[i].scalarOpacity=o,t.modified(),!0):!1},t.getScalarOpacity=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].scalarOpacity===null&&(e.componentData[i].scalarOpacity=Ed.newInstance(),e.componentData[i].scalarOpacity.addPoint(0,1),e.componentData[i].scalarOpacity.addPoint(1024,1),t.modified()),e.componentData[i].scalarOpacity},t.setComponentWeight=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;if(i<0||i>=O2)return Xx("Invalid index"),!1;const a=Math.min(1,Math.max(0,o));return e.componentData[i].componentWeight!==a?(e.componentData[i].componentWeight=a,t.modified(),!0):!1},t.getComponentWeight=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return i<0||i>=O2?(Xx("Invalid index"),0):e.componentData[i].componentWeight},t.setInterpolationTypeToNearest=()=>t.setInterpolationType(Jg.NEAREST),t.setInterpolationTypeToLinear=()=>t.setInterpolationType(Jg.LINEAR),t.setInterpolationTypeToFastLinear=()=>t.setInterpolationType(Jg.FAST_LINEAR),t.getInterpolationTypeAsString=()=>J.enumToString(Jg,e.interpolationType),["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode","forceNearestInterpolation"].forEach(i=>{const o=J.capitalize(i);t[`set${o}`]=(a,s)=>e.componentData[a][`${i}`]!==s?(e.componentData[a][`${i}`]=s,t.modified(),!0):!1}),["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode","forceNearestInterpolation"].forEach(i=>{const o=J.capitalize(i);t[`get${o}`]=a=>e.componentData[a][`${i}`]})}const Lie={colorMixPreset:null,independentComponents:!0,interpolationType:Jg.FAST_LINEAR,shade:!1,ambient:.1,diffuse:.7,specular:.2,specularPower:10,useLabelOutline:!1,labelOutlineThickness:[1],labelOutlineOpacity:1};function Aie(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,Lie,r),J.obj(t,e),!e.componentData){e.componentData=[];for(let n=0;nt,t.makeProperty=kie.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const r=e.mapper.getBounds();if(!r||r.length!==6)return r;if(r[0]>r[1])return e.mapperBounds=r.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),r;const n=i=>i[0].map((o,a)=>i.map(s=>s[a]));if(!e.mapperBounds||!n([r,e.mapperBounds]).reduce((i,o)=>i&&o[0]===o[1],!0)||t.getMTime()>e.boundsMTime.getMTime()){Vie("Recomputing bounds..."),e.mapperBounds=r.map(a=>a);const i=[];ir.getCorners(r,i),t.computeMatrix();const o=new Float64Array(16);En(o,e.matrix),i.forEach(a=>Yt(a,a,o)),e.bounds[0]=e.bounds[2]=e.bounds[4]=Number.MAX_VALUE,e.bounds[1]=e.bounds[3]=e.bounds[5]=-Number.MAX_VALUE,e.bounds=e.bounds.map((a,s)=>s%2===0?i.reduce((c,l)=>c>l[s/2]?l[s/2]:c,a):i.reduce((c,l)=>c{let r=e.mtime;if(e.property!==null){const n=e.property.getMTime();r=n>r?n:r}return r},t.getRedrawMTime=()=>{let r=e.mtime;if(e.mapper!==null){let n=e.mapper.getMTime();r=n>r?n:r,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),n=e.mapper.getInput().getMTime(),r=n>r?n:r)}return r}}const Uie={mapper:null,property:null,bounds:[1,-1,1,-1,1,-1]};function ON(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Uie,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["mapper"]),J.getArray(t,e,["bounds"],6),Fie(t,e)}const Bie=J.newInstance(ON,"vtkVolume");var Gie={newInstance:Bie,extend:ON};const{vtkErrorMacro:Wie}=J;class zie{constructor(){this.segmentMapping={},this.segments=[null],this.faces=[]}addSegment(e){const r=e[0],n=e[e.length-1];if(r===n||e.length<2)return;const i=this.segmentMapping[r],o=this.segmentMapping[n];if(i!==void 0&&o!==void 0)if(Math.abs(i)===Math.abs(o)){const a=i0)for(let c=1;c0){const a=this.segments[i];for(let s=1;s0){const a=this.segments[o];for(let s=1;s{const i=r[0];if(!i){Wie("Invalid or missing input");return}const o=Br.newInstance();o.shallowCopy(i);const a=new zie,s=i.getLines().getData();let c=0;for(;c2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,jie,r),J.obj(t,e),J.algo(t,e,1,1),$ie(t,e)}const Hie=J.newInstance(MN,"vtkClosedPolyLineToSurfaceFilter");var Kie={newInstance:Hie,extend:MN};const{vtkErrorMacro:PD}=_o;function qie(t){const e=t.getPolys().getData(),r=t.getStrips().getData(),n={cellSize:0,cell:[],done:!1,polyIdx:0,stripIdx:0,remainingStripLength:0,next(){if(n.polyIdx{let i=r.getMTime();return e.cutFunction&&(i=Math.max(i,e.cutFunction.getMTime())),i};function n(i,o){const a=i.getPoints(),s=a.getData(),c=a.getNumberOfPoints(),l=[],f=[],u=[];(!e.cutScalars||e.cutScalars.length0;let C=!0;for(let _=1;_0!==x){C=!1;break}if(C)continue;const S=[];for(let _=0;_0;if(y[E]>0===b)continue;let I=_,P=E,O=y[P]-y[I];O<=0&&(I=E,P=_,O*=-1);let A=0;O!==0&&(A=(e.cutValue-y[I])/O);const V=w.cell[I],G=w.cell[P];p[0]=s[V*3],p[1]=s[V*3+1],p[2]=s[V*3+2],v[0]=s[G*3],v[1]=s[G*3+1],v[2]=s[G*3+2];const R=[p[0]+A*(v[0]-p[0]),p[1]+A*(v[1]-p[1]),p[2]+A*(v[2]-p[2])];S.push({pointEdge1:V,pointEdge2:G,intersectedPoint:R,newPointID:-1})}for(let _=0;_2&&(u.push(T),S.forEach(_=>{u.push(_.newPointID)}))}o.getPoints().setData(Y5(a.getDataType(),l),3),f.length!==0&&o.getLines().setData(Uint16Array.from(f)),u.length!==0&&o.getPolys().setData(Uint16Array.from(u))}t.requestData=(i,o)=>{const a=i[0];if(!a){PD("Invalid or missing input");return}if(!e.cutFunction){PD("Missing cut function");return}const s=Br.newInstance();n(a,s),o[0]=s}}const Yie={cutFunction:null,cutScalars:null,cutValue:0};function PN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Yie,r),yr(t,e),O_(t,e,1,1),ci(t,e,["cutFunction","cutValue"]),Xie(t,e)}const Jie=$n(PN,"vtkCutter");var Zie={newInstance:Jie,extend:PN};const Qie=[2,0,1,2,2,3,2,4,5,2,6,7,2,0,2,2,1,3,2,4,6,2,5,7,2,0,4,2,1,5,2,2,6,2,3,7],eoe=[4,0,1,3,2,4,4,6,7,5,4,8,10,11,9,4,12,13,15,14,4,16,18,19,17,4,20,21,23,22];function toe(t,e){e.classHierarchy.push("vtkCubeSource");function r(n,i){if(e.deleted)return;const o=Br.newInstance();i[0]=o;const a=24,s=J.newTypedArray(e.pointType,a*3);o.getPoints().setData(s,3);const c=J.newTypedArray(e.pointType,a*3),l=Bt.newInstance({name:"Normals",values:c,numberOfComponents:3});o.getPointData().setNormals(l);let f=2;e.generate3DTextureCoordinates===!0&&(f=3);const u=J.newTypedArray(e.pointType,a*f),d=Bt.newInstance({name:"TextureCoordinates",values:u,numberOfComponents:f});o.getPointData().setTCoords(d);const h=[0,0,0],g=[0,0,0],p=[0,0];let v=0;h[0]=-e.xLength/2,g[0]=-1,g[1]=0,g[2]=0;for(let y=0;y<2;y++){h[1]=-e.yLength/2;for(let m=0;m<2;m++){p[1]=h[1]+.5,h[2]=-e.zLength/2;for(let w=0;w<2;w++)p[0]=(h[2]+.5)*(1-2*y),s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*y-1,u[v*f+1]=2*m-1,u[v*f+2]=2*w-1),v++,h[2]+=e.zLength;h[1]+=e.yLength}h[0]+=e.xLength,g[0]+=2}h[1]=-e.yLength/2,g[1]=-1,g[0]=0,g[2]=0;for(let y=0;y<2;y++){h[0]=-e.xLength/2;for(let m=0;m<2;m++){p[0]=(h[0]+.5)*(2*y-1),h[2]=-e.zLength/2;for(let w=0;w<2;w++)p[1]=(h[2]+.5)*-1,s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*m-1,u[v*f+1]=2*y-1,u[v*f+2]=2*w-1),v++,h[2]+=e.zLength;h[0]+=e.xLength}h[1]+=e.yLength,g[1]+=2}h[2]=-e.zLength/2,g[2]=-1,g[0]=0,g[1]=0;for(let y=0;y<2;y++){h[1]=-e.yLength/2;for(let m=0;m<2;m++){p[1]=h[1]+.5,h[0]=-e.xLength/2;for(let w=0;w<2;w++)p[0]=(h[0]+.5)*(2*y-1),s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*w-1,u[v*f+1]=2*m-1,u[v*f+2]=2*y-1),v++,h[0]+=e.xLength;h[1]+=e.yLength}h[2]+=e.zLength,g[2]+=2}if(e.rotations&&Yi.buildFromDegree().rotateX(e.rotations[0]).rotateY(e.rotations[1]).rotateZ(e.rotations[2]).apply(s).apply(c),e.center&&Yi.buildFromRadian().translate(...e.center).apply(s),e.matrix){Yi.buildFromRadian().setMatrix(e.matrix).apply(s);const y=[e.matrix[0],e.matrix[1],e.matrix[2],0,e.matrix[4],e.matrix[5],e.matrix[6],0,e.matrix[8],e.matrix[9],e.matrix[10],0,0,0,0,1];Yi.buildFromRadian().setMatrix(y).apply(c)}e.generateFaces?o.getPolys().deepCopy(e._polys):o.getPolys().initialize(),e.generateLines?(o.getLines().deepCopy(e._lineCells),o.getPointData().setNormals(null)):o.getLines().initialize(),o.modified()}t.setBounds=function(){let n=[];if(Array.isArray(arguments.length<=0?void 0:arguments[0]))n=arguments.length<=0?void 0:arguments[0];else for(let i=0;i2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,noe,r),J.obj(t,e),J.setGet(t,e,["xLength","yLength","zLength","generate3DTextureCoordinates","generateFaces","generateLines"]),J.setGetArray(t,e,["center","rotations"],3),J.setGetArray(t,e,["matrix"],16),e._polys=_d.newInstance({values:Uint16Array.from(eoe)}),e._lineCells=_d.newInstance({values:Uint16Array.from(Qie)}),J.moveToProtected(t,e,["polys","lineCells"]),J.algo(t,e,0,1),toe(t,e)}const roe=J.newInstance(RN,"vtkCubeSource");var LN={newInstance:roe,extend:RN};const{vtkErrorMacro:RD}=J;function ioe(t,e){e.classHierarchy.push("vtkImageDataOutlineFilter");const r={...t};t.requestData=(n,i)=>{const o=n[0];if(!o||!o.isA("vtkImageData")){RD("Invalid or missing input");return}const a=o.getSpatialExtent();if(!a){RD("Unable to fetch spatial extents of input image.");return}e._cubeSource.setBounds(a),e._cubeSource.setMatrix(o.getIndexToWorld()),i[0]=e._cubeSource.getOutputData()},t.getMTime=()=>Math.max(r.getMTime(),e._cubeSource.getMTime()),t.setGenerateFaces=e._cubeSource.setGenerateFaces,t.setGenerateLines=e._cubeSource.setGenerateLines,t.getGenerateFaces=e._cubeSource.getGenerateFaces,t.getGenerateLines=e._cubeSource.getGenerateLines}const ooe={};function AN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ooe,r),J.obj(t,e),J.algo(t,e,1,1),e._cubeSource=LN.newInstance(),J.moveToProtected(t,e,["cubeSource","tmpOut"]),ioe(t,e)}const aoe=J.newInstance(AN,"vtkImageDataOutlineFilter");var soe={newInstance:aoe,extend:AN};let W4;function coe(t,e){e.classHierarchy.push("vtkAbstractTransform","vtkHomogeneousTransform","vtkTransform"),t.transformPoint=(r,n)=>(Yt(n,r,e.matrix),n),t.transformPoints=(r,n)=>{const i=new Float64Array(3),o=new Float64Array(3);for(let a=0;a{t.setPreMultiplyFlag(!0)},t.postMultiply=()=>{t.setPreMultiplyFlag(!1)},t.transformMatrix=(r,n)=>(e.preMultiplyFlag?An(n,e.matrix,r):An(n,r,e.matrix),n),t.transformMatrices=(r,n)=>{const i=new Float64Array(16),o=new Float64Array(16),a=e.preMultiplyFlag?()=>An(o,e.matrix,i):()=>An(o,i,e.matrix);for(let s=0;sW4({matrix:nn.invertMatrix(Array.from(e.matrix),[],4),preMultiplyFlag:e.preMultiplyFlag})}const loe={preMultiplyFlag:!1,matrix:[...B_]};function NN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,loe,r),J.obj(t,e),J.setGet(t,e,["preMultiplyFlag"]),J.setGetArray(t,e,["matrix"],16),coe(t,e)}W4=J.newInstance(NN,"vtkTransform");var uoe={newInstance:W4,extend:NN},foe=`//VTK::System::Dec + ${t.getNumberOfComponents()}`),bne;const r=t.getRange(0);e.bounds[0]=r[0],e.bounds[1]=r[1];const n=t.getRange(1);return e.bounds[2]=n[0],e.bounds[3]=n[1],e.bounds[4]=0,e.bounds[5]=0,e.bounds},t.computeBounds=t.getBounds,t.setNumberOfComponents(e.numberOfComponents<2?3:e.numberOfComponents)}const Ine={empty:!0,numberOfComponents:3,dataType:xn.FLOAT,bounds:[1,-1,1,-1,1,-1]};function KA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ine,r),Bt.extend(t,e,r),Dne(t,e)}const One=J.newInstance(KA,"vtkPoints");var l1={newInstance:One,extend:KA};function qA(t){let e=0;return t.filter((r,n)=>n===e?(e+=r+1,!0):!1)}function XA(t){let e=0;for(let r=0;r(e.numberOfCells!==void 0&&!n||(e.cellSizes?e.numberOfCells=e.cellSizes.length:e.numberOfCells=XA(t.getData())),e.numberOfCells),t.getCellSizes=n=>(e.cellSizes!==void 0&&!n||(e.cellSizes=qA(t.getData())),e.cellSizes),t.resize=n=>{const i=t.getNumberOfTuples();r.resize(n);const o=t.getNumberOfTuples();o{r.setData(n,1),e.numberOfCells=void 0,e.cellSizes=void 0},t.getCell=n=>{let i=n;const o=e.values[i++];return e.values.subarray(i,i+o)},t.insertNextCell=n=>{const i=t.getNumberOfCells();return t.insertNextTuples([n.length,...n]),++e.numberOfCells,e.cellSizes!=null&&e.cellSizes.push(n.length),i}}function Rne(t){return{empty:!0,numberOfComponents:1,dataType:xn.UNSIGNED_INT,...t}}function YA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Bt.extend(t,e,Rne(r)),Pne(t,e)}const Lne=J.newInstance(YA,"vtkCellArray");var _d={newInstance:Lne,extend:YA,...Mne};function Ane(t,e){e.classHierarchy.push("vtkCell"),t.initialize=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(n){e.pointsIds=n;let i=e.points.getData();i.length!==3*e.pointsIds.length&&(i=J.newTypedArray(r.getDataType(),3*e.pointsIds.length));const o=r.getData();e.pointsIds.forEach((a,s)=>{let c=3*a,l=3*s;i[l]=o[c],i[++l]=o[++c],i[++l]=o[++c]}),e.points.setData(i)}else{e.points=r,e.pointsIds=new Array(r.getNumberOfPoints());for(let i=r.getNumberOfPoints()-1;i>=0;--i)e.pointsIds[i]=i}},t.getBounds=()=>{const r=e.points.getNumberOfPoints(),n=[];if(r){e.points.getPoint(0,n),e.bounds[0]=n[0],e.bounds[1]=n[0],e.bounds[2]=n[1],e.bounds[3]=n[1],e.bounds[4]=n[2],e.bounds[5]=n[2];for(let i=1;ie.bounds[1]?n[0]:e.bounds[1],e.bounds[2]=n[1]e.bounds[3]?n[1]:e.bounds[3],e.bounds[4]=n[2]e.bounds[5]?n[2]:e.bounds[5]}else Bh(e.bounds);return e.bounds},t.getLength2=()=>{t.getBounds();let r=0,n=0;for(let i=0;i<3;i++)n=e.bounds[2*i+1]-e.bounds[2*i],r+=n*n;return r},t.getParametricDistance=r=>{let n,i=0;for(let o=0;o<3;o++)r[o]<0?n=-r[o]:r[o]>1?n=r[o]-1:n=0,n>i&&(i=n);return i},t.getNumberOfPoints=()=>e.points.getNumberOfPoints(),t.deepCopy=r=>{r.initialize(e.points,e.pointsIds)},t.getCellDimension=()=>{},t.intersectWithLine=(r,n,i,o,a,s,c)=>{},t.evaluatePosition=(r,n,i,o,a,s)=>{J.vtkErrorMacro("vtkCell.evaluatePosition is not implemented.")}}const Nne={bounds:[-1,-1,-1,-1,-1,-1],pointsIds:[]};function JA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Nne,r),J.obj(t,e),e.points||(e.points=l1.newInstance()),J.get(t,e,["points","pointsIds"]),Ane(t,e)}const kne=J.newInstance(JA,"vtkCell");var Ly={newInstance:kne,extend:JA};function Vne(t,e){let r=e;for(e>=t.array.length&&(r+=t.array.length);r>t.array.length;)t.array.push({ncells:0,cells:null});t.array.length=r}function Fne(t,e){e.classHierarchy.push("vtkCellLinks"),t.buildLinks=r=>{const n=r.getPoints().getNumberOfPoints(),i=r.getNumberOfCells(),o=new Uint32Array(n);if(r.isA("vtkPolyData")){for(let a=0;a{t.incrementLinkCount(c)})}t.allocateLinks(n),e.maxId=n-1;for(let a=0;a{t.insertCellReference(c,o[c]++,a)})}}else{for(let a=0;a{t.incrementLinkCount(c)});t.allocateLinks(n),e.maxId=n-1;for(let a=0;a{t.insertCellReference(c,o[c]++,a)})}},t.allocate=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e3;e.array=Array(r).fill().map(()=>({ncells:0,cells:null})),e.extend=n,e.maxId=-1},t.initialize=()=>{e.array=null},t.getLink=r=>e.array[r],t.getNcells=r=>e.array[r].ncells,t.getCells=r=>e.array[r].cells,t.insertNextPoint=r=>{e.array.push({ncells:r,cells:Array(r)}),++e.maxId},t.insertNextCellReference=(r,n)=>{e.array[r].cells[e.array[r].ncells++]=n},t.deletePoint=r=>{e.array[r].ncells=0,e.array[r].cells=null},t.removeCellReference=(r,n)=>{e.array[n].cells=e.array[n].cells.filter(i=>i!==r),e.array[n].ncells=e.array[n].cells.length},t.addCellReference=(r,n)=>{e.array[n].cells[e.array[n].ncells++]=r},t.resizeCellList=(r,n)=>{e.array[r].cells.length=n},t.squeeze=()=>{Vne(e,e.maxId+1)},t.reset=()=>{e.maxId=-1},t.deepCopy=r=>{e.array=[...r.array],e.extend=r.extend,e.maxId=r.maxId},t.incrementLinkCount=r=>{++e.array[r].ncells},t.allocateLinks=r=>{for(let n=0;n{e.array[r].cells[n]=i}}const Une={array:null,maxId:0,extend:0};function ZA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Une,r),J.obj(t,e),Fne(t,e)}const Bne=J.newInstance(ZA,"vtkCellLinks");var Gne={newInstance:Bne,extend:ZA};const br={VTK_EMPTY_CELL:0,VTK_VERTEX:1,VTK_POLY_VERTEX:2,VTK_LINE:3,VTK_POLY_LINE:4,VTK_TRIANGLE:5,VTK_TRIANGLE_STRIP:6,VTK_POLYGON:7,VTK_QUAD:9,VTK_QUADRATIC_EDGE:21,VTK_CONVEX_POINT_SET:41,VTK_POLYHEDRON:42},yS=["vtkEmptyCell","vtkVertex","vtkPolyVertex","vtkLine","vtkPolyLine","vtkTriangle","vtkTriangleStrip","vtkPolygon","vtkPixel","vtkQuad","vtkTetra","vtkVoxel","vtkHexahedron","vtkWedge","vtkPyramid","vtkPentagonalPrism","vtkHexagonalPrism","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkQuadraticEdge","vtkQuadraticTriangle","vtkQuadraticQuad","vtkQuadraticTetra","vtkQuadraticHexahedron","vtkQuadraticWedge","vtkQuadraticPyramid","vtkBiQuadraticQuad","vtkTriQuadraticHexahedron","vtkQuadraticLinearQuad","vtkQuadraticLinearWedge","vtkBiQuadraticQuadraticWedge","vtkBiQuadraticQuadraticHexahedron","vtkBiQuadraticTriangle","vtkCubicLine","vtkQuadraticPolygon","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkConvexPointSet","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","UnknownClass","vtkParametricCurve","vtkParametricSurface","vtkParametricTriSurface","vtkParametricQuadSurface","vtkParametricTetraRegion","vtkParametricHexRegion","UnknownClass","UnknownClass","UnknownClass","vtkHigherOrderEdge","vtkHigherOrderTriangle","vtkHigherOrderQuad","vtkHigherOrderPolygon","vtkHigherOrderTetrahedron","vtkHigherOrderWedge","vtkHigherOrderPyramid","vtkHigherOrderHexahedron"];function Wne(t){return t0&&arguments[0]!==void 0?arguments[0]:512,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e3;e.size=r>0?r:1,e.extend=n>0?n:1,e.maxId=-1,e.typeArray=new Uint8Array(r),e.locationArray=new Uint32Array(r)},t.insertCell=(r,n,i)=>{e.typeArray[r]=n,e.locationArray[r]=i,r>e.maxId&&(e.maxId=r)},t.insertNextCell=(r,n)=>(t.insertCell(++e.maxId,r,n),e.maxId),t.setCellTypes=(r,n,i)=>{e.size=r,e.typeArray=n,e.locationArray=i,e.maxId=r-1},t.getCellLocation=r=>e.locationArray[r],t.deleteCell=r=>{e.typeArray[r]=br.VTK_EMPTY_CELL},t.getNumberOfTypes=()=>e.maxId+1,t.isType=r=>{const n=t.getNumberOfTypes();for(let i=0;it.insertNextCell(r,-1),t.getCellType=r=>e.typeArray[r],t.reset=()=>{e.maxId=-1},t.deepCopy=r=>{t.allocate(r.getSize(),r.getExtend()),e.typeArray.set(r.getTypeArray()),e.locationArray.set(r.getLocationArray()),e.maxId=r.getMaxId()}}const qne={size:0,maxId:-1,extend:1e3};function QA(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,qne,r),J.obj(t,e),J.get(t,e,["size","maxId","extend"]),J.getArray(t,e,["typeArray","locationArray"]),Kne(t,e)}const Xne=J.newInstance(QA,"vtkCellTypes");var Yne={newInstance:Xne,extend:QA,...Hne};const Jne={NO_INTERSECTION:0,YES_INTERSECTION:1,ON_LINE:2};var eN={IntersectionState:Jne};const{IntersectionState:D2}=eN;function C0(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;const i={t:Number.MIN_VALUE,distance:0},o=[];let a;o[0]=r[0]-e[0],o[1]=r[1]-e[1],o[2]=r[2]-e[2];const s=o[0]*(t[0]-e[0])+o[1]*(t[1]-e[1])+o[2]*(t[2]-e[2]),c=_n(o,o);let l=1e-5*s;return c!==0&&(i.t=s/c),l<0&&(l=-l),-l1?a=r:(a=o,o[0]=e[0]+i.t*o[0],o[1]=e[1]+i.t*o[1],o[2]=e[2]+i.t*o[2]),n&&(n[0]=a[0],n[1]=a[1],n[2]=a[2]),i.distance=$c(a,t),i}function tN(t,e,r,n,i,o){const a=[],s=[],c=[];i[0]=0,o[0]=0,zl(e,t,a),zl(n,r,s),zl(r,t,c);const l=[_n(a,a),-_n(a,s),-_n(a,s),_n(s,s)],f=[];if(f[0]=_n(a,c),f[1]=-_n(s,c),cR(l,f,2)===0){let u=Number.MAX_VALUE;const d=[t,e,r,n],h=[r,r,t,t],g=[n,n,e,e];o[0],o[0],i[0],i[0],i[0],i[0],o[0],o[0];let p;for(let v=0;v<4;v++)p=C0(d[v],h[v],g[v]),p.distance=0&&i[0]<=1&&o[0]>=0&&o[0]<=1?D2.YES_INTERSECTION:D2.NO_INTERSECTION}const Zne={distanceToLine:C0,intersection:tN};function Qne(t,e){e.classHierarchy.push("vtkLine");function r(n){return n>=0&&n<=1}t.getCellDimension=()=>1,t.intersectWithLine=(n,i,o,a,s)=>{const c={intersect:0,t:Number.MAX_VALUE,subId:0,betweenPoints:null};s[1]=0,s[2]=0;const l=[],f=[],u=[];e.points.getPoint(0,f),e.points.getPoint(1,u);const d=[],h=[],g=tN(n,i,f,u,d,h);if(c.t=d[0],c.betweenPoints=r(c.t),s[0]=h[0],g===D2.YES_INTERSECTION){for(let p=0;p<3;p++)a[p]=f[p]+s[0]*(u[p]-f[p]),l[p]=n[p]+c.t*(i[p]-n[p]);if($c(a,l)<=o*o)return c.intersect=1,c}else{let p;if(c.t<0)return p=C0(n,f,u,a),p.distance<=o*o&&(c.t=0,c.intersect=1,c.betweenPoints=!0),c;if(c.t>1)return p=C0(i,f,u,a),p.distance<=o*o&&(c.t=1,c.intersect=1,c.betweenPoints=!0),c;if(s[0]<0)return s[0]=0,p=C0(f,n,i,a),c.t=p.t,p.distance<=o*o&&(c.intersect=1),c;if(s[0]>1)return s[0]=1,p=C0(u,n,i,a),c.t=p.t,p.distance<=o*o&&(c.intersect=1),c}return c},t.evaluateLocation=(n,i,o)=>{const a=[],s=[];e.points.getPoint(0,a),e.points.getPoint(1,s);for(let c=0;c<3;c++)i[c]=a[c]+n[0]*(s[c]-a[c]);o[0]=1-n[0],o[1]=n[0]},t.evaluateOrientation=(n,i,o)=>e.orientations?(S2(i,e.orientations[0],e.orientations[1],n[0]),o[0]=1-n[0],o[1]=n[0],!0):!1}const ere={orientations:null};function nN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ere,r),Ly.extend(t,e,r),J.setGet(t,e,["orientations"]),Qne(t,e)}const tre=J.newInstance(nN,"vtkLine");var ls={newInstance:tre,extend:nN,...Zne,...eN};function nre(t,e){e.classHierarchy.push("vtkPointSet"),e.points?e.points=ic(e.points):e.points=l1.newInstance(),t.getNumberOfPoints=()=>e.points.getNumberOfPoints(),t.getBounds=()=>e.points.getBounds(),t.computeBounds=()=>{t.getBounds()};const r=t.shallowCopy;t.shallowCopy=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;r(n,i),e.points=l1.newInstance(),e.points.shallowCopy(n.getPoints())}}const rre={};function rN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,rre,r),Gh.extend(t,e,r),J.setGet(t,e,["points"]),nre(t,e)}const ire=J.newInstance(rN,"vtkPointSet");var ore={newInstance:ire,extend:rN};function M4(t,e,r,n){const i=r[0]-e[0],o=r[1]-e[1],a=r[2]-e[2],s=t[0]-e[0],c=t[1]-e[1],l=t[2]-e[2];n[0]=o*l-a*c,n[1]=a*s-i*l,n[2]=i*c-o*s}function Ay(t,e,r,n){M4(t,e,r,n);const i=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);i!==0&&(n[0]/=i,n[1]/=i,n[2]/=i)}function are(t,e,r,n,i,o){let a=arguments.length>6&&arguments[6]!==void 0?arguments[6]:1e-6,s=!1;const c=[],l=[],f=[],u=[],d=[];Ay(t,e,r,u),Ay(n,i,o,d);const h=-_n(u,t),g=-_n(d,n),p=[_n(d,t)+g,_n(d,e)+g,_n(d,r)+g];if(p[0]*p[1]>a&&p[0]*p[2]>a)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};const v=[_n(u,n)+h,_n(u,i)+h,_n(u,o)+h];if(v[0]*v[1]>a&&v[0]*v[2]>a)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(Math.abs(u[0]-d[0])<1e-9&&Math.abs(u[1]-d[1])<1e-9&&Math.abs(u[2]-d[2])<1e-9&&Math.abs(h-g)<1e-9)return s=!0,{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};const y=[t,e,r],m=[n,i,o],w=_n(u,d),x=(h-g*w)/(w*w-1),C=(g-h*w)/(w*w-1),S=[x*u[0]+C*d[0],x*u[1]+C*d[1],x*u[2]+C*d[2]],T=sl(u,d,[]);Td(T);let _=0,E=0;const b=[],D=[];let I=50,P=50;for(let V=0;V<3;V++){const G=V,R=(V+1)%3,N=Vo.intersectWithLine(y[G],y[R],n,d);N.intersection&&N.t>0-a&&N.t<1+a&&(N.t<1+a&&N.t>1-a&&(I=_),b[_++]=_n(N.x,T)-_n(S,T));const F=Vo.intersectWithLine(m[G],m[R],t,u);F.intersection&&F.t>0-a&&F.t<1+a&&(F.t<1+a&&F.t>1-a&&(P=E),D[E++]=_n(F.x,T)-_n(S,T))}if(_>2){_--;const V=b[2];b[2]=b[I],b[I]=V}if(E>2){E--;const V=D[2];D[2]=D[P],D[P]=V}if(_!==2||E!==2)return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(Number.isNaN(b[0])||Number.isNaN(b[1])||Number.isNaN(D[0])||Number.isNaN(D[1]))return{intersect:!1,coplanar:s,pt1:c,pt2:l,surfaceId:f};if(b[0]>b[1]){const V=b[1];b[1]=b[0],b[0]=V}if(D[0]>D[1]){const V=D[1];D[1]=D[0],D[0]=V}let O,A;return b[1]2,t.intersectWithLine=(r,n,i,o,a)=>{const s={subId:0,t:Number.MAX_VALUE,intersect:0,betweenPoints:!1};a[2]=0;const c=[],l=i*i,f=[],u=[],d=[];e.points.getPoint(0,f),e.points.getPoint(1,u),e.points.getPoint(2,d);const h=[],g=[];if(Ay(f,u,d,h),h[0]!==0||h[1]!==0||h[2]!==0){const w=Vo.intersectWithLine(r,n,f,h);if(s.betweenPoints=w.betweenPoints,s.t=w.t,o[0]=w.x[0],o[1]=w.x[1],o[2]=w.x[2],!w.intersection)return a[0]=0,a[1]=0,s.intersect=0,s;const x=t.evaluatePosition(o,c,a,g);if(x.evaluation>=0)return x.dist2<=l?(s.intersect=1,s):(s.intersect=x.evaluation,s)}const p=$c(f,u),v=$c(u,d),y=$c(d,f);e.line||(e.line=ls.newInstance()),p>v&&p>y?(e.line.getPoints().setPoint(0,f),e.line.getPoints().setPoint(1,u)):v>y&&v>p?(e.line.getPoints().setPoint(0,u),e.line.getPoints().setPoint(1,d)):(e.line.getPoints().setPoint(0,d),e.line.getPoints().setPoint(1,f));const m=e.line.intersectWithLine(r,n,i,o,a);if(s.betweenPoints=m.betweenPoints,s.t=m.t,m.intersect){const w=[],x=[],C=[];for(let S=0;S<3;S++)w[S]=f[S]-d[S],x[S]=u[S]-d[S],C[S]=o[S]-d[S];return a[0]=_n(C,w)/y,a[1]=_n(C,x)/v,s.intersect=1,s}return a[0]=0,a[1]=0,s.intersect=0,s},t.evaluatePosition=(r,n,i,o)=>{const a={subId:0,dist2:0,evaluation:-1};let s,c;const l=[],f=[],u=[],d=[];let h;const g=[],p=[],v=[];let y=0,m=0;const w=[];let x,C,S,T=[];const _=[],E=[],b=[];a.subId=0,i[2]=0,e.points.getPoint(1,l),e.points.getPoint(2,f),e.points.getPoint(0,u),M4(l,f,u,d),Vo.generalizedProjectPoint(r,l,d,b);let D=0;for(s=0;s<3;s++)d[s]<0?h=-d[s]:h=d[s],h>D&&(D=h,m=s);for(c=0,s=0;s<3;s++)s!==m&&(w[c++]=s);for(s=0;s<2;s++)g[s]=b[w[s]]-u[w[s]],p[s]=l[w[s]]-u[w[s]],v[s]=f[w[s]]-u[w[s]];if(y=ei(p,v),y===0)return i[0]=0,i[1]=0,a.evaluation=-1,a;if(i[0]=ei(g,v)/y,i[1]=ei(p,g)/y,o[0]=1-(i[0]+i[1]),o[1]=i[0],o[2]=i[1],o[0]>=0&&o[0]<=1&&o[1]>=0&&o[1]<=1&&o[2]>=0&&o[2]<=1)n&&(a.dist2=$c(b,r),n[0]=b[0],n[1]=b[1],n[2]=b[2]),a.evaluation=1;else{let I;if(n){if(o[1]<0&&o[2]<0)for(x=$c(r,u),C=ls.distanceToLine(r,l,u,I,_),S=ls.distanceToLine(r,u,f,I,E),x{const o=[],a=[],s=[];e.points.getPoint(0,o),e.points.getPoint(1,a),e.points.getPoint(2,s);const c=1-r[0]-r[1];for(let l=0;l<3;l++)n[l]=o[l]*c+a[l]*r[0]+s[l]*r[1];i[0]=c,i[1]=r[0],i[2]=r[1]},t.getParametricDistance=r=>{let n,i=0;const o=[];o[0]=r[0],o[1]=r[1],o[2]=1-r[0]-r[1];for(let a=0;a<3;a++)o[a]<0?n=-o[a]:o[a]>1?n=o[a]-1:n=0,n>i&&(i=n);return i}}const lre={};function iN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,lre,r),Ly.extend(t,e,r),cre(t,e)}const ure=J.newInstance(iN,"vtkTriangle");var oN={newInstance:ure,extend:iN,...sre};const Hx=["verts","lines","polys","strips"],{vtkWarningMacro:SD}=J,fre={[br.VTK_LINE]:ls,[br.VTK_POLY_LINE]:ls,[br.VTK_TRIANGLE]:oN};function dre(t,e){e.classHierarchy.push("vtkPolyData");function r(i){return i.replace(/(?:^\w|[A-Z]|\b\w)/g,o=>o.toUpperCase()).replace(/\s+/g,"")}Hx.forEach(i=>{t[`getNumberOf${r(i)}`]=()=>e[i].getNumberOfCells(),e[i]?e[i]=ic(e[i]):e[i]=_d.newInstance()}),t.getNumberOfCells=()=>Hx.reduce((i,o)=>i+e[o].getNumberOfCells(),0);const n=t.shallowCopy;t.shallowCopy=function(i){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;n(i,o),Hx.forEach(a=>{e[a]=_d.newInstance(),e[a].shallowCopy(i.getReferenceByName(a))})},t.buildCells=()=>{const i=t.getNumberOfVerts(),o=t.getNumberOfLines(),a=t.getNumberOfPolys(),s=t.getNumberOfStrips(),c=i+o+a+s,l=new Uint8Array(c);let f=l;const u=new Uint32Array(c);let d=u;if(i){let h=0;e.verts.getCellSizes().forEach((g,p)=>{d[p]=h,f[p]=g>1?br.VTK_POLY_VERTEX:br.VTK_VERTEX,h+=g+1}),d=d.subarray(i),f=f.subarray(i)}if(o){let h=0;e.lines.getCellSizes().forEach((g,p)=>{d[p]=h,f[p]=g>2?br.VTK_POLY_LINE:br.VTK_LINE,g===1&&SD("Building VTK_LINE ",p," with only one point, but VTK_LINE needs at least two points. Check the input."),h+=g+1}),d=d.subarray(o),f=f.subarray(o)}if(a){let h=0;e.polys.getCellSizes().forEach((g,p)=>{switch(d[p]=h,g){case 3:f[p]=br.VTK_TRIANGLE;break;case 4:f[p]=br.VTK_QUAD;break;default:f[p]=br.VTK_POLYGON;break}g<3&&SD("Building VTK_TRIANGLE ",p," with less than three points, but VTK_TRIANGLE needs at least three points. Check the input."),h+=g+1}),d+=d.subarray(a),f+=f.subarray(a)}if(s){let h=0;f.fill(br.VTK_TRIANGLE_STRIP,0,s),e.strips.getCellSizes().forEach((g,p)=>{d[p]=h,h+=g+1})}e.cells=Yne.newInstance(),e.cells.setCellTypes(c,l,u)},t.buildLinks=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;e.cells===void 0&&t.buildCells(),e.links=Gne.newInstance(),i>0?e.links.allocate(i):e.links.allocate(t.getPoints().getNumberOfPoints()),e.links.buildLinks(t)},t.getCellType=i=>e.cells.getCellType(i),t.getCellPoints=i=>{const o=t.getCellType(i);let a=null;switch(o){case br.VTK_VERTEX:case br.VTK_POLY_VERTEX:a=e.verts;break;case br.VTK_LINE:case br.VTK_POLY_LINE:a=e.lines;break;case br.VTK_TRIANGLE:case br.VTK_QUAD:case br.VTK_POLYGON:a=e.polys;break;case br.VTK_TRIANGLE_STRIP:a=e.strips;break;default:return a=null,{type:0,cellPointIds:null}}const s=e.cells.getCellLocation(i),c=a.getCell(s);return{cellType:o,cellPointIds:c}},t.getPointCells=i=>e.links.getCells(i),t.getCellEdgeNeighbors=(i,o,a)=>{const s=e.links.getLink(o),c=e.links.getLink(a);return s.cells.filter(l=>l!==i&&c.cells.indexOf(l)!==-1)},t.getCell=function(i){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const a=t.getCellPoints(i),s=o||fre[a.cellType].newInstance();return s.initialize(t.getPoints(),a.cellPointIds),s}}const hre={};function aN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,hre,r),ore.extend(t,e,r),J.get(t,e,["cells","links"]),J.setGet(t,e,["verts","lines","polys","strips"]),dre(t,e)}const gre=J.newInstance(aN,"vtkPolyData");var Br={newInstance:gre,extend:aN};const pre=1e-6;function mre(t,e){e.classHierarchy.push("vtkProp3D"),t.addPosition=n=>{e.position=e.position.map((i,o)=>i+n[o]),t.modified()},t.getOrientationWXYZ=()=>{const n=af();oS(n,e.rotation);const i=new Float64Array(3),o=UY(i,n);return[py(o),i[0],i[1],i[2]]},t.getOrientationQuaternion=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return oS(n,e.rotation)},t.rotateX=n=>{n!==0&&(Z_(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateY=n=>{n!==0&&(Q_(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateZ=n=>{n!==0&&(e4(e.rotation,e.rotation,Zr(n)),t.modified())},t.rotateWXYZ=(n,i,o,a)=>{if(n===0||i===0&&o===0&&a===0)return;const s=Zr(n),c=af();tw(c,[i,o,a],s);const l=new Float64Array(16);wy(l,c),An(e.rotation,e.rotation,l),t.modified()},t.rotateQuaternion=n=>{if(Math.abs(n[3])>=1-pre)return;const i=wy(new Float64Array(16),n);An(e.rotation,e.rotation,i),t.modified()},t.setOrientation=(n,i,o)=>n===e.orientation[0]&&i===e.orientation[1]&&o===e.orientation[2]?!1:(e.orientation=[n,i,o],Wt(e.rotation),t.rotateZ(o),t.rotateX(n),t.rotateY(i),t.modified(),!0),t.setUserMatrix=n=>J1(e.userMatrix,n)?!1:(kr(e.userMatrix,n),t.modified(),!0),t.getMatrix=()=>(t.computeMatrix(),e.matrix),t.computeMatrix=()=>{if(t.getMTime()>e.matrixMTime.getMTime()){Wt(e.matrix),e.userMatrix&&An(e.matrix,e.matrix,e.userMatrix),dr(e.matrix,e.matrix,e.origin),dr(e.matrix,e.matrix,e.position),An(e.matrix,e.matrix,e.rotation),cl(e.matrix,e.matrix,e.scale),dr(e.matrix,e.matrix,[-e.origin[0],-e.origin[1],-e.origin[2]]),En(e.matrix,e.matrix),e.isIdentity=!0;for(let n=0;n<4;++n)for(let i=0;i<4;++i)(n===i?1:0)!==e.matrix[n+i*4]&&(e.isIdentity=!1);e.matrixMTime.modified()}},t.getCenter=()=>ir.getCenter(e.bounds),t.getLength=()=>ir.getLength(e.bounds),t.getXRange=()=>ir.getXRange(e.bounds),t.getYRange=()=>ir.getYRange(e.bounds),t.getZRange=()=>ir.getZRange(e.bounds),t.getUserMatrix=()=>e.userMatrix;function r(){t.computeMatrix()}t.onModified(r)}const vre={origin:[0,0,0],position:[0,0,0],orientation:[0,0,0],rotation:null,scale:[1,1,1],bounds:[1,-1,1,-1,1,-1],userMatrix:null,userMatrixMTime:null,cachedProp3D:null,isIdentity:!0,matrixMTime:null};function sN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,vre,r),nm.extend(t,e,r),e.matrixMTime={},J.obj(e.matrixMTime),J.get(t,e,["bounds","isIdentity"]),J.getArray(t,e,["orientation"]),J.setGetArray(t,e,["origin","position","scale"],3),e.matrix=Wt(new Float64Array(16)),e.rotation=Wt(new Float64Array(16)),e.userMatrix=Wt(new Float64Array(16)),e.transform=null,mre(t,e)}const yre=J.newInstance(sN,"vtkProp3D");var P4={newInstance:yre,extend:sN};const{vtkDebugMacro:wre}=J;function xre(t,e){e.classHierarchy.push("vtkActor");const r={...t};t.getActors=()=>[t],t.getIsOpaque=()=>{if(e.forceOpaque)return!0;if(e.forceTranslucent)return!1;e.property||t.getProperty();let n=e.property.getOpacity()>=1;return n=n&&(!e.texture||!e.texture.isTranslucent()),n=n&&(!e.mapper||e.mapper.getIsOpaque()),n},t.hasTranslucentPolygonalGeometry=()=>e.mapper===null?!1:(e.property===null&&t.setProperty(t.makeProperty()),!t.getIsOpaque()),t.makeProperty=Fd.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const n=e.mapper.getBounds();if(!n||n.length!==6)return n;if(n[0]>n[1])return e.mapperBounds=n.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),n;if(!e.mapperBounds||n[0]!==e.mapperBounds[0]||n[1]!==e.mapperBounds[1]||n[2]!==e.mapperBounds[2]||n[3]!==e.mapperBounds[3]||n[4]!==e.mapperBounds[4]||n[5]!==e.mapperBounds[5]||t.getMTime()>e.boundsMTime.getMTime()){wre("Recomputing bounds..."),e.mapperBounds=n.concat();const i=[];ir.getCorners(n,i),t.computeMatrix();const o=new Float64Array(16);En(o,e.matrix),i.forEach(a=>Yt(a,a,o)),e.bounds[0]=e.bounds[2]=e.bounds[4]=Number.MAX_VALUE,e.bounds[1]=e.bounds[3]=e.bounds[5]=-Number.MAX_VALUE,e.bounds=e.bounds.map((a,s)=>s%2===0?i.reduce((c,l)=>c>l[s/2]?l[s/2]:c,a):i.reduce((c,l)=>c{let n=r.getMTime();if(e.property!==null){const i=e.property.getMTime();n=i>n?i:n}if(e.backfaceProperty!==null){const i=e.backfaceProperty.getMTime();n=i>n?i:n}return n},t.getRedrawMTime=()=>{let n=e.mtime;if(e.mapper!==null){let i=e.mapper.getMTime();n=i>n?i:n,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),i=e.mapper.getInput().getMTime(),n=i>n?i:n)}return n},t.getSupportsSelection=()=>e.mapper?e.mapper.getSupportsSelection():!1,t.processSelectorPixelBuffers=(n,i)=>{e.mapper&&e.mapper.processSelectorPixelBuffers&&e.mapper.processSelectorPixelBuffers(n,i)}}const Cre={mapper:null,property:null,backfaceProperty:null,forceOpaque:!1,forceTranslucent:!1,bounds:[1,-1,1,-1,1,-1]};function cN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Cre,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["backfaceProperty","forceOpaque","forceTranslucent","mapper"]),xre(t,e)}const Sre=J.newInstance(cN,"vtkActor");var dc={newInstance:Sre,extend:cN};function Tre(t,e){const r=t.invokeResize;delete t.invokeResize,e.renderWindow=VK.newInstance(),e.rendererMap={},e.openGLRenderWindow=Zte.newInstance(),e.renderWindow.addView(e.openGLRenderWindow),e.interactor=_ne.newInstance(),e.interactor.setView(e.openGLRenderWindow),e.interactor.initialize(),t.addRenderer=({viewport:n,id:i,background:o})=>{const a=$A.newInstance({viewport:n,background:o||e.background});e.renderWindow.addRenderer(a),e.rendererMap[i]=a},t.destroy=()=>{e.renderWindow.getInteractor().delete()},t.removeRenderer=n=>{const i=t.getRenderer(n);e.renderWindow.removeRenderer(i),i.delete(),delete e.rendererMap[n]},t.getRenderer=n=>e.rendererMap[n],t.getRenderers=()=>{const{rendererMap:n}=e;return Object.keys(n).map(o=>({id:o,renderer:n[o]}))},t.resize=()=>{if(e.container){const{width:n,height:i}=e.container;e.openGLRenderWindow.setSize(Math.floor(n),Math.floor(i)),r(),e.renderWindow.render()}},t.setContainer=n=>{e.container=n,e.openGLRenderWindow.setContainer(e.container)},t.delete=J.chain(t.setContainer,t.destroy,e.openGLRenderWindow.delete,t.delete),t.resize()}const _re={background:[0,0,0],container:null};function lN(t,e,r={}){Object.assign(e,_re,r),J.obj(t,e),J.get(t,e,["renderWindow","openGLRenderWindow","interactor","container"]),J.event(t,e,"resize"),Tre(t,e)}const Ere=J.newInstance(lN),bre={newInstance:Ere,extend:lN},{vtkErrorMacro:gv}=J;function Dre(t,e){e.classHierarchy.push("vtkPiecewiseFunction"),t.getSize=()=>e.nodes.length,t.getType=()=>{let r,n=0,i=0;e.nodes.length>0&&(n=e.nodes[0].y);for(let o=1;on)switch(i){case 0:case 1:i=1;break;case 2:default:i=3;break}else switch(i){case 0:case 2:i=2;break;case 1:default:i=3;break}if(n=r,i===3)break}switch(i){case 0:return"Constant";case 1:return"NonDecreasing";case 2:return"NonIncreasing";case 3:default:return"Varied"}},t.getDataPointer=()=>{const r=e.nodes.length;if(e.function=null,r>0){e.function=[];for(let n=0;n{if(e.nodes.length===0)return 0;let r=1,n=0,i=0;for(;i0?n=e.nodes[i-1].x:e.clamping?n=-Number.MAX_VALUE:n=e.nodes[0].x,n},t.getNodeValue=(r,n)=>{const i=e.nodes.length;return r<0||r>=i?(gv("Index out of range!"),-1):(n[0]=e.nodes[r].x,n[1]=e.nodes[r].y,n[2]=e.nodes[r].midpoint,n[3]=e.nodes[r].sharpness,1)},t.setNodeValue=(r,n)=>{const i=e.nodes.length;if(r<0||r>=i)return gv("Index out of range!"),-1;const o=e.nodes[r].x;return e.nodes[r].x=n[0],e.nodes[r].y=n[1],e.nodes[r].midpoint=n[2],e.nodes[r].sharpness=n[3],o!==n[0]?t.sortAndUpdateRange():t.modified(),1},t.addPoint=(r,n)=>t.addPointLong(r,n,.5,0),t.addPointLong=(r,n,i,o)=>{if(i<0||i>1)return gv("Midpoint outside range [0.0, 1.0]"),-1;if(o<0||o>1)return gv("Sharpness outside range [0.0, 1.0]"),-1;e.allowDuplicateScalars||t.removePoint(r);const a={x:r,y:n,midpoint:i,sharpness:o};e.nodes.push(a),t.sortAndUpdateRange();let s;for(s=0;s{e.nodes!==r&&(e.nodes=r,t.sortAndUpdateRange())},t.sortAndUpdateRange=()=>{e.nodes.sort((n,i)=>n.x-i.x),t.updateRange()||t.modified()},t.updateRange=()=>{const r=e.range.slice(),n=e.nodes.length;return n?(e.range[0]=e.nodes[0].x,e.range[1]=e.nodes[n-1].x):(e.range[0]=0,e.range[1]=0),r[0]===e.range[0]&&r[1]===e.range[1]?!1:(t.modified(),!0)},t.removePoint=r=>{let n;for(n=0;n=e.nodes.length)return-1;const i=n;let o=!1;return e.nodes.splice(n,1),(n===0||n===e.nodes.length)&&(o=t.updateRange()),o||t.modified(),i},t.removeAllPoints=()=>{e.nodes=[],t.sortAndUpdateRange()},t.addSegment=(r,n,i,o)=>{t.sortAndUpdateRange();for(let a=0;a=r&&e.nodes[a].x<=i?e.nodes.splice(a,1):a++;t.addPoint(r,n,.5,0),t.addPoint(i,o,.5,0)},t.getValue=r=>{const n=[];return t.getTable(r,r,1,n),n[0]},t.adjustRange=r=>{if(r.length<2)return 0;const n=t.getRange();n[0]r[1]?t.addPoint(r[1],t.getValue(r[1])):t.addPoint(r[1],t.getValue(n[1])),t.sortAndUpdateRange();for(let i=0;i=r[0]&&e.nodes[i].x<=r[1]?e.nodes.splice(i,1):++i;return t.sortAndUpdateRange(),1},t.estimateMinNumberOfSamples=(r,n)=>{const i=t.findMinimumXDistance();return Math.ceil((n-r)/i)},t.findMinimumXDistance=()=>{const r=e.nodes.length;if(r<2)return-1;let n=e.nodes[1].x-e.nodes[0].x;for(let i=0;i4&&arguments[4]!==void 0?arguments[4]:1,s,c=0;const l=e.nodes.length;let f=0;l!==0&&(f=e.nodes[l-1].y);let u=0,d=0,h=0,g=0,p=0,v=0,y=0;for(s=0;s1?u=r+s/(i-1)*(n-r):u=.5*(r+n);ce.nodes[c].x;)c++,c.99999&&(v=.99999));if(c>=l)o[m]=e.clamping?f:0;else if(c===0)o[m]=e.clamping?e.nodes[0].y:0;else{let w=(u-d)/(h-d);if(w.99)if(w<.5){o[m]=g;continue}else{o[m]=p;continue}if(y<.01){o[m]=(1-w)*g+w*p;continue}w<.5?w=.5*(w*2)**(1+10*y):w>.5&&(w=1-.5*((1-w)*2)**(1+10*y));const x=w*w,C=x*w,S=2*C-3*x+1,T=-2*C+3*x,_=C-2*x+w,E=C-x,b=p-g,D=(1-y)*b;o[m]=S*g+T*p+_*D+E*D;const I=gp?g:p;o[m]=o[m]P?P:o[m]}}}}const Ire={range:[0,0],clamping:!0,allowDuplicateScalars:!1};function uN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ire,r),J.obj(t,e),e.nodes=[],J.setGet(t,e,["allowDuplicateScalars","clamping"]),J.setArray(t,e,["range"],2),J.getArray(t,e,["range"]),Dre(t,e)}const Ore=J.newInstance(uN,"vtkPiecewiseFunction");var Ed={newInstance:Ore,extend:uN};const{BlendMode:Su,FilterMode:Yg}=cP;function Mre(t,e,r,n,i){let o=null;return i?(o=i,o.removeAllPoints()):o=Ed.newInstance(),o.addPointLong(-1024,0,1,1),o.addPoint(t,e),o.addPoint(r,n),o}const Pre={createRadonTransferFunction:Mre};function Rre(t,e){e.classHierarchy.push("vtkVolumeMapper");const r={...t};t.getBounds=()=>{const n=t.getInputData();return n?(e.static||t.update(),e.bounds=n.getBounds()):e.bounds=rf(),e.bounds},t.update=()=>{t.getInputData()},t.setBlendModeToComposite=()=>{t.setBlendMode(Su.COMPOSITE_BLEND)},t.setBlendModeToMaximumIntensity=()=>{t.setBlendMode(Su.MAXIMUM_INTENSITY_BLEND)},t.setBlendModeToMinimumIntensity=()=>{t.setBlendMode(Su.MINIMUM_INTENSITY_BLEND)},t.setBlendModeToAverageIntensity=()=>{t.setBlendMode(Su.AVERAGE_INTENSITY_BLEND)},t.setBlendModeToAdditiveIntensity=()=>{t.setBlendMode(Su.ADDITIVE_INTENSITY_BLEND)},t.setBlendModeToRadonTransform=()=>{t.setBlendMode(Su.RADON_TRANSFORM_BLEND)},t.getBlendModeAsString=()=>J.enumToString(Su,e.blendMode),t.setAverageIPScalarRange=(n,i)=>{console.warn("setAverageIPScalarRange is deprecated use setIpScalarRange"),t.setIpScalarRange(n,i)},t.getFilterModeAsString=()=>J.enumToString(Yg,e.filterMode),t.setFilterModeToOff=()=>{t.setFilterMode(Yg.OFF)},t.setFilterModeToNormalized=()=>{t.setFilterMode(Yg.NORMALIZED)},t.setFilterModeToRaw=()=>{t.setFilterMode(Yg.RAW)},t.setGlobalIlluminationReach=n=>r.setGlobalIlluminationReach(oc(n,0,1)),t.setVolumetricScatteringBlending=n=>r.setVolumetricScatteringBlending(oc(n,0,1)),t.setVolumeShadowSamplingDistFactor=n=>r.setVolumeShadowSamplingDistFactor(n>=1?n:1),t.setAnisotropy=n=>r.setAnisotropy(oc(n,-.99,.99)),t.setLAOKernelSize=n=>r.setLAOKernelSize(z_(oc(n,1,32))),t.setLAOKernelRadius=n=>r.setLAOKernelRadius(n>=1?n:1)}const Lre=t=>({bounds:[1,-1,1,-1,1,-1],sampleDistance:1,imageSampleDistance:1,maximumSamplesPerRay:1e3,autoAdjustSampleDistances:!0,initialInteractionScale:1,interactionSampleDistanceFactor:1,blendMode:Su.COMPOSITE_BLEND,ipScalarRange:[-1e6,1e6],filterMode:Yg.OFF,preferSizeOverAccuracy:!1,computeNormalFromOpacity:!1,volumetricScatteringBlending:0,globalIlluminationReach:0,volumeShadowSamplingDistFactor:5,anisotropy:0,localAmbientOcclusion:!1,LAOKernelSize:15,LAOKernelRadius:7,updatedExtents:[],...t});function fN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Lre(r)),w4.extend(t,e,r),J.setGet(t,e,["sampleDistance","imageSampleDistance","maximumSamplesPerRay","autoAdjustSampleDistances","initialInteractionScale","interactionSampleDistanceFactor","blendMode","filterMode","preferSizeOverAccuracy","computeNormalFromOpacity","volumetricScatteringBlending","globalIlluminationReach","volumeShadowSamplingDistFactor","anisotropy","localAmbientOcclusion","LAOKernelSize","LAOKernelRadius","updatedExtents"]),J.setGetArray(t,e,["ipScalarRange"],2),J.event(t,e,"lightingActivated"),Rre(t,e)}const Are=J.newInstance(fN,"vtkVolumeMapper");var dN={newInstance:Are,extend:fN,...Pre};function Nre(t,e){e.classHierarchy.push("vtkSharedVolumeMapper");const r=t.delete;t.delete=()=>{e.scalarTexture=null,r()}}const kre={scalarTexture:null};function hN(t,e,r={}){Object.assign(e,kre,r),dN.extend(t,e,r),J.setGet(t,e,["scalarTexture"]),Nre(t,e)}const Vre=J.newInstance(hN,"vtkSharedVolumeMapper"),Fre={newInstance:Vre,extend:hN};function Ur(t){const e=t.indexOf(":");return t.substring(e+1)}function gN(t){let e=2166136261;for(let r=0;r>>0).toString(36)}const Ure=1073741824;class Bre{constructor(){this._imageCache=new Map,this._volumeCache=new Map,this._imageIdsToVolumeIdCache=new Map,this._referencedImageIdToImageIdCache=new Map,this._geometryCache=new Map,this._imageCacheSize=0,this._maxCacheSize=3*Ure,this._geometryCacheSize=0,this.setMaxCacheSize=e=>{if(!e||typeof e!="number"){const r=`New max cacheSize ${this._maxCacheSize} should be defined and should be a number.`;throw new Error(r)}this._maxCacheSize=e},this.isCacheable=e=>{const r=this.getBytesAvailable(),n=Array.from(this._imageCache.values()).reduce((o,a)=>a.sharedCacheKey?o:o+a.sizeInBytes,0);return r+n>=e},this.getMaxCacheSize=()=>this._maxCacheSize,this.getCacheSize=()=>this._imageCacheSize,this._decacheImage=(e,r=!1)=>{var o;const n=this._imageCache.get(e);if(!n)return;if(n.sharedCacheKey&&!r)throw new Error("Cannot decache an image with a shared cache key. You need to manually decache the volume first.");const{imageLoadObject:i}=n;(o=n.image)!=null&&o.referencedImageId&&this._referencedImageIdToImageIdCache.delete(n.image.referencedImageId),i!=null&&i.cancelFn&&i.cancelFn(),i!=null&&i.decache&&i.decache(),this._imageCache.delete(e)},this._decacheVolume=e=>{const r=this._volumeCache.get(e);if(!r)return;const{volumeLoadObject:n,volume:i}=r;i&&(i.cancelLoading&&i.cancelLoading(),i.imageData&&i.imageData.delete(),n.cancelFn&&n.cancelFn(),i.imageIds&&i.imageIds.forEach(o=>{const a=this._imageCache.get(o);a&&a.sharedCacheKey===e&&(a.sharedCacheKey=void 0)}),this._volumeCache.delete(e))},this.purgeCache=()=>{const e=this._imageCache.keys();for(this.purgeVolumeCache();;){const{value:r,done:n}=e.next();if(n)break;this.removeImageLoadObject(r,{force:!0}),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:r})}},this.purgeVolumeCache=()=>{const e=this._volumeCache.keys();for(;;){const{value:r,done:n}=e.next();if(n)break;this.removeVolumeLoadObject(r),ut(et,rt.VOLUME_CACHE_VOLUME_REMOVED,{volumeId:r})}},this.getVolumeLoadObject=e=>{if(e===void 0)throw new Error("getVolumeLoadObject: volumeId must not be undefined");const r=this._volumeCache.get(e);if(r)return r.timeStamp=Date.now(),r.volumeLoadObject},this.putGeometryLoadObject=(e,r)=>{if(e===void 0)throw new Error("putGeometryLoadObject: geometryId must not be undefined");if(r.promise===void 0)throw new Error("putGeometryLoadObject: geometryLoadObject.promise must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometryLoadObject: geometryId already present in geometryCache");if(r.cancelFn&&typeof r.cancelFn!="function")throw new Error("putGeometryLoadObject: geometryLoadObject.cancel must be a function");const n={loaded:!1,geometryId:e,geometryLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._geometryCache.set(e,n),r.promise.then(i=>{try{this._putGeometryCommon(e,i,n)}catch(o){throw console.debug(`Error in _putGeometryCommon for geometry ${e}:`,o),o}}).catch(i=>{throw console.debug(`Error caching geometry ${e}:`,i),this._geometryCache.delete(e),i})},this.getGeometry=e=>{if(e===void 0)throw new Error("getGeometry: geometryId must not be undefined");const r=this._geometryCache.get(e);if(r)return r.timeStamp=Date.now(),r.geometry},this.removeGeometryLoadObject=e=>{if(e===void 0)throw new Error("removeGeometryLoadObject: geometryId must not be undefined");const r=this._geometryCache.get(e);if(!r)throw new Error("removeGeometryLoadObject: geometryId was not present in geometryCache");this.decrementGeometryCacheSize(r.sizeInBytes);const n={geometry:r,geometryId:e};ut(et,rt.GEOMETRY_CACHE_GEOMETRY_REMOVED,n),this._decacheGeometry(e)},this._decacheGeometry=e=>{const r=this._geometryCache.get(e);if(!r)return;const{geometryLoadObject:n}=r;n.cancelFn&&n.cancelFn(),n.decache&&n.decache(),this._geometryCache.delete(e)},this.incrementGeometryCacheSize=e=>{this._geometryCacheSize+=e},this.decrementGeometryCacheSize=e=>{this._geometryCacheSize-=e},this.getImageByReferencedImageId=e=>{var n;const r=this._referencedImageIdToImageIdCache.get(e);if(r)return(n=this._imageCache.get(r))==null?void 0:n.image},this.getImage=(e,r=ya.FAR_REPLICATE)=>{var i;if(e===void 0)throw new Error("getImage: imageId must not be undefined");const n=this._imageCache.get(e);if(n&&(n.timeStamp=Date.now(),!(((i=n.image)==null?void 0:i.imageQualityStatus){var i;if(e===void 0)throw new Error("getVolume: volumeId must not be undefined");const n=this._volumeCache.get(e);return n?(n.timeStamp=Date.now(),n.volume):r?(i=[...this._volumeCache.values()].find(o=>o.volumeId.includes(e)))==null?void 0:i.volume:void 0},this.getVolumes=()=>Array.from(this._volumeCache.values()).map(r=>r.volume),this.filterVolumesByReferenceId=e=>this.getVolumes().filter(n=>n.referencedVolumeId===e),this.removeImageLoadObject=(e,{force:r=!1}={})=>{if(e===void 0)throw new Error("removeImageLoadObject: imageId must not be undefined");const n=this._imageCache.get(e);if(!n)throw new Error("removeImageLoadObject: imageId was not present in imageCache");this._decacheImage(e,r),this.incrementImageCacheSize(-n.sizeInBytes);const i={image:n,imageId:e};ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,i)},this.removeVolumeLoadObject=e=>{if(e===void 0)throw new Error("removeVolumeLoadObject: volumeId must not be undefined");const r=this._volumeCache.get(e);if(!r)throw new Error("removeVolumeLoadObject: volumeId was not present in volumeCache");const n={volume:r,volumeId:e};ut(et,rt.VOLUME_CACHE_VOLUME_REMOVED,n),this._decacheVolume(e)},this.incrementImageCacheSize=e=>{this._imageCacheSize+=e},this.decrementImageCacheSize=e=>{this._imageCacheSize-=e},this.getGeometryLoadObject=e=>{if(e===void 0)throw new Error("getGeometryLoadObject: geometryId must not be undefined");const r=this._geometryCache.get(e);if(r)return r.timeStamp=Date.now(),r.geometryLoadObject}}generateVolumeId(e){const r=e.map(Ur).sort();let n=2166136261;for(const i of r){const o=gN(i);for(let a=0;a>>0).toString(36)}`}getImageIdsForVolumeId(e){return Array.from(this._imageIdsToVolumeIdCache.entries()).filter(([r,n])=>n===e).map(([r])=>r)}getBytesAvailable(){return this.getMaxCacheSize()-this.getCacheSize()}decacheIfNecessaryUntilBytesAvailable(e,r){let n=this.getBytesAvailable();if(n>=e)return n;const i=Array.from(this._imageCache.values()).filter(c=>!c.sharedCacheKey);function o(c,l){return c.timeStamp>l.timeStamp?1:c.timeStampc.imageId);let s=a;r&&(s=a.filter(c=>!r.includes(c)));for(const c of s)if(this.removeImageLoadObject(c),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:c}),n=this.getBytesAvailable(),n>=e)return n;for(const c of a)if(this.removeImageLoadObject(c),ut(et,rt.IMAGE_CACHE_IMAGE_REMOVED,{imageId:c}),n=this.getBytesAvailable(),n>=e)return n}_putImageCommon(e,r,n){if(!this._imageCache.has(e)){console.warn("The image was purged from the cache before it completed loading.");return}if(!r){console.warn("Image is undefined");return}if(r.sizeInBytes===void 0||Number.isNaN(r.sizeInBytes))throw new Error("_putImageCommon: image.sizeInBytes must not be undefined");if(r.sizeInBytes.toFixed===void 0)throw new Error("_putImageCommon: image.sizeInBytes is not a number");if(!this.isCacheable(r.sizeInBytes))throw new Error(rt.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(r.sizeInBytes),n.loaded=!0,n.image=r,n.sizeInBytes=r.sizeInBytes,this.incrementImageCacheSize(n.sizeInBytes);const i={image:n};r.referencedImageId&&this._referencedImageIdToImageIdCache.set(r.referencedImageId,e),ut(et,rt.IMAGE_CACHE_IMAGE_ADDED,i),n.sharedCacheKey=r.sharedCacheKey}async putImageLoadObject(e,r){if(e===void 0)throw console.error("putImageLoadObject: imageId must not be undefined"),new Error("putImageLoadObject: imageId must not be undefined");if(r.promise===void 0)throw console.error("putImageLoadObject: imageLoadObject.promise must not be undefined"),new Error("putImageLoadObject: imageLoadObject.promise must not be undefined");const n=this._imageCache.get(e);if(n!=null&&n.imageLoadObject)throw console.warn(`putImageLoadObject: imageId ${e} already in cache`),new Error("putImageLoadObject: imageId already in cache");if(r.cancelFn&&typeof r.cancelFn!="function")throw console.error("putImageLoadObject: imageLoadObject.cancel must be a function"),new Error("putImageLoadObject: imageLoadObject.cancel must be a function");const i={...n,loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._imageCache.set(e,i),this._imageCache.set(e,i),r.promise.then(o=>{try{this._putImageCommon(e,o,i)}catch(a){throw console.debug(`Error in _putImageCommon for image ${e}:`,a),a}}).catch(o=>{throw console.debug(`Error caching image ${e}:`,o),this._imageCache.delete(e),o})}putImageSync(e,r){if(e===void 0)throw new Error("putImageSync: imageId must not be undefined");if(this._imageCache.has(e))throw new Error("putImageSync: imageId already in cache");const n={loaded:!1,imageId:e,sharedCacheKey:void 0,imageLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._imageCache.set(e,n);try{this._putImageCommon(e,r,n)}catch(i){throw this._imageCache.delete(e),i}}getImageLoadObject(e){if(e===void 0)throw new Error("getImageLoadObject: imageId must not be undefined");const r=this._imageCache.get(e);if(r)return r.timeStamp=Date.now(),r.imageLoadObject}isLoaded(e){const r=this._imageCache.get(e);return r?r.loaded:!1}getVolumeContainingImageId(e){const r=Array.from(this._volumeCache.keys()),n=Ur(e);for(const i of r){const o=this._volumeCache.get(i);if(!o)return;const{volume:a}=o;if(!a.imageIds.length)return;const s=a.getImageURIIndex(n);if(s>-1)return{volume:a,imageIdIndex:s}}}getCachedImageBasedOnImageURI(e){const r=Ur(e),i=Array.from(this._imageCache.keys()).find(o=>Ur(o)===r);if(i)return this._imageCache.get(i)}_putVolumeCommon(e,r,n){var o;if(!this._volumeCache.get(e)){console.warn("The volume was purged from the cache before it completed loading.");return}n.loaded=!0,n.volume=r,(o=r.imageIds)==null||o.forEach(a=>{const s=this._imageCache.get(a);s&&(s.sharedCacheKey=e)});const i={volume:n};ut(et,rt.VOLUME_CACHE_VOLUME_ADDED,i)}putVolumeSync(e,r){if(e===void 0)throw new Error("putVolumeSync: volumeId must not be undefined");if(this._volumeCache.has(e))throw new Error("putVolumeSync: volumeId already in cache");const n={loaded:!1,volumeId:e,volumeLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._volumeCache.set(e,n);try{this._putVolumeCommon(e,r,n)}catch(i){throw this._volumeCache.delete(e),i}}async putVolumeLoadObject(e,r){if(e===void 0)throw new Error("putVolumeLoadObject: volumeId must not be undefined");if(r.promise===void 0)throw new Error("putVolumeLoadObject: volumeLoadObject.promise must not be undefined");if(this._volumeCache.has(e))throw new Error(`putVolumeLoadObject: volumeId:${e} already in cache`);if(r.cancelFn&&typeof r.cancelFn!="function")throw new Error("putVolumeLoadObject: volumeLoadObject.cancel must be a function");const n={loaded:!1,volumeId:e,volumeLoadObject:r,timeStamp:Date.now(),sizeInBytes:0};return this._volumeCache.set(e,n),r.promise.then(i=>{try{this._putVolumeCommon(e,i,n)}catch(o){throw console.error(`Error in _putVolumeCommon for volume ${e}:`,o),this._volumeCache.delete(e),o}}).catch(i=>{throw this._volumeCache.delete(e),i})}_putGeometryCommon(e,r,n){if(!this._geometryCache.get(e)){console.warn("The geometry was purged from the cache before it completed loading.");return}if(!r){console.warn("Geometry is undefined");return}if(r.sizeInBytes===void 0||Number.isNaN(r.sizeInBytes))throw new Error("_putGeometryCommon: geometry.sizeInBytes must not be undefined");if(r.sizeInBytes.toFixed===void 0)throw new Error("_putGeometryCommon: geometry.sizeInBytes is not a number");if(!this.isCacheable(r.sizeInBytes))throw new Error(rt.CACHE_SIZE_EXCEEDED);this.decacheIfNecessaryUntilBytesAvailable(r.sizeInBytes),n.loaded=!0,n.geometry=r,n.sizeInBytes=r.sizeInBytes,this.incrementGeometryCacheSize(n.sizeInBytes);const i={geometry:n};ut(et,rt.GEOMETRY_CACHE_GEOMETRY_ADDED,i)}putGeometrySync(e,r){if(e===void 0)throw new Error("putGeometrySync: geometryId must not be undefined");if(this._geometryCache.has(e))throw new Error("putGeometrySync: geometryId already in cache");const n={loaded:!1,geometryId:e,geometryLoadObject:{promise:Promise.resolve(r)},timeStamp:Date.now(),sizeInBytes:0};this._geometryCache.set(e,n);try{this._putGeometryCommon(e,r,n)}catch(i){throw this._geometryCache.delete(e),i}}setPartialImage(e,r){const n=this._imageCache.get(e);if(!n){r&&this._imageCache.set(e,{image:r,imageId:e,loaded:!1,timeStamp:Date.now(),sizeInBytes:0});return}n.loaded&&(n.loaded=!1,n.imageLoadObject=null,this.incrementImageCacheSize(-n.sizeInBytes),n.sizeInBytes=0),n.image=r||n.image}getImageQuality(e){var n;const r=(n=this._imageCache.get(e))==null?void 0:n.image;return r?r.imageQualityStatus||ya.FULL_RESOLUTION:void 0}}const $e=new Bre;function TD(t,e){const r=_4(e),n=new r(t.length);return n.set(t),n}function Gre(t,e){e.classHierarchy.push("vtkStreamingOpenGLTexture"),e.updatedFrames=[],e.volumeId=null;const r=t.create3DFilterableFromRaw;t.create3DFilterableFromRaw=(s,c,l,f,u,d,h)=>{e.inputDataType=u,e.inputNumComps=f,r(s,c,l,f,u,d,h)};const n=t.updateVolumeInfoForGL;t.updateVolumeInfoForGL=(s,c)=>{const l=n(s,c);return e.volumeInfo.dataComputedScale=[1],e.volumeInfo.dataComputedOffset=[0],l},t.update3DFromRaw=()=>{const{volumeId:s}=e;if(!s)return;const c=$e.getVolume(s);if(e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind(),c.isDynamicVolume()){a();return}return t.hasUpdatedFrames()&&o()};const i=t.modified;t.setUpdatedFrame=s=>{e.updatedFrames[s]=!0,i()},t.modified=()=>{i();const s=$e.getVolume(e.volumeId);if(!s)return;const c=s.imageIds;for(let l=0;l!e.updatedFrames.length||e.updatedFrames.some(s=>s),t.getUpdatedFrames=()=>e.updatedFrames,t.setVolumeId=s=>{e.volumeId=s},t.getVolumeId=()=>e.volumeId,t.setTextureParameters=({width:s,height:c,depth:l,numberOfComponents:f,dataType:u})=>{e.width??(e.width=s),e.height??(e.height=c),e.depth??(e.depth=l),e.inputNumComps??(e.inputNumComps=f),e.inputDataType??(e.inputDataType=u)},t.getTextureParameters=()=>({width:e.width,height:e.height,depth:e.depth,numberOfComponents:e.inputNumComps,dataType:e.inputDataType})}const Wre={updatedFrames:[]};function pN(t,e,r={}){Object.assign(e,Wre,r),Mr.extend(t,e,r),Gre(t,e)}const zre=J.newInstance(pN,"vtkStreamingOpenGLTexture"),$re={newInstance:zre,extend:pN},jre={isPerformingCoordinateTransformation:!1};function mN(t,e,r={}){Object.assign(e,jre,r),I4.extend(t,e,r),J.setGet(t,e,["isPerformingCoordinateTransformation"]),Kre(t,e)}const Hre=J.newInstance(mN,"vtkSlabCamera");function Kre(t,e){e.classHierarchy.push("vtkSlabCamera");const r=Wt(new Float64Array(16)),n=new Float64Array(3);t.getProjectionMatrix=(i,o,a)=>{const s=ba();if(e.projectionMatrix){const d=1/e.physicalScale;return tr(n,d,d,d),kr(s,e.projectionMatrix),cl(s,s,n),En(s,s),s}Wt(r);let c=e.clippingRange[0],l=e.clippingRange[1];e.isPerformingCoordinateTransformation&&(c=e.distance,l=e.distance+.1);const f=l-c,u=[c+(o+1)*f/2,c+(a+1)*f/2];if(e.parallelProjection){const d=e.parallelScale*i,h=e.parallelScale,g=(e.windowCenter[0]-1)*d,p=(e.windowCenter[0]+1)*d,v=(e.windowCenter[1]-1)*h,y=(e.windowCenter[1]+1)*h;r4(r,g,p,v,y,u[0],u[1]),En(r,r)}else{if(e.useOffAxisProjection)throw new Error("Off-Axis projection is not supported at this time");{const d=Math.tan(nn.radiansFromDegrees(e.viewAngle)/2);let h,g;e.useHorizontalViewAngle===!0?(h=c*d,g=c*d/i):(h=c*d*i,g=c*d);const p=(e.windowCenter[0]-1)*h,v=(e.windowCenter[0]+1)*h,y=(e.windowCenter[1]-1)*g,m=(e.windowCenter[1]+1)*g,w=u[0],x=u[1];r[0]=2*w/(v-p),r[5]=2*w/(m-y),r[2]=(p+v)/(v-p),r[6]=(y+m)/(m-y),r[10]=-(w+x)/(x-w),r[14]=-1,r[11]=-2*w*x/(x-w),r[15]=0}}return kr(s,r),s}}const qre={newInstance:Hre,extend:mN};function tc(t){return _a(t,"vtkVolume")||_a(t,"vtkImageSlice")}function _a(t,e){const r="isA"in t?t:t.actor;return r?!!r.isA(e):!1}const tl=[];function Wh(t,e=0){let r;for(r=0;r0;)tl.pop()}function wt(t,...e){for(let r=0;r=0&&I<=y.levels.SILENT)return I;throw new TypeError("log.setLevel() called with invalid level: "+D)}y.name=p,y.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},y.methodFactory=v||d,y.getLevel=function(){return x??w??m},y.setLevel=function(D,I){return x=E(D),I!==!1&&S(x),f.call(y)},y.setDefaultLevel=function(D){w=E(D),T()||y.setLevel(D,!1)},y.resetLevel=function(){x=null,_(),f.call(y)},y.enableAll=function(D){y.setLevel(y.levels.TRACE,D)},y.disableAll=function(D){y.setLevel(y.levels.SILENT,D)},y.rebuild=function(){if(a!==y&&(m=E(a.getLevel())),f.call(y),a===y)for(var D in o)o[D].rebuild()},m=E(a?a.getLevel():"WARN");var b=T();b!=null&&(x=E(b)),f.call(y)}a=new h,a.getLogger=function(v){if(typeof v!="symbol"&&typeof v!="string"||v==="")throw new TypeError("You must supply a name when creating a logger.");var y=o[v];return y||(y=o[v]=new h(v,a.methodFactory)),y};var g=typeof window!==r?window.log:void 0;return a.noConflict=function(){return typeof window!==r&&window.log===a&&(window.log=g),a},a.getLoggers=function(){return o},a.default=a,a})})(vN);var Jre=vN.exports;const Zre=pl(Jre),yN=Zre.noConflict();typeof window<"u"&&(window.log=yN);function gw(t){const e=yN.getLogger(t[0]);return e.getLogger=(...r)=>gw(`${t}.${r.join(".")}`),e}function L4(...t){return gw(t.join("."))}const zh=gw("cs3d"),A4=zh.getLogger("core"),Qre=zh.getLogger("tools"),eie=zh.getLogger("dicomImageLoader"),tie=zh.getLogger("ai"),nie=zh.getLogger("examples"),rie=L4("consistency","dicom"),iie=L4("consistency","image"),oie=Object.freeze(Object.defineProperty({__proto__:null,aiLog:tie,coreLog:A4,cs3dLog:zh,dicomConsistencyLog:rie,examplesLog:nie,getLogger:L4,getRootLogger:gw,imageConsistencyLog:iie,loaderLog:eie,toolsLog:Qre},Symbol.toStringTag,{value:"Module"}));function xf(t,e){const{direction:r,spacing:n}=t,i=r.slice(0,3),o=r.slice(3,6),a=r.slice(6,9),s=[kt(i,e),kt(o,e),kt(a,e)],c=Ke();return tr(c,s[0]*n[0],s[1]*n[1],s[2]*n[2]),ta(c)}const _D=A4.getLogger("utilities","getClosestImageId");function Zl(t,e,r,n){const{direction:i,spacing:o,imageIds:a}=t,{ignoreSpacing:s=!1}=n||{};if(!(a!=null&&a.length))return;const c=i.slice(6,9),l=kt(c,r);if(Math.abs(l)<1-qa)return;let f;s||(f=xf({direction:i,spacing:o},r)/2);let u,d=1/0;for(let h=0;ht,ED=1e-6;let wN=class{constructor(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;this.matrix=Wt(new Float64Array(16)),this.tmp=new Float64Array(3),this.angleConv=e?kX:aie}rotateFromDirections(e,r){const n=new Float64Array(3),i=new Float64Array(3),o=new Float64Array(16);tr(n,e[0],e[1],e[2]),tr(i,r[0],r[1],r[2]),Qn(n,n),Qn(i,i);const a=kt(n,i);return a>=1?this:(kn(this.tmp,n,i),ta(this.tmp)1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1;if(J1(B_,this.matrix))return this;const i=n===-1?e.length:r+n*3;for(let o=r;oMath.abs(Math.abs(t)-1)Kx(t[e])||Kx(t[e+1])||Kx(t[e+2]),uie=t=>qx(t,0)&&qx(t,3)&&qx(t,6);function pw(t,e,r){const n=t.getMapper().getInputData();let i;const o=n.getDirection();if(uie(o))i=xN(t);else{const[u,d,h]=n.getDimensions();i=[[0,0,0],[u-1,0,0],[0,d-1,0],[u-1,d-1,0],[0,0,h-1],[u-1,0,h-1],[0,d-1,h-1],[u-1,d-1,h-1]].map(p=>n.indexToWorld(p))}const a=Yi.buildFromDegree().identity().rotateFromDirections(e,[1,0,0]);i.forEach(u=>a.apply(u));const s=[...r];a.apply(s);const c=s[0];let l=1/0,f=-1/0;for(let u=0;u<8;u++){const d=i[u][0];d>f&&(f=d),df?h=f:h<0&&(h=0);const p=h*i;g=[g[0]+n[0]*p,g[1]+n[1]*p,g[2]+n[2]*p];const v=[g[0]+l[0],g[1]+l[1],g[2]+l[2]];return{newFocalPoint:g,newPosition:v}}const fie={RGB:0,HSV:1,LAB:2,DIVERGING:3},die={LINEAR:0,LOG10:1};var CN={ColorSpace:fie,Scale:die};const{ColorSpace:us,Scale:N4}=CN,{ScalarMappingTarget:pv}=aw,{vtkDebugMacro:hie,vtkErrorMacro:Tl,vtkWarningMacro:gie}=J;function bD(t,e){const r=t[0],n=t[1],i=t[2],o=Math.sqrt(r*r+n*n+i*i),a=o>.001?Math.acos(r/o):0,s=a>.001?Math.atan2(i,n):0;e[0]=o,e[1]=a,e[2]=s}function pie(t,e){const r=t[0],n=t[1],i=t[2];e[0]=r*Math.cos(n),e[1]=r*Math.sin(n)*Math.cos(i),e[2]=r*Math.sin(n)*Math.sin(i)}function DD(t,e){if(t[0]>=e-.1)return t[2];const r=t[1]*Math.sqrt(e*e-t[0]*t[0])/(t[0]*Math.sin(t[1]));return t[2]>-.3*Math.PI?t[2]+r:t[2]-r}function mie(t,e){let r=t-e;for(r<0&&(r=-r);r>=2*Math.PI;)r-=2*Math.PI;return r>Math.PI&&(r=2*Math.PI-r),r}function ID(t,e,r,n){const i=[],o=[];nd(e,i),nd(r,o);const a=[],s=[];bD(i,a),bD(o,s);let c=t;if(a[1]>.05&&s[1]>.05&&mie(a[2],s[2])>.33*Math.PI){let u=Math.max(a[0],s[0]);u=Math.max(88,u),t<.5?(s[0]=u,s[1]=0,s[2]=0,c*=2):(a[0]=u,a[1]=0,a[2]=0,c=2*c-1)}a[1]<.05&&s[1]>.05?a[2]=DD(s,a[0]):s[1]<.05&&a[1]>.05&&(s[2]=DD(a,s[0]));const l=[];l[0]=(1-c)*a[0]+c*s[0],l[1]=(1-c)*a[1]+c*s[1],l[2]=(1-c)*a[2]+c*s[2];const f=[];pie(l,f),vy(f,n)}function vie(t,e){e.classHierarchy.push("vtkColorTransferFunction"),t.getSize=()=>e.nodes.length,t.addRGBPoint=(r,n,i,o)=>t.addRGBPointLong(r,n,i,o,.5,0),t.addRGBPointLong=function(r,n,i,o){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:.5,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0;if(a<0||a>1)return Tl("Midpoint outside range [0.0, 1.0]"),-1;if(s<0||s>1)return Tl("Sharpness outside range [0.0, 1.0]"),-1;e.allowDuplicateScalars||t.removePoint(r);const c={x:r,r:n,g:i,b:o,midpoint:a,sharpness:s};e.nodes.push(c),t.sortAndUpdateRange();let l=0;for(;lt.addHSVPointLong(r,n,i,o,.5,0),t.addHSVPointLong=function(r,n,i,o){let a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:.5,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:0;const c=[];return Kf([n,i,o],c),t.addRGBPoint(r,c[0],c[1],c[2],a,s)},t.setNodes=r=>{if(e.nodes!==r){const n=JSON.stringify(e.nodes);e.nodes=r;const i=JSON.stringify(e.nodes);if(t.sortAndUpdateRange()||n!==i)return t.modified(),!0}return!1},t.sortAndUpdateRange=()=>{const r=JSON.stringify(e.nodes);e.nodes.sort((o,a)=>o.x-a.x);const n=JSON.stringify(e.nodes),i=t.updateRange();return!i&&r!==n?(t.modified(),!0):i},t.updateRange=()=>{const r=[2];r[0]=e.mappingRange[0],r[1]=e.mappingRange[1];const n=e.nodes.length;return n?(e.mappingRange[0]=e.nodes[0].x,e.mappingRange[1]=e.nodes[n-1].x):(e.mappingRange[0]=0,e.mappingRange[1]=0),r[0]===e.mappingRange[0]&&r[1]===e.mappingRange[1]?!1:(t.modified(),!0)},t.removePoint=r=>{let n=0;for(;n=e.nodes.length)return-1;let o=!1;return e.nodes.splice(n,1),(n===0||n===e.nodes.length)&&(o=t.updateRange()),o||t.modified(),i},t.movePoint=(r,n)=>{if(r!==n){t.removePoint(n);for(let i=0;i{e.nodes=[],t.sortAndUpdateRange()},t.addRGBSegment=(r,n,i,o,a,s,c,l)=>{t.sortAndUpdateRange();for(let f=0;f=r&&e.nodes[f].x<=a?e.nodes.splice(f,1):f++;t.addRGBPointLong(r,n,i,o,.5,0),t.addRGBPointLong(a,s,c,l,.5,0),t.modified()},t.addHSVSegment=(r,n,i,o,a,s,c,l)=>{const f=[n,i,o],u=[s,c,l],d=[],h=[];Kf(f,d),Kf(u,h),t.addRGBSegment(r,d[0],d[1],d[2],a,h[0],h[1],h[2])},t.mapValue=r=>{const n=[];return t.getColor(r,n),[Math.floor(255*n[0]+.5),Math.floor(255*n[1]+.5),Math.floor(255*n[2]+.5),255]},t.getColor=(r,n)=>{if(e.indexedLookup){const i=t.getSize(),o=t.getAnnotatedValueIndexInternal(r);if(o<0||i===0){const a=t.getNanColorByReference();n[0]=a[0],n[1]=a[1],n[2]=a[2]}else{const a=[];t.getNodeValue(o%i,a),n[0]=a[1],n[1]=a[2],n[2]=a[3]}return}t.getTable(r,r,1,n)},t.getRedValue=r=>{const n=[];return t.getColor(r,n),n[0]},t.getGreenValue=r=>{const n=[];return t.getColor(r,n),n[1]},t.getBlueValue=r=>{const n=[];return t.getColor(r,n),n[2]},t.getTable=(r,n,i,o)=>{const a=Number(r),s=Number(n);if(yy(a)||yy(s)){for(let E=0;E0);let S=0,T=0,_=0;C&&(S=Math.log10(a),T=Math.log10(s));for(let E=0;E1?C?(_=S+E/(i-1)*(T-S),h=10**_):h=a+E/(i-1)*(s-a):C?(_=.5*(S+T),h=10**_):h=.5*(a+s),e.discretize){const D=e.mappingRange;if(h>=D[0]&&h<=D[1]){const I=e.numberOfValues,P=D[1]-D[0];if(I<=1)h=D[0]+P/2;else{const O=(h-D[0])/P,A=z_(I*O);h=D[0]+A/(I-1)*P}}}for(;ce.nodes[c].x;)c++,c.99999&&(m=.99999));if(h>e.mappingRange[1])o[b]=0,o[b+1]=0,o[b+2]=0,e.clamping&&(t.getUseAboveRangeColor()?(o[b]=e.aboveRangeColor[0],o[b+1]=e.aboveRangeColor[1],o[b+2]=e.aboveRangeColor[2]):(o[b]=f,o[b+1]=u,o[b+2]=d));else if(h0&&(o[b]=e.nodes[0].r,o[b+1]=e.nodes[0].g,o[b+2]=e.nodes[0].b));else if(c===0&&(Math.abs(h-a)<1e-6||e.discretize))l>0?(o[b]=e.nodes[0].r,o[b+1]=e.nodes[0].g,o[b+2]=e.nodes[0].b):(o[b]=0,o[b+1]=0,o[b+2]=0);else{let D=0;if(C?D=(_-g)/(p-g):D=(h-g)/(p-g),D.99)if(D<.5){o[b]=v[0],o[b+1]=v[1],o[b+2]=v[2];continue}else{o[b]=y[0],o[b+1]=y[1],o[b+2]=y[2];continue}if(w<.01){if(e.colorSpace===us.RGB)o[b]=(1-D)*v[0]+D*y[0],o[b+1]=(1-D)*v[1]+D*y[1],o[b+2]=(1-D)*v[2]+D*y[2];else if(e.colorSpace===us.HSV){const F=[],j=[];Hg(v,F),Hg(y,j),e.hSVWrap&&(F[0]-j[0]>.5||j[0]-F[0]>.5)&&(F[0]>j[0]?F[0]-=1:j[0]-=1);const te=[];te[0]=(1-D)*F[0]+D*j[0],te[0]<0&&(te[0]+=1),te[1]=(1-D)*F[1]+D*j[1],te[2]=(1-D)*F[2]+D*j[2],Kf(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else if(e.colorSpace===us.LAB){const F=[],j=[];nd(v,F),nd(y,j);const te=[];te[0]=(1-D)*F[0]+D*j[0],te[1]=(1-D)*F[1]+D*j[1],te[2]=(1-D)*F[2]+D*j[2],vy(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else e.colorSpace===us.DIVERGING?(ID(D,v,y,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]):Tl("ColorSpace set to invalid value.",e.colorSpace);continue}D<.5?D=.5*(D*2)**(1+10*w):D>.5&&(D=1-.5*((1-D)*2)**(1+10*w));const I=D*D,P=I*D,O=2*P-3*I+1,A=-2*P+3*I,V=P-2*I+D,G=P-I;let R,N;if(e.colorSpace===us.RGB)for(let F=0;F<3;F++)R=y[F]-v[F],N=(1-w)*R,o[b+F]=O*v[F]+A*y[F]+V*N+G*N;else if(e.colorSpace===us.HSV){const F=[],j=[];Hg(v,F),Hg(y,j),e.hSVWrap&&(F[0]-j[0]>.5||j[0]-F[0]>.5)&&(F[0]>j[0]?F[0]-=1:j[0]-=1);const te=[];for(let ie=0;ie<3;ie++)R=j[ie]-F[ie],N=(1-w)*R,te[ie]=O*F[ie]+A*j[ie]+V*N+G*N,ie===0&&te[ie]<0&&(te[ie]+=1);Kf(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else if(e.colorSpace===us.LAB){const F=[],j=[];nd(v,F),nd(y,j);const te=[];for(let ie=0;ie<3;ie++)R=j[ie]-F[ie],N=(1-w)*R,te[ie]=O*F[ie]+A*j[ie]+V*N+G*N;vy(te,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]}else e.colorSpace===us.DIVERGING?(ID(D,v,y,x),o[b]=x[0],o[b+1]=x[1],o[b+2]=x[2]):Tl("ColorSpace set to invalid value.");for(let F=0;F<3;F++)o[b+F]=o[b+F]<0?0:o[b+F],o[b+F]=o[b+F]>1?1:o[b+F]}}},t.getUint8Table=function(r,n,i){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(t.getMTime()<=e.buildTime&&e.tableSize===i&&e.tableWithAlpha!==o)return e.table;if(e.nodes.length===0)return Tl("Attempting to lookup a value with no points in the function"),e.table;const a=o?4:3;(e.tableSize!==i||e.tableWithAlpha!==o)&&(e.table=new Uint8Array(i*a),e.tableSize=i,e.tableWithAlpha=o);const s=[];t.getTable(r,n,i,s);for(let c=0;c{t.removeAllPoints();const n=r.getNumberOfComponents();for(let i=0;i{let a=0;t.removeAllPoints(),i>1&&(a=(n-r)/(i-1));for(let s=0;sr<0||r>=e.nodes.length?(Tl("Index out of range!"),-1):(n[0]=e.nodes[r].x,n[1]=e.nodes[r].r,n[2]=e.nodes[r].g,n[3]=e.nodes[r].b,n[4]=e.nodes[r].midpoint,n[5]=e.nodes[r].sharpness,1),t.setNodeValue=(r,n)=>{if(r<0||r>=e.nodes.length)return Tl("Index out of range!"),-1;const i=e.nodes[r].x;return e.nodes[r].x=n[0],e.nodes[r].r=n[1],e.nodes[r].g=n[2],e.nodes[r].b=n[3],e.nodes[r].midpoint=n[4],e.nodes[r].sharpness=n[5],i!==n[0]?t.sortAndUpdateRange():t.modified(),1},t.getNumberOfAvailableColors=()=>{var n;if(e.indexedLookup&&t.getSize())return t.getSize();if(e.tableSize)return e.tableSize;const r=((n=e.nodes)==null?void 0:n.length)??0;return Math.max(4094,r)},t.getIndexedColor=(r,n)=>{const i=t.getSize();if(i>0&&r>=0){const a=[];t.getNodeValue(r%i,a);for(let s=0;s<3;++s)n[s]=a[s+1];n[3]=1;return}const o=t.getNanColorByReference();n[0]=o[0],n[1]=o[1],n[2]=o[2],n[3]=1},t.fillFromDataPointer=(r,n)=>{if(!(r<=0||!n)){t.removeAllPoints();for(let i=0;i{const i=[r,n],o=t.getRange();if(o[1]===i[1]&&o[0]===i[0])return;if(i[1]===i[0]){Tl("attempt to set zero width color range");return}const a=(i[1]-i[0])/(o[1]-o[0]),s=i[0]-o[0]*a;for(let c=0;c{const n=t.getRange(),i=[];n[0]r[1]?(t.getColor(r[1],i),t.addRGBPoint(r[1],i[0],i[1],i[2])):(t.getColor(n[1],i),t.addRGBPoint(r[1],i[0],i[1],i[2])),t.sortAndUpdateRange();for(let o=0;o=r[0]&&e.nodes[o].x<=r[1]?e.nodes.splice(o,1):++o;return 1},t.estimateMinNumberOfSamples=(r,n)=>{const i=t.findMinimumXDistance();return Math.ceil((n-r)/i)},t.findMinimumXDistance=()=>{if(e.nodes.length<2)return-1;let r=Number.MAX_VALUE;for(let n=0;n{if(t.getSize()===0){hie("Transfer Function Has No Points!");return}e.indexedLookup?t.mapDataIndexed(r,n,i,o):t.mapData(r,n,i,o)},t.mapData=(r,n,i,o)=>{if(t.getSize()===0){gie("Transfer Function Has No Points!");return}const a=Math.floor(t.getAlpha()*255+.5),s=r.getNumberOfTuples(),c=r.getNumberOfComponents(),l=n.getData(),f=r.getData(),u=[];if(i===pv.RGBA)for(let d=0;d{const n=JSON.stringify(e.colorSpace);r.ColorSpace&&(e.colorSpace=us[r.ColorSpace.toUpperCase()],e.colorSpace===void 0&&(Tl(`ColorSpace ${r.ColorSpace} not supported, using RGB instead`),e.colorSpace=us.RGB));let i=n!==JSON.stringify(e.colorSpace);const o=i||JSON.stringify(e.nanColor);if(r.NanColor)for(e.nanColor=[].concat(r.NanColor);e.nanColor.length<4;)e.nanColor.push(1);i=i||o!==JSON.stringify(e.nanColor);const a=i||JSON.stringify(e.nodes);if(r.RGBPoints){const l=r.RGBPoints.length;e.nodes=[];const f=.5,u=0;for(let d=0;d2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,yie,r),aw.extend(t,e,r),e.table=[],e.nodes=[],e.nanColor=[.5,0,0,1],e.belowRangeColor=[0,0,0,1],e.aboveRangeColor=[1,1,1,1],e.buildTime={},J.obj(e.buildTime),J.get(t,e,["buildTime","mappingRange"]),J.setGet(t,e,["useAboveRangeColor","useBelowRangeColor","discretize","numberOfValues",{type:"enum",name:"colorSpace",enum:us},{type:"enum",name:"scale",enum:N4}]),J.setArray(t,e,["nanColor","belowRangeColor","aboveRangeColor"],4),J.getArray(t,e,["nanColor","belowRangeColor","aboveRangeColor"]),vie(t,e)}const wie=J.newInstance(SN,"vtkColorTransferFunction");var Ql={newInstance:wie,extend:SN,...CN},xie=[{Name:"KAAMS",IndexedColors:[1,1,1,1,0,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,1,.63,.63,1,.67,.5,.33,1,.5,.75,.53,.35,.7,1,.75,.5],Annotations:[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11]},{ColorSpace:"Diverging",Name:"Cool to Warm",NanColor:[1,1,0],RGBPoints:[0,.23137254902,.298039215686,.752941176471,.5,.865,.865,.865,1,.705882352941,.0156862745098,.149019607843]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Cool to Warm (Extended)",NanColor:[.25,0,0],RGBPoints:[0,0,0,.34902,.03125,.039216,.062745,.380392,.0625,.062745,.117647,.411765,.09375,.090196,.184314,.45098,.125,.12549,.262745,.501961,.15625,.160784,.337255,.541176,.1875,.2,.396078,.568627,.21875,.239216,.454902,.6,.25,.286275,.521569,.65098,.28125,.337255,.592157,.701961,.3125,.388235,.654902,.74902,.34375,.466667,.737255,.819608,.375,.572549,.819608,.878431,.40625,.654902,.866667,.909804,.4375,.752941,.917647,.941176,.46875,.823529,.956863,.968627,.5,.988235,.960784,.901961,.5,.941176,.984314,.988235,.52,.988235,.945098,.85098,.54,.980392,.898039,.784314,.5625,.968627,.835294,.698039,.59375,.94902,.733333,.588235,.625,.929412,.65098,.509804,.65625,.909804,.564706,.435294,.6875,.878431,.458824,.352941,.71875,.839216,.388235,.286275,.75,.760784,.294118,.211765,.78125,.701961,.211765,.168627,.8125,.65098,.156863,.129412,.84375,.6,.094118,.094118,.875,.54902,.066667,.098039,.90625,.501961,.05098,.12549,.9375,.45098,.054902,.172549,.96875,.4,.054902,.192157,1,.34902,.070588,.211765]},{ColorSpace:"Diverging",Name:"Warm to Cool",NanColor:[1,1,0],RGBPoints:[0,.705882352941,.0156862745098,.149019607843,.5,.865,.865,.865,1,.23137254902,.298039215686,.752941176471]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Warm to Cool (Extended)",NanColor:[.250004,0,0],RGBPoints:[0,.34902,0,.129412,.025,.4,.00392157,.101961,.05,.470588,.0156863,.0901961,.075,.54902,.027451,.0705882,.1,.619608,.0627451,.0431373,.125,.690196,.12549,.0627451,.15,.741176,.184314,.0745098,.175,.788235,.266667,.0941176,.2,.811765,.345098,.113725,.225,.831373,.411765,.133333,.25,.85098,.47451,.145098,.275,.870588,.54902,.156863,.3,.878431,.619608,.168627,.325,.890196,.658824,.196078,.35,.909804,.717647,.235294,.375,.929412,.776471,.278431,.395522,.94902,.823529,.321569,.418905,.968627,.87451,.407843,.444278,.980392,.917647,.509804,.470149,.988235,.956863,.643137,.483582,.992157,.964706,.713725,.499,.988235,.980392,.870588,.5,1,1,1,.501,.913725,.988235,.937255,.516418,.827451,.980392,.886275,.531343,.764706,.980392,.866667,.546766,.658824,.980392,.843137,.564179,.572549,.964706,.835294,.587562,.423529,.941176,.87451,.60597,.262745,.901961,.862745,.629851,.0705882,.854902,.870588,.651741,.0509804,.8,.85098,.681592,.0235294,.709804,.831373,.712935,.0313725,.615686,.811765,.75,.0313725,.537255,.788235,.775,.0392157,.466667,.768627,.8,.0509804,.396078,.741176,.825,.054902,.317647,.709804,.85,.054902,.243137,.678431,.875,.0431373,.164706,.639216,.9,.0313725,.0980392,.6,.925,.0392157,.0392157,.560784,.95,.105882,.0509804,.509804,.975,.113725,.0235294,.45098,1,.12549,0,.380392]},{ColorSpace:"RGB",Name:"Rainbow Desaturated",NanColor:[1,1,0],RGBPoints:[0,.278431372549,.278431372549,.858823529412,.143,0,0,.360784313725,.285,0,1,1,.429,0,.501960784314,0,.571,1,1,0,.714,1,.380392156863,0,.857,.419607843137,0,0,1,.878431372549,.301960784314,.301960784314]},{ColorSpace:"RGB",Name:"Cold and Hot",NanColor:[1,1,0],RGBPoints:[0,0,1,1,.45,0,0,1,.5,0,0,.501960784314,.55,1,0,0,1,1,1,0]},{ColorSpace:"RGB",Name:"Black-Body Radiation",NanColor:[0,.498039215686,1],RGBPoints:[0,0,0,0,.4,.901960784314,0,0,.8,.901960784314,.901960784314,0,1,1,1,1]},{ColorSpace:"RGB",Name:"X Ray",NanColor:[1,0,0],RGBPoints:[0,1,1,1,1,0,0,0]},{ColorSpace:"RGB",Name:"Grayscale",NanColor:[1,0,0],RGBPoints:[0,0,0,0,1,1,1,1]},{ColorSpace:"RGB",Name:"BkRd",NanColor:[0,1,1],RGBPoints:[0,0,0,0,1,1,0,0]},{ColorSpace:"RGB",Name:"BkGn",NanColor:[1,0,1],RGBPoints:[0,0,0,0,1,0,1,0]},{ColorSpace:"RGB",Name:"BkBu",NanColor:[1,1,0],RGBPoints:[0,0,0,0,1,0,0,1]},{ColorSpace:"RGB",Name:"BkMa",NanColor:[0,1,0],RGBPoints:[0,0,0,0,1,1,0,1]},{ColorSpace:"RGB",Name:"BkCy",NanColor:[0,1,1],RGBPoints:[0,0,0,0,1,0,1,1]},{ColorSpace:"RGB",Name:"Black, Blue and White",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.333,0,0,.501960784314,.666,0,.501960784314,1,1,1,1,1]},{ColorSpace:"RGB",Name:"Black, Orange and White",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.333,.501960784314,0,0,.666,1,.501960784314,0,1,1,1,1]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Linear YGB 1211g",NanColor:[.25,0,0],RGBPoints:[0,1,.988235,.968627,.02,1,.952941,.878431,.05,.968627,.905882,.776471,.1,.94902,.898039,.647059,.15,.901961,.878431,.556863,.2,.847059,.858824,.482353,.25,.690196,.819608,.435294,.3,.513725,.768627,.384314,.35,.337255,.721569,.337255,.4,.278431,.658824,.392157,.45,.231373,.639216,.435294,.5,.203922,.6,.486275,.55,.172549,.568627,.537255,.6,.141176,.517647,.54902,.65,.133333,.458824,.541176,.7,.12549,.396078,.529412,.75,.117647,.321569,.521569,.8,.121569,.258824,.509804,.85,.133333,.227451,.501961,.9,.145098,.192157,.490196,.95,.188235,.164706,.470588,1,.258824,.196078,.439216]},{ColorSpace:"CIELAB",Creator:"Francesca Samsel",Name:"Linear Green (Gr4L)",NanColor:[.25,0,0],RGBPoints:[0,.054902,.109804,.121569,.05,.07451,.172549,.180392,.1,.086275,.231373,.219608,.15,.094118,.278431,.25098,.2,.109804,.34902,.278431,.25,.113725,.4,.278431,.3,.117647,.45098,.270588,.35,.117647,.490196,.243137,.4,.113725,.521569,.203922,.45,.109804,.54902,.152941,.5,.082353,.588235,.082353,.55,.109804,.631373,.05098,.6,.211765,.678431,.082353,.65,.317647,.721569,.113725,.7,.431373,.760784,.160784,.75,.556863,.8,.239216,.8,.666667,.839216,.294118,.85,.784314,.878431,.396078,.9,.886275,.921569,.533333,.95,.960784,.94902,.670588,1,1,.984314,.901961]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Linear Blue (8_31f)",NanColor:[.25,0,0],RGBPoints:[0,.960784,1,.980392,.05,.815686,.960784,.913725,.1,.670588,.929412,.870588,.15,.556863,.901961,.843137,.2,.478431,.870588,.823529,.25,.439216,.831373,.803922,.3,.4,.8,.788235,.35,.376471,.768627,.768627,.4,.34902,.709804,.729412,.45,.32549,.654902,.690196,.5,.301961,.607843,.658824,.55,.247059,.545098,.619608,.6,.239216,.494118,.580392,.65,.227451,.439216,.541176,.7,.227451,.403922,.521569,.75,.231373,.368627,.501961,.8,.227451,.321569,.470588,.85,.219608,.282353,.439216,.9,.192157,.235294,.4,.95,.160784,.184314,.34902,1,.133333,.12549,.301961]},{ColorSpace:"HSV",Name:"Blue to Red Rainbow",NanColor:[.498039215686,.498039215686,.498039215686],RGBPoints:[0,0,0,1,1,1,0,0]},{ColorSpace:"HSV",Name:"Red to Blue Rainbow",NanColor:[.498039215686,.498039215686,.498039215686],RGBPoints:[0,1,0,0,1,0,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended White",NanColor:[1,1,0],RGBPoints:[0,1,1,1,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended Grey",NanColor:[1,1,0],RGBPoints:[0,.317647058824,.341176470588,.43137254902,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Rainbow Blended Black",NanColor:[1,1,0],RGBPoints:[0,0,0,0,.17,0,0,1,.34,0,1,1,.5,0,1,0,.67,1,1,0,.84,1,0,0,1,.878431372549,0,1]},{ColorSpace:"RGB",Name:"Blue to Yellow",NanColor:[1,0,0],RGBPoints:[0,.0392156862745,.0392156862745,.949019607843,1,.949019607843,.949019607843,.0392156862745]},{ColorSpace:"HSV",Name:"blot",RGBPoints:[0,0,0,1,.166,0,0,1,.167,1,0,1,.332,1,0,1,.333,0,1,1,.5,0,1,1,.501,0,1,0,.666,0,1,0,.667,1,1,0,.832,1,1,0,.833,1,0,0,1,1,0,0]},{ColorSpace:"Lab",Name:"CIELab Blue to Red",NanColor:[1,1,0],RGBPoints:[0,0,.6,.749019607843,1,.76862745098,.466666666667,.341176470588]},{ColorSpace:"RGB",Name:"jet",RGBPoints:[-1,0,0,.5625,-.777778,0,0,1,-.269841,0,1,1,-.015873,.5,1,.5,.238095,1,1,0,.746032,1,0,0,1,.5,0,0]},{ColorSpace:"RGB",Name:"rainbow",RGBPoints:[-1,0,0,1,-.5,0,1,1,0,0,1,0,.5,1,1,0,1,1,0,0]},{ColorSpace:"Lab",Name:"erdc_rainbow_bright",RGBPoints:[-1,.32549,.14902,.960784,-.866221,.297047,.375586,.963836,-.732441,.180302,.536818,.964627,-.598662,.1302,.649207,.929647,-.464883,.0445143,.749654,.855998,-.331104,.0271325,.830713,.721527,-.197324,.259504,.866145,.543555,-.0635452,.428364,.890725,.329819,.0702341,.568503,.898508,.187623,.204013,.738259,.890317,.0825461,.337793,.84546,.86136,.0147555,.471572,.912191,.808018,0,.605351,.962848,.710445,0,.73913,.999469,.600258,.0176284,.87291,.994156,.445975,.193912,1,.980407,.247105,.262699]},{ColorSpace:"Lab",Name:"erdc_rainbow_dark",RGBPoints:[-1,0,0,.423499,-.866221,0,.119346,.529237,-.732441,0,.238691,.634976,-.598662,0,.346852,.68788,-.464883,0,.45022,.718141,-.331104,0,.553554,.664839,-.197324,0,.651082,.519303,-.0635452,.115841,.72479,.352857,.0702341,.326771,.781195,.140187,.204013,.522765,.798524,.0284624,.337793,.703162,.788685,.00885756,.471572,.845118,.751133,0,.605351,.955734,.690825,0,.73913,.995402,.567916,.0618524,.87291,.987712,.403398,.164851,1,.980407,.247105,.262699]},{ColorSpace:"Lab",Name:"nic_CubicL",RGBPoints:[-1,.479965,.0118108,.5307,-.87451,.522213,.0551282,.706919,-.74902,.50839,.237278,.867764,-.623529,.451617,.373834,.987255,-.498039,.39365,.497255,.97506,-.372549,.328631,.599639,.891843,-.247059,.250043,.690286,.778553,-.121569,.249656,.764905,.645857,.00392157,.297954,.821466,.50449,.129412,.337509,.872595,.358447,.254902,.430011,.913789,.297079,.380392,.587191,.931381,.333353,.505882,.727937,.93591,.353742,.631373,.826403,.921081,.365066,.756863,.893201,.846317,.372662,.882353,.965347,.73884,.378506,1,.983235,.597451,.366856]},{ColorSpace:"Lab",Name:"nic_CubicYF",RGBPoints:[-1,.5151,.0482,.6697,-.87451,.520711,.168955,.800574,-.74902,.493694,.278596,.911824,-.623529,.440026,.369475,.984978,-.498039,.398932,.457593,.987053,-.372549,.350651,.540644,.929608,-.247059,.298827,.615625,.857729,-.121569,.239928,.685061,.769531,.00392157,.228832,.739349,.673287,.129412,.263297,.78608,.569988,.254902,.298107,.828337,.460214,.380392,.33092,.864071,.352674,.505882,.38306,.898169,.287309,.631373,.49023,.917481,.307961,.756863,.62372,.926026,.332309,.882353,.717458,.92527,.342476,1,.8,.9255,.3529]},{ColorSpace:"Lab",Name:"gist_earth",RGBPoints:[-1,0,0,0,-.87451,.239216,.027451,.415686,-.74902,.0901961,.254902,.556863,-.623529,.0941176,.352941,.54902,-.498039,.105882,.435294,.533333,-.372549,.12549,.52549,.501961,-.247059,.156863,.596078,.443137,-.121569,.196078,.65098,.380392,.00392157,.282353,.717647,.301961,.129412,.466667,.772549,.27451,.254902,.678431,.784314,.309804,.380392,.901961,.756863,.376471,.505882,.992157,.705882,.521569,.631373,1,.721569,.701961,.756863,1,.784314,.784314,.882353,1,.866667,.866667,1,1,1,1]},{ColorSpace:"Lab",Name:"2hot",RGBPoints:[-1,.0416667,0,0,-.873016,.208333,0,0,-.746032,.375,0,0,-.619048,.541667,0,0,-.492063,.708333,0,0,-.365079,.854137,0,0,-.238095,.937488,.039062,0,-.111111,1,.208333,0,.015873,1,.375,0,.142857,1,.541667,0,.269841,1,.708333,0,.396825,1,.858805,.03125,.52381,1,.947392,.15625,.650794,1,1,.3125,.777778,1,1,.5625,.904762,1,1,.8125,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_red2yellow_BW",RGBPoints:[-1,754296e-12,0,109827e-10,-.87451,.18285,.0264094,0,-.74902,.3066,0,0,-.623529,.422841,0,0,-.498039,.522945,0,0,-.372549,.605721,0,0,-.247059,.672502,.14168,0,-.121569,.728167,.244025,0,.00392157,.781215,.333454,0,.129412,.825,.423586,0,.254902,.855893,.516793,0,.380392,.880491,.608846,0,.505882,.910305,.695505,0,.631373,.94109,.779067,.223528,.756863,.967873,.858572,.473521,.882353,.986815,.933211,.751583,1,1,1,.999997]},{ColorSpace:"Lab",Name:"erdc_marine2gold_BW",RGBPoints:[-1,111641e-12,0,162551e-11,-.87451,.0413146,.0619808,.209857,-.74902,.0185557,.101341,.350684,-.623529,.00486405,.149847,.461054,-.498039,.0836345,.210845,.517906,-.372549,.173222,.276134,.541793,-.247059,.259857,.343877,.535869,-.121569,.362299,.408124,.504293,.00392157,.468266,.468276,.468257,.129412,.582781,.527545,.374914,.254902,.691591,.585251,.274266,.380392,.784454,.645091,.247332,.505882,.862299,.710383,.27518,.631373,.920863,.782923,.351563,.756863,.955792,.859699,.533541,.882353,.976162,.93433,.780671,1,1,1,.999983]},{ColorSpace:"Lab",Name:"erdc_blue2gold_BW",RGBPoints:[-1,0,0,0,-.87451,.0742735,.0440331,.230013,-.74902,.125276,.0258685,.415826,-.623529,.143879,.0163031,.591346,-.498039,.212261,.0627855,.705239,-.372549,.306048,.141178,.763636,-.247059,.391537,.232286,.773263,-.121569,.461734,.336633,.708321,.00392157,.54209,.427581,.590007,.129412,.61704,.508623,.460978,.254902,.702703,.579586,.309117,.380392,.790336,.644811,.170397,.505882,.870173,.710733,.117134,.631373,.93656,.781991,.157144,.756863,.965672,.862068,.409836,.882353,.985751,.936296,.714162,1,1,1,.999999]},{ColorSpace:"Lab",Name:"erdc_sapphire2gold_BW",RGBPoints:[-1,.107704,.107708,.107694,-.87451,.1851,.112354,.308554,-.74902,.236782,.114233,.48788,-.623529,.28296,.126187,.639464,-.498039,.344787,.171643,.739713,-.372549,.413325,.242371,.76913,-.247059,.481863,.3131,.719841,-.121569,.550402,.383829,.612222,.00392157,.61894,.454558,.51126,.129412,.687478,.525287,.39993,.254902,.756017,.596016,.289923,.380392,.824555,.666745,.255498,.505882,.892979,.736822,.27696,.631373,.938851,.804966,.351734,.756863,.966491,.874853,.53572,.882353,.982105,.94153,.782579,1,1,1,.999986]},{ColorSpace:"Lab",Name:"erdc_red2purple_BW",RGBPoints:[-1,0,0,0,-.87451,.167793,.0166271,.0431278,-.74902,.262608,.0107595,.0791181,-.623529,.351902,.0101858,.100926,-.498039,.441257,.0160835,.131919,-.372549,.5221,.0555972,.195625,-.247059,.593852,.104294,.310234,-.121569,.654628,.158115,.448486,.00392157,.707443,.220914,.570253,.129412,.749504,.293268,.67897,.254902,.781587,.370517,.779269,.380392,.809951,.451099,.855831,.505882,.84424,.531462,.900451,.631373,.865174,.620901,.91606,.756863,.875041,.714054,.910284,.882353,.880764,.80554,.896276,1,.887572,.887591,.887556]},{ColorSpace:"Lab",Name:"erdc_purple2pink_BW",RGBPoints:[-1,0,0,0,-.87451,.117562,.0291202,.175876,-.74902,.178368,.0458476,.285454,-.623529,.237731,.0680173,.387717,-.498039,.300877,.0956291,.484802,-.372549,.370929,.136858,.554985,-.247059,.449033,.189273,.58863,-.121569,.529971,.245796,.598587,.00392157,.609914,.300643,.610244,.129412,.697079,.351286,.616371,.254902,.785858,.401991,.617376,.380392,.862517,.45745,.64463,.505882,.91359,.525462,.705336,.631373,.932583,.61064,.767412,.756863,.922478,.706966,.817522,.882353,.901302,.803071,.856311,1,.887571,.887591,.887549]},{ColorSpace:"Lab",Name:"erdc_pbj_lin",RGBPoints:[-1,0,0,0,-.87451,.091821,.0611476,.10617,-.74902,.160311,.0900022,.192713,-.623529,.22484,.12126,.272128,-.498039,.291263,.157469,.340828,-.372549,.360015,.200388,.388903,-.247059,.437497,.250058,.387201,-.121569,.512636,.304969,.355955,.00392157,.582603,.360874,.33488,.129412,.655126,.416374,.306351,.254902,.725889,.473329,.279051,.380392,.778125,.537928,.302697,.505882,.815894,.606931,.382431,.631373,.839159,.679308,.497608,.756863,.854748,.751666,.631792,.882353,.869483,.822508,.768592,1,.887572,.887589,.887565]},{ColorSpace:"Lab",Name:"erdc_blue2green_muted",RGBPoints:[-1,.107704,.107708,.107695,-.87451,.141522,.13066,.270741,-.74902,.180123,.146119,.42308,-.623529,.210161,.169674,.551795,-.498039,.239701,.212939,.634969,-.372549,.253916,.282947,.653641,-.247059,.242791,.366933,.608521,-.121569,.226302,.446776,.52693,.00392157,.236237,.514689,.458798,.129412,.274641,.577589,.376069,.254902,.349625,.633993,.288131,.380392,.4437,.683677,.260497,.505882,.536247,.731214,.285424,.631373,.628472,.777128,.349151,.756863,.718259,.819287,.496825,.882353,.804768,.856164,.703299,1,.887571,.887591,.887548]},{ColorSpace:"Lab",Name:"erdc_blue2green_BW",RGBPoints:[-1,363578e-12,0,529374e-11,-.87451,.0539915,.0577948,.212806,-.74902,.0620393,.0758942,.388959,-.623529,.0697499,.102032,.54177,-.498039,.113295,.156156,.64334,-.372549,.152047,.243196,.670283,-.247059,.158096,.344084,.622864,-.121569,.151142,.43922,.532767,.00392157,.17155,.521588,.457719,.129412,.225861,.599141,.363997,.254902,.32328,.67007,.259083,.380392,.442344,.733697,.223754,.505882,.558409,.794941,.257411,.631373,.673875,.854344,.340822,.756863,.787244,.909326,.524717,.882353,.896483,.958063,.775914,1,1,1,.999982]},{ColorSpace:"Lab",Name:"GREEN-WHITE_LINEAR",RGBPoints:[-1,0,0,0,-.87451,0,.062745,0,-.74902,0,.12549,0,-.623529,0,.188235,0,-.498039,0,.25098,0,-.372549,0,.313725,0,-.247059,0,.376471,0,-.121569,.094118,.439216,0,.00392157,.196078,.501961,0,.129412,.294118,.564706,0,.254902,.396078,.627451,0,.380392,.498039,.690196,0,.505882,.6,.752941,.145098,.631373,.701961,.815686,.364706,.756863,.8,.878431,.580392,.882353,.901961,.941176,.796078,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_green2yellow_BW",RGBPoints:[-1,0,0,0,-.87451,0,.105542,.0603919,-.74902,0,.159454,.104148,-.623529,0,.219502,.15542,-.498039,0,.282276,.203811,-.372549,0,.346331,.235652,-.247059,0,.411765,.235428,-.121569,0,.477177,.217977,.00392157,.0593644,.541635,.21361,.129412,.233081,.604722,.210591,.254902,.369803,.664942,.226536,.380392,.498446,.722367,.288237,.505882,.601929,.782244,.380815,.631373,.703207,.840497,.512134,.756863,.803186,.896433,.674462,.882353,.903834,.950266,.846715,1,1,1,.999981]},{ColorSpace:"Lab",Name:"blue2cyan",RGBPoints:[-1,0,0,0,-.87451,0,.152941,.364706,-.74902,0,.254902,.470588,-.623529,0,.34902,.572549,-.498039,0,.443137,.670588,-.372549,0,.537255,.772549,-.247059,0,.627451,.870588,-.121569,0,.717647,.964706,.00392157,.0784314,.772549,1,.129412,.207843,.858824,1,.254902,.32549,.941176,1,.380392,.45098,1,1,.505882,.560784,1,1,.631373,.662745,1,1,.756863,.760784,1,1,.882353,.870588,1,1,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_blue2cyan_BW",RGBPoints:[-1,405298e-12,0,59012e-10,-.87451,.0207526,.0740933,.18093,-.74902,0,.121033,.30343,-.623529,0,.166892,.416095,-.498039,0,.216768,.524796,-.372549,.0164769,.275471,.608585,-.247059,.0544527,.344824,.659267,-.121569,.0880643,.419118,.688675,.00392157,.127938,.492556,.720256,.129412,.149476,.566946,.756918,.254902,.188961,.641333,.792122,.380392,.245482,.715336,.827609,.505882,.329216,.786235,.874761,.631373,.453558,.852803,.918466,.756863,.626281,.910493,.954,.882353,.82257,.958709,.980146,1,1,1,.999989]},{ColorSpace:"Lab",Name:"erdc_blue_BW",RGBPoints:[-1,0,0,0,-.87451,.0425591,.0763529,.150682,-.74902,.0569472,.119154,.275403,-.623529,.0635978,.164772,.395427,-.498039,.0774342,.213851,.510014,-.372549,.106815,.267034,.615102,-.247059,.122093,.324649,.720068,-.121569,.160851,.387068,.806956,.00392157,.213754,.453516,.878012,.129412,.26722,.524656,.932436,.254902,.326844,.599279,.968038,.380392,.403403,.674712,.984784,.505882,.499703,.745519,1,.631373,.615055,.813983,1,.756863,.74405,.879228,1,.882353,.877909,.941913,1,1,1,1,.999996]},{ColorSpace:"Lab",Name:"BLUE-WHITE",RGBPoints:[-1,0,0,0,-.87451,0,0,.082353,-.74902,0,0,.168627,-.623529,0,0,.254902,-.498039,0,0,.337255,-.372549,0,0,.423529,-.247059,0,0,.509804,-.121569,0,.101961,.592157,.00392157,0,.203922,.678431,.129412,0,.301961,.764706,.254902,0,.403922,.85098,.380392,0,.505882,.933333,.505882,0,.603922,1,.631373,.254902,.705882,1,.756863,.509804,.807843,1,.882353,.764706,.905882,1,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_purple_BW",RGBPoints:[-1,4264e-11,0,620844e-12,-.87451,.100579,.0593111,.145666,-.74902,.167794,.0889224,.254953,-.623529,.231446,.123339,.360511,-.498039,.296699,.163027,.461278,-.372549,.363211,.209286,.55306,-.247059,.431136,.260776,.637195,-.121569,.498202,.320012,.705799,.00392157,.567456,.380459,.778091,.129412,.629381,.445284,.8448,.254902,.688373,.517374,.895694,.380392,.74891,.590906,.93976,.505882,.805017,.667956,.977626,.631373,.850914,.752618,.992396,.756863,.89724,.838454,.994093,.882353,.948461,.922603,.994449,1,1,1,.999967]},{ColorSpace:"Lab",Name:"erdc_magenta_BW",RGBPoints:[-1,0,0,254023e-10,-.87451,.128696,.0456782,.11635,-.74902,.228133,.0476299,.201452,-.623529,.327273,.0374065,.282107,-.498039,.420953,.0408166,.35709,-.372549,.511562,.0642203,.430511,-.247059,.599552,.102686,.504257,-.121569,.684646,.150536,.579429,.00392157,.765817,.205978,.656062,.129412,.839176,.27229,.731807,.254902,.89536,.357594,.797309,.380392,.930238,.457825,.846984,.505882,.945921,.564536,.880571,.631373,.948995,.670753,.902279,.756863,.947124,.772819,.918171,.882353,.947265,.869424,.934352,1,.954719,.95475,.954726]},{ColorSpace:"Lab",Name:"magenta",RGBPoints:[-1,0,0,0,-.87451,.364706,0,.152941,-.74902,.470588,0,.254902,-.623529,.572549,0,.34902,-.498039,.670588,0,.443137,-.372549,.772549,0,.537255,-.247059,.870588,0,.627451,-.121569,.964706,0,.717647,.00392157,1,.0784314,.772549,.129412,1,.207843,.858824,.254902,1,.32549,.941176,.380392,1,.45098,1,.505882,1,.560784,1,.631373,1,.662745,1,.756863,1,.760784,1,.882353,1,.870588,1,1,1,1,1]},{ColorSpace:"Lab",Name:"RED-PURPLE",RGBPoints:[-1,0,0,0,-.87451,.188235,0,.007843,-.74902,.345098,0,.035294,-.623529,.439216,0,.098039,-.498039,.533333,0,.152941,-.372549,.627451,.015686,.211765,-.247059,.721569,.031373,.266667,-.121569,.8,.047059,.329412,.00392157,.862745,.047059,.403922,.129412,.941176,.062745,.466667,.254902,.988235,.078431,.54902,.380392,.988235,.141176,.643137,.505882,.988235,.25098,.729412,.631373,.988235,.376471,.811765,.756863,.988235,.54902,.886275,.882353,.988235,.752941,.952941,1,.996078,.996078,.996078]},{ColorSpace:"Lab",Name:"erdc_red_BW",RGBPoints:[-1,0,0,0,-.87451,.147204,.0480135,.0401815,-.74902,.253411,.0617478,.0301333,-.623529,.356059,.0746331,.0446897,-.498039,.457731,.0934935,.0636931,-.372549,.557199,.122714,.0860013,-.247059,.665179,.144238,.105585,-.121569,.763833,.187056,.138326,.00392157,.847035,.254558,.189407,.129412,.905663,.345937,.258215,.254902,.941431,.447111,.346277,.380392,.962608,.546927,.457571,.505882,.987833,.637276,.569944,.631373,.994202,.732176,.687958,.756863,.993304,.826268,.800567,.882353,.994413,.917205,.906393,1,1,1,.999979]},{ColorSpace:"Lab",Name:"RED_TEMPERATURE",RGBPoints:[-1,0,0,0,-.87451,.090196,0,0,-.74902,.180392,0,0,-.623529,.270588,0,0,-.498039,.360784,0,0,-.372549,.45098,0,0,-.247059,.545098,0,0,-.121569,.635294,0,0,.00392157,.72549,.058824,0,.129412,.815686,.176471,0,.254902,.905882,.294118,0,.380392,1,.411765,0,.505882,1,.533333,.027451,.631373,1,.65098,.27451,.756863,1,.768627,.521569,.882353,1,.886275,.768627,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_orange_BW",RGBPoints:[-1,0,0,253806e-10,-.87451,.135871,.0593824,0,-.74902,.224328,.0907216,0,-.623529,.318083,.119647,0,-.498039,.414443,.150246,0,-.372549,.511077,.184884,0,-.247059,.605501,.226033,0,-.121569,.695274,.275491,0,.00392157,.777826,.334445,0,.129412,.851498,.402441,0,.254902,.915899,.47759,602975e-9,.380392,.971984,.557882,.0361443,.505882,1,.641287,.135967,.631373,1,.725198,.27997,.756863,1,.808205,.438135,.882353,1,.89306,.587036,1,1,.977928,.721599]},{ColorSpace:"Lab",Name:"heated_object",RGBPoints:[-1,0,0,0,-.87451,.34902,.0862745,0,-.74902,.45098,.172549,0,-.623529,.52549,.231373,0,-.498039,.580392,.278431,0,-.372549,.623529,.313725,0,-.247059,.670588,.352941,0,-.121569,.717647,.392157,0,.00392157,.772549,.439216,0,.129412,.839216,.494118,0,.254902,.901961,.541176,0,.380392,.968627,.6,0,.505882,1,.658824,0,.631373,1,.721569,0,.756863,1,.827451,.298039,.882353,1,.976471,.72549,1,1,1,1]},{ColorSpace:"Lab",Name:"erdc_gold_BW",RGBPoints:[-1,0,0,190933e-10,-.87451,.128363,.0636265,0,-.74902,.193795,.111057,0,-.623529,.25976,.15987,0,-.498039,.328546,.210589,0,-.372549,.399726,.26332,0,-.247059,.472969,.318261,0,-.121569,.546245,.375827,0,.00392157,.61745,.436719,0,.129412,.685545,.501113,0,.254902,.749578,.568799,0,.380392,.80962,.6394,0,.505882,.865572,.712699,.10257,.631373,.917709,.787569,.233665,.756863,.966914,.863138,.369608,.882353,1,.939405,.496104,1,.999225,1,.612275]},{ColorSpace:"Lab",Name:"erdc_brown_BW",RGBPoints:[-1,33216e-11,0,483629e-11,-.87451,.14693,.0518172,0,-.74902,.225806,.0814996,0,-.623529,.301681,.111452,0,-.498039,.370487,.150664,0,-.372549,.43108,.199477,0,-.247059,.4849,.255107,0,-.121569,.536798,.313486,0,.00392157,.59286,.371167,0,.129412,.653119,.428135,0,.254902,.714589,.485917,.0379541,.380392,.774667,.54565,.116634,.505882,.831222,.608047,.183895,.631373,.880305,.674199,.260298,.756863,.922314,.742472,.367086,.882353,.959408,.811222,.497258,1,.993548,.875183,.622093]},{ColorSpace:"Lab",Name:"copper_Matlab",RGBPoints:[-1,0,0,0,-.87451,.0784314,.0501961,.0313725,-.74902,.156863,.100392,.0627451,-.623529,.235294,.150588,.0941176,-.498039,.313725,.200784,.12549,-.372549,.392157,.25098,.156863,-.247059,.470588,.301176,.188235,-.121569,.54902,.351373,.219608,.00392157,.627451,.401569,.25098,.129412,.705882,.451765,.282353,.254902,.784314,.501961,.313725,.380392,.862745,.552157,.345098,.505882,.941176,.602353,.376471,.631373,1,.652549,.407843,.756863,1,.702745,.439216,.882353,1,.752941,.470588,1,1,.8,.5]},{ColorSpace:"Lab",Name:"pink_Matlab",RGBPoints:[-1,0,0,0,-.87451,.312416,.204524,.204524,-.74902,.441822,.289241,.289241,-.623529,.54112,.354246,.354246,-.498039,.624831,.409048,.409048,-.372549,.698582,.45733,.45733,-.247059,.764404,.502282,.500979,-.121569,.791292,.591516,.54112,.00392157,.817297,.66895,.578481,.129412,.842499,.738308,.613572,.254902,.866968,.801687,.646762,.380392,.890766,.86041,.678329,.505882,.913944,.913944,.711254,.631373,.936549,.936549,.79459,.756863,.958621,.958621,.869979,.882353,.980196,.980196,.939336,1,1,1,1]},{ColorSpace:"Lab",Name:"bone_Matlab",RGBPoints:[-1,0,0,0,-.87451,.054902,.054902,.075817,-.74902,.109804,.109804,.151634,-.623529,.164706,.164706,.227451,-.498039,.219608,.219608,.303268,-.372549,.27451,.27451,.379085,-.247059,.329412,.329902,.454412,-.121569,.384314,.405719,.509314,.00392157,.439216,.481536,.564216,.129412,.494118,.557353,.619118,.254902,.54902,.63317,.67402,.380392,.603922,.708987,.728922,.505882,.660294,.783824,.783824,.631373,.746569,.838725,.838725,.756863,.832843,.893627,.893627,.882353,.919118,.948529,.948529,1,1,1,1]},{ColorSpace:"Lab",Name:"gray_Matlab",RGBPoints:[-1,0,0,0,-.87451,.0627451,.0627451,.0627451,-.74902,.12549,.12549,.12549,-.623529,.188235,.188235,.188235,-.498039,.25098,.25098,.25098,-.372549,.313725,.313725,.313725,-.247059,.376471,.376471,.376471,-.121569,.439216,.439216,.439216,.00392157,.501961,.501961,.501961,.129412,.564706,.564706,.564706,.254902,.627451,.627451,.627451,.380392,.690196,.690196,.690196,.505882,.752941,.752941,.752941,.631373,.815686,.815686,.815686,.756863,.878431,.878431,.878431,.882353,.941176,.941176,.941176,1,1,1,1]},{ColorSpace:"Lab",Name:"Purples",RGBPoints:[-1,.247059,0,.490196,-.87451,.288397,.07677,.525629,-.74902,.32975,.153587,.561092,-.623529,.373057,.236263,.600461,-.498039,.416363,.319,.639923,-.372549,.459669,.405613,.685198,-.247059,.503345,.491534,.730058,-.121569,.562399,.54862,.757616,.00392157,.621453,.606075,.785544,.129412,.680508,.674971,.824914,.254902,.739562,.743406,.863899,.380392,.798616,.800492,.893426,.505882,.85684,.856655,.922491,.631373,.898178,.894056,.942176,.756863,.938654,.930919,.961646,.882353,.964245,.958478,.977393,1,.988235,.984314,.992157]},{ColorSpace:"Lab",Name:"Blues",RGBPoints:[-1,.031373,.188235,.419608,-.87451,.031373,.253195,.516063,-.74902,.031757,.318139,.612149,-.623529,.080969,.38113,.661361,-.498039,.130427,.444152,.710327,-.372549,.195386,.509112,.743791,-.247059,.260715,.573841,.777209,-.121569,.341423,.628958,.808704,.00392157,.422745,.684075,.839892,.129412,.523137,.739193,.861546,.254902,.622684,.793464,.883429,.380392,.701423,.826928,.910988,.505882,.778685,.8603,.937993,.631373,.825928,.891795,.953741,.756863,.87328,.923291,.969489,.882353,.922491,.954787,.985236,1,.968627,.984314,1]},{ColorSpace:"Lab",Name:"Greens",RGBPoints:[-1,0,.266667,.105882,-.87451,0,.347374,.139346,-.74902,538e-6,.427912,.172933,-.623529,.069435,.486967,.222145,-.498039,.138178,.546082,.271326,-.372549,.197232,.609073,.31857,-.247059,.257255,.671742,.365859,-.121569,.357647,.720953,.415071,.00392157,.45767,.769919,.465021,.129412,.546251,.811257,.537855,.254902,.634295,.852211,.610688,.380392,.709097,.883706,.683522,.505882,.78316,.914833,.755894,.631373,.842215,.938454,.818885,.756863,.899977,.961538,.880692,.882353,.935409,.975317,.92203,1,.968627,.988235,.960784]},{ColorSpace:"Lab",Name:"PuBu",RGBPoints:[-1,.301961,0,.294118,-.87451,.404321,.029527,.390573,-.74902,.50599,.059592,.486782,-.623529,.519769,.158016,.551742,-.498039,.533456,.256194,.616301,-.372549,.54133,.33887,.655671,-.247059,.54902,.421592,.695087,-.121569,.54902,.506236,.736424,.00392157,.550127,.590573,.777701,.129412,.585559,.665375,.81707,.254902,.622145,.739023,.855825,.380392,.687105,.784298,.879446,.505882,.752065,.829758,.903253,.631373,.817024,.87897,.930811,.756863,.880907,.927213,.957832,.882353,.926182,.958708,.975548,1,.968627,.988235,.992157]},{ColorSpace:"Lab",Name:"BuPu",RGBPoints:[-1,.007843,.219608,.345098,-.87451,.01178,.286536,.449427,-.74902,.015702,.35328,.553479,-.623529,.01767,.396586,.622376,-.498039,.021115,.4402,.690688,-.372549,.11757,.503191,.722184,-.247059,.214625,.565859,.753633,-.121569,.336671,.615071,.78316,.00392157,.457978,.663975,.812503,.129412,.556401,.703345,.836125,.254902,.65421,.742714,.859669,.380392,.736886,.782084,.881323,.505882,.81827,.821638,.903068,.631373,.873387,.864944,.92669,.756863,.927536,.907605,.949988,.882353,.964937,.9391,.967705,1,1,.968627,.984314]},{ColorSpace:"Lab",Name:"BuGn",RGBPoints:[-1,.031373,.25098,.505882,-.87451,.031373,.329719,.590527,-.74902,.031911,.408397,.674787,-.623529,.100807,.479262,.710219,-.498039,.169704,.550219,.745744,-.372549,.238601,.62699,.787082,-.247059,.307958,.703114,.826759,-.121569,.39654,.752326,.797232,.00392157,.485121,.801046,.767705,.129412,.573702,.83451,.738178,.254902,.661592,.867743,.711034,.380392,.732457,.895302,.74253,.505882,.801845,.922307,.774579,.631373,.841215,.938055,.817885,.756863,.880907,.95391,.861084,.882353,.926182,.971626,.902422,1,.968627,.988235,.941176]},{ColorSpace:"Lab",Name:"GnBu",RGBPoints:[-1,0,.266667,.105882,-.87451,0,.347374,.139346,-.74902,538e-6,.427912,.172933,-.623529,.069435,.486967,.222145,-.498039,.138178,.546175,.272095,-.372549,.197232,.615071,.368551,-.247059,.256609,.683276,.464867,-.121569,.329443,.722645,.555417,.00392157,.403137,.762138,.645413,.129412,.503529,.805444,.718247,.254902,.603922,.848597,.790465,.380392,.704314,.887966,.847551,.505882,.802307,.926321,.903714,.631373,.851519,.944037,.941115,.756863,.899977,.961538,.976901,.882353,.935409,.975317,.984775,1,.968627,.988235,.992157]},{ColorSpace:"Lab",Name:"GnBuPu",RGBPoints:[-1,.003922,.27451,.211765,-.87451,.003922,.349312,.280661,-.74902,.003937,.423852,.349773,-.623529,.005905,.46519,.446228,-.498039,.009443,.506344,.542837,-.372549,.111803,.535871,.649135,-.247059,.214025,.565859,.753633,-.121569,.310481,.615071,.78316,.00392157,.407797,.663975,.812503,.129412,.531811,.703345,.836125,.254902,.65421,.742714,.859669,.380392,.736886,.782084,.881323,.505882,.81827,.821176,.902884,.631373,.873387,.854641,.922568,.756863,.927536,.888535,.942361,.882353,.964937,.929873,.964014,1,1,.968627,.984314]},{ColorSpace:"Lab",Name:"BuGnYl",RGBPoints:[-1,.031373,.113725,.345098,-.87451,.088458,.159,.463206,-.74902,.145052,.204567,.5807,-.623529,.139146,.287243,.620069,-.498039,.13318,.370196,.659562,-.372549,.123337,.470588,.706805,-.247059,.115386,.570335,.753126,-.121569,.186251,.643168,.761,.00392157,.258716,.71514,.768074,.129412,.380761,.760415,.750358,.254902,.503576,.806075,.732795,.380392,.645306,.861192,.719016,.505882,.783899,.91511,.705606,.631373,.858701,.944637,.6997,.756863,.931349,.973303,.698424,.882353,.966782,.987082,.777163,1,1,1,.85098]},{ColorSpace:"Lab",Name:"PuRd",RGBPoints:[-1,.286275,0,.415686,-.87451,.38273,.001968,.441276,-.74902,.479231,.003922,.466774,-.623529,.581592,.003922,.480554,-.498039,.683799,.00549,.494887,-.372549,.776317,.105882,.544098,-.247059,.867866,.206321,.592618,-.121569,.919047,.308681,.612303,.00392157,.968812,.411226,.632603,.129412,.974717,.519493,.671972,.254902,.980546,.626451,.71065,.380392,.984483,.701253,.732303,.505882,.988328,.77504,.755617,.631373,.990296,.828189,.812703,.756863,.992372,.880907,.869035,.882353,.996309,.926182,.912341,1,1,.968627,.952941]},{ColorSpace:"Lab",Name:"RdPu",RGBPoints:[-1,.403922,0,.121569,-.87451,.500377,0,.192434,-.74902,.596909,277e-6,.263037,-.623529,.703206,.035709,.300438,-.498039,.808612,.071296,.338854,-.372549,.857824,.116571,.441215,-.247059,.905513,.163552,.54293,-.121569,.889765,.281661,.617732,.00392157,.873156,.39897,.691611,.129412,.82985,.491488,.736886,.254902,.789081,.583237,.781853,.380392,.810734,.656071,.819254,.505882,.833126,.729181,.85684,.631373,.870527,.80792,.898178,.756863,.907605,.884398,.938331,.882353,.9391,.921799,.958016,1,.968627,.956863,.976471]},{ColorSpace:"Lab",Name:"Oranges",RGBPoints:[-1,.498039,.152941,.015686,-.87451,.57481,.182468,.013718,-.74902,.651765,.212042,.011734,-.623529,.752157,.247474,.007797,-.498039,.851719,.283368,.004475,-.372549,.898962,.348328,.039908,-.247059,.945652,.413426,.076401,-.121569,.969273,.484291,.157109,.00392157,.992157,.554971,.238185,.129412,.992157,.619931,.330704,.254902,.992157,.684967,.423837,.380392,.992157,.751895,.532103,.505882,.992249,.817716,.639354,.631373,.994218,.861023,.725967,.756863,.996186,.903576,.810965,.882353,.998155,.933103,.868051,1,1,.960784,.921569]},{ColorSpace:"Lab",Name:"Reds",RGBPoints:[-1,.403922,0,.05098,-.87451,.525967,.029527,.066728,-.74902,.647643,.058962,.082476,-.623529,.722445,.076678,.098224,-.498039,.797186,.095194,.114187,-.372549,.868051,.164091,.143714,-.247059,.937809,.233541,.173933,-.121569,.96143,.326059,.232987,.00392157,.984375,.418147,.292657,.129412,.986344,.496886,.371396,.254902,.988235,.575702,.450673,.380392,.988235,.656409,.543191,.505882,.98842,.736747,.635894,.631373,.992357,.809581,.732349,.756863,.996186,.880692,.826759,.882353,.998155,.92203,.885813,1,1,.960784,.941176]},{ColorSpace:"Lab",Name:"RdOr",RGBPoints:[-1,.498039,0,0,-.87451,.6004,0,0,-.74902,.702514,738e-6,477e-6,-.623529,.773379,.095225,.061499,-.498039,.843875,.189865,.12283,-.372549,.891119,.294195,.203537,-.247059,.937855,.397924,.283137,-.121569,.963445,.476663,.316601,.00392157,.988297,.555771,.351665,.129412,.990265,.646321,.436309,.254902,.992157,.735256,.519646,.380392,.992157,.784468,.570827,.505882,.992249,.833218,.623483,.631373,.994218,.872587,.706159,.756863,.996186,.911419,.788189,.882353,.998155,.940946,.859054,1,1,.968627,.92549]},{ColorSpace:"Lab",Name:"BrOrYl",RGBPoints:[-1,.4,.145098,.023529,-.87451,.500392,.174625,.019592,-.74902,.600784,.204291,.015656,-.623529,.701176,.251534,.011719,-.498039,.800984,.299146,.008397,-.372549,.863975,.370012,.043829,-.247059,.926321,.441107,.0794,-.121569,.961753,.521815,.120738,.00392157,.996078,.602645,.163122,.129412,.996078,.68729,.237924,.254902,.996078,.771011,.314879,.380392,.996078,.832034,.444798,.505882,.996171,.892042,.572595,.631373,.998139,.931411,.65724,.756863,1,.969489,.741669,.882353,1,.985236,.822376,1,1,1,.898039]},{ColorSpace:"Lab",Name:"RdOrYl",RGBPoints:[-1,.501961,0,.14902,-.87451,.622038,0,.14902,-.74902,.741761,4e-4,.148866,-.623529,.816563,.05158,.129181,-.498039,.890965,.10356,.110235,-.372549,.940177,.205921,.137793,-.247059,.988281,.308789,.165536,-.121569,.99025,.432803,.200969,.00392157,.992218,.555217,.236278,.129412,.994187,.628051,.267774,.254902,.996078,.701038,.301269,.380392,.996078,.777809,.383945,.505882,.996171,.852826,.466621,.631373,.998139,.892195,.549296,.756863,1,.931349,.632188,.882353,1,.966782,.7188,1,1,1,.8]},{ColorSpace:"Lab",Name:"CIELab_blue2red",RGBPoints:[-1,0,.6,.74902,1,.76863,.46667,.34118]},{ColorSpace:"Lab",Name:"blue2yellow",RGBPoints:[-1,0,0,1,0,.5,.5,.5,1,1,1,0]},{ColorSpace:"Lab",Name:"erdc_blue2gold",RGBPoints:[-1,.175119,.0438468,1,-.874016,.22383,.159771,.94557,-.748031,.27254,.233611,.891216,-.622047,.321251,.296526,.836857,-.496063,.369962,.354296,.782359,-.370079,.418672,.409139,.72754,-.244094,.467383,.462152,.672148,-.11811,.51609,.51396,.615825,.00787402,.572863,.55452,.559172,.133858,.630269,.593822,.517729,.259843,.689588,.624668,.47446,.385827,.745394,.656113,.428638,.511811,.798624,.688104,.379105,.637795,.849926,.720593,.323834,.76378,.899765,.753543,.258657,.889764,.948487,.78692,.171778,1,.990413,.816451,.00729848]},{ColorSpace:"Lab",Name:"erdc_blue2yellow",RGBPoints:[-1,.0830122,0,.495617,-.87451,.141973,.0551288,.57363,-.74902,.193048,.110258,.604561,-.623529,.234231,.165386,.57643,-.498039,.275413,.220515,.548299,-.372549,.316596,.275644,.520169,-.247059,.357778,.330773,.492038,-.121569,.398961,.385901,.463908,.00392157,.449929,.438487,.426815,.129412,.511572,.488299,.379944,.254902,.581222,.53603,.325741,.380392,.650871,.583761,.271538,.505882,.720521,.631493,.217335,.631373,.79017,.679224,.163132,.756863,.85982,.726955,.108929,.882353,.910254,.774159,.14112,1,.927513,.81759,.306289]},{ColorSpace:"Lab",Name:"erdc_cyan2orange",RGBPoints:[-1,.0471513,.213874,.414329,-.87451,.0674702,.256648,.439027,-.74902,.0959957,.299331,.462089,-.623529,.132428,.341872,.483212,-.498039,.188743,.38277,.500597,-.372549,.268511,.420229,.512179,-.247059,.352945,.455602,.519101,-.121569,.43893,.489368,.521538,.00392157,.522445,.522495,.522436,.129412,.600089,.555682,.53205,.254902,.67988,.587981,.539163,.380392,.761011,.619586,.544439,.505882,.84278,.650741,.548567,.631373,.910713,.687347,.557822,.756863,.952232,.734972,.577775,.882353,.975642,.789858,.604868,1,.990752,.843643,.632857]},{ColorSpace:"Lab",Name:"erdc_purple2green",RGBPoints:[-1,.235006,.0483128,.530899,-.87451,.302968,.108419,.552391,-.74902,.360241,.166059,.569502,-.623529,.406746,.226782,.579373,-.498039,.444073,.28964,.582094,-.372549,.473648,.353774,.577947,-.247059,.497636,.418154,.567911,-.121569,.519086,.481741,.553968,.00392157,.542884,.542914,.542875,.129412,.566303,.603989,.527499,.254902,.595218,.662965,.516857,.380392,.628641,.720701,.510673,.505882,.665373,.777849,.508165,.631373,.704182,.834921,.508303,.756863,.743846,.892328,.50999,.882353,.783158,.950422,.512181,1,.818617,1,.513888]},{ColorSpace:"Lab",Name:"erdc_purple2green_dark",RGBPoints:[-1,.107656,0,.428682,-.87451,.1924,0,.449799,-.74902,.255118,.0648939,.466726,-.623529,.304256,.133066,.476703,-.498039,.343202,.19716,.479793,-.372549,.373876,.260353,.476241,-.247059,.398497,.322872,.466953,-.121569,.420016,.384252,.453785,.00392157,.44319,.443216,.443186,.129412,.465553,.502139,.428233,.254902,.492959,.559151,.417591,.380392,.524654,.615092,.411016,.505882,.55959,.670583,.40779,.631373,.596614,.726102,.406948,.756863,.634544,.782032,.407439,.882353,.672183,.838703,.408237,1,.706131,.892759,.408452]},{ColorSpace:"Lab",Name:"coolwarm",RGBPoints:[-1,.229806,.298718,.753683,-.875,.303869,.406535,.844959,-.75,.383013,.509419,.917388,-.625,.466667,.604563,.968155,-.5,.552953,.688929,.995376,-.375,.639176,.7596,.998151,-.25,.722193,.813953,.976575,-.125,.798692,.849786,.931689,0,.865395,.86541,.865396,.125,.924128,.827385,.774508,.25,.958853,.769768,.678008,.375,.969954,.694267,.579375,.5,.958003,.602842,.481776,.625,.923945,.497309,.38797,.75,.869187,.378313,.300267,.875,.795632,.241284,.220526,1,.705673,.0155562,.150233]},{ColorSpace:"Lab",Name:"BuRd",RGBPoints:[-1,.019608,.188235,.380392,-.87451,.088504,.321107,.564937,-.74902,.163399,.444983,.697501,-.623529,.247059,.555709,.754095,-.498039,.420684,.676432,.818685,-.372549,.606459,.789773,.880277,-.247059,.761476,.868512,.924567,-.121569,.878047,.925721,.951942,.00392157,.969089,.966474,.964937,.129412,.983852,.897578,.846828,.254902,.982468,.800692,.706113,.380392,.960323,.66782,.536332,.505882,.894579,.503806,.399769,.631373,.81707,.33218,.281046,.756863,.728489,.155017,.197386,.882353,.576932,.055363,.14925,1,.403922,0,.121569]},{ColorSpace:"Lab",Name:"Spectral_lowBlue",RGBPoints:[-1,.368627,.309804,.635294,-.87451,.260361,.450058,.70173,-.74902,.248058,.591311,.717186,-.623529,.376009,.734025,.658132,-.498039,.537947,.814764,.64506,-.372549,.702345,.879585,.636678,-.247059,.84752,.938639,.607151,-.121569,.940408,.976163,.656055,.00392157,.999923,.997616,.745021,.129412,.997463,.921338,.61707,.254902,.995002,.824606,.499885,.380392,.992541,.701576,.39654,.505882,.973472,.547405,.318108,.631373,.937793,.398539,.270127,.756863,.861515,.282891,.299654,.882353,.746482,.144637,.288812,1,.619608,.003922,.258824]},{ColorSpace:"Lab",Name:"GnRP",RGBPoints:[-1,0,.266667,.105882,-.87451,.066436,.394617,.174779,-.74902,.168858,.524567,.25767,-.623529,.323875,.657439,.361015,-.498039,.504883,.772318,.506344,-.372549,.678431,.870127,.654902,-.247059,.803922,.921799,.780392,-.121569,.897116,.951942,.882814,.00392157,.967397,.965936,.967474,.129412,.928028,.879815,.930565,.254902,.866052,.780777,.882891,.380392,.77501,.665129,.821376,.505882,.675663,.537024,.737024,.631373,.57847,.396155,.645982,.756863,.492349,.223914,.547559,.882353,.375548,.096886,.423299,1,.25098,0,.294118]},{ColorSpace:"Lab",Name:"GYPi",RGBPoints:[-1,.152941,.392157,.098039,-.87451,.246444,.505344,.117724,-.74902,.351942,.614533,.161399,-.623529,.474971,.717878,.240138,-.498039,.611995,.811226,.392849,-.372549,.746328,.893118,.565321,-.247059,.859516,.94233,.747405,-.121569,.928105,.96386,.875663,.00392157,.969089,.966859,.968012,.129412,.983852,.910265,.948328,.254902,.979239,.833218,.914648,.380392,.949712,.729873,.862976,.505882,.905652,.58293,.763552,.631373,.85521,.410073,.652211,.756863,.793695,.183699,.531642,.882353,.683737,.063899,.420761,1,.556863,.003922,.321569]},{ColorSpace:"Lab",Name:"GnYlRd",RGBPoints:[-1,0,.407843,.215686,-.87451,.063975,.525952,.277201,-.74902,.177932,.633064,.332718,-.623529,.364937,.724106,.379469,-.498039,.527951,.797155,.40223,-.372549,.678431,.862822,.433449,-.247059,.803922,.916955,.514648,-.121569,.909419,.961861,.625067,.00392157,.999923,.997616,.745021,.129412,.997463,.921338,.61707,.254902,.995002,.824606,.499885,.380392,.992541,.701576,.39654,.505882,.973472,.547405,.318108,.631373,.939023,.389927,.245521,.756863,.867666,.239831,.176624,.882353,.762399,.110727,.151326,1,.647059,0,.14902]},{ColorSpace:"Lab",Name:"GBBr",RGBPoints:[-1,0,.235294,.188235,-.87451,.002461,.338639,.301423,-.74902,.055902,.448981,.417609,-.623529,.183852,.56955,.538178,-.498039,.357785,.700115,.660746,-.372549,.540177,.819531,.77624,-.247059,.714879,.890888,.864821,-.121569,.851134,.934564,.922645,.00392157,.960861,.959785,.95694,.129412,.963322,.927797,.83391,.254902,.939946,.868897,.68935,.380392,.883353,.775394,.517109,.505882,.808074,.625836,.324106,.631373,.717647,.476355,.15494,.756863,.592157,.358247,.06882,.882353,.458593,.26436,.031142,1,.329412,.188235,.019608]},{ColorSpace:"Lab",Name:"PuOr",RGBPoints:[-1,.498039,.231373,.031373,-.87451,.62599,.30273,.026451,-.74902,.746943,.387082,.037524,-.623529,.85767,.490427,.071972,-.498039,.936409,.617762,.236371,-.372549,.992695,.743099,.43291,-.247059,.995156,.841523,.63714,-.121569,.985313,.913802,.813687,.00392157,.966244,.966398,.967705,.129412,.889965,.89504,.938178,.254902,.806151,.804306,.894656,.380392,.712649,.688658,.833141,.505882,.594233,.554325,.744637,.631373,.474894,.404229,.652364,.756863,.366628,.217224,.563783,.882353,.266436,.089965,.434833,1,.176471,0,.294118]},{ColorSpace:"Lab",Name:"PRGn",RGBPoints:[-1,.25098,0,.294118,-.87451,.383852,.103345,.431911,-.74902,.497732,.234679,.55371,-.623529,.583852,.40692,.652134,-.498039,.681968,.545175,.742561,-.372549,.7807,.672357,.825221,-.247059,.871742,.788005,.886736,-.121569,.930488,.885198,.932872,.00392157,.966321,.968089,.965859,.129412,.892503,.950865,.877278,.254902,.796078,.91857,.772549,.380392,.670588,.866897,.647059,.505882,.493195,.765398,.496655,.631373,.314187,.649135,.354556,.756863,.15917,.516263,.251211,.882353,.062284,.386621,.170473,1,0,.266667,.105882]},{ColorSpace:"Lab",Name:"PiYG",RGBPoints:[-1,.556863,.003922,.321569,-.87451,.692195,.067897,.427374,-.74902,.797539,.197847,.539177,-.623529,.859054,.424221,.659746,-.498039,.908574,.592618,.770319,-.372549,.951557,.736332,.866205,-.247059,.981084,.839677,.917878,-.121569,.98293,.913802,.949558,.00392157,.96732,.968474,.965629,.129412,.92549,.963552,.869666,.254902,.852441,.939254,.736025,.380392,.739254,.890042,.553941,.505882,.60323,.805536,.382238,.631373,.467282,.711419,.235217,.756863,.344252,.608074,.156478,.882353,.2406,.49827,.116494,1,.152941,.392157,.098039]},{ColorSpace:"Lab",Name:"OrPu",RGBPoints:[-1,.176471,0,.294118,-.87451,.272434,.095963,.444214,-.74902,.373395,.228912,.56932,-.623529,.481661,.415917,.657901,-.498039,.601922,.562937,.750481,-.372549,.718493,.695886,.836986,-.247059,.811995,.811534,.898501,-.121569,.894733,.8995,.940023,.00392157,.969166,.966859,.963629,.129412,.98639,.910265,.803691,.254902,.995002,.835371,.624375,.380392,.992541,.736947,.420146,.505882,.931949,.609458,.224221,.631373,.85075,.483968,.069819,.756863,.740023,.380623,.035371,.882353,.617993,.29827,.026759,1,.498039,.231373,.031373]},{ColorSpace:"Lab",Name:"BrBG",RGBPoints:[-1,.329412,.188235,.019608,-.87451,.467205,.269435,.031911,-.74902,.6,.365629,.074202,-.623529,.72549,.483737,.160323,-.498039,.812995,.635832,.336409,-.372549,.88689,.781238,.527874,-.247059,.943483,.87474,.700115,-.121569,.963168,.929796,.841599,.00392157,.957247,.959938,.959554,.129412,.84406,.932872,.920185,.254902,.70396,.886428,.859285,.380392,.529258,.815071,.770704,.505882,.346251,.691811,.653057,.631373,.175855,.562015,.530642,.756863,.047905,.441446,.410073,.882353,.002307,.33218,.294348,1,0,.235294,.188235]},{ColorSpace:"Lab",Name:"GyRd",RGBPoints:[-1,.101961,.101961,.101961,-.87451,.227451,.227451,.227451,-.74902,.359939,.359939,.359939,-.623529,.502653,.502653,.502653,-.498039,.631373,.631373,.631373,-.372549,.749865,.749865,.749865,-.247059,.843368,.843368,.843368,-.121569,.926105,.926105,.926105,.00392157,.999846,.997232,.995694,.129412,.994925,.908651,.857901,.254902,.982468,.800692,.706113,.380392,.960323,.66782,.536332,.505882,.894579,.503806,.399769,.631373,.81707,.33218,.281046,.756863,.728489,.155017,.197386,.882353,.576932,.055363,.14925,1,.403922,0,.121569]},{ColorSpace:"Lab",Name:"erdc_divHi_purpleGreen",RGBPoints:[-1,.297553,0,.489074,-.87451,.40259,.151146,.567754,-.74902,.516038,.284843,.658231,-.623529,.629783,.423646,.750938,-.498039,.735198,.563697,.835956,-.372549,.82408,.695541,.903582,-.247059,.889091,.807454,.944862,-.121569,.92334,.886917,.951839,.00392157,.921045,.921084,.921003,.129412,.877324,.907455,.845381,.254902,.797649,.849713,.734695,.380392,.691646,.75964,.600532,.505882,.568981,.649159,.453807,.631373,.438945,.529756,.304259,.756863,.30973,.412001,.158303,.882353,.187078,.305111,.00251458,1,.101655,.220836,0]},{ColorSpace:"Lab",Name:"erdc_divHi_purpleGreen_dim",RGBPoints:[-1,.404088,.131038,.592767,-.87451,.486469,.230957,.651243,-.74902,.575165,.339335,.717723,-.623529,.662741,.454332,.784263,-.498039,.742071,.570213,.842918,-.372549,.806935,.678992,.886227,-.247059,.852219,.771315,.90763,-.121569,.873345,.837327,.901572,.00392157,.866783,.86682,.866745,.129412,.82839,.858225,.796812,.254902,.762578,.814287,.700202,.380392,.676429,.744229,.585735,.505882,.577033,.65732,.461526,.631373,.47128,.562476,.33476,.756863,.365461,.467957,.21076,.882353,.264758,.381138,.0878313,1,.182591,.312249,0]},{ColorSpace:"Lab",Name:"erdc_divLow_icePeach",RGBPoints:[-1,.480048,.817441,.998056,-.87451,.425898,.726921,.883187,-.74902,.366682,.629445,.761936,-.623529,.308756,.531002,.640217,-.498039,.258021,.43705,.523433,-.372549,.219244,.352381,.416348,-.247059,.195127,.281032,.322979,-.121569,.186286,.22627,.246525,.00392157,.192352,.19236,.192364,.129412,.255927,.214469,.191756,.254902,.340459,.254426,.206666,.380392,.444655,.309315,.234029,.505882,.565353,.376004,.270969,.631373,.697917,.450748,.314293,.756863,.836657,.529064,.360227,.882353,.972695,.614884,.413123,1,1,.705904,.472699]},{ColorSpace:"Lab",Name:"erdc_divLow_purpleGreen",RGBPoints:[-1,.956034,.666487,.952663,-.87451,.874457,.572698,.936352,-.74902,.753465,.488253,.909063,-.623529,.63309,.413507,.763833,-.498039,.514491,.345878,.620015,-.372549,.405008,.288141,.484376,-.247059,.311388,.241986,.363556,-.121569,.238722,.209044,.263449,.00392157,.192352,.192366,.192362,.129412,.200379,.233201,.168618,.254902,.230151,.291737,.165227,.380392,.279481,.366076,.178607,.505882,.344927,.453267,.205703,.631373,.421554,.549449,.242643,.756863,.503334,.649999,.284377,.882353,.583497,.749672,.324969,1,.650705,.837228,.356264]},{ColorSpace:"Lab",Name:"Haze_green",RGBPoints:[-1,1,.835294,.886275,-.87451,.937255,.756863,.870443,-.74902,.875817,.666376,.857807,-.623529,.778359,.583007,.808134,-.498039,.676253,.494118,.745098,-.372549,.561365,.390123,.682353,-.247059,.438344,.262745,.621496,-.121569,.321133,.141031,.558751,.00392157,.203922,.0217865,.495861,.129412,.265505,.129412,.433261,.254902,.311692,.255338,.37008,.380392,.356282,.377342,.310821,.505882,.39971,.488889,.258243,.631373,.442556,.604357,.205519,.756863,.48671,.71968,.152941,.882353,.529847,.830356,.100944,1,.572549,.933333,.054902]},{ColorSpace:"Lab",Name:"Haze_lime",RGBPoints:[-1,.704034,.784196,1,-.87451,.633111,.691418,.956078,-.74902,.564021,.600606,.912157,-.623529,.496827,.51189,.868235,-.498039,.43157,.425416,.824314,-.372549,.368248,.341347,.780392,-.247059,.306767,.259855,.736471,-.121569,.246862,.181069,.692549,.00392157,.191619,.109542,.648627,.129412,.257404,.194031,.604706,.254902,.321794,.278775,.560784,.380392,.387909,.364617,.516863,.505882,.456569,.451881,.472941,.631373,.527424,.540773,.42902,.756863,.599759,.631427,.385098,.882353,.673065,.723898,.341176,1,.742751,.812252,.3]},{ColorSpace:"RGB",Name:"Haze",RGBPoints:[-1,1,.835294,.996078,-.00392157,.023529,.141176,.498039,.00392157,.015686,.137255,.494118,1,.984314,.764706,0]},{ColorSpace:"Lab",Name:"Haze_cyan",RGBPoints:[-1,.956863,1,.835294,-.87451,.933188,.921714,.760784,-.74902,.870588,.803486,.671605,-.623529,.807843,.684096,.583297,-.498039,.745098,.569208,.494118,-.372549,.682353,.437763,.390123,-.247059,.621496,.288163,.262745,-.121569,.558751,.144517,.141031,.00392157,.495861,.0217865,.0413943,.129412,.433261,.137255,.129412,.254902,.37008,.263181,.255338,.380392,.306318,.381845,.372694,.505882,.243137,.503994,.494263,.631373,.180392,.629484,.619753,.756863,.117647,.754975,.747131,.882353,.054902,.876398,.866812,1,0,.988235,.976471]},{ColorSpace:"Lab",Name:"nic_Edge",RGBPoints:[-1,.191208,.191208,.191208,-.87451,.239484,.00545035,.614821,-.74902,.220593,.0617459,.863547,-.623529,.17509,.278988,.97794,-.498039,.143526,.576069,.998553,-.372549,.166456,.871883,.96594,-.247059,.376202,.993555,.981833,-.121569,.681996,.991297,.999239,.00392157,.954172,.952734,.94374,.129412,.999735,.99301,.662896,.254902,.979399,.991466,.357973,.380392,.968771,.854967,.162659,.505882,.999245,.556697,.144323,.631373,.973959,.26223,.177946,.756863,.852358,.0526707,.222974,.882353,.593889,.00912724,.238855,1,.191208,.191208,.191208]},{ColorSpace:"Lab",Name:"erdc_iceFire_H",RGBPoints:[-1,405432e-12,0,590122e-11,-.87451,0,.120401,.302675,-.74902,0,.216583,.524574,-.623529,.0552475,.345025,.6595,-.498039,.128047,.492588,.720288,-.372549,.188955,.641309,.792092,-.247059,.327673,.784935,.873434,-.121569,.60824,.892164,.935547,.00392157,.881371,.912178,.818099,.129412,.951407,.835621,.449279,.254902,.904481,.690489,0,.380392,.85407,.510864,0,.505882,.777093,.33018,88199e-8,.631373,.672862,.139087,.00269398,.756863,.508815,0,0,.882353,.299417,366289e-9,547829e-9,1,.0157519,.00332021,455569e-13]},{ColorSpace:"Lab",Name:"erdc_iceFire_L",RGBPoints:[-1,.870485,.913768,.832905,-.87451,.586919,.887865,.934003,-.74902,.31583,.776442,.867858,-.623529,.18302,.632034,.787722,-.498039,.117909,.484134,.713825,-.372549,.0507239,.335979,.654741,-.247059,0,.209874,.511832,-.121569,0,.114689,.28935,.00392157,.0157519,.00332021,455569e-13,.129412,.312914,0,0,.254902,.520865,0,0,.380392,.680105,.15255,.0025996,.505882,.785109,.339479,797922e-9,.631373,.857354,.522494,0,.756863,.910974,.699774,0,.882353,.951921,.842817,.478545,1,.881371,.912178,.818099]},{ColorSpace:"RGB",Name:"hsv",RGBPoints:[-1,1,0,0,-.666666,1,0,1,-.333333,0,0,1,0,0,1,1,.33333,0,1,0,.66666,1,1,0,1,1,0,0]},{ColorSpace:"Lab",Name:"hue_L60",RGBPoints:[-1,.964784,.400592,.349549,-.87451,.964915,.372498,.53785,-.74902,.892353,.401039,.759569,-.623529,.79263,.446956,.903017,-.498039,.682208,.49954,.966673,-.372549,.56392,.553082,.968836,-.247059,.442031,.606396,.901601,-.121569,.305499,.65701,.765784,.00392157,.197251,.687914,.620914,.129412,.193882,.701887,.472654,.254902,.249866,.706123,.320005,.380392,.35132,.697417,.202919,.505882,.498097,.669467,.125232,.631373,.637477,.626239,.107431,.756863,.762115,.56872,.155812,.882353,.889434,.481116,.240445,1,.964784,.400592,.349549]},{IndexedColors:[0,0,0,.8941176470588236,.1019607843137255,.1098039215686274,.2156862745098039,.4941176470588236,.7215686274509804,.3019607843137255,.6862745098039216,.2901960784313726,.596078431372549,.3058823529411765,.6392156862745098,1,.4980392156862745,0,.6509803921568628,.3372549019607843,.1568627450980392],Name:"Spectrum",NanColor:[.6509803921568628,.3372549019607843,.1568627450980392]},{IndexedColors:[.4745098039215686,.09019607843137255,.09019607843137255,.7098039215686275,.00392156862745098,.00392156862745098,.9372549019607843,.2784313725490196,.09803921568627451,.9764705882352941,.5137254901960784,.1411764705882353,1,.7058823529411765,0,1,.8980392156862745,.02352941176470588],Name:"Warm",NanColor:[1,.8980392156862745,.02352941176470588]},{IndexedColors:[.4588235294117647,.6941176470588235,.00392156862745098,.3450980392156863,.5019607843137255,.1607843137254902,.3137254901960784,.8431372549019608,.7490196078431373,.1098039215686274,.5843137254901961,.803921568627451,.2313725490196079,.407843137254902,.6705882352941176,.6039215686274509,.407843137254902,1,.3725490196078431,.2,.5019607843137255],Name:"Cool",NanColor:[.3725490196078431,.2,.5019607843137255]},{IndexedColors:[.2313725490196079,.407843137254902,.6705882352941176,.1098039215686274,.5843137254901961,.803921568627451,.3058823529411765,.8509803921568627,.9176470588235294,.4509803921568628,.6039215686274509,.8352941176470589,.2588235294117647,.2392156862745098,.6627450980392157,.3137254901960784,.3294117647058823,.5294117647058824,.06274509803921569,.1647058823529412,.3215686274509804],Name:"Blues",NanColor:[.06274509803921569,.1647058823529412,.3215686274509804]},{IndexedColors:[.1098039215686274,.5843137254901961,.803921568627451,.2313725490196079,.407843137254902,.6705882352941176,.4,.2431372549019608,.7176470588235294,.6352941176470588,.3294117647058823,.8117647058823529,.8705882352941177,.3803921568627451,.807843137254902,.8627450980392157,.3803921568627451,.5843137254901961,.2392156862745098,.06274509803921569,.3215686274509804],Name:"Wild Flower",NanColor:[.2392156862745098,.06274509803921569,.3215686274509804]},{IndexedColors:[.396078431372549,.4862745098039216,.2156862745098039,.4588235294117647,.6941176470588235,.00392156862745098,.6980392156862745,.7294117647058823,.1882352941176471,1,.8980392156862745,.02352941176470588,1,.7058823529411765,0,.9764705882352941,.5137254901960784,.1411764705882353],Name:"Citrus",NanColor:[.9764705882352941,.5137254901960784,.1411764705882353]},{IndexedColors:[.4980392156862745,.2313725490196079,.03137254901960784,.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333,.1764705882352941,0,.2941176470588235],Name:"Brewer Diverging Purple-Orange (11)",NanColor:[.1764705882352941,0,.2941176470588235]},{IndexedColors:[.4980392156862745,.2313725490196079,.03137254901960784,.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333,.1764705882352941,0,.2941176470588235],Name:"Brewer Diverging Purple-Orange (10)",NanColor:[.1764705882352941,0,.2941176470588235]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (9)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.8784313725490196,.5098039215686274,.0784313725490196,.9921568627450981,.7215686274509804,.3882352941176471,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6980392156862745,.6705882352941176,.8235294117647058,.5019607843137255,.4509803921568628,.6745098039215687,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (8)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.9450980392156862,.6392156862745098,.2509803921568627,.996078431372549,.8784313725490196,.7137254901960784,.9686274509803922,.9686274509803922,.9686274509803922,.8470588235294118,.8549019607843137,.9215686274509803,.6,.5568627450980392,.7647058823529411,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (7)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.7019607843137254,.3450980392156863,.02352941176470588,.9450980392156862,.6392156862745098,.2509803921568627,.996078431372549,.8784313725490196,.7137254901960784,.8470588235294118,.8549019607843137,.9215686274509803,.6,.5568627450980392,.7647058823529411,.3294117647058823,.1529411764705882,.5333333333333333],Name:"Brewer Diverging Purple-Orange (6)",NanColor:[.3294117647058823,.1529411764705882,.5333333333333333]},{IndexedColors:[.9019607843137255,.3803921568627451,.00392156862745098,.9921568627450981,.7215686274509804,.3882352941176471,.9686274509803922,.9686274509803922,.9686274509803922,.6980392156862745,.6705882352941176,.8235294117647058,.3686274509803922,.2352941176470588,.6],Name:"Brewer Diverging Purple-Orange (5)",NanColor:[.3686274509803922,.2352941176470588,.6]},{IndexedColors:[.9019607843137255,.3803921568627451,.00392156862745098,.9921568627450981,.7215686274509804,.3882352941176471,.6980392156862745,.6705882352941176,.8235294117647058,.3686274509803922,.2352941176470588,.6],Name:"Brewer Diverging Purple-Orange (4)",NanColor:[.3686274509803922,.2352941176470588,.6]},{IndexedColors:[.9450980392156862,.6392156862745098,.2509803921568627,.9686274509803922,.9686274509803922,.9686274509803922,.6,.5568627450980392,.7647058823529411],Name:"Brewer Diverging Purple-Orange (3)",NanColor:[.6,.5568627450980392,.7647058823529411]},{IndexedColors:[.6196078431372549,.00392156862745098,.2588235294117647,.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353,.3686274509803922,.3098039215686275,.6352941176470588],Name:"Brewer Diverging Spectral (11)",NanColor:[.3686274509803922,.3098039215686275,.6352941176470588]},{IndexedColors:[.6196078431372549,.00392156862745098,.2588235294117647,.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353,.3686274509803922,.3098039215686275,.6352941176470588],Name:"Brewer Diverging Spectral (10)",NanColor:[.3686274509803922,.3098039215686275,.6352941176470588]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (9)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9568627450980393,.4274509803921568,.2627450980392157,.9921568627450981,.6823529411764706,.3803921568627451,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6705882352941176,.8666666666666667,.6431372549019608,.4,.7607843137254902,.6470588235294118,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (8)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9882352941176471,.5529411764705883,.3490196078431372,.996078431372549,.8784313725490196,.5450980392156862,1,1,.7490196078431373,.9019607843137255,.9607843137254902,.596078431372549,.6,.8352941176470589,.5803921568627451,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (7)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8352941176470589,.2431372549019608,.3098039215686275,.9882352941176471,.5529411764705883,.3490196078431372,.996078431372549,.8784313725490196,.5450980392156862,.9019607843137255,.9607843137254902,.596078431372549,.6,.8352941176470589,.5803921568627451,.196078431372549,.5333333333333333,.7411764705882353],Name:"Brewer Diverging Spectral (6)",NanColor:[.196078431372549,.5333333333333333,.7411764705882353]},{IndexedColors:[.8431372549019608,.09803921568627451,.1098039215686274,.9921568627450981,.6823529411764706,.3803921568627451,1,1,.7490196078431373,.6705882352941176,.8666666666666667,.6431372549019608,.1686274509803922,.5137254901960784,.7294117647058823],Name:"Brewer Diverging Spectral (5)",NanColor:[.1686274509803922,.5137254901960784,.7294117647058823]},{IndexedColors:[.8431372549019608,.09803921568627451,.1098039215686274,.9921568627450981,.6823529411764706,.3803921568627451,.6705882352941176,.8666666666666667,.6431372549019608,.1686274509803922,.5137254901960784,.7294117647058823],Name:"Brewer Diverging Spectral (4)",NanColor:[.1686274509803922,.5137254901960784,.7294117647058823]},{IndexedColors:[.9882352941176471,.5529411764705883,.3490196078431372,1,1,.7490196078431373,.6,.8352941176470589,.5803921568627451],Name:"Brewer Diverging Spectral (3)",NanColor:[.6,.8352941176470589,.5803921568627451]},{IndexedColors:[.3294117647058823,.1882352941176471,.0196078431372549,.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922,0,.2352941176470588,.1882352941176471],Name:"Brewer Diverging Brown-Blue-Green (11)",NanColor:[0,.2352941176470588,.1882352941176471]},{IndexedColors:[.3294117647058823,.1882352941176471,.0196078431372549,.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922,0,.2352941176470588,.1882352941176471],Name:"Brewer Diverging Brown-Blue-Green (10)",NanColor:[0,.2352941176470588,.1882352941176471]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (9)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.7490196078431373,.5058823529411764,.1764705882352941,.8745098039215686,.7607843137254902,.4901960784313725,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.5019607843137255,.803921568627451,.7568627450980392,.207843137254902,.592156862745098,.5607843137254902,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (8)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.8470588235294118,.7019607843137254,.396078431372549,.9647058823529412,.9098039215686274,.7647058823529411,.9607843137254902,.9607843137254902,.9607843137254902,.7803921568627451,.9176470588235294,.8980392156862745,.3529411764705883,.7058823529411765,.6745098039215687,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (7)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.5490196078431373,.3176470588235294,.0392156862745098,.8470588235294118,.7019607843137254,.396078431372549,.9647058823529412,.9098039215686274,.7647058823529411,.7803921568627451,.9176470588235294,.8980392156862745,.3529411764705883,.7058823529411765,.6745098039215687,.00392156862745098,.4,.3686274509803922],Name:"Brewer Diverging Brown-Blue-Green (6)",NanColor:[.00392156862745098,.4,.3686274509803922]},{IndexedColors:[.6509803921568628,.3803921568627451,.1019607843137255,.8745098039215686,.7607843137254902,.4901960784313725,.9607843137254902,.9607843137254902,.9607843137254902,.5019607843137255,.803921568627451,.7568627450980392,.00392156862745098,.5215686274509804,.4431372549019608],Name:"Brewer Diverging Brown-Blue-Green (5)",NanColor:[.00392156862745098,.5215686274509804,.4431372549019608]},{IndexedColors:[.6509803921568628,.3803921568627451,.1019607843137255,.8745098039215686,.7607843137254902,.4901960784313725,.5019607843137255,.803921568627451,.7568627450980392,.00392156862745098,.5215686274509804,.4431372549019608],Name:"Brewer Diverging Brown-Blue-Green (4)",NanColor:[.00392156862745098,.5215686274509804,.4431372549019608]},{IndexedColors:[.8470588235294118,.7019607843137254,.396078431372549,.9607843137254902,.9607843137254902,.9607843137254902,.3529411764705883,.7058823529411765,.6745098039215687],Name:"Brewer Diverging Brown-Blue-Green (3)",NanColor:[.3529411764705883,.7058823529411765,.6745098039215687]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8980392156862745,.9607843137254902,.9764705882352941,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.4274509803921568,.1725490196078431,0,.2666666666666667,.1058823529411765],Name:"Brewer Sequential Blue-Green (9)",NanColor:[0,.2666666666666667,.1058823529411765]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8980392156862745,.9607843137254902,.9764705882352941,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.3450980392156863,.1411764705882353],Name:"Brewer Sequential Blue-Green (8)",NanColor:[0,.3450980392156863,.1411764705882353]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.8,.9254901960784314,.9019607843137255,.8,.9254901960784314,.9019607843137255,.4,.7607843137254902,.6431372549019608,.2549019607843137,.6823529411764706,.4627450980392157,.1372549019607843,.5450980392156862,.2705882352941176,0,.3450980392156863,.1411764705882353],Name:"Brewer Sequential Blue-Green (7)",NanColor:[0,.3450980392156863,.1411764705882353]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.8,.9254901960784314,.9019607843137255,.6,.8470588235294118,.788235294117647,.4,.7607843137254902,.6431372549019608,.1725490196078431,.6352941176470588,.3725490196078431,0,.4274509803921568,.1725490196078431],Name:"Brewer Sequential Blue-Green (6)",NanColor:[0,.4274509803921568,.1725490196078431]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.6980392156862745,.8862745098039215,.8862745098039215,.4,.7607843137254902,.6431372549019608,.1725490196078431,.6352941176470588,.3725490196078431,0,.4274509803921568,.1725490196078431],Name:"Brewer Sequential Blue-Green (5)",NanColor:[0,.4274509803921568,.1725490196078431]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.6980392156862745,.8862745098039215,.8862745098039215,.4,.7607843137254902,.6431372549019608,.1372549019607843,.5450980392156862,.2705882352941176],Name:"Brewer Sequential Blue-Green (4)",NanColor:[.1372549019607843,.5450980392156862,.2705882352941176]},{IndexedColors:[.8980392156862745,.9607843137254902,.9764705882352941,.6,.8470588235294118,.788235294117647,.1725490196078431,.6352941176470588,.3725490196078431],Name:"Brewer Sequential Blue-Green (3)",NanColor:[.1725490196078431,.6352941176470588,.3725490196078431]},{IndexedColors:[1,1,.8980392156862745,1,.9686274509803922,.7372549019607844,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.6,.203921568627451,.01568627450980392,.4,.1450980392156863,.02352941176470588],Name:"Brewer Sequential Yellow-Orange-Brown (9)",NanColor:[.4,.1450980392156863,.02352941176470588]},{IndexedColors:[1,1,.8980392156862745,1,.9686274509803922,.7372549019607844,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.5490196078431373,.1764705882352941,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (8)",NanColor:[.5490196078431373,.1764705882352941,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.9254901960784314,.4392156862745098,.0784313725490196,.8,.2980392156862745,.00784313725490196,.5490196078431373,.1764705882352941,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (7)",NanColor:[.5490196078431373,.1764705882352941,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8901960784313725,.5686274509803921,.996078431372549,.7686274509803922,.3098039215686275,.996078431372549,.6,.1607843137254902,.8509803921568627,.3725490196078431,.05490196078431372,.6,.203921568627451,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (6)",NanColor:[.6,.203921568627451,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8509803921568627,.5568627450980392,.996078431372549,.6,.1607843137254902,.8509803921568627,.3725490196078431,.05490196078431372,.6,.203921568627451,.01568627450980392],Name:"Brewer Sequential Yellow-Orange-Brown (5)",NanColor:[.6,.203921568627451,.01568627450980392]},{IndexedColors:[1,1,.8313725490196079,.996078431372549,.8509803921568627,.5568627450980392,.996078431372549,.6,.1607843137254902,.8,.2980392156862745,.00784313725490196],Name:"Brewer Sequential Yellow-Orange-Brown (4)",NanColor:[.8,.2980392156862745,.00784313725490196]},{IndexedColors:[1,.9686274509803922,.7372549019607844,.996078431372549,.7686274509803922,.3098039215686275,.8509803921568627,.3725490196078431,.05490196078431372],Name:"Brewer Sequential Yellow-Orange-Brown (3)",NanColor:[.8509803921568627,.3725490196078431,.05490196078431372]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8784313725490196,.9254901960784314,.9568627450980393,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.5058823529411764,.05882352941176471,.4862745098039216,.3019607843137255,0,.2941176470588235],Name:"Brewer Sequential Blue-Purple (9)",NanColor:[.3019607843137255,0,.2941176470588235]},{IndexedColors:[.9686274509803922,.9882352941176471,.9921568627450981,.8784313725490196,.9254901960784314,.9568627450980393,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.4313725490196079,.00392156862745098,.4196078431372549],Name:"Brewer Sequential Blue-Purple (8)",NanColor:[.4313725490196079,.00392156862745098,.4196078431372549]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5490196078431373,.4196078431372549,.6941176470588235,.5333333333333333,.2549019607843137,.615686274509804,.4313725490196079,.00392156862745098,.4196078431372549],Name:"Brewer Sequential Blue-Purple (7)",NanColor:[.4313725490196079,.00392156862745098,.4196078431372549]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7490196078431373,.8274509803921568,.9019607843137255,.6196078431372549,.7372549019607844,.8549019607843137,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.3372549019607843,.6549019607843137,.5058823529411764,.05882352941176471,.4862745098039216],Name:"Brewer Sequential Blue-Purple (6)",NanColor:[.5058823529411764,.05882352941176471,.4862745098039216]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7019607843137254,.803921568627451,.8901960784313725,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.3372549019607843,.6549019607843137,.5058823529411764,.05882352941176471,.4862745098039216],Name:"Brewer Sequential Blue-Purple (5)",NanColor:[.5058823529411764,.05882352941176471,.4862745098039216]},{IndexedColors:[.9294117647058824,.9725490196078431,.984313725490196,.7019607843137254,.803921568627451,.8901960784313725,.5490196078431373,.5882352941176471,.7764705882352941,.5333333333333333,.2549019607843137,.615686274509804],Name:"Brewer Sequential Blue-Purple (4)",NanColor:[.5333333333333333,.2549019607843137,.615686274509804]},{IndexedColors:[.8784313725490196,.9254901960784314,.9568627450980393,.6196078431372549,.7372549019607844,.8549019607843137,.5333333333333333,.3372549019607843,.6549019607843137],Name:"Brewer Sequential Blue-Purple (3)",NanColor:[.5333333333333333,.3372549019607843,.6549019607843137]},{IndexedColors:[.4980392156862745,.788235294117647,.4980392156862745,.7450980392156863,.6823529411764706,.8313725490196079,.9921568627450981,.7529411764705882,.5254901960784314,1,1,.6,.2196078431372549,.4235294117647059,.6901960784313725,.9411764705882353,.00784313725490196,.4980392156862745,.7490196078431373,.3568627450980392,.09019607843137255,.4,.4,.4],Name:"Brewer Qualitative Accent",NanColor:[.4,.4,.4]},{IndexedColors:[.1058823529411765,.6196078431372549,.4666666666666667,.8509803921568627,.3725490196078431,.00784313725490196,.4588235294117647,.4392156862745098,.7019607843137254,.9058823529411765,.1607843137254902,.5411764705882353,.4,.6509803921568628,.1176470588235294,.9019607843137255,.6705882352941176,.00784313725490196,.6509803921568628,.4627450980392157,.1137254901960784,.4,.4,.4],Name:"Brewer Qualitative Dark2",NanColor:[.4,.4,.4]},{IndexedColors:[.4,.7607843137254902,.6470588235294118,.9882352941176471,.5529411764705883,.3843137254901961,.5529411764705883,.6274509803921569,.796078431372549,.9058823529411765,.5411764705882353,.7647058823529411,.6509803921568628,.8470588235294118,.3294117647058823,1,.8509803921568627,.1843137254901961,.8980392156862745,.7686274509803922,.5803921568627451,.7019607843137254,.7019607843137254,.7019607843137254],Name:"Brewer Qualitative Set2",NanColor:[.7019607843137254,.7019607843137254,.7019607843137254]},{IndexedColors:[.7019607843137254,.8862745098039215,.803921568627451,.9921568627450981,.803921568627451,.6745098039215687,.796078431372549,.8352941176470589,.9098039215686274,.9568627450980393,.792156862745098,.8941176470588236,.9019607843137255,.9607843137254902,.788235294117647,1,.9490196078431372,.6823529411764706,.9450980392156862,.8862745098039215,.8,.8,.8,.8],Name:"Brewer Qualitative Pastel2",NanColor:[.8,.8,.8]},{IndexedColors:[.984313725490196,.7058823529411765,.6823529411764706,.7019607843137254,.803921568627451,.8901960784313725,.8,.9215686274509803,.7725490196078432,.8705882352941177,.796078431372549,.8941176470588236,.996078431372549,.8509803921568627,.6509803921568628,1,1,.8,.8980392156862745,.8470588235294118,.7411764705882353,.9921568627450981,.8549019607843137,.9254901960784314,.9490196078431372,.9490196078431372,.9490196078431372],Name:"Brewer Qualitative Pastel1",NanColor:[.9490196078431372,.9490196078431372,.9490196078431372]},{IndexedColors:[.8941176470588236,.1019607843137255,.1098039215686274,.2156862745098039,.4941176470588236,.7215686274509804,.3019607843137255,.6862745098039216,.2901960784313726,.596078431372549,.3058823529411765,.6392156862745098,1,.4980392156862745,0,1,1,.2,.6509803921568628,.3372549019607843,.1568627450980392,.9686274509803922,.5058823529411764,.7490196078431373,.6,.6,.6],Name:"Brewer Qualitative Set1",NanColor:[.6,.6,.6]},{IndexedColors:[.6509803921568628,.807843137254902,.8901960784313725,.1215686274509804,.4705882352941176,.7058823529411765,.6980392156862745,.8745098039215686,.5411764705882353,.2,.6274509803921569,.1725490196078431,.984313725490196,.6039215686274509,.6,.8901960784313725,.1019607843137255,.1098039215686274,.9921568627450981,.7490196078431373,.4352941176470588,1,.4980392156862745,0,.792156862745098,.6980392156862745,.8392156862745098,.4156862745098039,.2392156862745098,.6039215686274509,1,1,.6],Name:"Brewer Qualitative Paired",NanColor:[1,1,.6]},{IndexedColors:[.5529411764705883,.8274509803921568,.7803921568627451,1,1,.7019607843137254,.7450980392156863,.7294117647058823,.8549019607843137,.984313725490196,.5019607843137255,.4470588235294118,.5019607843137255,.6941176470588235,.8274509803921568,.9921568627450981,.7058823529411765,.3843137254901961,.7019607843137254,.8705882352941177,.4117647058823529,.9882352941176471,.803921568627451,.8980392156862745,.8509803921568627,.8509803921568627,.8509803921568627,.7372549019607844,.5019607843137255,.7411764705882353,.8,.9215686274509803,.7725490196078432,1,.9294117647058824,.4352941176470588],Name:"Brewer Qualitative Set3",NanColor:[1,.9294117647058824,.4352941176470588]},{IndexedColors:[1,0,0,1,.862745,0,0,.695201,0],Name:"Traffic Lights",NanColor:[.803922,0,.803922]},{IndexedColors:[.908659,.604013,.581857,1,.862745,0,0,.695201,0],Name:"Traffic Lights For Deuteranopes",NanColor:[.803922,0,.803922]},{IndexedColors:[.4196078431372549,0,.07058823529411765,.9019607843137255,.9411764705882353,.0196078431372549,.01568627450980392,.6196078431372549,.00784313725490196],Name:"Traffic Lights For Deuteranopes 2",NanColor:[.803922,0,.803922]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Muted Blue-Green",NanColor:[.25,0,0],RGBPoints:[0,.109804,.27451,.301961,.02,.129412,.309804,.341176,.05,.14902,.341176,.380392,.1,.188235,.403922,.458824,.15,.227451,.447059,.521569,.2,.290196,.494118,.588235,.25,.368627,.552941,.670588,.3,.458824,.619608,.74902,.35,.588235,.713725,.85098,.4,.72549,.815686,.941176,.45,.831373,.882353,.980392,.475,.909804,.933333,1,.5,.980392,.984314,1,.5,.996078,1,.94902,.5,1,1,.980392,.5,.980392,.984314,1,.525,.972549,.988235,.890196,.55,.917647,.960784,.835294,.6,.835294,.921569,.772549,.65,.768627,.901961,.737255,.7,.670588,.831373,.654902,.75,.576471,.760784,.584314,.8,.498039,.678431,.521569,.85,.392157,.560784,.427451,.9,.294118,.45098,.333333,.95,.211765,.34902,.254902,1,.152941,.278431,.196078]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Green-Blue Asymmetric Divergent (62Blbc)",NanColor:[.25,0,0],RGBPoints:[0,.121569,.2,.145098,.05,.196078,.301961,.223529,.1,.258824,.4,.278431,.2,.341176,.54902,.341176,.25,.419608,.619608,.376471,.3,.545098,.701961,.392157,.35,.643137,.780392,.403922,.4,.729412,.819608,.45098,.45,.811765,.870588,.521569,.5,.898039,.909804,.564706,.55,.941176,.92549,.686275,.6,.960784,.94902,.776471,.64,1,1,1,.65,.890196,.988235,.972549,.7,.721569,.894118,.901961,.75,.631373,.823529,.839216,.8,.517647,.662745,.701961,.85,.384314,.494118,.54902,.9,.298039,.360784,.45098,.95,.223529,.25098,.34902,.99,.156863,.172549,.25098,1,.137255,.137255,.188235]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Asymmtrical Earth Tones (6_21b)",NanColor:[.25,0,0],RGBPoints:[0,.141176,.14902,.2,.05,.215686,.258824,.321569,.1,.243137,.368627,.380392,.15,.27451,.439216,.4,.2,.32549,.501961,.384314,.25,.403922,.6,.419608,.3,.486275,.701961,.454902,.35,.556863,.74902,.494118,.4,.670588,.8,.545098,.5,.854902,.901961,.631373,.55,.92549,.941176,.694118,.6,.960784,.94902,.776471,.65,.988235,.968627,.909804,.7,.839216,.815686,.772549,.75,.701961,.662745,.615686,.8,.6,.529412,.478431,.85,.501961,.403922,.360784,.9,.439216,.313725,.290196,1,.301961,.164706,.176471]},{ColorSpace:"Lab",Creator:"Francesca Samsel",Name:"Yellow 15",NanColor:[.25,0,0],RGBPoints:[0,1,1,.988235,.002,1,1,.988235,.05,.984314,.988235,.843137,.1,.988235,.988235,.741176,.15,.980392,.968627,.654902,.2,.980392,.945098,.576471,.25,.968627,.905882,.486275,.3,.968627,.862745,.388235,.35,.960784,.803922,.286275,.4,.94902,.741176,.219608,.45,.941176,.678431,.14902,.5,.929412,.607843,.094118,.55,.921569,.545098,.054902,.6,.909804,.486275,.035294,.65,.890196,.411765,.019608,.7,.8,.305882,0,.75,.760784,.239216,0,.8,.678431,.180392,.011765,.85,.6,.121569,.023529,.9,.501961,.054902,.031373,.95,.4,.039216,.058824,1,.301961,.047059,.090196]},{ColorSpace:"Diverging",Name:"Magma (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.001462,466e-6,.013866,.003922,.002258,.001295,.018331,.007843,.003279,.002305,.023708,.011765,.004512,.00349,.029965,.015686,.00595,.004843,.03713,.019608,.007588,.006356,.044973,.023529,.009426,.008022,.052844,.027451,.011465,.009828,.06075,.031373,.013708,.011771,.068667,.035294,.016156,.01384,.076603,.039216,.018815,.016026,.084584,.043137,.021692,.01832,.09261,.047059,.024792,.020715,.100676,.05098,.028123,.023201,.108787,.054902,.031696,.025765,.116965,.058824,.03552,.028397,.125209,.062745,.039608,.03109,.133515,.066667,.04383,.03383,.141886,.070588,.048062,.036607,.150327,.07451,.05232,.039407,.158841,.078431,.056615,.04216,.167446,.082353,.060949,.044794,.176129,.086275,.06533,.047318,.184892,.090196,.069764,.049726,.193735,.094118,.074257,.052017,.20266,.098039,.078815,.054184,.211667,.101961,.083446,.056225,.220755,.105882,.088155,.058133,.229922,.109804,.092949,.059904,.239164,.113725,.097833,.061531,.248477,.117647,.102815,.06301,.257854,.121569,.107899,.064335,.267289,.12549,.113094,.065492,.276784,.129412,.118405,.066479,.286321,.133333,.123833,.067295,.295879,.137255,.12938,.067935,.305443,.141176,.135053,.068391,.315,.145098,.140858,.068654,.324538,.14902,.146785,.068738,.334011,.152941,.152839,.068637,.343404,.156863,.159018,.068354,.352688,.160784,.165308,.067911,.361816,.164706,.171713,.067305,.370771,.168627,.178212,.066576,.379497,.172549,.184801,.065732,.387973,.176471,.19146,.064818,.396152,.180392,.198177,.063862,.404009,.184314,.204935,.062907,.411514,.188235,.211718,.061992,.418647,.192157,.218512,.061158,.425392,.196078,.225302,.060445,.431742,.2,.232077,.059889,.437695,.203922,.238826,.059517,.443256,.207843,.245543,.059352,.448436,.211765,.25222,.059415,.453248,.215686,.258857,.059706,.45771,.219608,.265447,.060237,.46184,.223529,.271994,.060994,.46566,.227451,.278493,.061978,.46919,.231373,.284951,.063168,.472451,.235294,.291366,.064553,.475462,.239216,.29774,.066117,.478243,.243137,.304081,.067835,.480812,.247059,.310382,.069702,.483186,.25098,.316654,.07169,.48538,.254902,.322899,.073782,.487408,.258824,.329114,.075972,.489287,.262745,.335308,.078236,.491024,.266667,.341482,.080564,.492631,.270588,.347636,.082946,.494121,.27451,.353773,.085373,.495501,.278431,.359898,.087831,.496778,.282353,.366012,.090314,.49796,.286275,.372116,.092816,.499053,.290196,.378211,.095332,.500067,.294118,.384299,.097855,.501002,.298039,.390384,.100379,.501864,.301961,.396467,.102902,.502658,.305882,.402548,.10542,.503386,.309804,.408629,.10793,.504052,.313725,.414709,.110431,.504662,.317647,.420791,.11292,.505215,.321569,.426877,.115395,.505714,.32549,.432967,.117855,.50616,.329412,.439062,.120298,.506555,.333333,.445163,.122724,.506901,.337255,.451271,.125132,.507198,.341176,.457386,.127522,.507448,.345098,.463508,.129893,.507652,.34902,.46964,.132245,.507809,.352941,.47578,.134577,.507921,.356863,.481929,.136891,.507989,.360784,.488088,.139186,.508011,.364706,.494258,.141462,.507988,.368627,.500438,.143719,.50792,.372549,.506629,.145958,.507806,.376471,.512831,.148179,.507648,.380392,.519045,.150383,.507443,.384314,.52527,.152569,.507192,.388235,.531507,.154739,.506895,.392157,.537755,.156894,.506551,.396078,.544015,.159033,.506159,.4,.550287,.161158,.505719,.403922,.556571,.163269,.50523,.407843,.562866,.165368,.504692,.411765,.569172,.167454,.504105,.415686,.57549,.16953,.503466,.419608,.581819,.171596,.502777,.423529,.588158,.173652,.502035,.427451,.594508,.175701,.501241,.431373,.600868,.177743,.500394,.435294,.607238,.179779,.499492,.439216,.613617,.181811,.498536,.443137,.620005,.18384,.497524,.447059,.626401,.185867,.496456,.45098,.632805,.187893,.495332,.454902,.639216,.189921,.49415,.458824,.645633,.191952,.49291,.462745,.652056,.193986,.491611,.466667,.658483,.196027,.490253,.470588,.664915,.198075,.488836,.47451,.671349,.200133,.487358,.478431,.677786,.202203,.485819,.482353,.684224,.204286,.484219,.486275,.690661,.206384,.482558,.490196,.697098,.208501,.480835,.494118,.703532,.210638,.479049,.498039,.709962,.212797,.477201,.501961,.716387,.214982,.47529,.505882,.722805,.217194,.473316,.509804,.729216,.219437,.471279,.513725,.735616,.221713,.46918,.517647,.742004,.224025,.467018,.521569,.748378,.226377,.464794,.52549,.754737,.228772,.462509,.529412,.761077,.231214,.460162,.533333,.767398,.233705,.457755,.537255,.773695,.236249,.455289,.541176,.779968,.238851,.452765,.545098,.786212,.241514,.450184,.54902,.792427,.244242,.447543,.552941,.798608,.24704,.444848,.556863,.804752,.249911,.442102,.560784,.810855,.252861,.439305,.564706,.816914,.255895,.436461,.568627,.822926,.259016,.433573,.572549,.828886,.262229,.430644,.576471,.834791,.26554,.427671,.580392,.840636,.268953,.424666,.584314,.846416,.272473,.421631,.588235,.852126,.276106,.418573,.592157,.857763,.279857,.415496,.596078,.86332,.283729,.412403,.6,.868793,.287728,.409303,.603922,.874176,.291859,.406205,.607843,.879464,.296125,.403118,.611765,.884651,.30053,.400047,.615686,.889731,.305079,.397002,.619608,.8947,.309773,.393995,.623529,.899552,.314616,.391037,.627451,.904281,.31961,.388137,.631373,.908884,.324755,.385308,.635294,.913354,.330052,.382563,.639216,.917689,.3355,.379915,.643137,.921884,.341098,.377376,.647059,.925937,.346844,.374959,.65098,.929845,.352734,.372677,.654902,.933606,.358764,.370541,.658824,.937221,.364929,.368567,.662745,.940687,.371224,.366762,.666667,.944006,.377643,.365136,.670588,.94718,.384178,.363701,.67451,.95021,.39082,.362468,.678431,.953099,.397563,.361438,.682353,.955849,.4044,.360619,.686275,.958464,.411324,.360014,.690196,.960949,.418323,.35963,.694118,.96331,.42539,.359469,.698039,.965549,.432519,.359529,.701961,.967671,.439703,.35981,.705882,.96968,.446936,.360311,.709804,.971582,.45421,.36103,.713725,.973381,.46152,.361965,.717647,.975082,.468861,.363111,.721569,.97669,.476226,.364466,.72549,.97821,.483612,.366025,.729412,.979645,.491014,.367783,.733333,.981,.498428,.369734,.737255,.982279,.505851,.371874,.741176,.983485,.51328,.374198,.745098,.984622,.520713,.376698,.74902,.985693,.528148,.379371,.752941,.9867,.535582,.38221,.756863,.987646,.543015,.38521,.760784,.988533,.550446,.388365,.764706,.989363,.557873,.391671,.768627,.990138,.565296,.395122,.772549,.990871,.572706,.398714,.776471,.991558,.580107,.402441,.780392,.992196,.587502,.406299,.784314,.992785,.594891,.410283,.788235,.993326,.602275,.41439,.792157,.993834,.609644,.418613,.796078,.994309,.616999,.42295,.8,.994738,.62435,.427397,.803922,.995122,.631696,.431951,.807843,.99548,.639027,.436607,.811765,.99581,.646344,.441361,.815686,.996096,.653659,.446213,.819608,.996341,.660969,.45116,.823529,.99658,.668256,.456192,.827451,.996775,.675541,.461314,.831373,.996925,.682828,.466526,.835294,.997077,.690088,.471811,.839216,.997186,.697349,.477182,.843137,.997254,.704611,.482635,.847059,.997325,.711848,.488154,.85098,.997351,.719089,.493755,.854902,.997351,.726324,.499428,.858824,.997341,.733545,.505167,.862745,.997285,.740772,.510983,.866667,.997228,.747981,.516859,.870588,.997138,.75519,.522806,.87451,.997019,.762398,.528821,.878431,.996898,.769591,.534892,.882353,.996727,.776795,.541039,.886275,.996571,.783977,.547233,.890196,.996369,.791167,.553499,.894118,.996162,.798348,.55982,.898039,.995932,.805527,.566202,.901961,.99568,.812706,.572645,.905882,.995424,.819875,.57914,.909804,.995131,.827052,.585701,.913725,.994851,.834213,.592307,.917647,.994524,.841387,.598983,.921569,.994222,.84854,.605696,.92549,.993866,.855711,.612482,.929412,.993545,.862859,.619299,.933333,.99317,.870024,.626189,.937255,.992831,.877168,.633109,.941176,.99244,.88433,.640099,.945098,.992089,.89147,.647116,.94902,.991688,.898627,.654202,.952941,.991332,.905763,.661309,.956863,.99093,.912915,.668481,.960784,.99057,.920049,.675675,.964706,.990175,.927196,.682926,.968627,.989815,.934329,.690198,.972549,.989434,.94147,.697519,.976471,.989077,.948604,.704863,.980392,.988717,.955742,.712242,.984314,.988367,.962878,.719649,.988235,.988033,.970012,.727077,.992157,.987691,.977154,.734536,.996078,.987387,.984288,.742002,1,.987053,.991438,.749504]},{ColorSpace:"Diverging",Name:"Inferno (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.001462,466e-6,.013866,.003922,.002267,.00127,.01857,.007843,.003299,.002249,.024239,.011765,.004547,.003392,.030909,.015686,.006006,.004692,.038558,.019608,.007676,.006136,.046836,.023529,.009561,.007713,.055143,.027451,.011663,.009417,.06346,.031373,.013995,.011225,.071862,.035294,.016561,.013136,.080282,.039216,.019373,.015133,.088767,.043137,.022447,.017199,.097327,.047059,.025793,.019331,.10593,.05098,.029432,.021503,.114621,.054902,.033385,.023702,.123397,.058824,.037668,.025921,.132232,.062745,.042253,.028139,.141141,.066667,.046915,.030324,.150164,.070588,.051644,.032474,.159254,.07451,.056449,.034569,.168414,.078431,.06134,.03659,.177642,.082353,.066331,.038504,.186962,.086275,.071429,.040294,.196354,.090196,.076637,.041905,.205799,.094118,.081962,.043328,.215289,.098039,.087411,.044556,.224813,.101961,.09299,.045583,.234358,.105882,.098702,.046402,.243904,.109804,.104551,.047008,.25343,.113725,.110536,.047399,.262912,.117647,.116656,.047574,.272321,.121569,.122908,.047536,.281624,.12549,.129285,.047293,.290788,.129412,.135778,.046856,.299776,.133333,.142378,.046242,.308553,.137255,.149073,.045468,.317085,.141176,.15585,.044559,.325338,.145098,.162689,.043554,.333277,.14902,.169575,.042489,.340874,.152941,.176493,.041402,.348111,.156863,.183429,.040329,.354971,.160784,.190367,.039309,.361447,.164706,.197297,.0384,.367535,.168627,.204209,.037632,.373238,.172549,.211095,.03703,.378563,.176471,.217949,.036615,.383522,.180392,.224763,.036405,.388129,.184314,.231538,.036405,.3924,.188235,.238273,.036621,.396353,.192157,.244967,.037055,.400007,.196078,.25162,.037705,.403378,.2,.258234,.038571,.406485,.203922,.26481,.039647,.409345,.207843,.271347,.040922,.411976,.211765,.27785,.042353,.414392,.215686,.284321,.043933,.416608,.219608,.290763,.045644,.418637,.223529,.297178,.04747,.420491,.227451,.303568,.049396,.422182,.231373,.309935,.051407,.423721,.235294,.316282,.05349,.425116,.239216,.32261,.055634,.426377,.243137,.328921,.057827,.427511,.247059,.335217,.06006,.428524,.25098,.3415,.062325,.429425,.254902,.347771,.064616,.430217,.258824,.354032,.066925,.430906,.262745,.360284,.069247,.431497,.266667,.366529,.071579,.431994,.270588,.372768,.073915,.4324,.27451,.379001,.076253,.432719,.278431,.385228,.078591,.432955,.282353,.391453,.080927,.433109,.286275,.397674,.083257,.433183,.290196,.403894,.08558,.433179,.294118,.410113,.087896,.433098,.298039,.416331,.090203,.432943,.301961,.422549,.092501,.432714,.305882,.428768,.09479,.432412,.309804,.434987,.097069,.432039,.313725,.441207,.099338,.431594,.317647,.447428,.101597,.43108,.321569,.453651,.103848,.430498,.32549,.459875,.106089,.429846,.329412,.4661,.108322,.429125,.333333,.472328,.110547,.428334,.337255,.478558,.112764,.427475,.341176,.484789,.114974,.426548,.345098,.491022,.117179,.425552,.34902,.497257,.119379,.424488,.352941,.503493,.121575,.423356,.356863,.50973,.123769,.422156,.360784,.515967,.12596,.420887,.364706,.522206,.12815,.419549,.368627,.528444,.130341,.418142,.372549,.534683,.132534,.416667,.376471,.54092,.134729,.415123,.380392,.547157,.136929,.413511,.384314,.553392,.139134,.411829,.388235,.559624,.141346,.410078,.392157,.565854,.143567,.408258,.396078,.572081,.145797,.406369,.4,.578304,.148039,.404411,.403922,.584521,.150294,.402385,.407843,.590734,.152563,.40029,.411765,.59694,.154848,.398125,.415686,.603139,.157151,.395891,.419608,.60933,.159474,.393589,.423529,.615513,.161817,.391219,.427451,.621685,.164184,.388781,.431373,.627847,.166575,.386276,.435294,.633998,.168992,.383704,.439216,.640135,.171438,.381065,.443137,.64626,.173914,.378359,.447059,.652369,.176421,.375586,.45098,.658463,.178962,.372748,.454902,.66454,.181539,.369846,.458824,.670599,.184153,.366879,.462745,.676638,.186807,.363849,.466667,.682656,.189501,.360757,.470588,.688653,.192239,.357603,.47451,.694627,.195021,.354388,.478431,.700576,.197851,.351113,.482353,.7065,.200728,.347777,.486275,.712396,.203656,.344383,.490196,.718264,.206636,.340931,.494118,.724103,.20967,.337424,.498039,.729909,.212759,.333861,.501961,.735683,.215906,.330245,.505882,.741423,.219112,.326576,.509804,.747127,.222378,.322856,.513725,.752794,.225706,.319085,.517647,.758422,.229097,.315266,.521569,.76401,.232554,.311399,.52549,.769556,.236077,.307485,.529412,.775059,.239667,.303526,.533333,.780517,.243327,.299523,.537255,.785929,.247056,.295477,.541176,.791293,.250856,.29139,.545098,.796607,.254728,.287264,.54902,.801871,.258674,.283099,.552941,.807082,.262692,.278898,.556863,.812239,.266786,.274661,.560784,.817341,.270954,.27039,.564706,.822386,.275197,.266085,.568627,.827372,.279517,.26175,.572549,.832299,.283913,.257383,.576471,.837165,.288385,.252988,.580392,.841969,.292933,.248564,.584314,.846709,.297559,.244113,.588235,.851384,.30226,.239636,.592157,.855992,.307038,.235133,.596078,.860533,.311892,.230606,.6,.865006,.316822,.226055,.603922,.869409,.321827,.221482,.607843,.873741,.326906,.216886,.611765,.878001,.33206,.212268,.615686,.882188,.337287,.207628,.619608,.886302,.342586,.202968,.623529,.890341,.347957,.198286,.627451,.894305,.353399,.193584,.631373,.898192,.358911,.18886,.635294,.902003,.364492,.184116,.639216,.905735,.37014,.17935,.643137,.90939,.375856,.174563,.647059,.912966,.381636,.169755,.65098,.916462,.387481,.164924,.654902,.919879,.393389,.16007,.658824,.923215,.399359,.155193,.662745,.92647,.405389,.150292,.666667,.929644,.411479,.145367,.670588,.932737,.417627,.140417,.67451,.935747,.423831,.13544,.678431,.938675,.430091,.130438,.682353,.941521,.436405,.125409,.686275,.944285,.442772,.120354,.690196,.946965,.449191,.115272,.694118,.949562,.45566,.110164,.698039,.952075,.462178,.105031,.701961,.954506,.468744,.099874,.705882,.956852,.475356,.094695,.709804,.959114,.482014,.089499,.713725,.961293,.488716,.084289,.717647,.963387,.495462,.079073,.721569,.965397,.502249,.073859,.72549,.967322,.509078,.068659,.729412,.969163,.515946,.063488,.733333,.970919,.522853,.058367,.737255,.97259,.529798,.053324,.741176,.974176,.53678,.048392,.745098,.975677,.543798,.043618,.74902,.977092,.55085,.03905,.752941,.978422,.557937,.034931,.756863,.979666,.565057,.031409,.760784,.980824,.572209,.028508,.764706,.981895,.579392,.02625,.768627,.982881,.586606,.024661,.772549,.983779,.593849,.02377,.776471,.984591,.601122,.023606,.780392,.985315,.608422,.024202,.784314,.985952,.61575,.025592,.788235,.986502,.623105,.027814,.792157,.986964,.630485,.030908,.796078,.987337,.63789,.034916,.8,.987622,.64532,.039886,.803922,.987819,.652773,.045581,.807843,.987926,.66025,.05175,.811765,.987945,.667748,.058329,.815686,.987874,.675267,.065257,.819608,.987714,.682807,.072489,.823529,.987464,.690366,.07999,.827451,.987124,.697944,.087731,.831373,.986694,.70554,.095694,.835294,.986175,.713153,.103863,.839216,.985566,.720782,.112229,.843137,.984865,.728427,.120785,.847059,.984075,.736087,.129527,.85098,.983196,.743758,.138453,.854902,.982228,.751442,.147565,.858824,.981173,.759135,.156863,.862745,.980032,.766837,.166353,.866667,.978806,.774545,.176037,.870588,.977497,.782258,.185923,.87451,.976108,.789974,.196018,.878431,.974638,.797692,.206332,.882353,.973088,.805409,.216877,.886275,.971468,.813122,.227658,.890196,.969783,.820825,.238686,.894118,.968041,.828515,.249972,.898039,.966243,.836191,.261534,.901961,.964394,.843848,.273391,.905882,.962517,.851476,.285546,.909804,.960626,.859069,.29801,.913725,.95872,.866624,.31082,.917647,.956834,.874129,.323974,.921569,.954997,.881569,.337475,.92549,.953215,.888942,.351369,.929412,.951546,.896226,.365627,.933333,.950018,.903409,.380271,.937255,.948683,.910473,.395289,.941176,.947594,.917399,.410665,.945098,.946809,.924168,.426373,.94902,.946392,.930761,.442367,.952941,.946403,.937159,.458592,.956863,.946903,.943348,.47497,.960784,.947937,.949318,.491426,.964706,.949545,.955063,.50786,.968627,.95174,.960587,.524203,.972549,.954529,.965896,.540361,.976471,.957896,.971003,.556275,.980392,.961812,.975924,.571925,.984314,.966249,.980678,.587206,.988235,.971162,.985282,.602154,.992157,.976511,.989753,.61676,.996078,.982257,.994109,.631017,1,.988362,.998364,.644924]},{ColorSpace:"Diverging",Name:"Plasma (matplotlib)",NanColor:[0,1,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Nathaniel J. Smith & Stefan van der Walt",RGBPoints:[0,.050383,.029803,.527975,.003922,.063536,.028426,.533124,.007843,.075353,.027206,.538007,.011765,.086222,.026125,.542658,.015686,.096379,.025165,.547103,.019608,.10598,.024309,.551368,.023529,.115124,.023556,.555468,.027451,.123903,.022878,.559423,.031373,.132381,.022258,.56325,.035294,.140603,.021687,.566959,.039216,.148607,.021154,.570562,.043137,.156421,.020651,.574065,.047059,.16407,.020171,.577478,.05098,.171574,.019706,.580806,.054902,.17895,.019252,.584054,.058824,.186213,.018803,.587228,.062745,.193374,.018354,.59033,.066667,.200445,.017902,.593364,.070588,.207435,.017442,.596333,.07451,.21435,.016973,.599239,.078431,.221197,.016497,.602083,.082353,.227983,.016007,.604867,.086275,.234715,.015502,.607592,.090196,.241396,.014979,.610259,.094118,.248032,.014439,.612868,.098039,.254627,.013882,.615419,.101961,.261183,.013308,.617911,.105882,.267703,.012716,.620346,.109804,.274191,.012109,.622722,.113725,.280648,.011488,.625038,.117647,.287076,.010855,.627295,.121569,.293478,.010213,.62949,.12549,.299855,.009561,.631624,.129412,.30621,.008902,.633694,.133333,.312543,.008239,.6357,.137255,.318856,.007576,.63764,.141176,.32515,.006915,.639512,.145098,.331426,.006261,.641316,.14902,.337683,.005618,.643049,.152941,.343925,.004991,.64471,.156863,.35015,.004382,.646298,.160784,.356359,.003798,.64781,.164706,.362553,.003243,.649245,.168627,.368733,.002724,.650601,.172549,.374897,.002245,.651876,.176471,.381047,.001814,.653068,.180392,.387183,.001434,.654177,.184314,.393304,.001114,.655199,.188235,.399411,859e-6,.656133,.192157,.405503,678e-6,.656977,.196078,.41158,577e-6,.65773,.2,.417642,564e-6,.65839,.203922,.423689,646e-6,.658956,.207843,.429719,831e-6,.659425,.211765,.435734,.001127,.659797,.215686,.441732,.00154,.660069,.219608,.447714,.00208,.66024,.223529,.453677,.002755,.66031,.227451,.459623,.003574,.660277,.231373,.46555,.004545,.660139,.235294,.471457,.005678,.659897,.239216,.477344,.00698,.659549,.243137,.48321,.00846,.659095,.247059,.489055,.010127,.658534,.25098,.494877,.01199,.657865,.254902,.500678,.014055,.657088,.258824,.506454,.016333,.656202,.262745,.512206,.018833,.655209,.266667,.517933,.021563,.654109,.270588,.523633,.024532,.652901,.27451,.529306,.027747,.651586,.278431,.534952,.031217,.650165,.282353,.54057,.03495,.64864,.286275,.546157,.038954,.64701,.290196,.551715,.043136,.645277,.294118,.557243,.047331,.643443,.298039,.562738,.051545,.641509,.301961,.568201,.055778,.639477,.305882,.573632,.060028,.637349,.309804,.579029,.064296,.635126,.313725,.584391,.068579,.632812,.317647,.589719,.072878,.630408,.321569,.595011,.07719,.627917,.32549,.600266,.081516,.625342,.329412,.605485,.085854,.622686,.333333,.610667,.090204,.619951,.337255,.615812,.094564,.61714,.341176,.620919,.098934,.614257,.345098,.625987,.103312,.611305,.34902,.631017,.107699,.608287,.352941,.636008,.112092,.605205,.356863,.640959,.116492,.602065,.360784,.645872,.120898,.598867,.364706,.650746,.125309,.595617,.368627,.65558,.129725,.592317,.372549,.660374,.134144,.588971,.376471,.665129,.138566,.585582,.380392,.669845,.142992,.582154,.384314,.674522,.147419,.578688,.388235,.67916,.151848,.575189,.392157,.683758,.156278,.57166,.396078,.688318,.160709,.568103,.4,.69284,.165141,.564522,.403922,.697324,.169573,.560919,.407843,.701769,.174005,.557296,.411765,.706178,.178437,.553657,.415686,.710549,.182868,.550004,.419608,.714883,.187299,.546338,.423529,.719181,.191729,.542663,.427451,.723444,.196158,.538981,.431373,.72767,.200586,.535293,.435294,.731862,.205013,.531601,.439216,.736019,.209439,.527908,.443137,.740143,.213864,.524216,.447059,.744232,.218288,.520524,.45098,.748289,.222711,.516834,.454902,.752312,.227133,.513149,.458824,.756304,.231555,.509468,.462745,.760264,.235976,.505794,.466667,.764193,.240396,.502126,.470588,.76809,.244817,.498465,.47451,.771958,.249237,.494813,.478431,.775796,.253658,.491171,.482353,.779604,.258078,.487539,.486275,.783383,.2625,.483918,.490196,.787133,.266922,.480307,.494118,.790855,.271345,.476706,.498039,.794549,.27577,.473117,.501961,.798216,.280197,.469538,.505882,.801855,.284626,.465971,.509804,.805467,.289057,.462415,.513725,.809052,.293491,.45887,.517647,.812612,.297928,.455338,.521569,.816144,.302368,.451816,.52549,.819651,.306812,.448306,.529412,.823132,.311261,.444806,.533333,.826588,.315714,.441316,.537255,.830018,.320172,.437836,.541176,.833422,.324635,.434366,.545098,.836801,.329105,.430905,.54902,.840155,.33358,.427455,.552941,.843484,.338062,.424013,.556863,.846788,.342551,.420579,.560784,.850066,.347048,.417153,.564706,.853319,.351553,.413734,.568627,.856547,.356066,.410322,.572549,.85975,.360588,.406917,.576471,.862927,.365119,.403519,.580392,.866078,.36966,.400126,.584314,.869203,.374212,.396738,.588235,.872303,.378774,.393355,.592157,.875376,.383347,.389976,.596078,.878423,.387932,.3866,.6,.881443,.392529,.383229,.603922,.884436,.397139,.37986,.607843,.887402,.401762,.376494,.611765,.89034,.406398,.37313,.615686,.89325,.411048,.369768,.619608,.896131,.415712,.366407,.623529,.898984,.420392,.363047,.627451,.901807,.425087,.359688,.631373,.904601,.429797,.356329,.635294,.907365,.434524,.35297,.639216,.910098,.439268,.34961,.643137,.9128,.444029,.346251,.647059,.915471,.448807,.34289,.65098,.918109,.453603,.339529,.654902,.920714,.458417,.336166,.658824,.923287,.463251,.332801,.662745,.925825,.468103,.329435,.666667,.928329,.472975,.326067,.670588,.930798,.477867,.322697,.67451,.933232,.48278,.319325,.678431,.93563,.487712,.315952,.682353,.93799,.492667,.312575,.686275,.940313,.497642,.309197,.690196,.942598,.502639,.305816,.694118,.944844,.507658,.302433,.698039,.947051,.512699,.299049,.701961,.949217,.517763,.295662,.705882,.951344,.52285,.292275,.709804,.953428,.52796,.288883,.713725,.95547,.533093,.28549,.717647,.957469,.53825,.282096,.721569,.959424,.543431,.278701,.72549,.961336,.548636,.275305,.729412,.963203,.553865,.271909,.733333,.965024,.559118,.268513,.737255,.966798,.564396,.265118,.741176,.968526,.5697,.261721,.745098,.970205,.575028,.258325,.74902,.971835,.580382,.254931,.752941,.973416,.585761,.25154,.756863,.974947,.591165,.248151,.760784,.976428,.596595,.244767,.764706,.977856,.602051,.241387,.768627,.979233,.607532,.238013,.772549,.980556,.613039,.234646,.776471,.981826,.618572,.231287,.780392,.983041,.624131,.227937,.784314,.984199,.629718,.224595,.788235,.985301,.63533,.221265,.792157,.986345,.640969,.217948,.796078,.987332,.646633,.214648,.8,.98826,.652325,.211364,.803922,.989128,.658043,.2081,.807843,.989935,.663787,.204859,.811765,.990681,.669558,.201642,.815686,.991365,.675355,.198453,.819608,.991985,.681179,.195295,.823529,.992541,.68703,.19217,.827451,.993032,.692907,.189084,.831373,.993456,.69881,.186041,.835294,.993814,.704741,.183043,.839216,.994103,.710698,.180097,.843137,.994324,.716681,.177208,.847059,.994474,.722691,.174381,.85098,.994553,.728728,.171622,.854902,.994561,.734791,.168938,.858824,.994495,.74088,.166335,.862745,.994355,.746995,.163821,.866667,.994141,.753137,.161404,.870588,.993851,.759304,.159092,.87451,.993482,.765499,.156891,.878431,.993033,.77172,.154808,.882353,.992505,.777967,.152855,.886275,.991897,.784239,.151042,.890196,.991209,.790537,.149377,.894118,.990439,.796859,.14787,.898039,.989587,.803205,.146529,.901961,.988648,.809579,.145357,.905882,.987621,.815978,.144363,.909804,.986509,.822401,.143557,.913725,.985314,.828846,.142945,.917647,.984031,.835315,.142528,.921569,.982653,.841812,.142303,.92549,.98119,.848329,.142279,.929412,.979644,.854866,.142453,.933333,.977995,.861432,.142808,.937255,.976265,.868016,.143351,.941176,.974443,.874622,.144061,.945098,.97253,.88125,.144923,.94902,.970533,.887896,.145919,.952941,.968443,.894564,.147014,.956863,.966271,.901249,.14818,.960784,.964021,.90795,.14937,.964706,.961681,.914672,.15052,.968627,.959276,.921407,.151566,.972549,.956808,.928152,.152409,.976471,.954287,.934908,.152921,.980392,.951726,.941671,.152925,.984314,.949151,.948435,.152178,.988235,.946602,.95519,.150328,.992157,.944152,.961916,.146861,.996078,.941896,.96859,.140956,1,.940015,.975158,.131326]},{ColorSpace:"Diverging",Name:"Viridis (matplotlib)",NanColor:[1,0,0],Source:"https://github.com/BIDS/colormap/blob/master/colormaps.py",License:"CC0",Creator:"Eric Firing",RGBPoints:[0,.267004,.004874,.329415,.003922,.26851,.009605,.335427,.007843,.269944,.014625,.341379,.011765,.271305,.019942,.347269,.015686,.272594,.025563,.353093,.019608,.273809,.031497,.358853,.023529,.274952,.037752,.364543,.027451,.276022,.044167,.370164,.031373,.277018,.050344,.375715,.035294,.277941,.056324,.381191,.039216,.278791,.062145,.386592,.043137,.279566,.067836,.391917,.047059,.280267,.073417,.397163,.05098,.280894,.078907,.402329,.054902,.281446,.08432,.407414,.058824,.281924,.089666,.412415,.062745,.282327,.094955,.417331,.066667,.282656,.100196,.42216,.070588,.28291,.105393,.426902,.07451,.283091,.110553,.431554,.078431,.283197,.11568,.436115,.082353,.283229,.120777,.440584,.086275,.283187,.125848,.44496,.090196,.283072,.130895,.449241,.094118,.282884,.13592,.453427,.098039,.282623,.140926,.457517,.101961,.28229,.145912,.46151,.105882,.281887,.150881,.465405,.109804,.281412,.155834,.469201,.113725,.280868,.160771,.472899,.117647,.280255,.165693,.476498,.121569,.279574,.170599,.479997,.12549,.278826,.17549,.483397,.129412,.278012,.180367,.486697,.133333,.277134,.185228,.489898,.137255,.276194,.190074,.493001,.141176,.275191,.194905,.496005,.145098,.274128,.199721,.498911,.14902,.273006,.20452,.501721,.152941,.271828,.209303,.504434,.156863,.270595,.214069,.507052,.160784,.269308,.218818,.509577,.164706,.267968,.223549,.512008,.168627,.26658,.228262,.514349,.172549,.265145,.232956,.516599,.176471,.263663,.237631,.518762,.180392,.262138,.242286,.520837,.184314,.260571,.246922,.522828,.188235,.258965,.251537,.524736,.192157,.257322,.25613,.526563,.196078,.255645,.260703,.528312,.2,.253935,.265254,.529983,.203922,.252194,.269783,.531579,.207843,.250425,.27429,.533103,.211765,.248629,.278775,.534556,.215686,.246811,.283237,.535941,.219608,.244972,.287675,.53726,.223529,.243113,.292092,.538516,.227451,.241237,.296485,.539709,.231373,.239346,.300855,.540844,.235294,.237441,.305202,.541921,.239216,.235526,.309527,.542944,.243137,.233603,.313828,.543914,.247059,.231674,.318106,.544834,.25098,.229739,.322361,.545706,.254902,.227802,.326594,.546532,.258824,.225863,.330805,.547314,.262745,.223925,.334994,.548053,.266667,.221989,.339161,.548752,.270588,.220057,.343307,.549413,.27451,.21813,.347432,.550038,.278431,.21621,.351535,.550627,.282353,.214298,.355619,.551184,.286275,.212395,.359683,.55171,.290196,.210503,.363727,.552206,.294118,.208623,.367752,.552675,.298039,.206756,.371758,.553117,.301961,.204903,.375746,.553533,.305882,.203063,.379716,.553925,.309804,.201239,.38367,.554294,.313725,.19943,.387607,.554642,.317647,.197636,.391528,.554969,.321569,.19586,.395433,.555276,.32549,.1941,.399323,.555565,.329412,.192357,.403199,.555836,.333333,.190631,.407061,.556089,.337255,.188923,.41091,.556326,.341176,.187231,.414746,.556547,.345098,.185556,.41857,.556753,.34902,.183898,.422383,.556944,.352941,.182256,.426184,.55712,.356863,.180629,.429975,.557282,.360784,.179019,.433756,.55743,.364706,.177423,.437527,.557565,.368627,.175841,.44129,.557685,.372549,.174274,.445044,.557792,.376471,.172719,.448791,.557885,.380392,.171176,.45253,.557965,.384314,.169646,.456262,.55803,.388235,.168126,.459988,.558082,.392157,.166617,.463708,.558119,.396078,.165117,.467423,.558141,.4,.163625,.471133,.558148,.403922,.162142,.474838,.55814,.407843,.160665,.47854,.558115,.411765,.159194,.482237,.558073,.415686,.157729,.485932,.558013,.419608,.15627,.489624,.557936,.423529,.154815,.493313,.55784,.427451,.153364,.497,.557724,.431373,.151918,.500685,.557587,.435294,.150476,.504369,.55743,.439216,.149039,.508051,.55725,.443137,.147607,.511733,.557049,.447059,.14618,.515413,.556823,.45098,.144759,.519093,.556572,.454902,.143343,.522773,.556295,.458824,.141935,.526453,.555991,.462745,.140536,.530132,.555659,.466667,.139147,.533812,.555298,.470588,.13777,.537492,.554906,.47451,.136408,.541173,.554483,.478431,.135066,.544853,.554029,.482353,.133743,.548535,.553541,.486275,.132444,.552216,.553018,.490196,.131172,.555899,.552459,.494118,.129933,.559582,.551864,.498039,.128729,.563265,.551229,.501961,.127568,.566949,.550556,.505882,.126453,.570633,.549841,.509804,.125394,.574318,.549086,.513725,.124395,.578002,.548287,.517647,.123463,.581687,.547445,.521569,.122606,.585371,.546557,.52549,.121831,.589055,.545623,.529412,.121148,.592739,.544641,.533333,.120565,.596422,.543611,.537255,.120092,.600104,.54253,.541176,.119738,.603785,.5414,.545098,.119512,.607464,.540218,.54902,.119423,.611141,.538982,.552941,.119483,.614817,.537692,.556863,.119699,.61849,.536347,.560784,.120081,.622161,.534946,.564706,.120638,.625828,.533488,.568627,.12138,.629492,.531973,.572549,.122312,.633153,.530398,.576471,.123444,.636809,.528763,.580392,.12478,.640461,.527068,.584314,.126326,.644107,.525311,.588235,.128087,.647749,.523491,.592157,.130067,.651384,.521608,.596078,.132268,.655014,.519661,.6,.134692,.658636,.517649,.603922,.137339,.662252,.515571,.607843,.14021,.665859,.513427,.611765,.143303,.669459,.511215,.615686,.146616,.67305,.508936,.619608,.150148,.676631,.506589,.623529,.153894,.680203,.504172,.627451,.157851,.683765,.501686,.631373,.162016,.687316,.499129,.635294,.166383,.690856,.496502,.639216,.170948,.694384,.493803,.643137,.175707,.6979,.491033,.647059,.180653,.701402,.488189,.65098,.185783,.704891,.485273,.654902,.19109,.708366,.482284,.658824,.196571,.711827,.479221,.662745,.202219,.715272,.476084,.666667,.20803,.718701,.472873,.670588,.214,.722114,.469588,.67451,.220124,.725509,.466226,.678431,.226397,.728888,.462789,.682353,.232815,.732247,.459277,.686275,.239374,.735588,.455688,.690196,.24607,.73891,.452024,.694118,.252899,.742211,.448284,.698039,.259857,.745492,.444467,.701961,.266941,.748751,.440573,.705882,.274149,.751988,.436601,.709804,.281477,.755203,.432552,.713725,.288921,.758394,.428426,.717647,.296479,.761561,.424223,.721569,.304148,.764704,.419943,.72549,.311925,.767822,.415586,.729412,.319809,.770914,.411152,.733333,.327796,.77398,.40664,.737255,.335885,.777018,.402049,.741176,.344074,.780029,.397381,.745098,.35236,.783011,.392636,.74902,.360741,.785964,.387814,.752941,.369214,.788888,.382914,.756863,.377779,.791781,.377939,.760784,.386433,.794644,.372886,.764706,.395174,.797475,.367757,.768627,.404001,.800275,.362552,.772549,.412913,.803041,.357269,.776471,.421908,.805774,.35191,.780392,.430983,.808473,.346476,.784314,.440137,.811138,.340967,.788235,.449368,.813768,.335384,.792157,.458674,.816363,.329727,.796078,.468053,.818921,.323998,.8,.477504,.821444,.318195,.803922,.487026,.823929,.312321,.807843,.496615,.826376,.306377,.811765,.506271,.828786,.300362,.815686,.515992,.831158,.294279,.819608,.525776,.833491,.288127,.823529,.535621,.835785,.281908,.827451,.545524,.838039,.275626,.831373,.555484,.840254,.269281,.835294,.565498,.84243,.262877,.839216,.575563,.844566,.256415,.843137,.585678,.846661,.249897,.847059,.595839,.848717,.243329,.85098,.606045,.850733,.236712,.854902,.616293,.852709,.230052,.858824,.626579,.854645,.223353,.862745,.636902,.856542,.21662,.866667,.647257,.8584,.209861,.870588,.657642,.860219,.203082,.87451,.668054,.861999,.196293,.878431,.678489,.863742,.189503,.882353,.688944,.865448,.182725,.886275,.699415,.867117,.175971,.890196,.709898,.868751,.169257,.894118,.720391,.87035,.162603,.898039,.730889,.871916,.156029,.901961,.741388,.873449,.149561,.905882,.751884,.874951,.143228,.909804,.762373,.876424,.137064,.913725,.772852,.877868,.131109,.917647,.783315,.879285,.125405,.921569,.79376,.880678,.120005,.92549,.804182,.882046,.114965,.929412,.814576,.883393,.110347,.933333,.82494,.88472,.106217,.937255,.83527,.886029,.102646,.941176,.845561,.887322,.099702,.945098,.85581,.888601,.097452,.94902,.866013,.889868,.095953,.952941,.876168,.891125,.09525,.956863,.886271,.892374,.095374,.960784,.89632,.893616,.096335,.964706,.906311,.894855,.098125,.968627,.916242,.896091,.100717,.972549,.926106,.89733,.104071,.976471,.935904,.89857,.108131,.980392,.945636,.899815,.112838,.984314,.9553,.901065,.118128,.988235,.964894,.902323,.123941,.992157,.974417,.90359,.130215,.996078,.983868,.904867,.136897,1,.993248,.906157,.143936]},{ShowIndexedColorActiveValues:1,IndexedColors:[.07,.5,.7,1,1,1,.85,1,1,.8,.5,1,.76,1,0,1,.71,.71,.5,.5,.5,.05,.05,1,1,.05,.05,.7,1,1,.7,.89,.96,.67,.36,.95,.54,1,0,.75,.65,.65,.5,.6,.6,1,.5,0,1,1,.19,.12,.94,.12,.5,.82,.89,.56,.25,.83,.24,1,0,.9,.9,.9,.75,.76,.78,.65,.65,.67,.54,.6,.78,.61,.48,.78,.5,.48,.78,.44,.48,.78,.36,.48,.76,1,.48,.38,.49,.5,.69,.76,.56,.56,.4,.56,.56,.74,.5,.89,1,.63,0,.65,.16,.16,.36,.72,.82,.44,.18,.69,0,1,0,.58,1,1,.58,.88,.88,.45,.76,.79,.33,.71,.71,.23,.62,.62,.14,.56,.56,.04,.49,.55,0,.41,.52,.88,.88,1,1,.85,.56,.65,.46,.45,.4,.5,.5,.62,.39,.71,.83,.48,0,.58,0,.58,.26,.62,.69,.34,.09,.56,0,.79,0,.44,.83,1,1,1,.78,.85,1,.78,.78,1,.78,.64,1,.78,.56,1,.78,.38,1,.78,.27,1,.78,.19,1,.78,.12,1,.78,0,1,.61,0,.9,.46,0,.83,.32,0,.75,.22,0,.67,.14,.3,.76,1,.3,.65,1,.13,.58,.84,.15,.49,.67,.15,.4,.59,.09,.33,.53,.96,.93,.82,.8,.82,.12,.71,.71,.76,.65,.33,.3,.34,.35,.38,.62,.31,.71,.67,.36,0,.46,.31,.27,.26,.51,.59,.26,0,.4,0,.49,0,.44,.67,.98,0,.73,1,0,.63,1,0,.56,1,0,.5,1,0,.42,1,.33,.36,.95,.47,.36,.89,.54,.31,.89,.63,.21,.83,.7,.12,.83,.7,.12,.73,.7,.05,.65,.74,.05,.53,.78,0,.4,.8,0,.35,.82,0,.31,.85,0,.27,.88,0,.22,.9,0,.18,.91,0,.15,.92,0,.14,.93,0,.13,.94,0,.12,.95,0,.11,.96,0,.1,.97,0,.09,.98,0,.08,.99,0,.07,1,0,.06],Annotations:[0,"Xx",1,"H",2,"He",3,"Li",4,"Be",5,"B",6,"C",7,"N",8,"O",9,"F",10,"Ne",11,"Na",12,"Mg",13,"Al",14,"Si",15,"P",16,"S",17,"Cl",18,"Ar",19,"K",20,"Ca",21,"Sc",22,"Ti",23,"V",24,"Cr",25,"Mn",26,"Fe",27,"Co",28,"Ni",29,"Cu",30,"Zn",31,"Ga",32,"Ge",33,"As",34,"Se",35,"Br",36,"Kr",37,"Rb",38,"Sr",39,"Y",40,"Zr",41,"Nb",42,"Mo",43,"Tc",44,"Ru",45,"Rh",46,"Pd",47,"Ag",48,"Cd",49,"In",50,"Sn",51,"Sb",52,"Te",53,"I",54,"Xe",55,"Cs",56,"Ba",57,"La",58,"Ce",59,"Pr",60,"Nd",61,"Pm",62,"Sm",63,"Eu",64,"Gd",65,"Tb",66,"Dy",67,"Ho",68,"Er",69,"Tm",70,"Yb",71,"Lu",72,"Hf",73,"Ta",74,"W",75,"Re",76,"Os",77,"Ir",78,"Pt",79,"Au",80,"Hg",81,"Tl",82,"Pb",83,"Bi",84,"Po",85,"At",86,"Rn",87,"Fr",88,"Ra",89,"Ac",90,"Th",91,"Pa",92,"U",93,"Np",94,"Pu",95,"Am",96,"Cm",97,"Bk",98,"Cf",99,"Es",100,"Fm",101,"Md",102,"No",103,"Lr",104,"Rf",105,"Db",106,"Sg",107,"Bh",108,"Hs",109,"Mt",110,"Ds",111,"Rg",112,"Cn",113,"Uut",114,"Uuq",115,"Uup",116,"Uuh",117,"Uus",118,"Uuo"],Name:"BlueObeliskElements"}];const wh=Object.create(null);xie.filter(t=>t.RGBPoints).filter(t=>t.ColorSpace!=="CIELAB").forEach(t=>{wh[t.Name]=t});const xh=Object.keys(wh);xh.sort();function Cie(t){return wh[t]}function Sie(t){!t.RGBPoints||t.ColorSpace==="CIELAB"||(wh[t.Name]||(xh.push(t.Name),xh.sort()),wh[t.Name]=t)}function Tie(t){const e=xh.indexOf(t);e>-1&&xh.splice(e,1),delete wh[t]}var u1={addPreset:Sie,removePresetByName:Tie,getPresetByName:Cie,rgbPresetNames:xh};function TN(t,e,r){return Math.abs(t-e)<=r}function _ie(t,e,r=1e-5){if(t.length!==e.length)return!1;for(let n=0;n0&&typeof t[0]=="number"}function Zt(t,e,r=1e-5){return typeof t!=typeof e||t===null||e===null?!1:OD(t)&&OD(e)?TN(t,e,r):MD(t)&&MD(e)?_ie(t,e,r):!1}const _N=t=>typeof t=="number"?-t:t!=null&&t.map?t.map(_N):!t,wS=t=>typeof t=="number"?Math.abs(t):t!=null&&t.map?t.map(wS):t,EN=(t,e,r=void 0)=>Zt(t,_N(e),r),Eie=(t,e,r=void 0)=>Zt(wS(t),wS(e),r);function Ar(t){return Array.isArray(t)?Ar(t[0]):isFinite(t)&&!isNaN(t)}const k4=new Map;function bie(t){t.name=t.name||t.Name,k4.set(t.name,t)}function f1(t){return k4.get(t)}function bN(){return Array.from(k4.keys())}function V4(t,e){const r=u1.rgbPresetNames.map(s=>u1.getPresetByName(s)),n=bN().map(s=>f1(s)),o=r.concat(n).find(s=>{const{RGBPoints:c}=s;if(c.length!==t.length)return!1;for(let l=0;l0)return o}return null}function B4(t){const e=t.getProperty().getScalarOpacity(0);if(!e)return 1;const r=e.getDataPointer();if(!r||r.length===0)return 1;let n=0;for(let i=1;in&&(n=r[i]);return n}const Iie=Object.freeze(Object.defineProperty({__proto__:null,findMatchingColormap:V4,getColormap:f1,getColormapNames:bN,getMaxOpacity:B4,getThresholdValue:U4,registerColormap:bie,setColorMapTransferFunctionForVolumeActor:Die,updateOpacity:DN,updateThreshold:IN},Symbol.toStringTag,{value:"Module"}));function wp(t){if(!t)return;const e=t.getSize();for(let r=0;re-r/4*Math.log((1-t)/t);function im(t,e){const r=Math.abs(e-t)+1,n=(t+e+1)/2;return{windowWidth:r,windowCenter:n}}function Xu(t,e,r=wo.LINEAR){if(r===wo.LINEAR)return{lower:e-.5-(t-1)/2,upper:e-.5+(t-1)/2};if(r===wo.LINEAR_EXACT)return{lower:e-t/2,upper:e+t/2};if(r===wo.SAMPLED_SIGMOID){const n=xS(.01,e,t),i=xS(.99,e,t);return{lower:n,upper:i}}else throw new Error("Invalid VOI LUT function")}const Oie=Object.freeze(Object.defineProperty({__proto__:null,toLowHighRange:Xu,toWindowLevel:im},Symbol.toStringTag,{value:"Module"}));function G4(t,e=1024){const{windowWidth:r,windowCenter:n}=im(t.lower,t.upper),o=Array.from({length:e},(s,c)=>(c+1)/(e+2)).flatMap(s=>[xS(s,n,r),s,s,s,.5,0]),a=Ql.newInstance();return a.buildFunctionFromArray(Bt.newInstance({values:o,numberOfComponents:6})),a}function zr(t,e){return t.worldToIndex(e).map(Math.round)}function I2(t,e){return t.worldToIndex(e)}function Ny(t){const e=t.getSize(),r=[];for(let n=0;n{t.addRGBPoint(...r)}))}const Mie=Object.freeze(Object.defineProperty({__proto__:null,getTransferFunctionNodes:Ny,setTransferFunctionNodes:mw},Symbol.toStringTag,{value:"Module"})),{InterpolationType:Jg,OpacityMode:Pie}=yA,{vtkErrorMacro:Xx}=J,O2=4;function Rie(t,e){e.classHierarchy.push("vtkVolumeProperty"),t.getMTime=()=>{let i=e.mtime,o;for(let a=0;ao?i:o):e.componentData[a].colorChannels===3&&e.componentData[a].rGBTransferFunction&&(o=e.componentData[a].rGBTransferFunction.getMTime(),i=i>o?i:o),e.componentData[a].scalarOpacity&&(o=e.componentData[a].scalarOpacity.getMTime(),i=i>o?i:o),e.componentData[a].gradientOpacity&&(e.componentData[a].disableGradientOpacity||(o=e.componentData[a].gradientOpacity.getMTime(),i=i>o?i:o));return i},t.getColorChannels=i=>i<0||i>3?(Xx("Bad index - must be between 0 and 3"),0):e.componentData[i].colorChannels,t.setGrayTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,a=!1;return e.componentData[i].grayTransferFunction!==o&&(e.componentData[i].grayTransferFunction=o,a=!0),e.componentData[i].colorChannels!==1&&(e.componentData[i].colorChannels=1,a=!0),a&&t.modified(),a},t.getGrayTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].grayTransferFunction===null&&(e.componentData[i].grayTransferFunction=Ed.newInstance(),e.componentData[i].grayTransferFunction.addPoint(0,0),e.componentData[i].grayTransferFunction.addPoint(1024,1),e.componentData[i].colorChannels!==1&&(e.componentData[i].colorChannels=1),t.modified()),e.componentData[i].grayTransferFunction},t.setRGBTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,a=!1;return e.componentData[i].rGBTransferFunction!==o&&(e.componentData[i].rGBTransferFunction=o,a=!0),e.componentData[i].colorChannels!==3&&(e.componentData[i].colorChannels=3,a=!0),a&&t.modified(),a},t.getRGBTransferFunction=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].rGBTransferFunction===null&&(e.componentData[i].rGBTransferFunction=Ql.newInstance(),e.componentData[i].rGBTransferFunction.addRGBPoint(0,0,0,0),e.componentData[i].rGBTransferFunction.addRGBPoint(1024,1,1,1),e.componentData[i].colorChannels!==3&&(e.componentData[i].colorChannels=3),t.modified()),e.componentData[i].rGBTransferFunction},t.setScalarOpacity=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return e.componentData[i].scalarOpacity!==o?(e.componentData[i].scalarOpacity=o,t.modified(),!0):!1},t.getScalarOpacity=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[i].scalarOpacity===null&&(e.componentData[i].scalarOpacity=Ed.newInstance(),e.componentData[i].scalarOpacity.addPoint(0,1),e.componentData[i].scalarOpacity.addPoint(1024,1),t.modified()),e.componentData[i].scalarOpacity},t.setComponentWeight=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;if(i<0||i>=O2)return Xx("Invalid index"),!1;const a=Math.min(1,Math.max(0,o));return e.componentData[i].componentWeight!==a?(e.componentData[i].componentWeight=a,t.modified(),!0):!1},t.getComponentWeight=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return i<0||i>=O2?(Xx("Invalid index"),0):e.componentData[i].componentWeight},t.setInterpolationTypeToNearest=()=>t.setInterpolationType(Jg.NEAREST),t.setInterpolationTypeToLinear=()=>t.setInterpolationType(Jg.LINEAR),t.setInterpolationTypeToFastLinear=()=>t.setInterpolationType(Jg.FAST_LINEAR),t.getInterpolationTypeAsString=()=>J.enumToString(Jg,e.interpolationType),["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode","forceNearestInterpolation"].forEach(i=>{const o=J.capitalize(i);t[`set${o}`]=(a,s)=>e.componentData[a][`${i}`]!==s?(e.componentData[a][`${i}`]=s,t.modified(),!0):!1}),["useGradientOpacity","scalarOpacityUnitDistance","gradientOpacityMinimumValue","gradientOpacityMinimumOpacity","gradientOpacityMaximumValue","gradientOpacityMaximumOpacity","opacityMode","forceNearestInterpolation"].forEach(i=>{const o=J.capitalize(i);t[`get${o}`]=a=>e.componentData[a][`${i}`]})}const Lie={colorMixPreset:null,independentComponents:!0,interpolationType:Jg.FAST_LINEAR,shade:!1,ambient:.1,diffuse:.7,specular:.2,specularPower:10,useLabelOutline:!1,labelOutlineThickness:[1],labelOutlineOpacity:1};function Aie(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,Lie,r),J.obj(t,e),!e.componentData){e.componentData=[];for(let n=0;nt,t.makeProperty=kie.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const r=e.mapper.getBounds();if(!r||r.length!==6)return r;if(r[0]>r[1])return e.mapperBounds=r.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),r;const n=i=>i[0].map((o,a)=>i.map(s=>s[a]));if(!e.mapperBounds||!n([r,e.mapperBounds]).reduce((i,o)=>i&&o[0]===o[1],!0)||t.getMTime()>e.boundsMTime.getMTime()){Vie("Recomputing bounds..."),e.mapperBounds=r.map(a=>a);const i=[];ir.getCorners(r,i),t.computeMatrix();const o=new Float64Array(16);En(o,e.matrix),i.forEach(a=>Yt(a,a,o)),e.bounds[0]=e.bounds[2]=e.bounds[4]=Number.MAX_VALUE,e.bounds[1]=e.bounds[3]=e.bounds[5]=-Number.MAX_VALUE,e.bounds=e.bounds.map((a,s)=>s%2===0?i.reduce((c,l)=>c>l[s/2]?l[s/2]:c,a):i.reduce((c,l)=>c{let r=e.mtime;if(e.property!==null){const n=e.property.getMTime();r=n>r?n:r}return r},t.getRedrawMTime=()=>{let r=e.mtime;if(e.mapper!==null){let n=e.mapper.getMTime();r=n>r?n:r,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),n=e.mapper.getInput().getMTime(),r=n>r?n:r)}return r}}const Uie={mapper:null,property:null,bounds:[1,-1,1,-1,1,-1]};function ON(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Uie,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["mapper"]),J.getArray(t,e,["bounds"],6),Fie(t,e)}const Bie=J.newInstance(ON,"vtkVolume");var Gie={newInstance:Bie,extend:ON};const{vtkErrorMacro:Wie}=J;class zie{constructor(){this.segmentMapping={},this.segments=[null],this.faces=[]}addSegment(e){const r=e[0],n=e[e.length-1];if(r===n||e.length<2)return;const i=this.segmentMapping[r],o=this.segmentMapping[n];if(i!==void 0&&o!==void 0)if(Math.abs(i)===Math.abs(o)){const a=i0)for(let c=1;c0){const a=this.segments[i];for(let s=1;s0){const a=this.segments[o];for(let s=1;s{const i=r[0];if(!i){Wie("Invalid or missing input");return}const o=Br.newInstance();o.shallowCopy(i);const a=new zie,s=i.getLines().getData();let c=0;for(;c2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,jie,r),J.obj(t,e),J.algo(t,e,1,1),$ie(t,e)}const Hie=J.newInstance(MN,"vtkClosedPolyLineToSurfaceFilter");var Kie={newInstance:Hie,extend:MN};const{vtkErrorMacro:PD}=_o;function qie(t){const e=t.getPolys().getData(),r=t.getStrips().getData(),n={cellSize:0,cell:[],done:!1,polyIdx:0,stripIdx:0,remainingStripLength:0,next(){if(n.polyIdx{let i=r.getMTime();return e.cutFunction&&(i=Math.max(i,e.cutFunction.getMTime())),i};function n(i,o){const a=i.getPoints(),s=a.getData(),c=a.getNumberOfPoints(),l=[],f=[],u=[];(!e.cutScalars||e.cutScalars.length0;let C=!0;for(let _=1;_0!==x){C=!1;break}if(C)continue;const S=[];for(let _=0;_0;if(y[E]>0===b)continue;let I=_,P=E,O=y[P]-y[I];O<=0&&(I=E,P=_,O*=-1);let A=0;O!==0&&(A=(e.cutValue-y[I])/O);const V=w.cell[I],G=w.cell[P];p[0]=s[V*3],p[1]=s[V*3+1],p[2]=s[V*3+2],v[0]=s[G*3],v[1]=s[G*3+1],v[2]=s[G*3+2];const R=[p[0]+A*(v[0]-p[0]),p[1]+A*(v[1]-p[1]),p[2]+A*(v[2]-p[2])];S.push({pointEdge1:V,pointEdge2:G,intersectedPoint:R,newPointID:-1})}for(let _=0;_2&&(u.push(T),S.forEach(_=>{u.push(_.newPointID)}))}o.getPoints().setData(Y5(a.getDataType(),l),3),f.length!==0&&o.getLines().setData(Uint16Array.from(f)),u.length!==0&&o.getPolys().setData(Uint16Array.from(u))}t.requestData=(i,o)=>{const a=i[0];if(!a){PD("Invalid or missing input");return}if(!e.cutFunction){PD("Missing cut function");return}const s=Br.newInstance();n(a,s),o[0]=s}}const Yie={cutFunction:null,cutScalars:null,cutValue:0};function PN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Yie,r),yr(t,e),O_(t,e,1,1),ci(t,e,["cutFunction","cutValue"]),Xie(t,e)}const Jie=$n(PN,"vtkCutter");var Zie={newInstance:Jie,extend:PN};const Qie=[2,0,1,2,2,3,2,4,5,2,6,7,2,0,2,2,1,3,2,4,6,2,5,7,2,0,4,2,1,5,2,2,6,2,3,7],eoe=[4,0,1,3,2,4,4,6,7,5,4,8,10,11,9,4,12,13,15,14,4,16,18,19,17,4,20,21,23,22];function toe(t,e){e.classHierarchy.push("vtkCubeSource");function r(n,i){if(e.deleted)return;const o=Br.newInstance();i[0]=o;const a=24,s=J.newTypedArray(e.pointType,a*3);o.getPoints().setData(s,3);const c=J.newTypedArray(e.pointType,a*3),l=Bt.newInstance({name:"Normals",values:c,numberOfComponents:3});o.getPointData().setNormals(l);let f=2;e.generate3DTextureCoordinates===!0&&(f=3);const u=J.newTypedArray(e.pointType,a*f),d=Bt.newInstance({name:"TextureCoordinates",values:u,numberOfComponents:f});o.getPointData().setTCoords(d);const h=[0,0,0],g=[0,0,0],p=[0,0];let v=0;h[0]=-e.xLength/2,g[0]=-1,g[1]=0,g[2]=0;for(let y=0;y<2;y++){h[1]=-e.yLength/2;for(let m=0;m<2;m++){p[1]=h[1]+.5,h[2]=-e.zLength/2;for(let w=0;w<2;w++)p[0]=(h[2]+.5)*(1-2*y),s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*y-1,u[v*f+1]=2*m-1,u[v*f+2]=2*w-1),v++,h[2]+=e.zLength;h[1]+=e.yLength}h[0]+=e.xLength,g[0]+=2}h[1]=-e.yLength/2,g[1]=-1,g[0]=0,g[2]=0;for(let y=0;y<2;y++){h[0]=-e.xLength/2;for(let m=0;m<2;m++){p[0]=(h[0]+.5)*(2*y-1),h[2]=-e.zLength/2;for(let w=0;w<2;w++)p[1]=(h[2]+.5)*-1,s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*m-1,u[v*f+1]=2*y-1,u[v*f+2]=2*w-1),v++,h[2]+=e.zLength;h[0]+=e.xLength}h[1]+=e.yLength,g[1]+=2}h[2]=-e.zLength/2,g[2]=-1,g[0]=0,g[1]=0;for(let y=0;y<2;y++){h[1]=-e.yLength/2;for(let m=0;m<2;m++){p[1]=h[1]+.5,h[0]=-e.xLength/2;for(let w=0;w<2;w++)p[0]=(h[0]+.5)*(2*y-1),s[v*3]=h[0],s[v*3+1]=h[1],s[v*3+2]=h[2],c[v*3]=g[0],c[v*3+1]=g[1],c[v*3+2]=g[2],f===2?(u[v*f]=p[0],u[v*f+1]=p[1]):(u[v*f]=2*w-1,u[v*f+1]=2*m-1,u[v*f+2]=2*y-1),v++,h[0]+=e.xLength;h[1]+=e.yLength}h[2]+=e.zLength,g[2]+=2}if(e.rotations&&Yi.buildFromDegree().rotateX(e.rotations[0]).rotateY(e.rotations[1]).rotateZ(e.rotations[2]).apply(s).apply(c),e.center&&Yi.buildFromRadian().translate(...e.center).apply(s),e.matrix){Yi.buildFromRadian().setMatrix(e.matrix).apply(s);const y=[e.matrix[0],e.matrix[1],e.matrix[2],0,e.matrix[4],e.matrix[5],e.matrix[6],0,e.matrix[8],e.matrix[9],e.matrix[10],0,0,0,0,1];Yi.buildFromRadian().setMatrix(y).apply(c)}e.generateFaces?o.getPolys().deepCopy(e._polys):o.getPolys().initialize(),e.generateLines?(o.getLines().deepCopy(e._lineCells),o.getPointData().setNormals(null)):o.getLines().initialize(),o.modified()}t.setBounds=function(){let n=[];if(Array.isArray(arguments.length<=0?void 0:arguments[0]))n=arguments.length<=0?void 0:arguments[0];else for(let i=0;i2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,noe,r),J.obj(t,e),J.setGet(t,e,["xLength","yLength","zLength","generate3DTextureCoordinates","generateFaces","generateLines"]),J.setGetArray(t,e,["center","rotations"],3),J.setGetArray(t,e,["matrix"],16),e._polys=_d.newInstance({values:Uint16Array.from(eoe)}),e._lineCells=_d.newInstance({values:Uint16Array.from(Qie)}),J.moveToProtected(t,e,["polys","lineCells"]),J.algo(t,e,0,1),toe(t,e)}const roe=J.newInstance(RN,"vtkCubeSource");var LN={newInstance:roe,extend:RN};const{vtkErrorMacro:RD}=J;function ioe(t,e){e.classHierarchy.push("vtkImageDataOutlineFilter");const r={...t};t.requestData=(n,i)=>{const o=n[0];if(!o||!o.isA("vtkImageData")){RD("Invalid or missing input");return}const a=o.getSpatialExtent();if(!a){RD("Unable to fetch spatial extents of input image.");return}e._cubeSource.setBounds(a),e._cubeSource.setMatrix(o.getIndexToWorld()),i[0]=e._cubeSource.getOutputData()},t.getMTime=()=>Math.max(r.getMTime(),e._cubeSource.getMTime()),t.setGenerateFaces=e._cubeSource.setGenerateFaces,t.setGenerateLines=e._cubeSource.setGenerateLines,t.getGenerateFaces=e._cubeSource.getGenerateFaces,t.getGenerateLines=e._cubeSource.getGenerateLines}const ooe={};function AN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ooe,r),J.obj(t,e),J.algo(t,e,1,1),e._cubeSource=LN.newInstance(),J.moveToProtected(t,e,["cubeSource","tmpOut"]),ioe(t,e)}const aoe=J.newInstance(AN,"vtkImageDataOutlineFilter");var soe={newInstance:aoe,extend:AN};let W4;function coe(t,e){e.classHierarchy.push("vtkAbstractTransform","vtkHomogeneousTransform","vtkTransform"),t.transformPoint=(r,n)=>(Yt(n,r,e.matrix),n),t.transformPoints=(r,n)=>{const i=new Float64Array(3),o=new Float64Array(3);for(let a=0;a{t.setPreMultiplyFlag(!0)},t.postMultiply=()=>{t.setPreMultiplyFlag(!1)},t.transformMatrix=(r,n)=>(e.preMultiplyFlag?An(n,e.matrix,r):An(n,r,e.matrix),n),t.transformMatrices=(r,n)=>{const i=new Float64Array(16),o=new Float64Array(16),a=e.preMultiplyFlag?()=>An(o,e.matrix,i):()=>An(o,i,e.matrix);for(let s=0;sW4({matrix:nn.invertMatrix(Array.from(e.matrix),[],4),preMultiplyFlag:e.preMultiplyFlag})}const loe={preMultiplyFlag:!1,matrix:[...B_]};function NN(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,loe,r),J.obj(t,e),J.setGet(t,e,["preMultiplyFlag"]),J.setGetArray(t,e,["matrix"],16),coe(t,e)}W4=J.newInstance(NN,"vtkTransform");var uoe={newInstance:W4,extend:NN},foe=`//VTK::System::Dec /*========================================================================= @@ -3027,7 +3027,7 @@ fn main( return output; } -`;function Yae(t,e,r){if(e.apply(t)){const i=t.getIndependentComponents();return`${t.getMTime()}-${i}-${r}`}return"0"}const Va=new Float64Array(16),Fc=new Float64Array(16),yv=new Float64Array(16),_l=new Float64Array(4),Ai=new Float64Array(4);function Jae(t,e){e.classHierarchy.push("vtkWebGPUImageMapper"),t.buildPass=i=>{if(i){e.WebGPUImageSlice=t.getFirstAncestorOfType("vtkWebGPUImageSlice"),e.WebGPURenderer=e.WebGPUImageSlice.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.device=e.WebGPURenderWindow.getDevice();const o=e.WebGPURenderer.getRenderable();e.renderable.getSliceAtFocalPoint()&&e.renderable.setSliceFromCamera(o.getActiveCamera())}},t.translucentPass=i=>{i&&t.render()},t.opaquePass=i=>{i&&t.render()},t.render=()=>{e.renderable.update(),e.currentInput=e.renderable.getInputData(),t.prepareToDraw(e.WebGPURenderer.getRenderEncoder()),e.renderEncoder.registerDrawCallback(e.pipeline,t.draw)},t.computePipelineHash=()=>{const i=e.currentInput.getExtent();i[0]===i[1]||i[2]===i[3]||i[4]===i[5]?(e.dimensions=2,e.pipelineHash="img2"):(e.dimensions=3,e.pipelineHash="img3")},t.updateUBO=()=>{const i=e.UBO.getSendTime(),o=e.WebGPUImageSlice.getRenderable(),a=o.getMapper();if(t.getMTime()>i||e.renderable.getMTime()>i||o.getProperty().getMTime()>i){const s=a.getInputData(),c=e.WebGPURenderer.getStabilizedCenterByReference();Wt(Va),dr(Va,Va,c);const l=o.getMatrix();En(Fc,l),$r(Fc,Fc),An(Va,Fc,Va);const f=s.getWorldToIndex();An(Va,f,Va),$r(yv,Va),em(Fc,[.5,.5,.5]),An(Va,Fc,Va);const u=s.getDimensions();Wt(Fc),cl(Fc,Fc,[1/u[0],1/u[1],1/u[2]]),An(Va,Fc,Va),e.UBO.setArray("SCTCMatrix",Va);const d=e.currentInput.getExtent(),{ijkMode:h}=e.renderable.getClosestIJKAxis();let g=e.renderable.getSlice();h!==e.renderable.getSlicingMode()&&(g=e.renderable.getSliceAtPosition(g));let p=2,v=0,y=1;h===GD.I?(p=0,v=1,y=2):h===GD.J&&(p=1,v=2,y=0),_l[p]=g,_l[v]=d[v*2]-.5,_l[y]=d[y*2]-.5,_l[3]=1,ku(_l,_l,yv),e.UBO.setArray("Origin",_l),Ai[p]=g,Ai[v]=d[v*2+1]+.5,Ai[y]=d[y*2]-.5,Ai[3]=1,ku(Ai,Ai,yv),z6(Ai,Ai,_l),Ai[3]=1,e.UBO.setArray("Axis1",Ai),Ai[p]=g,Ai[v]=d[v*2]-.5,Ai[y]=d[y*2+1]+.5,Ai[3]=1,ku(Ai,Ai,yv),z6(Ai,Ai,_l),Ai[3]=1,e.UBO.setArray("Axis2",Ai);const m=[1,1,1,1],w=[0,0,0,0],x=e.textureViews[0],C=x.getTexture().getScale(),S=x.getTexture().getNumberOfComponents();for(let T=0;T{const i=e.WebGPUImageSlice.getRenderable().getProperty();t.getTextureViews()[0].getTexture().getNumberOfComponents();const a=1,s=Yae(i,i.getRGBTransferFunction,a);if(e.colorTextureString!==s){e.numRows=a;const c=new Uint8ClampedArray(e.numRows*2*e.rowLength*4);let l=i.getRGBTransferFunction();if(l){const f=new Float32Array(e.rowLength*3);for(let u=0;u{r();const i=e.device.getTextureManager().getTextureForImageData(e.currentInput),o=e.textureViews;if(!o[0]||o[0].getTexture()!==i){const c=i.createView("imgTexture");o[0]=c}t.updateLUTImage(),t.updateUBO();const s=e.WebGPUImageSlice.getRenderable().getProperty().getInterpolationType()===cd.NEAREST?"nearest":"linear";(!e.clampSampler||s!==e.clampSampler.getOptions().minFilter)&&(e.clampSampler=ZN.newInstance({label:"clampSampler"}),e.clampSampler.create(e.device,{minFilter:s,magFilter:s}),e.additionalBindables=[e.clampSampler])};const n=t.getShaderReplacements();t.replaceShaderPosition=(i,o,a)=>{const s=o.getShaderDescription("vertex");s.addBuiltinOutput("vec4","@builtin(position) Position");let c=s.getCode();const l=["var pos: vec4 = mapperUBO.Origin +"," (vertexBC.x * 0.5 + 0.5) * mapperUBO.Axis1 + (vertexBC.y * 0.5 + 0.5) * mapperUBO.Axis2;","pos.w = 1.0;"];e.dimensions===2?l.push("var tcoord : vec2 = (mapperUBO.SCTCMatrix * pos).xy;"):l.push("var tcoord : vec3 = (mapperUBO.SCTCMatrix * pos).xyz;"),l.push("output.tcoordVS = tcoord;","output.Position = rendererUBO.SCPCMatrix * pos;"),c=sr.substitute(c,"//VTK::Position::Impl",l).result,s.setCode(c)},n.set("replaceShaderPosition",t.replaceShaderPosition),t.replaceShaderTCoord=(i,o,a)=>{const s=o.getShaderDescription("vertex");e.dimensions===2?s.addOutput("vec2","tcoordVS"):s.addOutput("vec3","tcoordVS")},n.set("replaceShaderTCoord",t.replaceShaderTCoord),t.replaceShaderImage=(i,o,a)=>{const s=o.getShaderDescription("fragment");let c=s.getCode();e.dimensions===3?c=sr.substitute(c,"//VTK::Image::Sample",[" var computedColor: vec4 ="," textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);","//VTK::Image::Sample"]).result:c=sr.substitute(c,"//VTK::Image::Sample",[" var computedColor: vec4 ="," textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);","//VTK::Image::Sample"]).result,c=sr.substitute(c,"//VTK::Image::Sample",[" var coord: vec2 ="," vec2(computedColor.r * mapperUBO.cScale.r + mapperUBO.cShift.r, 0.5);"," computedColor = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);"]).result,s.setCode(c)},n.set("replaceShaderImage",t.replaceShaderImage)}const Zae={rowLength:1024};function Qae(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Zae,r),CS.extend(t,e,r),t.setFragmentShaderTemplate(Xae),e.UBO=Y0.newInstance({label:"mapperUBO"}),e.UBO.addEntry("SCTCMatrix","mat4x4"),e.UBO.addEntry("Origin","vec4"),e.UBO.addEntry("Axis2","vec4"),e.UBO.addEntry("Axis1","vec4"),e.UBO.addEntry("cScale","vec4"),e.UBO.addEntry("cShift","vec4"),e.lutBuildTime={},yr(e.lutBuildTime,{mtime:0}),e.imagemat=Wt(new Float64Array(16)),e.imagematinv=Wt(new Float64Array(16)),e.VBOBuildTime={},yr(e.VBOBuildTime),Jae(t,e)}const ese=$n(Qae,"vtkWebGPUImageMapper");Es("vtkImageMapper",ese);function tse(t,e){e.classHierarchy.push("vtkWebGPUImageSlice"),t.buildPass=r=>{if(!(!e.renderable||!e.renderable.getVisibility())&&r){if(!e.renderable)return;e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes()}},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children.forEach(n=>{n.traverse(r)}),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children.forEach(n=>{n.traverse(r)}),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const n=e.renderable.getMatrix(),i=r.getStabilizedCenterByReference();e.bufferShift[0]=n[3]-i[0],e.bufferShift[1]=n[7]-i[1],e.bufferShift[2]=n[11]-i[2],En(e.keyMatrices.bcwc,n),e.renderable.getIsIdentity()?Wt(e.keyMatrices.normalMatrix):(kr(e.keyMatrices.normalMatrix,e.keyMatrices.bcwc),e.keyMatrices.normalMatrix[3]=0,e.keyMatrices.normalMatrix[7]=0,e.keyMatrices.normalMatrix[11]=0,$r(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix),En(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix)),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-i[0],-i[1],-i[2]]),e.keyMatricesTime.modified()}return e.keyMatrices}}const nse={bufferShift:void 0,keyMatrixTime:null,keyMatrices:null,propID:void 0};function rse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,nse,r),fr.extend(t,e,r),e.keyMatricesTime={},yr(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},e.keyMatrixTime={},yr(e.keyMatrixTime,{mtime:0}),e.keyMatrices={mcwc:Wt(new Float64Array(16))},e.bufferShift=[0,0,0,0],Go(t,e,["propID","keyMatricesTime"]),tse(t,e)}const ise=$n(rse,"vtkWebGPUImageSlice");Es("vtkImageSlice",ise);function ose(t,e){e.classHierarchy.push("vtkWebGPUVolume"),t.buildPass=i=>{!e.renderable||!e.renderable.getVisibility()||i&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),e.renderable.getMapper().update())},t.queryPass=(i,o)=>{if(i){if(!e.renderable||!e.renderable.getVisibility())return;const a=e.renderable.getMapper().getBounds();if(!a||a.length!==6||a[0]>a[1])return;o.addVolume(t)}};const r=new Float64Array(3),n=new Float64Array(3);t.getBoundingCubePoints=(i,o)=>{const a=e.renderable.getMapper().getInputData();if(!a)return;const s=a.getExtent(),c=e.renderable.getMatrix();let l=0;for(let f=4;f<6;f++){r[2]=s[f];for(let u=2;u<4;u++){r[1]=s[u];for(let d=0;d<2;d++){r[0]=s[d],a.indexToWorld(r,n);let h=o+l*3;i[h++]=c[0]*n[0]+c[1]*n[1]+c[2]*n[2]+c[3],i[h++]=c[4]*n[0]+c[5]*n[1]+c[6]*n[2]+c[7],i[h++]=c[8]*n[0]+c[9]*n[1]+c[10]*n[2]+c[11],l++}}}},t.getKeyMatrices=i=>{if(Math.max(e.renderable.getMTime(),i.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const o=e.renderable.getMatrix(),a=i.getStabilizedCenterByReference();En(e.keyMatrices.bcwc,o),dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-a[0],-a[1],-a[2]]),e.keyMatricesTime.modified()}return e.keyMatrices}}const ase={propID:void 0,keyMatricesTime:null};function sse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ase,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),ose(t,e)}const cse=J.newInstance(sse,"vtkWebGPUVolume");Es("vtkVolume",cse);function lse(t,e){e.classHierarchy.push("vtkWebGPUPixelSpaceCallbackMapper"),t.opaquePass=(r,n)=>{e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent();const i=e.WebGPURenderer.getAspectRatio(),o=e.WebGPURenderer?e.WebGPURenderer.getRenderable().getActiveCamera():null,a=e.WebGPURenderer.getTiledSizeAndOrigin(),s=null;e.renderable.getUseZValues(),e.renderable.invokeCallback(e.renderable.getInputData(),o,i,a,s)}}const use={};function fse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,use,r),fr.extend(t,e,r),lse(t,e)}const dse=J.newInstance(fse,"vtkWebGPUPixelSpaceCallbackMapper");Es("vtkPixelSpaceCallbackMapper",dse);const WD=[[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],zD=[[0,-1,0],[0,1,0]],hse=[[0,-1,0],[0,1,0],[0,0,-1]],gse=[[0,-1,0],[0,1,0],[0,0,1]];var lh;let s0=(lh=class{static copyMap(e,r){for(const[n,i]of r.rows)e.rows.set(n,structuredClone(i))}constructor(e,r,n=1){this.rows=new Map,this.height=1,this.width=1,this.depth=1,this.jMultiple=1,this.kMultiple=1,this.numComps=1,this.pixelDataConstructor=Uint8Array,this.updateScalarData=function(i){i.fill(0);const o=(a,s,c)=>{const{start:l,end:f,value:u}=s;for(let d=l;d{const o=i%this.jMultiple,a=(i-o)/this.jMultiple,s=this.getRLE(o,a);return(s==null?void 0:s.value)??this.defaultValue},this.getRun=(i,o)=>{const a=i+o*this.height;return this.rows.get(a)},this.set=(i,o)=>{if(o===void 0)return;const a=i%this.width,s=(i-a)/this.width,c=this.rows.get(s);if(!c){this.rows.set(s,[{start:a,end:a+1,value:o}]);return}const l=this.findIndex(c,a),f=c[l],u=c[l-1];if(!f){if(!u||u.value!==o||u.end!==a){c[l]={start:a,end:a+1,value:o};return}u.end++;return}const{start:d,end:h,value:g}=f;if(o===g&&a>=d)return;const p={start:a,end:a+1,value:o},v=a>d,y=v?l+1:l,m=v?f:u;let w=v?c[l+1]:f;if((m==null?void 0:m.value)===o&&(m==null?void 0:m.end)===a){m.end++,(w==null?void 0:w.value)===o&&w.start===a+1?(m.end=w.end,c.splice(l,1)):(w==null?void 0:w.start)===a&&(w.start++,w.start===w.end&&(c.splice(l,1),w=c[l],(w==null?void 0:w.start)===a+1&&w.value===o&&(m.end=w.end,c.splice(l,1))));return}if((w==null?void 0:w.value)===o&&w.start===a+1){w.start--,(m==null?void 0:m.end)>a&&(m.end=a,m.end===m.start&&c.splice(l,1));return}if((w==null?void 0:w.start)===a&&w.end===a+1){w.value=o;const x=c[l+1];(x==null?void 0:x.start)==a+1&&x.value===o&&(c.splice(l+1,1),w.end=x.end);return}a===(w==null?void 0:w.start)&&w.start++,v&&h>a+1?c.splice(y,0,p,{start:a+1,end:m.end,value:m.value}):c.splice(y,0,p),(m==null?void 0:m.end)>a&&(m.end=a)},this.width=e,this.height=r,this.depth=n,this.jMultiple=e,this.kMultiple=this.jMultiple*r}toIJK(e){const r=e%this.jMultiple,n=(e-r)/this.jMultiple%this.height,i=Math.floor(e/this.kMultiple);return[r,n,i]}toIndex([e,r,n]){return e+n*this.kMultiple+r*this.jMultiple}getRLE(e,r,n=0){const i=this.rows.get(r+n*this.height);if(!i)return;const o=this.findIndex(i,e),a=i[o];return e>=(a==null?void 0:a.start)?a:void 0}has(e){const r=e%this.jMultiple,n=(e-r)/this.jMultiple,i=this.getRLE(r,n);return(i==null?void 0:i.value)!==void 0}delete(e){const r=e%this.width,n=(e-r)/this.width,i=this.rows.get(n);if(!i)return;const o=this.findIndex(i,r),a=i[o];if(!a||a.start>r)return;if(a.end===r+1){a.end--,a.start>=a.end&&(i.splice(o,1),i.length||this.rows.delete(n));return}if(a.start===r){a.start++;return}const s={value:a.value,start:r+1,end:a.end};a.end=r,i.splice(o+1,0,s)}findIndex(e,r){for(let n=0;nh&&h[0].value===r);e.push(...d)}return o}fillFrom(e,r){for(let n=r[2][0];n<=r[2][1];n++)for(let i=r[1][0];i<=r[1][1];i++){let o,a;for(let s=r[0][0];s<=r[0][1];s++){const c=e(s,i,n);if(c===void 0){o=void 0;continue}a||(a=[],this.rows.set(i+n*this.height,a)),o&&o.value!==c&&(o=void 0),o||(o={start:s,end:s,value:c},a.push(o)),o.end++}}}findAdjacents(e,{diagonals:r=!0,planar:n=!0,singlePlane:i=!1}){const[o,a,s,c]=e,{start:l,end:f}=o,u=l>0&&this.getRLE(l-1,a,s),d=f0?l-1:l,f=this.height||w<0||w>=this.depth)continue;const x=this.getRun(m,w);if(x)for(const C of x){const S=c||i&&zD||n&&y>0&&gse||n&&y<0&&hse||WD;C.end<=h[0]||C.start>=h[1]||g.push([C,m,w,S])}}return g}},lh.getScalarData=function(e=Uint8ClampedArray){const r=new e(this.frameSize);return this.map.updateScalarData(r),r},lh),M2=class Zg{constructor(e={}){this._dimensions=3,this._length=0,this._byteSize=4,this.growSize=128;const{initialSize:r=1024,dimensions:n=3,growSize:i=128}=e,o=r*n;this.growSize=i,this.array=new ArrayBuffer(o*this._byteSize),this.data=new Float32Array(this.array),this._dimensions=n}forEach(e){for(let r=0;r=this._length)return;const r=this._dimensions*e;return this.data.subarray(r,r+this._dimensions)}getPointArray(e){const r=[];if(e<0&&(e+=this._length),e<0||e>=this._length)return;const n=this._dimensions*e;for(let i=0;ie)}toXYZ(){const e={x:[],y:[]};this._dimensions>=3&&(e.z=[]);const{x:r,y:n,z:i}=e;return this.forEach(o=>{r.push(o[0]),n.push(o[1]),i&&i.push(o[2])}),e}static fromXYZ({x:e,y:r,z:n}){const i=Zg.create3(e.length);let o=0;for(let a=0;an.push(i)),n}static create2(e=128){return new Zg({initialSize:e,dimensions:2})}};function QN(t){const e=Ke(),r=t.getDimensions(),n=M2.create3(r[0]),i=M2.create3(r[1]),o=M2.create3(r[2]),a=t.getDirection(),s=a.slice(0,3),c=a.slice(3,6),l=a.slice(6,9),f=t.getSpacing(),[u,d,h]=f,g=t.indexToWorld([0,0,0]),p=Ft(s[0]*u,s[1]*u,s[2]*u),v=Ft(c[0]*d,c[1]*d,c[2]*d),y=Ft(l[0]*h,l[1]*h,l[2]*h),m=Ke();for(let S=0;S{const[_,E,b]=S,D=_*3,I=E*3,P=b*3;return T[0]=w[D]+x[I]+C[P],T[1]=w[D+1]+x[I+1]+C[P+1],T[2]=w[D+2]+x[I+2]+C[P+2],T}}function z4(t,e){const{pointInShapeFn:r,callback:n,boundsIJK:i,returnPoints:o=!1}=e;let a;if(t.getScalarData)a=t.getScalarData();else{const u=t.getPointData().getScalars();if(u)a=u.getData();else{const{voxelManager:d}=t.get("voxelManager")||{};d&&(a=d.getCompleteScalarDataArray())}}const s=t.getDimensions(),c=[[0,s[0]],[0,s[1]],[0,s[2]]],f=pse({imageData:t,bounds:i||c,scalarData:a,pointInShapeFn:r,callback:n});return o?f:void 0}function pse({imageData:t,bounds:e,scalarData:r,pointInShapeFn:n,callback:i}){const[[o,a],[s,c],[l,f]]=e,{numComps:u}=t,d=t.getDimensions(),h=QN(t),g=[0,0,0],p=u||r.length/d[2]/d[1]/d[0],v=d[0]*p,y=d[1]*v,m=[];for(let w=l;w<=f;w++){g[2]=w;const x=w*y;for(let C=s;C<=c;C++){g[1]=C;const S=x+C*v;for(let T=o;T<=a;T++){g[0]=T;const _=h(g);if(n(_,g)){const E=S+T*p;let b;p>2?b=[r[E],r[E+1],r[E+2]]:b=r[E],m.push({value:b,index:E,pointIJK:g,pointLPS:_.slice()}),i({value:b,index:E,pointIJK:g,pointLPS:_})}}}}return m}function mse({voxelManager:t,bounds:e,imageData:r,pointInShapeFn:n,callback:i,returnPoints:o}){const[[a,s],[c,l],[f,u]]=e,d=QN(r),h=[0,0,0],g=[];for(let p=f;p<=u;p++){h[2]=p;for(let v=c;v<=l;v++){h[1]=v;for(let y=a;y<=s;y++){h[0]=y;const m=d(h);if(n(m,h)){const w=t.toIndex(h),x=t.getAtIndex(w);o&&g.push({value:x,index:w,pointIJK:[...h],pointLPS:m.slice()}),i==null||i({value:x,index:w,pointIJK:h,pointLPS:m})}}}}return g}const vse=5*1024;let hc=class Ni{get id(){return this._id}constructor(e,r){this.modifiedSlices=new Set,this.boundsIJK=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]],this.scalarData=null,this._sliceDataCache=null,this.getAtIJK=(n,i,o)=>{const a=this.toIndex([n,i,o]);return this._get(a)},this.setAtIJK=(n,i,o,a)=>{const s=this.toIndex([n,i,o]),c=this._set(s,a);return c!==!1&&(this.modifiedSlices.add(o),Ni.addBounds(this.boundsIJK,[n,i,o])),c},this.getAtIJKPoint=([n,i,o])=>this.getAtIJK(n,i,o),this.setAtIJKPoint=([n,i,o],a)=>{this.setAtIJK(n,i,o,a)},this.getAtIndex=n=>this._get(n),this.setAtIndex=(n,i)=>{const o=this._set(n,i);if(o!==!1){const a=this.toIJK(n);this.modifiedSlices.add(a[2]),Ni.addBounds(this.boundsIJK,a)}return o},this.getMiddleSliceData=()=>{const n=Math.floor(this.dimensions[2]/2);return this.getSliceData({sliceIndex:n,slicePlane:2})},this.forEach=(n,i={})=>{const o=i.boundsIJK||this.getBoundsIJK(),a=i.isInObject||this.isInObject||(()=>!0),s=i.returnPoints||!1,c=i.imageData,l=Math.min(o[0][0],o[0][1]),f=Math.max(o[0][0],o[0][1]),u=Math.min(o[1][0],o[1][1]),d=Math.max(o[1][0],o[1][1]),h=Math.min(o[2][0],o[2][1]),g=Math.max(o[2][0],o[2][1]),p=[];if(c)return mse({voxelManager:this,imageData:i.imageData,bounds:[[l,f],[u,d],[h,g]],pointInShapeFn:a,callback:n,returnPoints:s});if(this.map){if(this.map instanceof s0)return this.rleForEach(n,i);for(const v of this.map.keys()){const y=this.toIJK(v);if(!a(null,y))continue;const m=this._get(v);s&&p.push({value:m,index:v,pointIJK:y,pointLPS:null}),n({value:m,index:v,pointIJK:y,pointLPS:null})}return p}else{for(let v=h;v<=g;v++){const y=v*this.frameSize;for(let m=u;m<=d;m++){const w=y+m*this.width;for(let x=l,C=w+x;x<=f;x++,C++){const S=this.getAtIndex(C),T=[x,m,v];a(null,T)&&(s&&p.push({value:S,index:C,pointIJK:T,pointLPS:null}),n({value:S,index:C,pointIJK:[x,m,v],pointLPS:null}))}}}return p}},this.getSliceData=({sliceIndex:n,slicePlane:i})=>{const[o,a,s]=this.dimensions,c=o*a,l=n*c;let f;const u=this.getConstructor();function d(g){return typeof g=="function"}if(!d(u))return new Uint8Array(0);let h;switch(i){case 0:f=a*s,h=new u(f);for(let g=0;g{const o=Array.isArray(i);if(e===void 0&&(e=o?[...i]:i,r=o?[...i]:i),o)for(let a=0;a[0,e-1])}getBoundsIJK(){return this.boundsIJK[0][0]{e[0]=1/0,e[1]=-1/0})}clear(){var e,r;(e=this.map)==null||e.clear(),this.clearBounds(),this.modifiedSlices.clear(),(r=this.points)==null||r.clear()}getConstructor(){return this.scalarData?this.scalarData.constructor:this._getConstructor?this._getConstructor():(console.warn("No scalar data available or can be used to get the constructor"),Float32Array)}getArrayOfModifiedSlices(){return Array.from(this.modifiedSlices)}resetModifiedSlices(){this.modifiedSlices.clear()}setBounds(e){this.boundsIJK=e}static addBounds(e,r){e||(e=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),e[0][0]=Math.min(r[0],e[0][0]),e[0][1]=Math.max(r[0],e[0][1]),e[1][0]=Math.min(r[1],e[1][0]),e[1][1]=Math.max(r[1],e[1][1]),e[2][0]=Math.min(r[2],e[2][0]),e[2][1]=Math.max(r[2],e[2][1])}addPoint(e){const r=Array.isArray(e)?e[0]+this.width*e[1]+this.frameSize*e[2]:e;this.points||(this.points=new Set),this.points.add(r)}getPoints(){return this.points?[...this.points].map(e=>this.toIJK(e)):[]}setSliceDataValue(e,r,n){if(Array.isArray(n))for(let i=0;i(a*=n,[r[a++],r[a++],r[a++]]),_id:i||"_createRGBScalarVolumeVoxelManager",_set:(a,s)=>{a*=3;const c=!Zt(r[a],s);return r[a++]=s[0],r[a++]=s[1],r[a++]=s[2],c},numberOfComponents:n,scalarData:r});return o.clear=()=>{r.fill(0)},o}static createImageVolumeVoxelManager({dimensions:e,imageIds:r,numberOfComponents:n=1,id:i}){const o=e[0]*e[1];function a(u){const d=Math.floor(u/o);if(d<0||d>=e[2])return{};const h=r[d];if(!h)return console.warn(`ImageId not found for sliceIndex: ${d}`),{pixelData:null,pixelIndex:null};const g=$e.getImage(h);if(!g)return console.warn(`Image not found for imageId: ${h}`),{pixelData:null,pixelIndex:null};const p=g.voxelManager,v=u%o;return{voxelManager:p,pixelIndex:v}}function s(u){const{voxelManager:d,pixelIndex:h}=a(u);return!d||h===null?null:d.getAtIndex(h)}function c(u,d){const{voxelManager:h,pixelIndex:g}=a(u);if(!h||g===null)return!1;const p=h.getAtIndex(g),v=!Zt(d,p);return v&&(h.setAtIndex(g,d),!0)}const l=()=>{const{voxelManager:u,pixelIndex:d}=a(0);return!u||d===null?null:u.getConstructor()},f=new Ni(e,{_get:s,_set:c,numberOfComponents:n,_getConstructor:l,_id:i||"createImageVolumeVoxelManager"});return f.getMiddleSliceData=()=>{const u=Math.floor(e[2]/2);return f.getSliceData({sliceIndex:u,slicePlane:2})},f.clear=()=>{for(const u of r)$e.getImage(u).voxelManager.clear()},f.getRange=()=>{let u=1/0,d=-1/0;for(const h of r){const g=$e.getImage(h);g&&(g.minPixelValued&&(d=g.maxPixelValue))}return u===1/0&&d===-1/0?[0,0]:[u,d]},f._getScalarDataLength=()=>{const{voxelManager:u,pixelIndex:d}=a(0);return!u||d===null?0:u.getScalarDataLength()*e[2]},f.getCompleteScalarDataArray=()=>{const u=f._getConstructor();if(!u)return new Uint8Array(0);const d=f.getScalarDataLength(),h=new u(d),g=e[0]*e[1]*n;for(let p=0;p{const d=e[0]*e[1]*n,h=f._getConstructor();let g=1/0,p=-1/0;for(let v=0;v4||n<1||n===2))throw new Error(`Number of components ${n} must be 1, 3 or 4`);return n>1?Ni._createRGBScalarVolumeVoxelManager({dimensions:e,scalarData:r,numberOfComponents:n,id:i}):Ni._createNumberVolumeVoxelManager({dimensions:e,scalarData:r,id:i})}static createScalarDynamicVolumeVoxelManager({imageIdGroups:e,dimensions:r,dimensionGroupNumber:n=1,timePoint:i=0,numberOfComponents:o=1,id:a}){let s=0;if(n!==void 0?s=n-1:i!==void 0&&(console.warn("Warning: timePoint parameter is deprecated. Please use dimensionGroupNumber instead. timePoint is zero-based while dimensionGroupNumber starts at 1."),s=i),!o){const f=$e.getImage(e[0][0]);if(!f)throw new Error("Unable to determine number of components: No image found");if(o=f.getPixelData().length/(r[0]*r[1]),o>4||o<1||o===2)throw new Error(`Number of components ${o} must be 1, 3 or 4`)}const c=e.map(f=>Ni.createImageVolumeVoxelManager({dimensions:r,imageIds:f,numberOfComponents:o,id:a})),l=new Ni(r,{_get:f=>c[s]._get(f),_set:(f,u)=>c[s]._set(f,u),numberOfComponents:o,_id:a||"createScalarDynamicVolumeVoxelManager"});return l.getScalarDataLength=()=>c[s].getScalarDataLength(),l.getConstructor=()=>c[s].getConstructor(),l.getRange=()=>c[s].getRange(),l.getMiddleSliceData=()=>c[s].getMiddleSliceData(),l.setTimePoint=f=>{console.warn("Warning: setTimePoint is deprecated. Please use setDimensionGroupNumber instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.setDimensionGroupNumber(f+1)},l.setDimensionGroupNumber=f=>{s=f-1,l._get=u=>c[s]._get(u),l._set=(u,d)=>c[s]._set(u,d)},l.getAtIndexAndTimePoint=(f,u)=>(console.warn("Warning: getAtIndexAndTimePoint is deprecated. Please use getAtIndexAndDimensionGroup instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.getAtIndexAndDimensionGroup(f,u+1)),l.getAtIndexAndDimensionGroup=(f,u)=>c[u-1]._get(f),l.getTimePointScalarData=f=>(console.warn("Warning: getTimePointScalarData is deprecated. Please use getDimensionGroupScalarData instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.getDimensionGroupScalarData(f+1)),l.getDimensionGroupScalarData=f=>c[f-1].getCompleteScalarDataArray(),l.getCurrentTimePointScalarData=()=>(console.warn("Warning: getCurrentTimePointScalarData is deprecated. Please use getCurrentDimensionGroupScalarData instead."),l.getCurrentDimensionGroupScalarData()),l.getCurrentDimensionGroupScalarData=()=>c[s].getCompleteScalarDataArray(),l.getCurrentTimePoint=()=>(console.warn("Warning: getCurrentTimePoint is deprecated. Please use getCurrentDimensionGroupNumber instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),s),l.getCurrentDimensionGroupNumber=()=>s+1,l}static createImageVoxelManager({width:e,height:r,scalarData:n,numberOfComponents:i=1,id:o}){const a=[e,r,1];if(!i&&(i=n.length/e/r,i>4||i<1||i===2))throw new Error(`Number of components ${i} must be 1, 3 or 4`);return i>1?Ni._createRGBScalarVolumeVoxelManager({dimensions:a,scalarData:n,numberOfComponents:i,id:o}):Ni._createNumberVolumeVoxelManager({dimensions:a,scalarData:n,id:o})}static _createNumberVolumeVoxelManager({dimensions:e,scalarData:r,id:n}){const i=new Ni(e,{_get:o=>r[o],_set:(o,a)=>{const s=r[o]!==a;return r[o]=a,s},_getConstructor:()=>r.constructor,_id:n||"_createNumberVolumeVoxelManager"});return i.scalarData=r,i.clear=()=>{i.scalarData.fill(0)},i.getMiddleSliceData=()=>{const o=Math.floor(e[2]/2);return i.getSliceData({sliceIndex:o,slicePlane:2})},i}static createMapVoxelManager({dimension:e,id:r}){const n=new Map,i=new Ni(e,{_get:n.get.bind(n),_set:(o,a)=>n.set(o,a)&&!0,_id:r||"createMapVoxelManager"});return i.map=n,i}static createHistoryVoxelManager(e,r){const n=new Map,{dimensions:i}=e,o=new Ni(i,{_get:a=>n.get(a),_set:function(a,s){if(n.has(a))s===n.get(a)&&n.delete(a);else{const c=this.sourceVoxelManager.getAtIndex(a);if(c===s)return!1;n.set(a,c)}this.sourceVoxelManager.setAtIndex(a,s)},_id:r||"createHistoryVoxelManager"});return o.map=n,o.scalarData=e.scalarData,o.sourceVoxelManager=e,o}static createRLEHistoryVoxelManager(e,r){const{dimensions:n}=e,i=new s0(n[0],n[1],n[2]),o=new Ni(n,{_get:a=>i.get(a),_set:function(a,s){const c=i.get(a);if(c===void 0){const l=this.sourceVoxelManager.getAtIndex(a);if(l===s||l===void 0&&s===0||s===null)return!1;i.set(a,l??0)}else(s===c||s===null)&&(i.delete(a),s=c);this.sourceVoxelManager.setAtIndex(a,s)},_getScalarData:s0.getScalarData,_updateScalarData:a=>(i.updateScalarData(a),a),_id:r||"createRLEHistoryVoxelManager"});return o.map=i,o.sourceVoxelManager=e,o}static createLazyVoxelManager({dimensions:e,planeFactory:r,id:n}){const i=new Map,[o,a]=e,s=o*a,c=new Ni(e,{_get:l=>i.get(Math.floor(l/s))[l%s],_set:(l,f)=>{const u=Math.floor(l/s);let d=i.get(u);return d||(d=r(o,a),i.set(u,d)),d[l%s]=f,!0},_id:n||"createLazyVoxelManager"});return c.map=i,c}static createRLEVolumeVoxelManager({dimensions:e,id:r}){const[n,i,o]=e,a=new s0(n,i,o),s=new Ni(e,{_get:c=>a.get(c),_set:(c,l)=>(a.set(c,l),!0),_getScalarData:s0.getScalarData,_updateScalarData:c=>(a.updateScalarData(c),c),_id:r||"createRLEVolumeVoxelManager"});return s.map=a,s.getPixelData=a.getPixelData.bind(a),s}static createRLEImageVoxelManager({dimensions:e,id:r}){const[n,i]=e;return Ni.createRLEVolumeVoxelManager({dimensions:[n,i,1],id:r})}static addInstanceToImage(e){const{width:r,height:n}=e,i=e.voxelManager.getScalarData();if(i.length>=r*n){e.voxelManager=Ni.createScalarVolumeVoxelManager({dimensions:[r,n,1],scalarData:i});return}e.voxelManager=Ni.createRLEVolumeVoxelManager({dimensions:[r,n,1]}),e.getPixelData=e.voxelManager.getPixelData,e.sizeInBytes=vse}};class Ud{constructor(e){this._imageIdsIndexMap=new Map,this._imageURIsIndexMap=new Map,this.cornerstoneImageMetaData=null,this.isPreScaled=!1,this.numTimePoints=null,this.numFrames=null;const{imageIds:r,scaling:n,dimensions:i,spacing:o,origin:a,direction:s,dataType:c,volumeId:l,referencedVolumeId:f,metadata:u,referencedImageIds:d,additionalDetails:h,voxelManager:g,numberOfComponents:p}=e;if(!c)throw new Error('Data type is required, please provide a data type as string such as "Uint8Array", "Float32Array", etc.');let{imageData:v}=e;this.imageIds=r,this.volumeId=l,this.metadata=u,this.dimensions=i,this.spacing=o,this.origin=a,this.direction=s,this.dataType=c,this.vtkOpenGLTexture=$re.newInstance(),this.vtkOpenGLTexture.setVolumeId(l),this.voxelManager=g??hc.createImageVolumeVoxelManager({dimensions:i,imageIds:r,numberOfComponents:p}),this.numVoxels=this.dimensions[0]*this.dimensions[1]*this.dimensions[2],v||(v=tm.newInstance(),v.setDimensions(i),v.setSpacing(o),v.setDirection(s),v.setOrigin(a)),v.set({dataType:c,voxelManager:this.voxelManager,id:l,numberOfComponents:p||1}),v.set({hasScalarVolume:!1}),this.imageData=v,this.numFrames=this._getNumFrames(),this._reprocessImageIds(),n&&(this.scaling=n),f&&(this.referencedVolumeId=f),d&&(this.referencedImageIds=d),h&&(this.additionalDetails=h)}get sizeInBytes(){return this.voxelManager.sizeInBytes}get imageIds(){return this._imageIds}set imageIds(e){this._imageIds=e,this._reprocessImageIds()}_reprocessImageIds(){this._imageIdsIndexMap.clear(),this._imageURIsIndexMap.clear(),this._imageIds.forEach((e,r)=>{const n=Ur(e);this._imageIdsIndexMap.set(e,r),this._imageURIsIndexMap.set(n,r)})}isDynamicVolume(){return this.numTimePoints>1}getImageIdIndex(e){return this._imageIdsIndexMap.get(e)}getImageIdByIndex(e){return this._imageIds[e]}getImageURIIndex(e){return this._imageURIsIndexMap.get(e)}load(e){}destroy(){this.imageData.delete(),this.imageData=null,this.voxelManager.clear(),this.vtkOpenGLTexture.releaseGraphicsResources(),this.vtkOpenGLTexture.delete()}invalidate(){for(let e=0;e$e.getImage(r))}}let Eg={};const Fu={add:(t,e)=>{Fu.addRaw(t,{...e,metadata:structuredClone(e.metadata)})},addRaw:(t,e)=>{const r=e.type;Eg[t]||(Eg[t]={}),Eg[t][r]=e.metadata},get:(t,e)=>{var r;return(r=Eg[e])==null?void 0:r[t]},clear:()=>{Eg={}}};Wh(Fu.get);const Bi=new D4("imageLoadPool");Bi.grabDelay=0;Bi.setMaxSimultaneousRequests(pn.Interaction,1e3);Bi.setMaxSimultaneousRequests(pn.Thumbnail,1e3);Bi.setMaxSimultaneousRequests(pn.Prefetch,1e3);const ky={};let Vy;function ek(t,e){const r=$e.getImageLoadObject(t);if(r)return $D(r.promise,t),r;const n=t.split(":")[0],i=ky[n]||Vy;if(!i)throw new Error(`loadImageFromImageLoader: No image loader found for scheme '${n}'`);const o=i(t,e);return $D(o.promise,t),o}function $D(t,e){Promise.resolve(t).then(r=>{yse(r),ut(et,rt.IMAGE_LOADED,{image:r})}).catch(r=>{const n={imageId:e,error:r};ut(et,rt.IMAGE_LOAD_FAILED,n)})}function yse(t){if(!t.voxelManager){const{width:e,height:r,numberOfComponents:n}=t,i=hc.createImageVoxelManager({scalarData:t.getPixelData(),width:e,height:r,numberOfComponents:n});t.voxelManager=i,t.getPixelData=()=>i.getScalarData(),delete t.imageFrame.pixelData}}function tk(t,e={priority:0,requestType:"prefetch"}){if(t===void 0)throw new Error("loadImage: parameter imageId must not be undefined");return ek(t,e).promise}function _s(t,e={priority:0,requestType:"prefetch"}){if(t===void 0)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const r=ek(t,e);return $e.getImageLoadObject(t)||$e.putImageLoadObject(t,r),r.promise}function wse(t,e={priority:0,requestType:"prefetch"}){if(!t||t.length===0)throw new Error("loadAndCacheImages: parameter imageIds must be list of image Ids");return t.map(n=>_s(n,e))}function d1(t,e={}){var p;if(t===void 0)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");e.imageId===void 0&&(e.imageId=`derived:${Pn()}`);const{imageId:r,skipCreateBuffer:n,onCacheAdd:i,voxelRepresentation:o}=e,a=wt("imagePlaneModule",t),s=a.rows*a.columns,{TypedArrayConstructor:c}=E4((p=e.targetBuffer)==null?void 0:p.type,s),l=new c(n?1:s),f=r,u=wt("imagePlaneModule",t);Fu.add(f,{type:"imagePlaneModule",metadata:u});const d=wt("generalSeriesModule",t);Fu.add(f,{type:"generalSeriesModule",metadata:d}),Fu.add(f,{type:"generalImageModule",metadata:{instanceNumber:e.instanceNumber}});const h=wt("imagePixelModule",t);Fu.add(f,{type:"imagePixelModule",metadata:{...h,bitsAllocated:8,bitsStored:8,highBit:7,samplesPerPixel:1,pixelRepresentation:0}});const g=j4(r,{scalarData:l,onCacheAdd:i,skipCreateBuffer:n,targetBuffer:{type:l.constructor.name},voxelRepresentation:o,dimensions:[a.columns,a.rows],spacing:[a.columnPixelSpacing,a.rowPixelSpacing],origin:a.imagePositionPatient,direction:a.imageOrientationPatient,frameOfReferenceUID:a.frameOfReferenceUID,referencedImageId:t});return g.referencedImageId=t,$e.getImageLoadObject(r)||$e.putImageSync(r,g),g}function $4(t,e={}){if(t.length===0)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");return t.map((n,i)=>{var a;const o={imageId:((a=e==null?void 0:e.getDerivedImageId)==null?void 0:a.call(e,n))||`derived:${Pn()}`,...e};return d1(n,{...o,instanceNumber:i+1})})}function j4(t,e){const{scalarData:r,origin:n,direction:i,targetBuffer:o,skipCreateBuffer:a,onCacheAdd:s,frameOfReferenceUID:c,voxelRepresentation:l,referencedImageId:f}=e,u=e.dimensions,d=e.spacing;if(!u||!d)throw new Error("createAndCacheLocalImage: dimensions and spacing are required");const h=u[0],g=u[1],p=d[0],v=d[1],y={frameOfReferenceUID:c,rows:g,columns:h,imageOrientationPatient:i??[1,0,0,0,1,0],rowCosines:i?i.slice(0,3):[1,0,0],columnCosines:i?i.slice(3,6):[0,1,0],imagePositionPatient:n??[0,0,0],pixelSpacing:[v,p],rowPixelSpacing:v,columnPixelSpacing:p},m=h*g,w=r.length/m;let x;if(r){if(!(r instanceof Uint8Array||r instanceof Float32Array||r instanceof Uint16Array||r instanceof Int16Array))throw new Error("createAndCacheLocalImage: scalarData must be of type Uint8Array, Uint16Array, Int16Array or Float32Array");x=r}else if(!a){const{TypedArrayConstructor:A}=E4(o==null?void 0:o.type,m);x=new A(m)}let C,S,T;if(x instanceof Uint8Array)C=8,S=8,T=7;else if(x instanceof Uint16Array)C=16,S=16,T=15;else if(x instanceof Int16Array)C=16,S=16,T=15;else if(x instanceof Float32Array)C=32,S=32,T=31;else throw new Error("Unsupported scalarData type");const _={samplesPerPixel:1,photometricInterpretation:x.length>u[0]*u[1]?"RGB":"MONOCHROME2",rows:g,columns:h,bitsAllocated:C,bitsStored:S,highBit:T},E={imagePlaneModule:y,imagePixelModule:_};["imagePlaneModule","imagePixelModule"].forEach(A=>{Fu.add(t,{type:A,metadata:E[A]||{}})});const b=t,D=l===fy.RLE&&hc.createRLEImageVoxelManager({dimensions:u,id:b})||hc.createImageVoxelManager({height:g,width:h,numberOfComponents:w,scalarData:x,id:b});let I=x[0],P=x[0];for(let A=1;AP&&(P=x[A]);const O={imageId:t,intercept:0,windowCenter:0,windowWidth:0,color:_.photometricInterpretation==="RGB",numberOfComponents:_.samplesPerPixel,dataType:o==null?void 0:o.type,slope:1,minPixelValue:I,maxPixelValue:P,rows:_.rows,columns:_.columns,getCanvas:void 0,height:_.rows,width:_.columns,rgba:void 0,columnPixelSpacing:y.columnPixelSpacing,rowPixelSpacing:y.rowPixelSpacing,FrameOfReferenceUID:y.frameOfReferenceUID,invert:!1,getPixelData:()=>D.getScalarData(),voxelManager:D,sizeInBytes:r.byteLength,referencedImageId:f};return s==null||s(O),$e.putImageSync(O.imageId,O),O}function nk(t){const e=({additionalDetails:n})=>n.imageId?n.imageId!==t:!0;Bi.filterRequests(e);const r=$e.getImageLoadObject(t);r&&r.cancelFn()}function xse(t){t.forEach(e=>{nk(e)})}function Cse(){const t=Bi.getRequestPool();Object.keys(t).forEach(e=>{const r=t[e];Object.keys(r).forEach(n=>{const i=r[n].pop();if(!i)return;const o=i.additionalDetails,{imageId:a,volumeId:s}=o;let c;a?c=$e.getImageLoadObject(a):s&&(c=$e.getVolumeLoadObject(s)),c&&c.cancel()}),Bi.clearRequestStack(e)})}function ld(t,e){ky[t]=e}function Sse(t){const e=Vy;return Vy=t,e}function Tse(){Object.keys(ky).forEach(t=>delete ky[t]),Vy=void 0}function _se(t,e={}){return $4(t,{...e,targetBuffer:{type:"Uint8Array"}})}function Ese(t,e={}){return d1(t,{...e,targetBuffer:{type:"Uint8Array"}})}const bse=Object.freeze(Object.defineProperty({__proto__:null,cancelLoadAll:Cse,cancelLoadImage:nk,cancelLoadImages:xse,createAndCacheDerivedImage:d1,createAndCacheDerivedImages:$4,createAndCacheDerivedLabelmapImage:Ese,createAndCacheDerivedLabelmapImages:_se,createAndCacheLocalImage:j4,loadAndCacheImage:_s,loadAndCacheImages:wse,loadImage:tk,registerImageLoader:ld,registerUnknownImageLoader:Sse,unregisterAllImageLoaders:Tse},Symbol.toStringTag,{value:"Module"}));function rk(t){const e=t[0],{pixelRepresentation:r,bitsAllocated:n,bitsStored:i,highBit:o,photometricInterpretation:a,samplesPerPixel:s}=wt("imagePixelModule",e),c=[],l=wt("voiLutModule",e);let f;if(l){const{windowWidth:m,windowCenter:w}=l;if(f=l==null?void 0:l.voiLUTFunction,Array.isArray(m))for(let x=0;x({distance:l(p),imageId:p}));h.sort((p,v)=>v.distance-p.distance);const g=h.length;c=Math.abs(h[g-1].distance-h[0].distance)/(g-1)}const{sliceThickness:f,spacingBetweenSlices:u}=wt("imagePlaneModule",t[0]),{strictZSpacingForVolumeViewport:d}=dw().rendering;return(c===0||isNaN(c))&&!d&&(u?(console.debug("Could not calculate spacing. Using spacingBetweenSlices"),c=u):f?(console.debug("Could not calculate spacing and no spacingBetweenSlices. Using sliceThickness"),c=f):(console.debug("Could not calculate spacing. The VolumeViewport visualization is compromised. Setting spacing to 1 to render"),c=1)),c}function H4(t,e){const{imagePositionPatient:r,imageOrientationPatient:n}=wt("imagePlaneModule",t[0]);if(!e){const f=Ft(n[0],n[1],n[2]),u=Ft(n[3],n[4],n[5]);e=Ke(),kn(e,f,u)}const i=t[0].split(":")[0]==="wadouri",o=ik(t);let a;function s(f){const{imagePositionPatient:u}=wt("imagePlaneModule",f),d=Ke();return Mn(d,r,u),kt(d,e)}if(i){const f=[t[0],t[Math.floor(t.length/2)]];a=t;const u=s(f[0]),d=s(f[1]);u-d<0&&a.reverse()}else{const f=t.map(u=>({distance:s(u),imageId:u}));f.sort((u,d)=>d.distance-u.distance),a=f.map(u=>u.imageId)}const{imagePositionPatient:c}=wt("imagePlaneModule",a[0]);return{zSpacing:o,origin:c,sortedImageIds:a}}function ok(t){const e=wt("modalityLutModule",t)||{},r=wt("generalSeriesModule",t)||{},{modality:n}=r,i={rescaleSlope:e.rescaleSlope||1,rescaleIntercept:e.rescaleIntercept??0,modality:n},o=wt("scalingModule",t)||{};return{...i,...n==="PT"&&{suvbw:o.suvbw,suvbsa:o.suvbsa,suvlbm:o.suvlbm},...n==="RTDOSE"&&{doseGridScaling:o.DoseGridScaling,doseSummation:o.DoseSummation,doseType:o.DoseType,doseUnit:o.DoseUnit}}}const K4=t=>Object.values(t).some(r=>typeof r=="number"&&!Number.isInteger(r)),jD={Uint8Array:"Uint8Array",Int16Array:"Int16Array",Uint16Array:"Uint16Array",Float32Array:"Float32Array"};function am(t,e){const r=rk(t),{ImageOrientationPatient:n,PixelSpacing:i,Columns:o,Rows:a}=r,s=Ft(n[0],n[1],n[2]),c=Ft(n[3],n[4],n[5]),l=Ke();kn(l,s,c);const{zSpacing:f,origin:u,sortedImageIds:d}=H4(t,l),h=t.length,g=[i[1],i[0],f],p=[o,a,h].map(y=>Math.floor(y)),v=[...s,...c,...l];return{dimensions:p,spacing:g,origin:u,dataType:Dse(d,r),direction:v,metadata:r,imageIds:d,volumeId:e,voxelManager:null,numberOfComponents:r.PhotometricInterpretation==="RGB"?3:1}}function Dse(t,e){const{BitsAllocated:r,PixelRepresentation:n}=e,i=n===1,o=Ise(t);if(o)return o;const[a,s,c]=[0,Math.floor(t.length/2),t.length-1],l=[a,s,c].map(h=>ok(t[h])),f=l.some(h=>h.rescaleIntercept<0||h.rescaleSlope<0),u=l.some(h=>K4(h)),d=fw();switch(r){case 8:return"Uint8Array";case 16:return d&&u?"Float32Array":i||f?"Int16Array":!i&&!f?"Uint16Array":"Float32Array";case 24:return"Uint8Array";case 32:return"Float32Array";default:throw new Error(`Bits allocated of ${r} is not defined to generate scalarData for the volume.`)}}function Ise(t){const r=[0,Math.floor(t.length/2),t.length-1].map(i=>$e.getImage(t[i]));if(!r.every(Boolean))return null;const n=r[0].getPixelData().constructor.name;return r.every(i=>i.getPixelData().constructor.name===n)&&n in jD?jD[n]:null}let Fy=class ak{constructor(e){this.name=e||"unknown"}static as(e){if(e.iterator)return e.iterator;const r=new ak("as iterator");return e.then(n=>{try{r.add(n,!0)}catch(i){r.reject(i)}},n=>{r.reject(n)}),r}add(e,r=!1){this.nextValue=e,this.done||(this.done=r),this.waiting&&(this.waiting.resolve(e),this.waiting=void 0)}resolve(){this.done=!0,this.waiting&&(this.waiting.resolve(this.nextValue),this.waiting=void 0)}reject(e){var r;this.rejectReason=e,(r=this.waiting)==null||r.reject(e)}getRecent(){if(this.rejectReason)throw this.rejectReason;return this.nextValue}async*[Symbol.asyncIterator](){for(;!this.done;){if(this.rejectReason)throw this.rejectReason;if(this.nextValue!==void 0&&(yield this.nextValue,this.done))break;this.waiting||(this.waiting={},this.waiting.promise=new Promise((e,r)=>{this.waiting.resolve=e,this.waiting.reject=r})),await this.waiting.promise}yield this.nextValue}async forEach(e,r){let n=0;try{for await(const i of this){const{done:o}=this;try{await e(i,o,n),n++}catch(a){if(!o){console.warn("Caught exception in intermediate value",a);continue}if(r)r(a,o);else throw a}}}catch(i){if(r)r(i,!0);else throw i}}generate(e,r){return e(this,this.reject.bind(this)).then(()=>{this.done||this.resolve()},n=>{this.reject(n),r?r(n):console.warn("Couldn't process because",n)})}async nextPromise(){for await(const e of this)if(e)return e;return this.nextValue}async donePromise(){for await(const e of this);return this.nextValue}getNextPromise(){const e=this.nextPromise();return e.iterator=this,e}getDonePromise(){const e=this.donePromise();return e.iterator=this,e}};const Zd=new Map,HD="imageRetrieveConfiguration",h1={IMAGE_RETRIEVE_CONFIGURATION:HD,clear:()=>{Zd.clear()},add:(t,e)=>{Zd.set(t,e)},clone:()=>new Map(Zd),restore:t=>{Zd.clear(),t.forEach((e,r)=>{Zd.set(r,e)})},get:(t,...e)=>{if(t===HD)return e.map(r=>Zd.get(r)).find(r=>r!==void 0)}};Wh(h1.get.bind(h1));function sm(t){const e=Bo(),r=[];return e.forEach(n=>{const o=n.getVolumeViewports().filter(a=>a.hasVolumeId(t));r.push(...o)}),r}const TS=t=>{const e=Ose(t);e!=null&&e.length&&e.forEach(({renderingEngine:r,viewportIds:n})=>{r.hasBeenDestroyed||r.renderViewports(n)})};function Ose(t){const e=Bo(),r=[];return e.forEach(n=>{const i=sm(t);i.length&&r.push({renderingEngine:n,viewportIds:i.map(o=>o.id)})}),r}const KD=[{id:"initialImages",retrieveType:"single"}],Mse=[{id:"lossySequential",retrieveType:"singleFast"},{id:"finalSequential",retrieveType:"singleFinal"}],Qx=[{offset:-1,imageQualityStatus:ya.ADJACENT_REPLICATE},{offset:1,imageQualityStatus:ya.ADJACENT_REPLICATE},{offset:2,imageQualityStatus:ya.FAR_REPLICATE}],Pse=[{id:"initialImages",positions:[.5,0,-1],retrieveType:"default",requestType:pn.Thumbnail,priority:5,nearbyFrames:Qx},{id:"quarterThumb",decimate:4,offset:3,requestType:pn.Thumbnail,retrieveType:"multipleFast",priority:6,nearbyFrames:Qx},{id:"halfThumb",decimate:4,offset:1,priority:7,requestType:pn.Thumbnail,retrieveType:"multipleFast",nearbyFrames:Qx},{id:"quarterFull",decimate:4,offset:2,priority:8,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"halfFull",decimate:4,offset:0,priority:9,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"threeQuarterFull",decimate:4,offset:1,priority:10,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"finalFull",decimate:4,offset:3,priority:11,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"errorRetrieve"}];function sk(t,e,r=0){const n=[];for(let i=r;i=a)continue;const c={...r,imageId:o,imageQualityStatus:a};$e.setPartialImage(o,c),t.successCallback(o,c)}catch(o){console.warn("Couldn't fill nearby item ",i.itemId,o)}}const M0=class M0{constructor(e){this.stages=e.stages||KD,this.retrieveOptions=e.retrieveOptions||{}}loadImages(e,r){return new Lse(this,e,r).loadImages()}};M0.createProgressive=ck,M0.interleavedRetrieveStages={stages:Pse},M0.singleRetrieveStages={stages:KD},M0.sequentialRetrieveStages={stages:Mse};let g1=M0;class Lse{constructor(e,r,n){this.outstandingRequests=0,this.stageStatusMap=new Map,this.displayedIterator=new Fy("displayed"),this.stages=e.stages,this.retrieveOptions=e.retrieveOptions,this.imageIds=r,this.listener=n}async loadImages(){const e=this.createStageRequests();this.outstandingRequests=e.length;for(const r of e)this.addRequest(r);return this.outstandingRequests===0?Promise.resolve(null):this.displayedIterator.getDonePromise()}sendRequest(e,r){const{imageId:n,next:i}=e,o=(f,u)=>{this.listener.errorCallback(n,c||!i,f),u&&this.updateStageStatus(e.stage,f)},a=(r.loader||_s)(n,r),s=Fy.as(a);let c=!1;return s.forEach(async(f,u)=>{const d=$e.getImageQuality(n);if(!f){console.warn("No image retrieved",n);return}const{imageQualityStatus:h}=f;if(c||(c=h===ya.FULL_RESOLUTION),d!==void 0&&d>h){this.updateStageStatus(e.stage,null,!0);return}this.listener.successCallback(n,f),this.displayedIterator.add(f),u&&this.updateStageStatus(e.stage),Rse(this.listener,e,f)},o).finally(()=>{if(!c&&i)$e.setPartialImage(n),this.addRequest(i,r.streamingData);else{c||this.listener.errorCallback(n,!0,"Couldn't decode"),this.outstandingRequests--;for(let f=i;f;f=f.next)this.updateStageStatus(f.stage,null,!0)}this.outstandingRequests<=0&&this.displayedIterator.resolve()}),s.getDonePromise().catch(f=>null)}addRequest(e,r={}){const{imageId:n,stage:i}=e,o=this.listener.getLoaderImageOptions(n);if(!o)return;const{retrieveType:a="default"}=i,{retrieveOptions:s}=this,c=s[a]||s.default,l={...o,retrieveType:a,retrieveOptions:c,streamingData:r},f=i.priority??-5,u=i.requestType||pn.Interaction,d={imageId:n};Bi.addRequest(this.sendRequest.bind(this,e,l),u,d,f)}updateStageStatus(e,r,n=!1){const{id:i}=e,o=this.stageStatusMap.get(i);if(o&&(o.imageLoadPendingCount--,r?o.imageLoadFailedCount++:n||o.totalImageCount++,!n&&!o.stageStartTime&&(o.stageStartTime=Date.now()),!o.imageLoadPendingCount)){const{imageLoadFailedCount:a,totalImageCount:s,stageStartTime:c=Date.now(),startTime:l}=o,f={stageId:i,numberOfFailures:a,numberOfImages:s,stageDurationInMS:c?Date.now()-c:null,startDurationInMS:Date.now()-l};ut(et,rt.IMAGE_RETRIEVAL_STAGE,f),this.stageStatusMap.delete(i)}}createStageRequests(){const e=new Array,r=new Map,n=(i,o)=>{const a=o<0?this.imageIds.length+o:o<1?Math.floor((this.imageIds.length-1)*o):o,s=this.imageIds[a];if(!s)throw new Error(`No value found to add to requests at ${o}`);const c={imageId:s,stage:i,index:a,nearbyRequests:this.findNearbyRequests(a,i)};this.addStageStatus(i);const l=r.get(s);l?l.next=c:e.push(c),r.set(s,c)};for(const i of this.stages)(i.positions||sk(this.imageIds,i.decimate||1,i.offset??0)).forEach(a=>{n(i,a)});return e}findNearbyRequests(e,r){const n=new Array;if(!r.nearbyFrames)return n;for(const i of r.nearbyFrames){const o=e+i.offset;o<0||o>=this.imageIds.length||n.push({itemId:this.imageIds[o],imageQualityStatus:i.imageQualityStatus,index:o})}return n}addStageStatus(e){const{id:r}=e,n=this.stageStatusMap.get(r)||{stageId:r,startTime:Date.now(),stageStartTime:null,totalImageCount:0,imageLoadFailedCount:0,imageLoadPendingCount:0};return n.imageLoadPendingCount++,this.stageStatusMap.set(r,n),n}}function ck(t){return new g1(t)}const qD=pn.Prefetch;class lk extends Ud{constructor(e,r){super(e),this.framesLoaded=0,this.framesProcessed=0,this.framesUpdated=0,this.autoRenderOnLoad=!0,this.cachedFrames=[],this.reRenderTarget=0,this.reRenderFraction=2,this.imagesLoader=this,this.cancelLoading=()=>{const{loadStatus:n}=this;if(!n||!n.loading)return;n.loading=!1,n.cancelled=!0,this.clearLoadCallbacks();const i=({additionalDetails:o})=>o.volumeId!==this.volumeId;Bi.filterRequests(i)},this.loadStatus=r.loadStatus}invalidateVolume(e){const{vtkOpenGLTexture:r}=this,{numFrames:n}=this;for(let i=0;ithis.reRenderTarget||n===i)&&(this.reRenderTarget+=a,TS(o)),n===i){s.callbacks.forEach(u=>u(e));const f={FrameOfReferenceUID:l,volumeId:o};ut(et,rt.IMAGE_VOLUME_LOADING_COMPLETED,f)}}updateTextureAndTriggerEvents(e,r,n=ya.FULL_RESOLUTION){const i=this.imageIdIndexToFrameIndex(e),{cachedFrames:o,numFrames:a,totalNumFrames:s}=this,{FrameOfReferenceUID:c}=this.metadata;if(o[i]>n||o[i]===ya.FULL_RESOLUTION)return;const f=n===ya.FULL_RESOLUTION;o[e]=n,this.framesUpdated++,f&&(this.framesLoaded++,this.framesProcessed++);const u={FrameOfReferenceUID:c,volumeId:this.volumeId,numberOfFrames:a,framesProcessed:this.framesProcessed};ut(et,rt.IMAGE_VOLUME_MODIFIED,u),f&&this.framesProcessed===this.totalNumFrames&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!0,imageIdIndex:e,imageId:r,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:a,totalNumFrames:s,complete:f,imageQualityStatus:n}),this.vtkOpenGLTexture.setUpdatedFrame(i),this.loadStatus.loaded&&(this.loadStatus.callbacks=[])}successCallback(e,r){const n=this.getImageIdIndex(e),{imageQualityStatus:i}=r;if(this.loadStatus.cancelled){console.warn("volume load cancelled, returning for imageIdIndex: ",n);return}this.updateTextureAndTriggerEvents(n,e,i),this.isDynamicVolume()&&this.checkDimensionGroupCompletion(n)}errorCallback(e,r,n){if(!r)return;const{totalNumFrames:i,numFrames:o}=this,a=this.getImageIdIndex(e);this.framesProcessed++,this.framesProcessed===i&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!1,imageId:e,imageIdIndex:a,error:n,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:o,totalNumFrames:i}),this.loadStatus.loaded&&(this.loadStatus.callbacks=[]);const s={error:n,imageIdIndex:a,imageId:e};ut(et,rt.IMAGE_LOAD_ERROR,s)}load(e){const{imageIds:r,loadStatus:n,numFrames:i}=this,{transferSyntaxUID:o}=wt("transferSyntax",r[0])||{},a=wt(h1.IMAGE_RETRIEVE_CONFIGURATION,this.volumeId,o,"volume");if(this.imagesLoader=this.isDynamicVolume()?this:a?(a.create||g1.createProgressive)(a):this,n.loading===!0)return;const{loaded:s}=this.loadStatus,c=r.length;if(s){e&&e({success:!0,framesLoaded:c,framesProcessed:c,numFrames:i,totalNumFrames:c});return}e&&this.loadStatus.callbacks.push(e),this._prefetchImageIds()}getLoaderImageOptions(e){const{transferSyntaxUID:r}=wt("transferSyntax",e)||{},n=wt("imagePlaneModule",e)||{},{rows:i,columns:o}=n,a=this.getImageIdIndex(e),s=wt("modalityLutModule",e)||{},c=wt("generalSeriesModule",e)||{},l={rescaleSlope:s.rescaleSlope,rescaleIntercept:s.rescaleIntercept,modality:c.modality},f=l.modality;if(f==="PT"||f==="RTDOSE"){const g=wt("scalingModule",e);g&&(this._addScalingToVolume(g),Object.assign(l,g))}const u=K4(l),d=fw();if(this.isPreScaled=!0,l&&l.rescaleSlope!==void 0&&l.rescaleIntercept!==void 0){const{rescaleSlope:g,rescaleIntercept:p}=l;this.isPreScaled=typeof g=="number"&&typeof p=="number"}return!d&&u&&(this.isPreScaled=!1),{targetBuffer:{type:this.dataType,rows:i,columns:o},allowFloatRendering:d,preScale:{enabled:this.isPreScaled,scalingParameters:l},transferPixelData:!0,requestType:qD,transferSyntaxUID:r,additionalDetails:{imageId:e,imageIdIndex:a,volumeId:this.volumeId}}}callLoadImage(e,r,n){const{cachedFrames:i}=this;if(i[r]===ya.FULL_RESOLUTION)return;const o=s=>{const{image:c}=s.detail;c.imageId===e&&(this.vtkOpenGLTexture.setUpdatedFrame(r),et.removeEventListener(rt.IMAGE_CACHE_IMAGE_ADDED,o))};return et.addEventListener(rt.IMAGE_CACHE_IMAGE_ADDED,o),Fy.as(_s(e,n)).forEach(s=>{this.successCallback(e,s)},this.errorCallback.bind(this,r,e))}getImageIdsRequests(e,r){this.totalNumFrames=this.imageIds.length;const n=2;return this.autoRenderOnLoad&&(this.reRenderFraction=this.totalNumFrames*(n/100),this.reRenderTarget=this.reRenderFraction),e.map(o=>{const a=this.getImageIdIndex(o),s=qD,c=r,l=this.getLoaderImageOptions(o);return{callLoadImage:this.callLoadImage.bind(this),imageId:o,imageIdIndex:a,options:l,priority:c,requestType:s,additionalDetails:{volumeId:this.volumeId}}})}getImageLoadRequests(e){throw new Error("Abstract method")}getImageIdsToLoad(){throw new Error("Abstract method")}loadImages(){return this.loadStatus.loading=!0,this.getImageLoadRequests(5).reverse().forEach(r=>{if(!r)return;const{callLoadImage:n,imageId:i,imageIdIndex:o,options:a,priority:s,requestType:c,additionalDetails:l}=r;Bi.addRequest(n.bind(this,i,o,a),c,l,s)}),Promise.resolve(!0)}_prefetchImageIds(){this.loadStatus.loading=!0;const e=[...this.getImageIdsToLoad()];this.totalNumFrames=this.imageIds.length;const r=2;return this.autoRenderOnLoad&&(this.reRenderFraction=this.totalNumFrames*(r/100),this.reRenderTarget=this.reRenderFraction),this.imagesLoader.loadImages(e,this).catch(n=>{console.debug("progressive loading failed to complete",n)})}_addScalingToVolume(e){if(this.scaling)return;const{suvbw:r,suvlbm:n,suvbsa:i}=e,o={};n&&(o.suvbwToSuvlbm=n/r),i&&(o.suvbwToSuvbsa=i/r),r&&(o.suvbw=r),this.scaling={PT:o}}checkDimensionGroupCompletion(e){}}class uk extends lk{constructor(e,r){e.imageIds||(e.imageIds=r.imageIds),super(e,r),this.getImageIdsToLoad=()=>{const{imageIds:n}=this;return this.numFrames=n.length,n}}getScalarData(){return this.voxelManager.getScalarData()}getImageLoadRequests(e){const{imageIds:r}=this;return this.getImageIdsRequests(r,e)}}function fk(t,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a streaming image volume");async function r(){if(e.imageIds[0].split(":")[0]==="wadouri"){const[g,p]=[Math.floor(e.imageIds.length/2),e.imageIds.length-1],v=[0,g,p];await Promise.all(v.map(y=>$e.isLoaded(e.imageIds[y])?Promise.resolve(!0):new Promise((m,w)=>{const x=e.imageIds[y];Bi.addRequest(async()=>{tk(x).then(()=>{console.log(`Prefetched imageId: ${x}`),m(!0)}).catch(C=>{w(C)})},pn.Prefetch,{volumeId:t},1)}))).catch(console.error)}const i=am(e.imageIds,t),{dimensions:o,spacing:a,origin:s,direction:c,metadata:l,imageIds:f,dataType:u,numberOfComponents:d}=i;return new uk({volumeId:t,metadata:l,dimensions:o,spacing:a,origin:s,direction:c,imageIds:f,dataType:u,numberOfComponents:d},{imageIds:f,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}})}const n=r();return{promise:n,decache:()=>{n.then(i=>{i.destroy(),i=null})},cancel:()=>{n.then(i=>{i.cancelLoading()})}}}const q4={};let J0=fk;function dk(t,e){const r=t.indexOf(":"),n=t.substring(0,r);let i=q4[n];if(i==null){if(J0==null||typeof J0!="function")throw new Error(`No volume loader for scheme ${n} has been registered`);i=J0}const o=i(t,e);return o.promise.then(function(a){ut(et,rt.VOLUME_LOADED,{volume:a})},function(a){const s={volumeId:t,error:a};ut(et,rt.VOLUME_LOADED_FAILED,s)}),o}function X4(t,e={imageIds:[]}){if(t===void 0)throw new Error("loadVolume: parameter volumeId must not be undefined");let r=$e.getVolumeLoadObject(t);return r!==void 0?r.promise:(r=dk(t,e),r.promise.then(n=>n))}async function p1(t,e){if(t===void 0)throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");let r=$e.getVolumeLoadObject(t);return r!==void 0||(r=dk(t,e),$e.putVolumeLoadObject(t,r)),r.promise}function hk(t,e){const r=$e.getVolume(t);if(!r)throw new Error(`Cannot created derived volume: Referenced volume with id ${t} does not exist.`);let{volumeId:n}=e;const{voxelRepresentation:i}=e;n===void 0&&(n=Pn());const{metadata:o,dimensions:a,spacing:s,origin:c,direction:l}=r,f=r.isDynamicVolume()?r.getCurrentDimensionGroupImageIds():r.imageIds??[],u=$4(f,{targetBuffer:e.targetBuffer,voxelRepresentation:i}),d=u[0].dataType,h=u.map(p=>p.imageId),g=new Ud({volumeId:n,dataType:d,metadata:structuredClone(o),dimensions:[a[0],a[1],a[2]],spacing:s,origin:c,direction:l,referencedVolumeId:t,imageIds:h,referencedImageIds:r.imageIds??[]});return $e.putVolumeSync(n,g),g}async function Y4(t,e){if(e===void 0)throw new Error("createAndCacheVolumeFromImages: parameter imageIds must not be undefined");if(t===void 0)throw new Error("createAndCacheVolumeFromImages: parameter volumeId must not be undefined");const r=$e.getVolume(t);return r||(e.filter(o=>!$e.getImage(o)).length===0?cm(t,e):await p1(t,{imageIds:e}))}function cm(t,e){if(e===void 0)throw new Error("createAndCacheVolumeFromImagesSync: parameter imageIds must not be undefined");if(t===void 0)throw new Error("createAndCacheVolumeFromImagesSync: parameter volumeId must not be undefined");const r=$e.getVolume(t);if(r)return r;const n=am(e,t),i=new Ud({volumeId:t,dataType:n.dataType,metadata:structuredClone(n.metadata),dimensions:n.dimensions,spacing:n.spacing,origin:n.origin,direction:n.direction,referencedVolumeId:n.referencedVolumeId,imageIds:n.imageIds,referencedImageIds:n.referencedImageIds});return $e.putVolumeSync(t,i),i}function lm(t,e={}){const{metadata:r,dimensions:n,spacing:i,origin:o,direction:a,scalarData:s,targetBuffer:c,preventCache:l=!1}=e,f=$e.getVolume(t);if(f)return f;const u=n[0]*n[1],d=s?s.constructor.name:(c==null?void 0:c.type)??"Float32Array",h=u*n[2];let g;switch(d){case"Uint8Array":case"Int8Array":g=h;break;case"Uint16Array":case"Int16Array":g=h*2;break;case"Float32Array":g=h*4;break}if(!$e.isCacheable(g))throw new Error(`Cannot created derived volume: Volume with id ${t} is not cacheable.`);const v=[];for(let w=0;w1&&(u=Math.min(...u),d=Math.max(...d)),{lower:u,upper:d}}function zse(t,e){var r;return!(t!=="PT"||!e.isPreScaled||!((r=e.scaling)!=null&&r.PT.suvbw))}async function Uy(t,e,r,n=!1){const{volumeId:i,callback:o,blendMode:a}=t,s=await X4(i);if(!s)throw new Error(`imageVolume with id: ${s.volumeId} does not exist`);const{imageData:c,vtkOpenGLTexture:l}=s,f=mk(c,l);a&&f.setBlendMode(a);const u=Gie.newInstance();u.setMapper(f);const{numberOfComponents:d}=c.get("numberOfComponents");return u.getProperty().set({viewportId:r}),d===3&&u.getProperty().setIndependentComponents(!1),await J4(u,s),o&&o({volumeActor:u,volumeId:i}),n||$se(e,r,u,i),u}function $se(t,e,r,n){const i=r.getProperty().getRGBTransferFunction(0).getRange(),o={viewportId:e,range:{lower:i[0],upper:i[1]},volumeId:n};ut(t,rt.VOI_MODIFIED,o)}const yl=t=>{const e="volumeId:",r=t.includes(e)?t.substring(e.length):t,n=r.indexOf("sliceIndex=");return n===-1?r:r.substring(0,n-1)},jse=1+qa,Hse=(t,e)=>e===t.substring(0,Math.min(t.length,e.length)),XD=t=>!!gk().find(e=>Hse(t.volumeId,e));function jh(t,e,r,n=!1){const{viewPlaneNormal:i}=e,o=t.getActors();if(!o.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const a=o.map(l=>{const f=l.referencedId??l.uid;return $e.getVolume(f)}).filter(l=>!!l);if(r){const l=yl(r),f=a.findIndex(g=>l.includes(g.volumeId)),u=a[f],{uid:d}=o[f],h=YD(u,i,t,n);return{imageVolume:u,spacingInNormalDirection:h,actorUID:d}}if(!a.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const s={spacingInNormalDirection:1/0,imageVolume:null,actorUID:null},c=a.find(XD);for(let l=0;lg.referencedId===n.volumeId||g.uid===n.volumeId);a||console.warn("No actor found for with actorUID of",n.volumeId);const s=a.actor,c=pw(s,i,o),{min:l,max:f,current:u}=c,d=Math.round((f-l)/r)+1;let h=(u-l)/(f-l)*d;return h=Math.floor(h),h>d-1?h=d-1:h<0&&(h=0),{numberOfSlices:d,imageIndex:h}}const S0={};function Kse(t){S0[t]!==void 0&&delete S0[t]}function qse(t){const{renderingEngineId:e,viewportId:r}=t.detail,i=jr(e).getViewport(r);if(!("setVolumes"in i))throw new Error("volumeNewImageEventDispatcher: viewport does not have setVolumes method");S0[i.id]===void 0&&(S0[i.id]=0);const o=By(i);if(!o){console.warn(`volumeNewImageEventDispatcher: sliceData is undefined for viewport ${i.id}`);return}const{numberOfSlices:a,imageIndex:s}=o;if(S0[i.id]===s)return;S0[i.id]=s;const c={imageIndex:s,viewportId:r,renderingEngineId:e,numberOfSlices:a};ut(i.element,rt.VOLUME_NEW_IMAGE,c)}function Ch(t,e,r){const[n,i,o]=t,[a,s,c]=e,[l,f,u,d]=r,h=a-n,g=s-i,p=c-o,v=-1*(l*n+f*i+u*o-d)/(l*h+f*g+u*p),y=h*v+n,m=g*v+i,w=p*v+o;return[y,m,w]}function nl(t,e,r=!1){const[n,i,o]=t,a=n*e[0]+i*e[1]+o*e[2];if(r){const s=Math.sqrt(n*n+i*i+o*o);return[n/s,i/s,o/s,a/s]}return[n,i,o,a]}function yk(t,e,r){const[n,i,o,a]=t,[s,c,l,f]=e,[u,d,h,g]=r,p=Kg(n,s,u,i,c,d,o,l,h),v=Kg(a,f,g,i,c,d,o,l,h),y=Kg(n,s,u,a,f,g,o,l,h),m=Kg(n,s,u,i,c,d,a,f,g),w=Wf(v)/Wf(p),x=Wf(y)/Wf(p),C=Wf(m)/Wf(p);return[w,x,C]}function m1(t,e,r=!1){const[n,i,o,a]=t,[s,c,l]=e,f=n*s+i*c+o*l-a,u=Math.abs(f)/Math.sqrt(n*n+i*i+o*o);return(r?Math.sign(f):1)*u}function wk(t,e,r=qa){return m1(e,t)Number.isNaN(e)):Number.isNaN(t)}function vs(t){if(t===null||typeof t!="object"||typeof t=="function"||typeof structuredClone=="function")return t;if(Array.isArray(t))return t.map(vs);{const e={};for(const r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=vs(t[r]));return e}}const Pp=class Pp{constructor(e){this.insetImageMultiplier=1.1,this.flipHorizontal=!1,this.flipVertical=!1,this.viewportStatus=Lo.NO_DATA,this._suppressCameraModifiedEvents=!1,this.hasPixelSpacing=!0,this.getProperties=()=>({}),this.setRotation=r=>{},this.viewportWidgets=new Map,this.addWidget=(r,n)=>{this.viewportWidgets.set(r,n)},this.getWidget=r=>this.viewportWidgets.get(r),this.getWidgets=()=>Array.from(this.viewportWidgets.values()),this.removeWidgets=()=>{this.getWidgets().forEach(n=>{if(n.getEnabled()&&n.setEnabled(!1),n.getActor&&n.getRenderer){const i=n.getActor(),o=n.getRenderer();o&&i&&o.removeActor(i)}})},this.id=e.id,this.renderingEngineId=e.renderingEngineId,this.type=e.type,this.element=e.element,this.canvas=e.canvas,this.sx=e.sx,this.sy=e.sy,this.sWidth=e.sWidth,this.sHeight=e.sHeight,this._actors=new Map,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.defaultOptions=vs(e.defaultOptions),this.suppressEvents=e.defaultOptions.suppressEvents?e.defaultOptions.suppressEvents:!1,this.options=vs(e.defaultOptions),this.isDisabled=!1}static get useCustomRenderingPipeline(){return!1}setRendered(){this.viewportStatus===Lo.NO_DATA||this.viewportStatus===Lo.LOADING||(this.viewportStatus=Lo.RENDERED)}setColorTransform(e,r){let n=null;if(!e&&!r)return;const i=r||[255,255,255],o=Math.max(...i),a=i.map(u=>o/u),{lower:s=0,upper:c=255}=e||{},l=(c-s+1)/255,f=s/255;return n=`url('data:image/svg+xml, #colour')`,n}getRenderingEngine(){return o1.get(this.renderingEngineId)}getRenderer(){var r;const e=this.getRenderingEngine();if(!e||e.hasBeenDestroyed)throw new Error("Rendering engine has been destroyed");return(r=e.offscreenMultiRenderWindow)==null?void 0:r.getRenderer(this.id)}render(){this.getRenderingEngine().renderViewport(this.id)}setOptions(e,r=!1){var n,i;this.options=structuredClone(e),(n=this.options)!=null&&n.displayArea&&this.setDisplayArea((i=this.options)==null?void 0:i.displayArea),r&&this.render()}reset(e=!1){this.options=structuredClone(this.defaultOptions),e&&this.render()}getSliceViewInfo(){throw new Error("Method not implemented.")}flip({flipHorizontal:e,flipVertical:r}){const n=this.getDefaultImageData();if(!n)return;const i=this.getCamera(),{viewPlaneNormal:o,viewUp:a,focalPoint:s,position:c}=i,l=kn(Ke(),o,a);let f=OY(Ke(),a);const u=el(Ke(),o),d=Qi(c,s),g=n.getDimensions().map(C=>Math.floor(C/2)),p=[g[0],g[1],g[2]],v=n.indexToWorld(p,Ke()),y=this._getFocalPointForResetCamera(v,i,{resetPan:!0,resetToCenter:!1}),m=qn(Ke(),s,y),w=ta(m),x=C=>{const S=Ir(Ke(),C,2*kt(m,C));return qn(S,S,m),Qn(S,S),S};if(e){const C=x(f),S=On(Ke(),y,C,w),T=On(Ke(),S,u,d);this.setCamera({viewPlaneNormal:u,position:T,focalPoint:S}),this.flipHorizontal=!this.flipHorizontal}if(r){f=el(f,a);const C=x(l),S=On(Ke(),y,C,w),T=On(Ke(),S,u,d);this.setCamera({focalPoint:S,viewPlaneNormal:u,viewUp:f,position:T}),this.flipVertical=!this.flipVertical}this.render()}getDefaultImageData(){const e=this.getDefaultActor();if(e&&tc(e))return e.actor.getMapper().getInputData()}getDefaultActor(){return this.getActors()[0]}getActors(){return Array.from(this._actors.values())}getActorUIDs(){return Array.from(this._actors.keys())}getActor(e){return this._actors.get(e)}getImageActor(e){const r=this.getActors();let n=r[0];return e&&(n=r.find(o=>o.referencedId===e)),!n||!tc(n)?null:n.actor}getActorUIDByIndex(e){const r=this.getActors()[e];if(r)return r.uid}getActorByIndex(e){return this.getActors()[e]}setActors(e){const r=this.getActors();this.removeAllActors(),this.addActors(e,{resetCamera:!0}),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:r,addedActors:e,currentActors:e})}_removeActor(e){const r=this.getActor(e);if(!r){console.warn(`Actor ${e} does not exist in ${this.id}, can't remove`);return}return this.getRenderer().removeActor(r.actor),this._actors.delete(e),r}removeActors(e){const r=[];e.forEach(i=>{const o=this._removeActor(i);o&&r.push(o)});const n=this.getActors();ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:r,addedActors:[],currentActors:n})}addActors(e,r={}){const{resetCamera:n=!1}=r,i=this.getRenderingEngine();if(!i||i.hasBeenDestroyed){console.warn("Viewport::addActors::Rendering engine has not been initialized or has been destroyed");return}e.forEach(s=>{this.addActor(s)});const o=this.getViewPresentation(),a=this.getViewReference();this.resetCamera(),n||(this.setViewReference(a),this.setViewPresentation(o)),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:[],addedActors:e,currentActors:this.getActors()})}addActor(e){const{uid:r,actor:n}=e,i=this.getRenderingEngine();if(!i||i.hasBeenDestroyed){console.warn(`Cannot add actor UID of ${r} Rendering Engine has been destroyed`);return}if(!r||!n)throw new Error("Actors should have uid and vtk Actor properties");if(this.getActor(r)){console.warn(`Actor ${r} already exists for this viewport`);return}const o=this.getRenderer();o==null||o.addActor(n),this._actors.set(r,Object.assign({},e)),this.updateCameraClippingPlanesAndRange(),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:[],addedActors:[e],currentActors:this.getActors()})}removeAllActors(){var r;const e=this.getActors();(r=this.getRenderer())==null||r.removeAllViewProps(),this._actors=new Map,ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:e,addedActors:[],currentActors:[]})}resetCameraNoEvent(){this._suppressCameraModifiedEvents=!0,this.resetCamera(),this._suppressCameraModifiedEvents=!1}setCameraNoEvent(e){this._suppressCameraModifiedEvents=!0,this.setCamera(e),this._suppressCameraModifiedEvents=!1}_getViewImageDataIntersections(e,r,n){const i=n[0],o=n[1],a=n[2],s=i*r[0]+o*r[1]+a*r[2],c=e.getBounds(),l=this._getEdges(c),f=[];for(const u of l){const[[d,h,g],[p,v,y]]=u;if(i*(p-d)+o*(v-h)+a*(y-g)===0)continue;const m=Ch([d,h,g],[p,v,y],[i,o,a,s]);this._isInBounds(m,c)&&f.push(m)}return f}setInterpolationType(e,r){}setDisplayArea(e,r=!1){var a;if(!e)return;const{storeAsInitialCamera:n,type:i}=e;n&&(this.options.displayArea=e);const{_suppressCameraModifiedEvents:o}=this;if(this._suppressCameraModifiedEvents=!0,this.setCamera(this.fitToCanvasCamera),i==="SCALE"?this.setDisplayAreaScale(e):(this.setInterpolationType(((a=this.getProperties())==null?void 0:a.interpolationType)??Vl.LINEAR),this.setDisplayAreaFit(e)),n&&(this.initialCamera=this.getCamera()),this._suppressCameraModifiedEvents=o,!r&&!o){const s={viewportId:this.id,displayArea:e,storeAsInitialCamera:n};ut(this.element,rt.DISPLAY_AREA_MODIFIED,s),this.setCamera(this.getCamera())}}setDisplayAreaScale(e){const{scale:r=1}=e,n=this.canvas,i=n.height,o=n.width;if(i<8||o<8)return;const c=this.getDefaultImageData().getSpacing()[1];this.setInterpolationType(Vl.NEAREST),this.setCamera({parallelScale:i*c/(2*r)}),delete e.imageArea,this.setDisplayAreaFit(e);const{focalPoint:l,position:f,viewUp:u,viewPlaneNormal:d}=this.getCamera(),h=Ke();if(n.height%2&&On(h,h,u,r*.5*c),n.width%2){const g=kn(Ke(),u,d);On(h,h,g,r*.5*c)}!h[0]&&!h[1]&&!h[2]||this.setCamera({focalPoint:ri(Ke(),l,h),position:ri(Ke(),f,h)})}setDisplayAreaFit(e){const{imageArea:r,imageCanvasPoint:n}=e,i=(window==null?void 0:window.devicePixelRatio)||1,o=this.getDefaultImageData();if(!o)return;const a=this.sWidth/i,s=this.sHeight/i,c=o.getDimensions(),l=this.worldToCanvas(o.indexToWorld([0,0,0])),f=this.worldToCanvas(o.indexToWorld([c[0],c[1],c[2]])),u=[Math.abs(f[0]-l[0]),Math.abs(f[1]-l[1])],[d,h]=u;let g=this.getZoom()/this.insetImageMultiplier;if(r){const[p,v]=r,y=Math.max(Math.abs(d/a),Math.abs(h/s)),m=Math.abs(p*d/a),w=Math.abs(v*h/s),x=this.getZoom(),C=this.getZoom(this.fitToCanvasCamera);g=(m>w?y/m:y/w)*x/C,this.setZoom(this.insetImageMultiplier*g,!1)}if(n){const{imagePoint:p,canvasPoint:v=p||[.5,.5]}=n,[y,m]=v,w=a*(y-.5),x=s*(m-.5),[C,S]=p||v,T=g,_=this.insetImageMultiplier*T*d*(.5-C),E=this.insetImageMultiplier*T*h*(.5-S),b=_+w,D=E+x,I=[b,D];mo(I,I,this.getPan()),this.setPan(I,!1)}}getDisplayArea(){var e;return(e=this.options)==null?void 0:e.displayArea}resetCamera(e){const{resetPan:r=!0,resetZoom:n=!0,resetToCenter:i=!0,storeAsInitialCamera:o=!0}=e||{},a=this.getRenderer();this.setCameraNoEvent({flipHorizontal:!1,flipVertical:!1});const s=this.getCamera();let c;const l=this.getDefaultActor();l&&tc(l)?c=l.actor.getMapper().getInputData().getBounds():c=a.computeVisiblePropBounds();const f=[0,0,0],u=this.getDefaultImageData();if(u){const O=u.getSpacing();c[0]=c[0]+O[0]/2,c[1]=c[1]-O[0]/2,c[2]=c[2]+O[1]/2,c[3]=c[3]-O[1]/2,c[4]=c[4]+O[2]/2,c[5]=c[5]-O[2]/2}const d=this.getVtkActiveCamera(),h=d.getViewPlaneNormal(),g=d.getViewUp();if(f[0]=(c[0]+c[1])/2,f[1]=(c[2]+c[3])/2,f[2]=(c[4]+c[5])/2,u){const A=u.getDimensions().map(G=>Math.floor(G/2)),V=[A[0],A[1],A[2]];u.indexToWorld(V,f)}const{widthWorld:p,heightWorld:v}=this._getWorldDistanceViewUpAndViewRight(c,g,h),y=[this.sWidth,this.sHeight],m=p/v,w=y[0]/y[1],x=m/w,C=x<1?this.insetImageMultiplier*v/2:this.insetImageMultiplier*v*x/2,S=Pp.boundsRadius(c)*(this.type===vr.VOLUME_3D?10:1),T=this.insetImageMultiplier*S,_=Math.abs(nn.dot(g,h))>.999?[-g[2],g[0],g[1]]:g,E=this._getFocalPointForResetCamera(f,s,{resetPan:r,resetToCenter:i}),b=[E[0]+T*h[0],E[1]+T*h[1],E[2]+T*h[2]];a.resetCameraClippingRange(c);const D=[-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE];d.setPhysicalScale(S),d.setPhysicalTranslation(-E[0],-E[1],-E[2]),this.setCamera({parallelScale:n?C:s.parallelScale,focalPoint:E,position:b,viewAngle:90,viewUp:_,clippingRange:D});const I=this.getCamera();this.setFitToCanvasCamera(this.getCamera()),o&&this.setInitialCamera(I),n&&this.setZoom(1,o);const P={type:"ResetCameraEvent",renderer:a};return a.invokeEvent(P),this.triggerCameraModifiedEventIfNecessary(s,I),u&&this.options.displayArea&&n&&r&&i&&this.setDisplayArea(this.options.displayArea),!0}setInitialCamera(e){this.initialCamera=e}setFitToCanvasCamera(e){this.fitToCanvasCamera=e}getPan(e=this.initialCamera){if(!e)return[0,0];const n=this.getVtkActiveCamera().getFocalPoint(),i=this.canvasToWorld([0,0]),o=this.worldToCanvas(qn([0,0,0],e.focalPoint,i)),a=this.worldToCanvas(qn([0,0,0],n,i));return Jr([0,0],o,a)}getCurrentImageIdIndex(){throw new Error("Not implemented")}getSliceIndex(){throw new Error("Not implemented")}getImageData(){throw new Error("Not implemented")}getViewReferenceId(e){return null}setPan(e,r=!1){const n=this.getCamera(),{focalPoint:i,position:o}=n,a=this.canvasToWorld([0,0]),s=Jr([0,0],e,this.getPan());if(Math.abs(s[0])<1&&Math.abs(s[1])<1&&!r)return;const c=qn(Ke(),this.canvasToWorld(s),a),l=qn(Ke(),i,c),f=qn(Ke(),o,c);this.setCamera({...n,focalPoint:l,position:f},r)}getZoom(e=this.initialCamera){if(!e)return 1;const r=this.getVtkActiveCamera(),{parallelScale:n}=e;return n/r.getParallelScale()}setZoom(e,r=!1){const n=this.getCamera(),{parallelScale:i}=this.initialCamera,o=i/e;n.parallelScale===o&&!r||this.setCamera({...n,parallelScale:o},r)}_getFocalPointForViewPlaneReset(e){const{focalPoint:r,viewPlaneNormal:n}=this.getCamera(),i=this._getViewImageDataIntersections(e,r,n);let o=0,a=0,s=0;return i.forEach(([l,f,u])=>{o+=l,a+=f,s+=u}),[o/i.length,a/i.length,s/i.length]}getCanvas(){return this.canvas}getVtkActiveCamera(){const e=this.getRenderer();return e?e.getActiveCamera():(console.warn("No renderer found for the viewport"),null)}getCameraNoRotation(){const e=this.getVtkActiveCamera(),r=(s,c)=>s.some(l=>isNaN(l))?c:s,n=r([...e.getViewUp()],[0,1,0]),i=r([...e.getViewPlaneNormal()],[0,0,-1]),o=r([...e.getPosition()],[0,0,1]),a=r([...e.getFocalPoint()],[0,0,0]);return{viewUp:n,viewPlaneNormal:i,position:o,focalPoint:a,parallelProjection:e.getParallelProjection(),parallelScale:e.getParallelScale(),viewAngle:e.getViewAngle(),flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}getCamera(){return{...this.getCameraNoRotation(),rotation:this.getRotation()}}setCamera(e,r=!1){const n=this.getVtkActiveCamera(),i=this.getCamera(),o=Object.assign({},i,e),{viewUp:a,viewPlaneNormal:s,position:c,focalPoint:l,parallelScale:f,viewAngle:u,flipHorizontal:d,flipVertical:h,clippingRange:g}=e;if(d!==void 0){const y=d&&!this.flipHorizontal||!d&&this.flipHorizontal;y&&this.flip({flipHorizontal:y})}if(h!==void 0){const y=h&&!this.flipVertical||!h&&this.flipVertical;y&&this.flip({flipVertical:y})}a!==void 0&&n.setViewUp(a),s!==void 0&&n.setDirectionOfProjection(-s[0],-s[1],-s[2]),c!==void 0&&n.setPosition(...c),l!==void 0&&n.setFocalPoint(...l),f!==void 0&&n.setParallelScale(f),u!==void 0&&n.setViewAngle(u),g!==void 0&&n.setClippingRange(g);const p=i.focalPoint,v=i.viewUp;if(p&&l||v&&a){const y=n.getViewPlaneNormal(),m=n.getViewUp();let w=!1,x=!1;if(l){const C=[l[0]-p[0],l[1]-p[1],l[2]-p[2]];w=Math.abs(nn.dot(C,y))>0}if(a&&(x=!Zt(m,v)),w||x){const C=this.getDefaultActor();if(!(C!=null&&C.actor))return;_a(C,"vtkActor")||this.updateClippingPlanesForActors(o),(_a(C,"vtkImageSlice")||this.type===vr.VOLUME_3D)&&this.getRenderer().resetCameraClippingRange()}}r&&this.setInitialCamera(o),this.triggerCameraModifiedEventIfNecessary(i,this.getCamera())}triggerCameraModifiedEventIfNecessary(e,r){if(!this._suppressCameraModifiedEvents&&!this.suppressEvents){const n={previousCamera:e,camera:r,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,n)}}updateCameraClippingPlanesAndRange(){const e=this.getCamera();this.updateClippingPlanesForActors(e),this.getRenderer().resetCameraClippingRange()}async updateClippingPlanesForActors(e){this.getActors().map(n=>{if(!n.actor)return;const i=n.actor.getMapper();let o=n!=null&&n.clippingFilter?n==null?void 0:n.clippingFilter.getClippingPlanes():i.getClippingPlanes();o.length===0&&(n!=null&&n.clippingFilter)&&(o=[Vo.newInstance(),Vo.newInstance()]);let a=Qr.MINIMUM_SLAB_THICKNESS;n.slabThickness&&(a=n.slabThickness);const{viewPlaneNormal:s,focalPoint:c}=e;this.setOrientationOfClippingPlanes(o,a,s,c),ut(this.element,rt.CLIPPING_PLANES_UPDATED,{actorEntry:n,focalPoint:c,vtkPlanes:o,viewport:this})})}setOrientationOfClippingPlanes(e,r,n,i){if(e.length<2)return;const o=[n[0],n[1],n[2]];nn.multiplyScalar(o,r),e[0].setNormal(n);const a=[0,0,0];nn.subtract(i,o,a),e[0].setOrigin(a),e[1].setNormal(-n[0],-n[1],-n[2]);const s=[0,0,0];nn.add(i,o,s),e[1].setOrigin(s)}getClippingPlanesForActor(e){if(e||(e=this.getDefaultActor()),!e.actor)throw new Error("Invalid actor entry: Actor is undefined");const r=e.actor.getMapper();let n=e!=null&&e.clippingFilter?e==null?void 0:e.clippingFilter.getClippingPlanes():r.getClippingPlanes();return n.length===0&&(e!=null&&e.clippingFilter)&&(n=[Vo.newInstance(),Vo.newInstance()]),n}_getWorldDistanceViewUpAndViewRight(e,r,n){const i=this._getCorners(e),o=this._getCorners(e),a=kn(Ke(),r,n);let s=Yi.buildFromDegree().identity().rotateFromDirections(r,[1,0,0]);i.forEach(d=>s.apply(d));let c=1/0,l=-1/0;for(let d=0;d<8;d++){const h=i[d][0];h>l&&(l=h),hs.apply(d));let f=1/0,u=-1/0;for(let d=0;d<8;d++){const h=o[d][0];h>u&&(u=h),h=0&&this.setRotation(o)}_getCorners(e){return[[e[0],e[2],e[4]],[e[0],e[2],e[5]],[e[0],e[3],e[4]],[e[0],e[3],e[5]],[e[1],e[2],e[4]],[e[1],e[2],e[5]],[e[1],e[3],e[4]],[e[1],e[3],e[5]]]}_getFocalPointForResetCamera(e,r,{resetPan:n=!0,resetToCenter:i=!0}){if(i&&n)return e;if(i&&!n)return _S(r.focalPoint)?e:r.focalPoint;if(!i&&n){const o=r,a=o.focalPoint,s=o.viewPlaneNormal,c=qn(Ke(),e,a),l=kt(c,s),f=On(Ke(),e,s,-1*l);return[f[0],f[1],f[2]]}if(!n&&!i)return _S(r.focalPoint)?e:r.focalPoint}_isInBounds(e,r){const[n,i,o,a,s,c]=r,[l,f,u]=e;return!(li||fa||uc)}_getEdges(e){const[r,n,i,o,a,s,c,l]=this._getCorners(e);return[[r,n],[r,a],[r,i],[n,o],[n,s],[i,o],[i,c],[o,l],[a,c],[a,s],[s,l],[c,l]]}static boundsRadius(e){const r=(e[1]-e[0])**2,n=(e[3]-e[2])**2,i=(e[5]-e[4])**2;return Math.sqrt(r+n+i||1)*.5}setDataIds(e,r){throw new Error("Unsupported operatoin setDataIds")}};Pp.CameraViewPresentation={rotation:!0,pan:!0,zoom:!0,displayArea:!0},Pp.TransferViewPresentation={windowLevel:!0,paletteLut:!0};let bd=Pp;function xk(t,e,r=!1){const n=t.getCamera(),{focalPoint:i,viewPlaneNormal:o}=n,{spacingInNormalDirection:a,actorUID:s}=jh(t,n,e,r);if(!s)throw new Error(`Could not find image volume with id ${e} in the viewport`);const c=t.getActor(s);if(!c)return console.warn("No actor found for with actorUID of",s),null;const l=c.actor;return{sliceRange:pw(l,o,i),spacingInNormalDirection:a,camera:n}}function ud(t,e,r=!1){const{sliceRange:n,spacingInNormalDirection:i,camera:o}=xk(t,e,r),{min:a,max:s,current:c}=n,l=Math.round((s-a)/i),u=(c-a)/(s-a)*l,d=Math.round(u);return{numScrollSteps:l,currentStepIndex:d,sliceRangeInfo:{sliceRange:n,spacingInNormalDirection:i,camera:o}}}function Ck(t){let e=[];const[r,n]=t.getRange();t.getTable(r,n,1024,e),e=e.filter((h,g)=>g%3===0);const i=[...Array(1024).keys()].map((h,g)=>r+(n-r)/1023*g),o=e[256],a=Math.log((1-o)/o),s=i[256],c=e[256*3],l=Math.log((1-c)/c),f=i[256*3],u=Math.round(4*(f-s)/(a-l)),d=Math.round(s+u*a/4);return[Math.round(d-u/2),Math.round(d+u/2)]}function Sk(t,e){const r=e.colorTransfer.split(" ").splice(1).map(parseFloat),{shiftRange:n}=Yse(r),i=n[0],o=n[1]-n[0],a=Ql.newInstance(),s=[];for(let x=0;x[o*n+e[0],a,s,c]);return r.removeAllPoints(),i.forEach(([o,a,s,c])=>r.addRGBPoint(o,a,s,c)),i}function Zse(t,e,r){const n=e[1]-e[0],i=t.map(([o,a])=>[o*n+e[0],a]);return r.removeAllPoints(),i.forEach(([o,a])=>r.addPoint(o,a)),i}class Tr extends bd{constructor(e){if(super(e),this.useCPURendering=!1,this.perVolumeIdDefaultProperties=new Map,this.viewportProperties={},this.volumeIds=new Set,this.setRotation=i=>{const o=this.getPan(this.fitToCanvasCamera),a=this.getPan(),s=this.getCamera(),c=xs([0,0],o,a);this.setPan(c,!1);const{flipVertical:l}=this.getCamera(),f=l?el([0,0,0],this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:f}),this.rotateCamera(i);const u=this.getPan(),d=this.getPan(this.fitToCanvasCamera),h=xs([0,0],u,d),g=mo([0,0],o,h);if(this.setPan(g,!1),this._suppressCameraModifiedEvents)return;const p=this.getCamera(),v={previousCamera:s,camera:p,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,v)},this.getDefaultProperties=i=>{let o;return i!==void 0&&(o=this.perVolumeIdDefaultProperties.get(i)),o!==void 0?o:{...this.globalDefaultProperties}},this.getProperties=i=>{var C;if(!this._getApplicableVolumeActor(i))return;const{colormap:a,VOILUTFunction:s,interpolationType:c,invert:l,slabThickness:f,preset:u}=this.viewportProperties;if(i||(i=this.getVolumeId()),!$e.getVolume(i))return null;const h=this.getActors().find(S=>S.referencedId===i);if(!h)return;const p=h.actor.getProperty().getRGBTransferFunction(0),[v,y]=((C=this.viewportProperties)==null?void 0:C.VOILUTFunction)==="SIGMOID"?Ck(p):p.getRange(),m={lower:v,upper:y},w=this.getColormap(i);return{colormap:i&&w?w:a,voiRange:m,VOILUTFunction:s,interpolationType:c,invert:l,slabThickness:f,preset:u}},this.getColormap=i=>{const o=this._getApplicableVolumeActor(i);if(!o)return;const{volumeActor:a}=o,s=this._getOrCreateColorTransferFunction(i),{nodes:c}=s.getState(),l=c.reduce((h,g)=>(h.push(g.x,g.r,g.g,g.b),h),[]),f=V4(l,a)||{},u=U4(a),d=B4(a);return f.threshold=u,f.opacity=d,f},this.getRotation=()=>{const{viewUp:i,viewPlaneNormal:o,flipVertical:a}=this.getCameraNoRotation(),s=a?el([0,0,0],this.initialViewUp):this.initialViewUp;if(!s)return 0;const c=o4(s,i)*180/Math.PI,l=kn([0,0,0],s,i);return kt(l,o)>=0?c:(360-c)%360},this.getFrameOfReferenceUID=()=>this._FrameOfReferenceUID,this.canvasToWorld=i=>{var u,d;const o=this.getVtkActiveCamera();(u=o.setIsPerformingCoordinateTransformation)==null||u.call(o,!0);const a=this.getRenderer(),s=this.getVtkDisplayCoords(i),f=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow().displayToWorld(s[0],s[1],s[2],a);return(d=o.setIsPerformingCoordinateTransformation)==null||d.call(o,!1),[f[0],f[1],f[2]]},this.getVtkDisplayCoords=i=>{const o=window.devicePixelRatio||1,a=[i[0]*o,i[1]*o],l=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow().getSize(),f=[a[0]+this.sx,a[1]+this.sy];return f[1]=l[1]-f[1],[f[0],f[1],0]},this.worldToCanvas=i=>{var g;const o=this.getVtkActiveCamera();(g=o.setIsPerformingCoordinateTransformation)==null||g.call(o,!0);const a=this.getRenderer(),c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=c.worldToDisplay(...i,a);f[1]=l[1]-f[1];const u=[f[0]-this.sx,f[1]-this.sy],d=window.devicePixelRatio||1,h=[u[0]/d,u[1]/d];return o.setIsPerformingCoordinateTransformation(!1),h},this.hasImageURI=i=>this.getActors().filter(a=>_a(a,"vtkVolume")).some(({uid:a,referencedId:s})=>{const c=$e.getVolume(s||a);return c!=null&&c.imageIds?c.imageIds.map(Ur).includes(i):!1}),this.getImageIds=i=>{const o=this._getApplicableVolumeActor(i);if(!o)throw new Error(`No actor found for the given volumeId: ${i}`);const a=o.volumeId,s=$e.getVolume(a);if(!s)throw new Error(`imageVolume with id: ${a} does not exist in cache`);return s.imageIds},this.useCPURendering=q0(),this.useCPURendering)throw new Error("VolumeViewports cannot be used whilst CPU Fallback Rendering is enabled.");const r=this.getRenderer(),n=qre.newInstance();switch(r.setActiveCamera(n),this.type){case vr.ORTHOGRAPHIC:n.setParallelProjection(!0);break;case vr.VOLUME_3D:n.setParallelProjection(!0);break;case vr.PERSPECTIVE:n.setParallelProjection(!1);break;default:throw new Error(`Unrecognized viewport type: ${this.type}`)}this.initializeVolumeNewImageEventDispatcher()}static get useCustomRenderingPipeline(){return!1}getSliceViewInfo(){throw new Error("Method not implemented.")}applyViewOrientation(e,r=!0){const{viewPlaneNormal:n,viewUp:i}=this._getOrientationVectors(e),o=this.getVtkActiveCamera();o.setDirectionOfProjection(-n[0],-n[1],-n[2]),o.setViewUpFrom(i),this.initialViewUp=i,r&&this.resetCamera({resetOrientation:!1,resetRotation:!1})}initializeVolumeNewImageEventDispatcher(){const e=n.bind(this),r=i.bind(this);function n(o){const{viewportId:a}=o.detail;a!==this.id||this.isDisabled||!this.getImageData()||qse(o)}function i(o){const{viewportId:a}=o.detail;a===this.id&&(this.element.removeEventListener(rt.CAMERA_MODIFIED,e),et.removeEventListener(rt.ELEMENT_DISABLED,r),Kse(a))}this.element.removeEventListener(rt.CAMERA_MODIFIED,e),this.element.addEventListener(rt.CAMERA_MODIFIED,e),et.addEventListener(rt.ELEMENT_DISABLED,r)}setVOILUTFunction(e,r,n){Object.values(wo).includes(e)||(e=wo.LINEAR);const{voiRange:i}=this.getProperties();this.setVOI(i,r,n),this.viewportProperties.VOILUTFunction=e}setColormap(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i,a=Ql.newInstance();let s=f1(e.name);const{name:c}=e;if(s||(s=u1.getPresetByName(c)),!s)throw new Error(`Colormap ${e} not found`);const l=o.getProperty().getRGBTransferFunction(0).getRange();if(a.applyColorMap(s),a.setMappingRange(l[0],l[1]),o.getProperty().setRGBTransferFunction(0,a),this.viewportProperties.colormap=e,!n){const f=this.getColormap(r),u={viewportId:this.id,colormap:f,volumeId:r};ut(this.element,rt.VOI_MODIFIED,u),ut(this.element,rt.COLORMAP_MODIFIED,u)}}setOpacity(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n,o=Ed.newInstance();typeof e.opacity=="number"?DN(i,e.opacity):(e.opacity.forEach(({opacity:c,value:l})=>{o.addPoint(l,c)}),i.getProperty().setScalarOpacity(0,o)),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.opacity=e.opacity;const a=this.getColormap(r),s={viewportId:this.id,colormap:a,volumeId:r};ut(this.element,rt.COLORMAP_MODIFIED,s)}setInvert(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const o=i.volumeId,a=this._getOrCreateColorTransferFunction(o);if(wp(a),this.viewportProperties.invert=e,!n){const s={...this.getVOIModifiedEventDetail(o),invertStateChanged:!0};ut(this.element,rt.VOI_MODIFIED,s)}}getVOIModifiedEventDetail(e){const r=this._getApplicableVolumeActor(e);if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);const o=r.volumeActor.getProperty().getRGBTransferFunction(0).getMappingRange(),a=this.getColormap(e),{VOILUTFunction:s,invert:c}=this.getProperties(e);return{viewportId:this.id,range:{lower:o[0],upper:o[1]},volumeId:r.volumeId,VOILUTFunction:s,colormap:a,invert:c}}_getOrCreateColorTransferFunction(e){const r=this._getApplicableVolumeActor(e);if(!r)return null;const{volumeActor:n}=r,i=n.getProperty().getRGBTransferFunction(0);if(i)return i;const o=Ql.newInstance();return n.getProperty().setRGBTransferFunction(0,o),o}setInterpolationType(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n;i.getProperty().setInterpolationType(e),this.viewportProperties.interpolationType=e}setVOI(e,r,n=!1){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i,a=i.volumeId,s=e;if(typeof s>"u")throw new Error("voiRangeToUse is undefined, need to implement this in the new volume model");const{VOILUTFunction:c}=this.getProperties(a);if(c===wo.SAMPLED_SIGMOID){const l=G4(s);o.getProperty().setRGBTransferFunction(0,l)}else{const{lower:l,upper:f}=s;o.getProperty().getRGBTransferFunction(0).setRange(l,f)}if(!n){const l={...this.getVOIModifiedEventDetail(a)};ut(this.element,rt.VOI_MODIFIED,l)}this.viewportProperties.voiRange=s}rotateCamera(e){const r=e-this.getRotation();this.getVtkActiveCamera().roll(-r)}setDefaultProperties(e,r){r==null?this.globalDefaultProperties=e:this.perVolumeIdDefaultProperties.set(r,e)}clearDefaultProperties(e){e==null?(this.globalDefaultProperties={},this.resetProperties()):(this.perVolumeIdDefaultProperties.delete(e),this.resetToDefaultProperties(e))}getViewReference(e={}){const r=super.getViewReference(e),n=this.getVolumeId(e);if((e==null?void 0:e.forFrameOfReference)!==!1&&(r.volumeId=n),typeof(e==null?void 0:e.sliceIndex)!="number")return r;const{viewPlaneNormal:i}=r,o=(e==null?void 0:e.sliceIndex)-this.getSliceIndex(),{sliceRangeInfo:a}=ud(this,n,!0),{sliceRange:s,spacingInNormalDirection:c,camera:l}=a,{focalPoint:f,position:u}=l,{newFocalPoint:d}=X0(f,u,s,i,c,o);return r.cameraFocalPoint=d,r}isReferenceViewable(e,r){if(!e.FrameOfReferenceUID||!super.isReferenceViewable(e,r))return!1;if(r!=null&&r.withNavigation)return!0;const n=this.getSliceIndex(),{sliceIndex:i}=e;return Array.isArray(i)?i[0]<=n&&n<=i[1]:i===void 0||i===n}scroll(e=1){const r=this.getVolumeId(),{sliceRangeInfo:n}=ud(this,r,!0);if(!n)return;const{sliceRange:i,spacingInNormalDirection:o,camera:a}=n,{focalPoint:s,viewPlaneNormal:c,position:l}=a,{newFocalPoint:f,newPosition:u}=X0(s,l,i,c,o,e);this.setCamera({focalPoint:f,position:u}),this.render()}setViewReference(e){if(!e)return;const r=this.getVolumeId(),{viewPlaneNormal:n,FrameOfReferenceUID:i,cameraFocalPoint:o,referencedImageId:a,viewUp:s}=e;let{sliceIndex:c}=e;const{focalPoint:l,viewPlaneNormal:f,position:u}=this.getCamera(),d=EN(f,n),h=Zt(f,n);if(typeof c=="number"&&r!==void 0&&e.volumeId===r&&(d||h)){const{currentStepIndex:g,sliceRangeInfo:p,numScrollSteps:v}=ud(this,r,!0),{sliceRange:y,spacingInNormalDirection:m}=p;d&&(c=v-c-1);const w=c-g,{newFocalPoint:x,newPosition:C}=X0(l,u,y,f,m,w);this.setCamera({focalPoint:x,position:C})}else if(i===this.getFrameOfReferenceUID()){if(n&&!d&&!h){this.setOrientation({viewPlaneNormal:n,viewUp:s}),this.setViewReference(e);return}if(a&&this.isInAcquisitionPlane()){const g=wt(Qo.IMAGE_PLANE,a),{imagePositionPatient:p}=g,{focalPoint:v}=this.getCamera(),y=qn(Ke(),v,p),m=kt(y,f),w=On(Ke(),v,[-f[0],-f[1],-f[2]],m);this.setCamera({focalPoint:w}),this.render();return}if(o){const g=qn([0,0,0],o,l),p=n??f,v=kt(g,p);Zt(v,0)||Ir(g,p,v);const y=ri([0,0,0],l,g),m=ri([0,0,0],u,g);this.setCamera({focalPoint:y,position:m})}}else throw new Error(`Incompatible view refs: ${i}!==${this.getFrameOfReferenceUID()}`)}setThreshold(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n;IN(i,e.threshold),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.threshold=e.threshold;const o=this.getColormap(r),a={viewportId:this.id,colormap:o,volumeId:r};ut(this.element,rt.COLORMAP_MODIFIED,a)}setProperties({voiRange:e,VOILUTFunction:r,invert:n,colormap:i,preset:o,interpolationType:a,slabThickness:s}={},c,l=!1){this.globalDefaultProperties==null&&this.setDefaultProperties({voiRange:e,VOILUTFunction:r,invert:n,colormap:i,preset:o,slabThickness:s}),n!==void 0&&this.viewportProperties.invert!==n&&this.setInvert(n,c,l),i!=null&&i.name&&this.setColormap(i,c,l),(i==null?void 0:i.opacity)!=null&&this.setOpacity(i,c),(i==null?void 0:i.threshold)!=null&&this.setThreshold(i,c),e!==void 0&&this.setVOI(e,c,l),typeof a<"u"&&this.setInterpolationType(a),r!==void 0&&this.setVOILUTFunction(r,c,l),o!==void 0&&this.setPreset(o,c,l),s!==void 0&&this.setSlabThickness(s)}resetToDefaultProperties(e){var n,i;const r=this.globalDefaultProperties;(n=r.colormap)!=null&&n.name&&this.setColormap(r.colormap,e),((i=r.colormap)==null?void 0:i.opacity)!=null&&this.setOpacity(r.colormap,e),r.voiRange!==void 0&&this.setVOI(r.voiRange,e),r.VOILUTFunction!==void 0&&this.setVOILUTFunction(r.VOILUTFunction,e),r.invert!==void 0&&this.setInvert(r.invert,e),r.slabThickness!==void 0&&(this.setSlabThickness(r.slabThickness),this.viewportProperties.slabThickness=r.slabThickness),r.preset!==void 0&&this.setPreset(r.preset,e,!1),r.preset!==void 0&&this.setPreset(r.preset,e,!1),this.render()}setPreset(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i;let a=e;typeof a=="string"&&(a=uP.find(s=>s.name===e)),a&&(Sk(o,a),this.viewportProperties.preset=a,this.render(),n||ut(this.element,rt.PRESET_MODIFIED,{viewportId:this.id,volumeId:i.volumeId,actor:o,presetName:a.name}))}async setVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist, you need to create/allocate the volume first`);const o=i.metadata.FrameOfReferenceUID;this._isValidVolumeInputArray(e,o),this._FrameOfReferenceUID=o,e.forEach(s=>{this._addVolumeId(s.volumeId)});const a=[];for(let s=0;s{this._addVolumeId(a.volumeId)});for(let a=0;ao.referencedId===e);return i?{volumeActor:i.actor,volumeId:e,actorUID:i.uid}:void 0}const n=r[0];return{volumeActor:n.actor,volumeId:n.referencedId,actorUID:n.uid}}async _isValidVolumeInputArray(e,r){const n=e.length;for(let i=1;if.referencedId===e);if(!_a(n,"vtkVolume"))return;const i=n.actor,o=$e.getVolume(e),a=i.getMapper().getInputData();return{dimensions:a.getDimensions(),spacing:a.getSpacing(),origin:a.getOrigin(),direction:a.getDirection(),imageData:i.getMapper().getInputData(),metadata:{Modality:(c=o==null?void 0:o.metadata)==null?void 0:c.Modality,FrameOfReferenceUID:(l=o==null?void 0:o.metadata)==null?void 0:l.FrameOfReferenceUID},get scalarData(){var f;return(f=o==null?void 0:o.voxelManager)==null?void 0:f.getScalarData()},scaling:o==null?void 0:o.scaling,hasPixelSpacing:!0,voxelManager:o==null?void 0:o.voxelManager}}setCameraClippingRange(){throw new Error("Method not implemented.")}getSliceIndex(){throw new Error("Method not implemented.")}setCamera(e,r){super.setCamera(e,r),this.setCameraClippingRange()}_setVolumeActors(e){for(let r=0;r-s),a=i.slice(3,6).map(s=>-s);return{viewPlaneNormal:o,viewUp:a}}getSlabThickness(){const e=this.getActors();let r=Qr.MINIMUM_SLAB_THICKNESS;return e.forEach(n=>{n.slabThickness>r&&(r=n.slabThickness)}),r}getIntensityFromWorld(e){const r=this.getDefaultActor();if(!_a(r,"vtkVolume"))return;const{actor:n}=r,i=n.getMapper().getInputData(),o=$e.getVolume(this.getVolumeId()),a=zr(i,e);return o.voxelManager.getAtIJKPoint(a)}getVolumeId(e){const r=this.getActors();if(!r)return;if(!(e!=null&&e.volumeId)){const i=r.find(o=>o.actor.getClassName()==="vtkVolume");return(i==null?void 0:i.referencedId)||(i==null?void 0:i.uid)}const n=r.find(i=>i.actor.getClassName()==="vtkVolume"&&i.referencedId===(e==null?void 0:e.volumeId));return(n==null?void 0:n.referencedId)||(n==null?void 0:n.uid)}getViewReferenceId(e={}){var c;let{volumeId:r,sliceIndex:n}=e;if(!r){const l=this.getActors();if(!l)return;r=(c=l.find(f=>f.actor.getClassName()==="vtkVolume"))==null?void 0:c.referencedId}const i=this.getSliceIndex();n??(n=i);const{viewPlaneNormal:o,focalPoint:a}=this.getCamera(),s=r.includes("?")?"&":"?";return`volumeId:${r}${s}sliceIndex=${n}&viewPlaneNormal=${o.join(",")}`}_addVolumeId(e){this.volumeIds.add(e)}getAllVolumeIds(){return Array.from(this.volumeIds)}}function Pu(t,e){const{imageData:r}=t.getImageData(),n=t.canvasToWorld(e);return zr(r,n)}function Sh(t,e){return t.indexToWorld(e)}function Qse(t,e){const{imageData:r}=t.getImageData(),n=Sh(r,e);return t.worldToCanvas(n)}class ur extends Tr{constructor(e){super(e),this._useAcquisitionPlaneForViewPlane=!1,this.getNumberOfSlices=()=>{const{numberOfSlices:n}=By(this)||{};return n},this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!1,suppressEvents:!0}),this.getCurrentImageIdIndex=(n,i=!0)=>{const{currentStepIndex:o}=ud(this,n||this.getVolumeId(),i);return o},this.getSliceIndex=()=>{const{imageIndex:n}=By(this)||{};return n},this.getCurrentImageId=()=>{const n=this.getDefaultActor();if(!n||!_a(n,"vtkVolume"))return;const i=$e.getVolume(this.getVolumeId());if(!i)return;const{viewPlaneNormal:o,focalPoint:a}=this.getCamera();return Zl(i,a,o)},this.getSlicePlaneCoordinates=()=>{const n=this.getDefaultActor();if(!(n!=null&&n.actor))return console.warn("No image data found for calculating vtkPlanes."),[];const i=this.getVolumeId(),o=$e.getVolume(i),a=this.getCamera(),{focalPoint:s,position:c,viewPlaneNormal:l}=a,f=xf(o,l),u=pw(n.actor,l,s),d=Math.round((u.current-u.min)/f),h=Math.round((u.max-u.current)/f),g=this.getSliceIndex(),p=[];for(let v=-d;v<=h;v++){const{newFocalPoint:y}=X0(s,c,u,l,f,v);p.push({sliceIndex:g+v,point:y})}return p};const{orientation:r}=this.options;if(r&&r!==Cd.ACQUISITION){this.applyViewOrientation(r);return}this._useAcquisitionPlaneForViewPlane=!0}async setVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(i),this._useAcquisitionPlaneForViewPlane=!1),super.setVolumes(e,r,n)}async addVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(i),this._useAcquisitionPlaneForViewPlane=!1),super.addVolumes(e,r,n)}jumpToWorld(e){const{focalPoint:r}=this.getCamera(),n=[0,0,0];Mn(n,e,r);const i=this.getCamera(),o=i.viewPlaneNormal,a=kt(n,o),s=Ft(o[0],o[1],o[2]);if(Ir(s,s,a),Math.abs(s[0])>.001||Math.abs(s[1])>.001||Math.abs(s[2])>.001){const c=[0,0,0],l=[0,0,0];ri(c,i.focalPoint,s),ri(l,i.position,s),this.setCamera({focalPoint:c,position:l}),this.render()}return!0}setOrientation(e,r=!0){let n,i;if(typeof e=="string"){if(e===Cd.ACQUISITION)({viewPlaneNormal:n,viewUp:i}=super._getAcquisitionPlaneOrientation());else if(Au[e])({viewPlaneNormal:n,viewUp:i}=Au[e]);else throw new Error(`Invalid orientation: ${e}. Use Enums.OrientationAxis instead.`);this.setCamera({viewPlaneNormal:n,viewUp:i}),this.viewportProperties.orientation=e,this.resetCamera()}else({viewPlaneNormal:n,viewUp:i}=e),this.applyViewOrientation(e);r&&this.render()}setCameraClippingRange(){const e=this.getVtkActiveCamera();if(!e){console.warn("No active camera found");return}e.getParallelProjection()?e.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):e.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE)}_setViewPlaneToAcquisitionPlane(e){let r,n;if(e){const{direction:i}=e;r=i.slice(6,9).map(o=>-o),n=i.slice(3,6).map(o=>-o)}else({viewPlaneNormal:r,viewUp:n}=this._getAcquisitionPlaneOrientation());this.setCamera({viewPlaneNormal:r,viewUp:n}),this.initialViewUp=n,this.resetCamera()}getBlendMode(e){const r=this.getActors(),n=(e==null?void 0:e.length)>0?r.find(i=>e.includes(i.uid)):r[0];return(n==null?void 0:n.blendMode)||(n==null?void 0:n.actor.getMapper().getBlendMode())}setBlendMode(e,r=[],n=!1){let i=this.getActors();(r==null?void 0:r.length)>0&&(i=i.filter(o=>r.includes(o.uid))),i.forEach(o=>{var c;const{actor:a}=o,s=a.getMapper();(c=s.setBlendMode)==null||c.call(s,e),o.blendMode=e}),n&&this.render()}resetCamera(e){const{resetPan:r=!0,resetZoom:n=!0,resetRotation:i=!0,resetToCenter:o=!0,suppressEvents:a=!1,resetOrientation:s=!0}=e||{},{orientation:c}=this.viewportProperties;c&&s&&this.applyViewOrientation(c,!1),super.resetCamera({resetPan:r,resetZoom:n,resetToCenter:o});const l=this.getVtkActiveCamera(),f=l.getViewPlaneNormal(),u=l.getFocalPoint();if(this.getActors().forEach(h=>{if(!h.actor)return;const g=h.actor.getMapper();if(g.getClippingPlanes().length===0&&!(h!=null&&h.clippingFilter)){const v=Vo.newInstance(),y=Vo.newInstance(),m=[v,y];let w=Qr.MINIMUM_SLAB_THICKNESS;h.slabThickness&&(w=h.slabThickness),this.setOrientationOfClippingPlanes(m,w,f,u),g.addClippingPlane(v),g.addClippingPlane(y)}}),i&&Au[this.viewportProperties.orientation]!==void 0){const h=Au[this.viewportProperties.orientation];this.setCameraNoEvent({viewUp:h.viewUp,viewPlaneNormal:h.viewPlaneNormal})}if(!a){const h={viewportId:this.id,camera:this.getCamera(),renderingEngineId:this.renderingEngineId,element:this.element};ut(this.element,rt.CAMERA_RESET,h)}return!0}setSlabThickness(e,r=[]){e<.1&&(e=.1);let n=this.getActors();(r==null?void 0:r.length)>0&&(n=n.filter(o=>r.includes(o.uid))),n.forEach(o=>{_a(o,"vtkVolume")&&(o.slabThickness=e)});const i=this.getCamera();this.updateClippingPlanesForActors(i),this.triggerCameraModifiedEventIfNecessary(i,i),this.viewportProperties.slabThickness=e}resetSlabThickness(){this.getActors().forEach(n=>{_a(n,"vtkVolume")&&(n.slabThickness=Qr.MINIMUM_SLAB_THICKNESS)});const r=this.getCamera();this.updateClippingPlanesForActors(r),this.triggerCameraModifiedEventIfNecessary(r,r),this.viewportProperties.slabThickness=void 0}isInAcquisitionPlane(){const e=this.getImageData();if(!e)return!1;const{direction:r}=e,{viewPlaneNormal:n}=this.getCamera(),i=[r[6],r[7],r[8]];return Math.abs(kt(n,i))>.99}getSliceViewInfo(){const{width:e,height:r}=this.getCanvas(),n=Pu(this,[0,0]),i=Pu(this,[e-1,0]),o=Pu(this,[0,r-1]),a=Mn(Ke(),i,n),s=Mn(Ke(),o,n),c=kn(Ke(),a,s);Qn(a,a),Qn(s,s),Qn(c,c);const{dimensions:l}=this.getImageData(),[f,u,d]=l,p=[[0,0,0],[f-1,0,0],[0,u-1,0],[f-1,u-1,0],[0,0,d-1],[f-1,0,d-1],[0,u-1,d-1],[f-1,u-1,d-1]].map(b=>Qse(this,b)).reduce((b,D)=>(b.minX=Math.min(b.minX,D[0]),b.minY=Math.min(b.minY,D[1]),b.maxX=Math.max(b.maxX,D[0]),b.maxY=Math.max(b.maxY,D[1]),b),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),v=Pu(this,[p.minX,p.minY]),y=J_(a[0],a[1],a[2],0,s[0],s[1],s[2],0,c[0],c[1],c[2],0,v[0],v[1],v[2],1),m=Pu(this,[p.maxX,p.maxY]),w=Mn(Ke(),m,v),x=$r(ba(),y),{viewPlaneNormal:C}=this.getCamera();if(C.filter(b=>Math.abs(b)>qa).length>1)throw new Error("getSliceInfo is not supported for oblique views");const T=C.findIndex(b=>Math.abs(b)>1-qa);if(T===-1)throw new Error("Unable to determine slice axis");const _=kt(a,w)+1,E=kt(s,w)+1;return{sliceIndex:this.getSliceIndex(),width:_,height:E,slicePlane:T,sliceToIndexMatrix:y,indexToSliceMatrix:x}}getCurrentSlicePixelData(){const{voxelManager:e}=this.getImageData();return e.getSliceData(this.getSliceViewInfo())}getViewReference(e={}){const r=super.getViewReference(e);if(!(r!=null&&r.volumeId))return;const n=$e.getVolume(r.volumeId);return r.referencedImageId=Zl(n,r.cameraFocalPoint,r.viewPlaneNormal),r}resetProperties(e){this._resetProperties(e)}_resetProperties(e){const r=e?this.getActor(e):this.getDefaultActor();if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);r.slabThickness&&(r.slabThickness=Qr.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera())),e||(e=this.getVolumeId());const n=$e.getVolume(e);if(!n)throw new Error(`imageVolume with id: ${e} does not exist in cache`);if(J4(r.actor,n),tc(r)){const l=r.actor.getProperty().getRGBTransferFunction(0);mw(l,this.initialTransferFunctionNodes)}const i={...super.getVOIModifiedEventDetail(e)};this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetCameraRotation:!0}),ut(this.element,rt.VOI_MODIFIED,i)}getSlicesClippingPlanes(){const e=this.getSlicePlaneCoordinates(),{viewPlaneNormal:r}=this.getCamera(),n=Qr.MINIMUM_SLAB_THICKNESS;return e.map(({point:i,sliceIndex:o})=>{const a=[Vo.newInstance(),Vo.newInstance()];return this.setOrientationOfClippingPlanes(a,n,r,i),{sliceIndex:o,planes:a.map(s=>({normal:s.getNormal(),origin:s.getOrigin()}))}})}}function ece(t,e){e.classHierarchy.push("vtkAbstractImageMapper"),t.getIsOpaque=()=>!0,t.getCurrentImage=()=>null,t.getBoundsForSlice=()=>(J.vtkErrorMacro("vtkAbstractImageMapper.getBoundsForSlice - NOT IMPLEMENTED"),rf())}const tce={slice:0,customDisplayExtent:[0,0,0,0,0,0],useCustomExtents:!1,backgroundColor:[0,0,0,1]};function nce(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,tce,r),w4.extend(t,e,r),J.setGet(t,e,["slice","useCustomExtents"]),J.setGetArray(t,e,["customDisplayExtent"],6),J.setGetArray(t,e,["backgroundColor"],4),ece(t,e)}var rce={extend:nce};function Tk(t,e,r){const n=r.getCurrentImage(),i=n.getExtent(),o=[i[0],i[2],i[4]],{ijkMode:a}=r.getClosestIJKAxis();let s=r.isA("vtkImageArrayMapper")?r.getSubSlice():r.getSlice();a!==r.getSlicingMode()&&(s=r.getSliceAtPosition(s)),o[a]+=s;const c=[0,0,0];n.indexToWorld(o,c),o[a]+=1;const l=[0,0,0];n.indexToWorld(o,l),l[0]-=c[0],l[1]-=c[1],l[2]-=c[2],Qn(l,l);const f=Vo.intersectWithLine(t,e,c,l);if(f.intersection){const u=f.x,d=[0,0,0];return n.worldToIndex(u,d),{t:f.t,absoluteIJK:d}}return null}function ice(t,e,r){const n=Tk(t,e,r);if(n){const o=r.getCurrentImage().getExtent(),a=[Math.round(n.absoluteIJK[0]),Math.round(n.absoluteIJK[1]),Math.round(n.absoluteIJK[2])];return a[0]o[1]||a[1]o[3]||a[2]o[5]?null:{t:n.t,ijk:a}}return null}function oce(t,e,r){const n=Tk(t,e,r);if(n){const o=r.getCurrentImage().getExtent(),a=n.absoluteIJK,s=[Math.floor(a[0]),Math.floor(a[1]),Math.floor(a[2])];if(s[0]o[1]-1||s[1]o[3]-1||s[2](o[5]?o[5]-1:o[5]))return null;const c=[a[0]-s[0],a[1]-s[1],a[2]-s[2]];return{t:n.t,ijk:s,pCoords:c}}return null}const{staticOffsetAPI:ace,otherStaticMethods:sce}=cw,{SlicingMode:Hn}=uw;function cce(t,e){e.classHierarchy.push("vtkImageMapper"),t.getSliceAtPosition=n=>{const i=t.getCurrentImage();let o;if(n.length===3)o=n;else if(Number.isFinite(n)){const f=i.getBounds();switch(e.slicingMode){case Hn.X:o=[n,(f[3]+f[2])/2,(f[5]+f[4])/2];break;case Hn.Y:o=[(f[1]+f[0])/2,n,(f[5]+f[4])/2];break;case Hn.Z:o=[(f[1]+f[0])/2,(f[3]+f[2])/2,n];break}}const a=[0,0,0];i.worldToIndex(o,a);const s=i.getExtent(),{ijkMode:c}=t.getClosestIJKAxis();let l=0;switch(c){case Hn.I:l=oc(a[0],s[0],s[1]);break;case Hn.J:l=oc(a[1],s[2],s[3]);break;case Hn.K:l=oc(a[2],s[4],s[5]);break;default:return 0}return l},t.setSliceFromCamera=n=>{const i=n.getFocalPoint();switch(e.slicingMode){case Hn.I:case Hn.J:case Hn.K:{const o=t.getSliceAtPosition(i);t.setSlice(o)}break;case Hn.X:t.setSlice(i[0]);break;case Hn.Y:t.setSlice(i[1]);break;case Hn.Z:t.setSlice(i[2]);break}},t.setXSlice=n=>{t.setSlicingMode(Hn.X),t.setSlice(n)},t.setYSlice=n=>{t.setSlicingMode(Hn.Y),t.setSlice(n)},t.setZSlice=n=>{t.setSlicingMode(Hn.Z),t.setSlice(n)},t.setISlice=n=>{t.setSlicingMode(Hn.I),t.setSlice(n)},t.setJSlice=n=>{t.setSlicingMode(Hn.J),t.setSlice(n)},t.setKSlice=n=>{t.setSlicingMode(Hn.K),t.setSlice(n)},t.getSlicingModeNormal=()=>{const n=[0,0,0],i=t.getCurrentImage().getDirection();switch(e.slicingMode){case Hn.X:n[0]=1;break;case Hn.Y:n[1]=1;break;case Hn.Z:n[2]=1;break;case Hn.I:v2(i,[1,0,0],n);break;case Hn.J:v2(i,[0,1,0],n);break;case Hn.K:v2(i,[0,0,1],n);break}return n};function r(){let n;switch(e.slicingMode){case Hn.X:n=0;break;case Hn.Y:n=1;break;case Hn.Z:n=2;break;default:e.closestIJKAxis={ijkMode:e.slicingMode,flip:!1};return}const i=t.getCurrentImage().getDirection(),o=pR(i);let a=0;for(;a<3&&o[n+3*a]===0;++a);const s=o[n+3*a]<0;e.closestIJKAxis={ijkMode:a,flip:s}}t.setSlicingMode=n=>{e.slicingMode!==n&&(e.slicingMode=n,t.getCurrentImage()&&r(),t.modified())},t.getClosestIJKAxis=()=>((e.closestIJKAxis===void 0||e.closestIJKAxis.ijkMode===Hn.NONE)&&t.getCurrentImage()&&r(),e.closestIJKAxis),t.getBounds=()=>{const n=t.getCurrentImage();if(!n)return rf();if(!e.useCustomExtents)return n.getBounds();const i=e.customDisplayExtent.slice(),{ijkMode:o}=t.getClosestIJKAxis();let a=e.slice;switch(o!==e.slicingMode&&(a=t.getSliceAtPosition(e.slice)),o){case Hn.I:i[0]=a,i[1]=a;break;case Hn.J:i[2]=a,i[3]=a;break;case Hn.K:i[4]=a,i[5]=a;break}return n.extentToBounds(i)},t.getBoundsForSlice=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.slice,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const o=t.getCurrentImage();if(!o)return rf();const a=o.getSpatialExtent(),{ijkMode:s}=t.getClosestIJKAxis();let c=n;switch(s!==e.slicingMode&&(c=t.getSliceAtPosition(n)),s){case Hn.I:a[0]=c-i,a[1]=c+i;break;case Hn.J:a[2]=c-i,a[3]=c+i;break;case Hn.K:a[4]=c-i,a[5]=c+i;break}return o.extentToBounds(a)},t.intersectWithLineForPointPicking=(n,i)=>ice(n,i,t),t.intersectWithLineForCellPicking=(n,i)=>oce(n,i,t),t.getCurrentImage=()=>t.getInputData()}const lce={slicingMode:Hn.NONE,closestIJKAxis:{ijkMode:Hn.NONE,flip:!1},renderToRectangle:!1,sliceAtFocalPoint:!1,preferSizeOverAccuracy:!1};function _k(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,lce,r),rce.extend(t,e,r),J.get(t,e,["slicingMode"]),J.setGet(t,e,["closestIJKAxis","renderToRectangle","sliceAtFocalPoint","preferSizeOverAccuracy"]),cw.implementCoincidentTopologyMethods(t,e),cce(t,e)}const uce=J.newInstance(_k,"vtkImageMapper");var fce={newInstance:uce,extend:_k,...ace,...sce,...uw};const{InterpolationType:P2}=Tee,{vtkErrorMacro:JD}=J,R2=4;function dce(t,e){e.classHierarchy.push("vtkImageProperty"),t.getMTime=()=>{let r=e.mtime,n;for(let i=0;in?r:n),e.componentData[i].piecewiseFunction&&(n=e.componentData[i].piecewiseFunction.getMTime(),r=r>n?r:n);return r},t.setRGBTransferFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),e.componentData[i].rGBTransferFunction!==o?(e.componentData[i].rGBTransferFunction=o,t.modified(),!0):!1},t.getRGBTransferFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[r].rGBTransferFunction},t.setPiecewiseFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),e.componentData[i].piecewiseFunction!==o?(e.componentData[i].piecewiseFunction=o,t.modified(),!0):!1},t.getPiecewiseFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[r].piecewiseFunction},t.setScalarOpacity=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),t.setPiecewiseFunction(i,o)},t.getScalarOpacity=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return t.getPiecewiseFunction(r)},t.setComponentWeight=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;if(r<0||r>=R2)return JD("Invalid index"),!1;const i=Math.min(1,Math.max(0,n));return e.componentData[r].componentWeight!==i?(e.componentData[r].componentWeight=i,t.modified(),!0):!1},t.getComponentWeight=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return r<0||r>=R2?(JD("Invalid index"),0):e.componentData[r].componentWeight},t.setInterpolationTypeToNearest=()=>t.setInterpolationType(P2.NEAREST),t.setInterpolationTypeToLinear=()=>t.setInterpolationType(P2.LINEAR),t.getInterpolationTypeAsString=()=>J.enumToString(P2,e.interpolationType)}const hce={independentComponents:!1,interpolationType:P2.LINEAR,colorWindow:255,colorLevel:127.5,ambient:1,diffuse:0,opacity:1,useLookupTableScalarRange:!1,useLabelOutline:!1,labelOutlineThickness:[1],labelOutlineOpacity:1};function gce(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,hce,r),J.obj(t,e),!e.componentData){e.componentData=[];for(let n=0;nt,t.getImages=()=>t,t.getIsOpaque=()=>{if(e.forceOpaque)return!0;if(e.forceTranslucent)return!1;e.property||t.getProperty();let r=e.property.getOpacity()>=1;return r=r&&(!e.mapper||e.mapper.getIsOpaque()),r},t.hasTranslucentPolygonalGeometry=()=>!1,t.makeProperty=mce.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const r=e.mapper.getBounds();if(!r||r.length!==6)return r;if(r[0]>r[1])return e.mapperBounds=r.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),r;const n=i=>i[0].map((o,a)=>i.map(s=>s[a]));if(!e.mapperBounds||!n([r,e.mapperBounds]).reduce((i,o)=>i&&o[0]===o[1],!0)||t.getMTime()>e.boundsMTime.getMTime()){vce("Recomputing bounds..."),e.mapperBounds=r.map(o=>o),t.computeMatrix();const i=new Float64Array(16);En(i,e.matrix),ir.transformBounds(r,i,e.bounds),e.boundsMTime.modified()}return e.bounds},t.getBoundsForSlice=(r,n)=>{const i=e.mapper.getBoundsForSlice(r,n);if(!ir.isValid(i))return i;t.computeMatrix();const o=new Float64Array(16);return En(o,e.matrix),ir.transformBounds(i,o)},t.getMinXBound=()=>t.getBounds()[0],t.getMaxXBound=()=>t.getBounds()[1],t.getMinYBound=()=>t.getBounds()[2],t.getMaxYBound=()=>t.getBounds()[3],t.getMinZBound=()=>t.getBounds()[4],t.getMaxZBound=()=>t.getBounds()[5],t.getMTime=()=>{let r=e.mtime;if(e.property!==null){const n=e.property.getMTime();r=n>r?n:r}return r},t.getRedrawMTime=()=>{let r=e.mtime;if(e.mapper!==null){let n=e.mapper.getMTime();r=n>r?n:r,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),n=e.mapper.getInput().getMTime(),r=n>r?n:r)}if(e.property!==null){let n=e.property.getMTime();r=n>r?n:r,e.property.getRGBTransferFunction()!==null&&(n=e.property.getRGBTransferFunction().getMTime(),r=n>r?n:r)}return r},t.getSupportsSelection=()=>e.mapper?e.mapper.getSupportsSelection():!1}const wce={mapper:null,property:null,forceOpaque:!1,forceTranslucent:!1,bounds:[...ir.INIT_BOUNDS]};function Ek(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,wce,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["mapper","forceOpaque","forceTranslucent"]),J.getArray(t,e,["bounds"],6),yce(t,e)}const xce=J.newInstance(Ek,"vtkImageSlice");var Cce={newInstance:xce,extend:Ek};function Sce(t){return Object.values(wo).includes(t)?t:wo.LINEAR}function bk(t){const r={...wt(Qo.IMAGE_PLANE,t)};return r.columnPixelSpacing||(r.columnPixelSpacing=1),r.rowPixelSpacing||(r.rowPixelSpacing=1),r.columnCosines||(r.columnCosines=[0,1,0]),r.rowCosines||(r.rowCosines=[1,0,0]),r.imagePositionPatient||(r.imagePositionPatient=[0,0,0]),r.imageOrientationPatient||(r.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),r}function Dk(t){const e=t.imageId,{pixelRepresentation:r,bitsAllocated:n,bitsStored:i,highBit:o,photometricInterpretation:a,samplesPerPixel:s}=wt("imagePixelModule",e),{windowWidth:c,windowCenter:l,voiLUTFunction:f}=t,{modality:u}=wt("generalSeriesModule",e),d=wt("scalingModule",e),h=wt(Qo.CALIBRATION,e),g=Sce(f),p=bk(e);return{calibration:h,scalingFactor:d,voiLUTFunction:g,modality:u,imagePlaneModule:p,imagePixelModule:{bitsAllocated:n,bitsStored:i,samplesPerPixel:s,highBit:o,photometricInterpretation:a,pixelRepresentation:r,windowWidth:c,windowCenter:l,modality:u,voiLUTFunction:g}}}function vw(t){const{imagePlaneModule:e,imagePixelModule:r,voiLUTFunction:n,modality:i,scalingFactor:o,calibration:a}=Dk(t);let{rowCosines:s,columnCosines:c}=e;(s==null||c==null)&&(s=[1,0,0],c=[0,1,0]);const l=Ft(s[0],s[1],s[2]),f=Ft(c[0],c[1],c[2]),u=Ke();kn(u,l,f);let d=e.imagePositionPatient;d==null&&(d=[0,0,0]);const h=e.columnPixelSpacing||t.columnPixelSpacing,g=e.rowPixelSpacing||t.rowPixelSpacing,p=t.columns,v=t.rows,y=qa,m=1;return!r.photometricInterpretation&&t.sizeInBytes===3*t.width*t.height&&(t.numberOfComponents=3),{numberOfComponents:t.numberOfComponents||Tce(r.photometricInterpretation),origin:d,direction:[...l,...f,...u],dimensions:[p,v,m],spacing:[h,g,y],numVoxels:p*v*m,imagePlaneModule:e,imagePixelModule:r,bitsAllocated:r.bitsAllocated,voiLUTFunction:n,modality:i,scalingFactor:o,calibration:a,scanAxisNormal:u}}function Tce(t){let e=1;return(t==="RGB"||t!=null&&t.includes("YBR")||t==="PALETTE COLOR")&&(e=3),e}function Ik(t){const e=Ql.newInstance();let r=0,n=1024;return t.lower!==void 0&&t.upper!==void 0&&(r=t.lower,n=t.upper),e.addRGBPoint(r,0,0,0),e.addRGBPoint(n,1,1,1),e}function yw(t,e){const r=e.voxelManager.getScalarData();if(!t.getPointData)return;const n=t.getPointData().getScalars().getData();if(e.color&&e.rgba){const i=new Uint8Array(e.columns*e.rows*3);for(let o=0;oi,n.set(i)}else n.set(r);t.modified()}function bn(){return window.performance?performance.now():Date.now()}function _ce(t,e){return function(r){const n=((r-(e-.5))/(t-1)+.5)*255;return Math.min(Math.max(n,0),255)}}function Ece(t){const r=Math.max(...t.lut).toString(2).length-8,n=t.lut[0]>>r,i=t.lut[t.lut.length-1]>>r,o=t.firstValueMapped+t.lut.length-1;return function(a){return a=o?i:t.lut[a-t.firstValueMapped]>>r}}function Ok(t,e,r){return r?Ece(r):_ce(t,e)}function bce(t,e,r,n,i){const o=t.maxPixelValue,a=t.minPixelValue,s=Math.min(a,0);if(t.cachedLut===void 0){const f=o-s+1;t.cachedLut={},t.cachedLut.lutArray=new Uint8ClampedArray(f)}const c=t.cachedLut.lutArray,l=Ok(Array.isArray(e)?e[0]:e,Array.isArray(r)?r[0]:r,i);if(n)for(let f=a;f<=o;f++)c[f+-s]=255-l(f);else for(let f=a;f<=o;f++)c[f+-s]=l(f);return c}function Dce(t,e,r){let n=bn();const i=t.voxelManager.getScalarData();t.stats.lastGetPixelDataTime=bn()-n;const o=t.minPixelValue;let a=0,s=0;const c=i.length;if(n=bn(),o<0)for(;s0||t.voi.windowWidth!==void 0&&t.voi.windowCenter!==void 0}function ZD(t,e){return!t&&!e?!0:!t||!e?!1:t.id===e.id}function Fce(t,e){return r=>r*t+e}function Uce(t){const e=t.lut[0],r=t.lut[t.lut.length-1],n=t.firstValueMapped+t.lut.length;return i=>i=n?r:t.lut[i]}function Bce(t,e,r){return r?Uce(r):Fce(t,e)}function Gce(t,e,r,n,i,o){const a=t.maxPixelValue,s=t.minPixelValue,c=Math.min(s,0);if(t.cachedLut===void 0){const d=a-c+1;t.cachedLut={},t.cachedLut.lutArray=new Uint8ClampedArray(d)}const l=t.cachedLut.lutArray,f=Bce(t.slope,t.intercept,i),u=Ok(e,r,o);if(t.isPreScaled)if(n)for(let d=s;d<=a;d++)l[d+-c]=255-u(d);else for(let d=s;d<=a;d++)l[d+-c]=u(d);else if(n)for(let d=s;d<=a;d++)l[d+-c]=255-u(f(d));else for(let d=s;d<=a;d++)l[d+-c]=u(f(d));return l}function Lk(t,e,r){return t.cachedLut!==void 0&&t.cachedLut.windowCenter===e.voi.windowCenter&&t.cachedLut.windowWidth===e.voi.windowWidth&&ZD(t.cachedLut.modalityLUT,e.modalityLUT)&&ZD(t.cachedLut.voiLUT,e.voiLUT)&&t.cachedLut.invert===e.invert&&!r||(kce(e,t),Gce(t,e.voi.windowWidth,e.voi.windowCenter,e.invert,e.modalityLUT,e.voiLUT),t.cachedLut.windowWidth=e.voi.windowWidth,t.cachedLut.windowCenter=e.voi.windowCenter,t.cachedLut.invert=e.invert,t.cachedLut.voiLUT=e.voiLUT,t.cachedLut.modalityLUT=e.modalityLUT),t.cachedLut.lutArray}function Wce(t,e,r,n=!0){const i=t.renderingTools.lastRenderedIsColor;(!t.renderingTools.renderCanvas||i)&&(t.renderingTools.renderCanvas=fm(null,e.width,e.height),Gy(t,e));const o=t.renderingTools.renderCanvas;if(!Q4(t,e)&&!r)return o;(o.width!==e.width||o.height!==e.height)&&Gy(t,e),e.stats=e.stats||{};const a=t.renderingTools.renderCanvasData,s=t.renderingTools.renderCanvasContext;let c=bn();e.stats.lastLutGenerateTime=bn()-c;const{viewport:l}=t;if(l.modality==="PT"&&e.isPreScaled){const{windowWidth:f,windowCenter:u}=l.voi,d=u-f/2,p=255/(u+f/2-d);let v;l.invert?v=y=>255-(y-d)*p:v=y=>(y-d)*p,Ace(e,v,a.data)}else{const f=Lk(e,l,r);n?Lce(e,f,a.data):Nce(e,f,a.data)}return c=bn(),s.putImageData(a,0,0),e.stats.lastPutImageDataTime=bn()-c,o}function zce(t,e){if(t===void 0)throw new Error("drawImage: enabledElement parameter must not be undefined");const r=t.image;if(r===void 0)throw new Error("drawImage: image must be loaded before it can be drawn");const n=t.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,t.canvas.width,t.canvas.height),n.imageSmoothingEnabled=!t.viewport.pixelReplication,Z4(t,n);const i=Wce(t,r,e),o=t.viewport.displayedArea.tlhc.x-1,a=t.viewport.displayedArea.tlhc.y-1,s=t.viewport.displayedArea.brhc.x-o,c=t.viewport.displayedArea.brhc.y-a;n.drawImage(i,o,a,s,c,0,0,s,c),t.renderingTools=eE(t)}const bS=0,DS=1,$ce=2;function jce(t,e,r){if(t>1)throw new Error("HSVToRGB expects hue < 1");const n=[];if(e===0)return n[0]=r,n[1]=r,n[2]=r,n;const i=Math.floor(t*6),o=6*t-i,a=r*(1-e),s=r*(1-e*o),c=r*(1-e*(1-o));switch(i){case 0:case 6:n[0]=r,n[1]=c,n[2]=a;break;case 1:n[0]=s,n[1]=r,n[2]=a;break;case 2:n[0]=a,n[1]=r,n[2]=c;break;case 3:n[0]=a,n[1]=s,n[2]=r;break;case 4:n[0]=c,n[1]=a,n[2]=r;break;case 5:n[0]=r,n[1]=a,n[2]=s;break}return n}function Hce(t,e){let r;return te.Range[1]?r=e.MaxIndex+DS+1.5:r=(t+e.Shift)*e.Scale,Math.floor(r)}class tE{constructor(){this.NumberOfColors=256,this.Ramp="linear",this.TableRange=[0,255],this.HueRange=[0,.66667],this.SaturationRange=[1,1],this.ValueRange=[1,1],this.AlphaRange=[1,1],this.NaNColor=[128,0,0,255],this.BelowRangeColor=[0,0,0,255],this.UseBelowRangeColor=!0,this.AboveRangeColor=[255,255,255,255],this.UseAboveRangeColor=!0,this.InputRange=[0,255],this.Table=[]}setNumberOfTableValues(e){this.NumberOfColors=e}setRamp(e){this.Ramp=e}setTableRange(e,r){this.TableRange[0]=e,this.TableRange[1]=r}setHueRange(e,r){this.HueRange[0]=e,this.HueRange[1]=r}setSaturationRange(e,r){this.SaturationRange[0]=e,this.SaturationRange[1]=r}setValueRange(e,r){this.ValueRange[0]=e,this.ValueRange[1]=r}setRange(e,r){this.InputRange[0]=e,this.InputRange[1]=r}setAlphaRange(e,r){this.AlphaRange[0]=e,this.AlphaRange[1]=r}getColor(e){return this.mapValue(e)}build(e){if(this.Table.length>1&&!e)return;this.Table=[];const r=this.NumberOfColors-1;let n,i,o,a;r?(n=(this.HueRange[1]-this.HueRange[0])/r,i=(this.SaturationRange[1]-this.SaturationRange[0])/r,o=(this.ValueRange[1]-this.ValueRange[0])/r,a=(this.AlphaRange[1]-this.AlphaRange[0])/r):n=i=o=a=0;for(let s=0;s<=r;s++){const c=this.HueRange[0]+s*n,l=this.SaturationRange[0]+s*i,f=this.ValueRange[0]+s*o,u=this.AlphaRange[0]+s*a,d=jce(c,l,f),h=[0,0,0,0];switch(this.Ramp){case"scurve":h[0]=Math.floor(127.5*(1+Math.cos((1-d[0])*Math.PI))),h[1]=Math.floor(127.5*(1+Math.cos((1-d[1])*Math.PI))),h[2]=Math.floor(127.5*(1+Math.cos((1-d[2])*Math.PI))),h[3]=Math.floor(u*255);break;case"linear":h[0]=Math.floor(d[0]*255+.5),h[1]=Math.floor(d[1]*255+.5),h[2]=Math.floor(d[2]*255+.5),h[3]=Math.floor(u*255+.5);break;case"sqrt":h[0]=Math.floor(Math.sqrt(d[0])*255+.5),h[1]=Math.floor(Math.sqrt(d[1])*255+.5),h[2]=Math.floor(Math.sqrt(d[2])*255+.5),h[3]=Math.floor(Math.sqrt(u)*255+.5);break;default:throw new Error(`Invalid Ramp value (${this.Ramp})`)}this.Table.push(h)}this.buildSpecialColors()}buildSpecialColors(){const e=this.NumberOfColors,r=e+bS,n=e+DS,i=e+$ce;this.UseBelowRangeColor||e===0?this.Table[r]=this.BelowRangeColor:this.Table[r]=this.Table[0],this.UseAboveRangeColor||e===0?this.Table[n]=this.AboveRangeColor:this.Table[n]=this.Table[e-1],this.Table[i]=this.NaNColor}mapValue(e){const r=this.getIndex(e);if(r<0)return this.NaNColor;if(r===0){if(this.UseBelowRangeColor&&ethis.TableRange[1])return this.AboveRangeColor;return this.Table[r]}getIndex(e){const r={Range:[],MaxIndex:this.NumberOfColors-1,Shift:-this.TableRange[0],Scale:1};if(this.TableRange[1]<=this.TableRange[0]?r.Scale=Number.MAX_VALUE:r.Scale=r.MaxIndex/(this.TableRange[1]-this.TableRange[0]),r.Range[0]=this.TableRange[0],r.Range[1]=this.TableRange[1],isNaN(e))return-1;let n=Hce(e,r);return n===this.NumberOfColors+bS?n=0:n===this.NumberOfColors+DS&&(n=this.NumberOfColors-1),n}setTableValue(e,r,n,i,o){let a;if(typeof r=="number"&&n!==void 0&&i!==void 0&&o!==void 0)a=[r,n,i,o];else if(Array.isArray(r))a=r;else throw new Error("Invalid arguments for setTableValue");if(e<0)throw new Error(`Can't set the table value for negative index (${e})`);if(e>=this.NumberOfColors)throw new Error(`Index ${e} is greater than the number of colors ${this.NumberOfColors}`);this.Table[e]=a,(e===0||e===this.NumberOfColors-1)&&this.buildSpecialColors()}}const QD=[0,0,0,0];function Kce(t,e,r){r=r===null?100:r;const n=(e-t)/(r-1),i=[];for(;r-- >0;)i.push(t),t+=n;return i[i.length-1]=e,i}function qce(t,e){let r=0,n=t.length-1;for(;r<=n;){const i=r+Math.floor((n-r)/2),o=t[i];if(o===e)return i;e=0&&iIS(Math.floor(255-(m-h)*v),0,255):y=m=>IS(Math.floor((m-h)*v),0,255),Qce(e,y,f,s.data)}else{const u=Lk(e,t.viewport,r);e.stats=e.stats||{},e.stats.lastLutGenerateTime=bn()-a,Zce(e,u,f,s.data)}return a=bn(),c.putImageData(s,0,0),e.stats.lastPutImageDataTime=bn()-a,n}function tle(t,e){if(t===void 0)throw new Error("drawImage: enabledElement parameter must not be undefined");const r=t.image;if(r===void 0)throw new Error("drawImage: image must be loaded before it can be drawn");const n=t.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,t.canvas.width,t.canvas.height),n.imageSmoothingEnabled=!t.viewport.pixelReplication,Z4(t,n);const i=ele(t,r,e),o=t.viewport.displayedArea.tlhc.x-1,a=t.viewport.displayedArea.tlhc.y-1,s=t.viewport.displayedArea.brhc.x-o,c=t.viewport.displayedArea.brhc.y-a;n.drawImage(i,o,a,s,c,0,0,s,c),t.renderingTools=eE(t)}function Ak(t,e){const r=t.image;if(!t.canvas||!t.image)return;const n=bn();if(r.stats={lastGetPixelDataTime:-1,lastStoredPixelDataToCanvasImageDataTime:-1,lastPutImageDataTime:-1,lastRenderTime:-1,lastLutGenerateTime:-1},r){let o=r.render;o||(t.viewport.colormap?o=tle:r.color?o=Rce:o=zce),o(t,e)}const i=bn()-n;r.stats.lastRenderTime=i,t.invalid=!1,t.needsRedraw=!1}function Nk(t){return v1(t)}function wv(t,e){const r=Nk(t);return r.invert(),r.transformPoint(e)}const nle={viewport:{}};function rle(){return{tlhc:{x:1,y:1},brhc:{x:1,y:1},rowPixelSpacing:1,columnPixelSpacing:1,presentationSizeMode:"NONE"}}function ile(){const t=rle(),e={scale:1,translation:{x:0,y:0},voi:{windowWidth:void 0,windowCenter:void 0,voiLUTFunction:wo.LINEAR},invert:!1,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:void 0,voiLUT:void 0,colormap:void 0,labelmap:!1,displayedArea:t};return Object.assign({},e,nle.viewport)}function xp(t,e){if(t==null)throw new Error(e)}function ole(t){return!(t==null||t===0||t===180)}function kk(t,e=null){return xp(t,"getImageSize: parameter image must not be undefined"),xp(t.width,"getImageSize: parameter image must have width"),xp(t.height,"getImageSize: parameter image must have height"),ole(e)?{height:t.width,width:t.height}:{width:t.width,height:t.height}}function nE(t,e,r=null){xp(t,"getImageScale: parameter canvas must not be undefined"),xp(e,"getImageScale: parameter image must not be undefined");const n=kk(e,r),i=e.rowPixelSpacing||1,o=e.columnPixelSpacing||1;let a=1,s=1;i{this._configureRenderingPipeline()},this.resize=()=>{this.useCPURendering&&this._resizeCPU()},this._resizeCPU=()=>{this._cpuFallbackEnabledElement.viewport&&ule(this._cpuFallbackEnabledElement)},this.getFrameOfReferenceUID=r=>{var n;return(n=this.getImagePlaneReferenceData(r))==null?void 0:n.FrameOfReferenceUID},this.getCornerstoneImage=()=>this.csImage,this.createActorMapper=r=>{const n=fce.newInstance();n.setInputData(r);const i=Cce.newInstance();i.setMapper(n);const{preferSizeOverAccuracy:o}=dw().rendering;return o&&n.setPreferSizeOverAccuracy(!0),r.getPointData().getScalars().getNumberOfComponents()>1&&i.getProperty().setIndependentComponents(!1),i},this.getNumberOfSlices=()=>this.imageIds.length,this.getDefaultProperties=r=>{let n;return r!==void 0&&(n=this.perImageIdDefaultProperties.get(r)),n!==void 0?n:{...this.globalDefaultProperties}},this.getProperties=()=>{const{colormap:r,voiRange:n,VOILUTFunction:i,interpolationType:o,invert:a,voiUpdatedWithSetProperties:s}=this;return{colormap:r,voiRange:n,VOILUTFunction:i,interpolationType:o,invert:a,isComputedVOI:!s}},this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,suppressEvents:!0}),this.getRotationCPU=()=>{const{viewport:r}=this._cpuFallbackEnabledElement;return r.rotation},this.getRotationGPU=()=>{const{viewUp:r,viewPlaneNormal:n,flipVertical:i,flipHorizontal:o}=this.getCameraNoRotation(),a=t9(this.initialViewUp,o,i,n),c=o4(a,r)*180/Math.PI,l=kn(Ke(),a,r);return kt(l,n)>=0?c:(360-c)%360},this.setRotation=r=>{const n=this.getCamera();if(this.useCPURendering?this.setRotationCPU(r):this.setRotationGPU(r),this._suppressCameraModifiedEvents)return;const i=this.getCamera(),o={previousCamera:n,camera:i,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,o)},this.renderImageObject=r=>{this._setCSImage(r),(this.useCPURendering?this._updateToDisplayImageCPU:this._updateActorToDisplayImageId).call(this,r)},this._setCSImage=r=>{var n;r.isPreScaled=(n=r.preScale)==null?void 0:n.scaled,this.csImage=r},this.canvasToWorldCPU=(r,n=[0,0,0])=>{if(!this._cpuFallbackEnabledElement.image)return;const[i,o]=wv(this._cpuFallbackEnabledElement,r),{origin:a,spacing:s,direction:c}=this.getImageData(),l=c.slice(0,3),f=c.slice(3,6);return On(n,a,l,i*s[0]),On(n,n,f,o*s[1]),n},this.worldToCanvasCPU=r=>{const{spacing:n,direction:i,origin:o}=this.getImageData(),a=i.slice(0,3),s=i.slice(3,6),c=qn(Ke(),r,o),l=[kt(c,a)/n[0],kt(c,s)/n[1]];return e9(this._cpuFallbackEnabledElement,l)},this.canvasToWorldGPU=r=>{const n=this.getRenderer(),i=this.getVtkActiveCamera(),o=i.getClippingRange(),a=i.getDistance();i.setClippingRange(a,a+.1);const c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=window.devicePixelRatio||1,u=[r[0]*f,r[1]*f],d=[u[0]+this.sx,u[1]+this.sy];d[1]=l[1]-d[1];const h=c.displayToWorld(d[0],d[1],0,n);return i.setClippingRange(o[0],o[1]),[h[0],h[1],h[2]]},this.worldToCanvasGPU=r=>{const n=this.getRenderer(),i=this.getVtkActiveCamera(),o=i.getClippingRange(),a=i.getDistance();i.setClippingRange(a,a+.1);const c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=c.worldToDisplay(...r,n);f[1]=l[1]-f[1];const u=[f[0]-this.sx,f[1]-this.sy];i.setClippingRange(o[0],o[1]);const d=window.devicePixelRatio||1;return[u[0]/d,u[1]/d]},this.getCurrentImageIdIndex=()=>this.currentImageIdIndex,this.getSliceIndex=()=>this.currentImageIdIndex,this.getTargetImageIdIndex=()=>this.targetImageIdIndex,this.getImageIds=()=>this.imageIds,this.getCurrentImageId=(r=this.getCurrentImageIdIndex())=>this.imageIds[r],this.hasImageId=r=>this.imageKeyToIndexMap.has(r),this.hasImageURI=r=>this.imageKeyToIndexMap.has(r),this.customRenderViewportToCanvas=()=>{if(!this.useCPURendering)throw new Error("Custom cpu rendering pipeline should only be hit in CPU rendering mode");return this._cpuFallbackEnabledElement.image?(Ak(this._cpuFallbackEnabledElement,this.cpuRenderingInvalidated),this.cpuRenderingInvalidated=!1):this.fillWithBackgroundColor(),{canvas:this.canvas,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,viewportStatus:this.viewportStatus}},this.renderingPipelineFunctions={getImageData:{cpu:this.getImageDataCPU,gpu:this.getImageDataGPU},setColormap:{cpu:this.setColormapCPU,gpu:this.setColormapGPU},getCamera:{cpu:this.getCameraCPU,gpu:super.getCamera},setCamera:{cpu:this.setCameraCPU,gpu:super.setCamera},getPan:{cpu:this.getPanCPU,gpu:super.getPan},setPan:{cpu:this.setPanCPU,gpu:super.setPan},getZoom:{cpu:this.getZoomCPU,gpu:super.getZoom},setZoom:{cpu:this.setZoomCPU,gpu:super.setZoom},setVOI:{cpu:this.setVOICPU,gpu:this.setVOIGPU},getRotation:{cpu:this.getRotationCPU,gpu:this.getRotationGPU},setInterpolationType:{cpu:this.setInterpolationTypeCPU,gpu:this.setInterpolationTypeGPU},setInvertColor:{cpu:this.setInvertColorCPU,gpu:this.setInvertColorGPU},resetCamera:{cpu:(r={})=>{const{resetPan:n=!0,resetZoom:i=!0}=r;return this.resetCameraCPU({resetPan:n,resetZoom:i}),!0},gpu:(r={})=>{const{resetPan:n=!0,resetZoom:i=!0}=r;return this.resetCameraGPU({resetPan:n,resetZoom:i}),!0}},canvasToWorld:{cpu:this.canvasToWorldCPU,gpu:this.canvasToWorldGPU},worldToCanvas:{cpu:this.worldToCanvasCPU,gpu:this.worldToCanvasGPU},getRenderer:{cpu:()=>this.getCPUFallbackError("getRenderer"),gpu:super.getRenderer},getDefaultActor:{cpu:()=>this.getCPUFallbackError("getDefaultActor"),gpu:super.getDefaultActor},getActors:{cpu:()=>this.getCPUFallbackError("getActors"),gpu:super.getActors},getActor:{cpu:()=>this.getCPUFallbackError("getActor"),gpu:super.getActor},setActors:{cpu:()=>this.getCPUFallbackError("setActors"),gpu:super.setActors},addActors:{cpu:()=>this.getCPUFallbackError("addActors"),gpu:super.addActors},addActor:{cpu:()=>this.getCPUFallbackError("addActor"),gpu:super.addActor},removeAllActors:{cpu:()=>this.getCPUFallbackError("removeAllActors"),gpu:super.removeAllActors},unsetColormap:{cpu:this.unsetColormapCPU,gpu:this.unsetColormapGPU}},this.scaling={},this.modality=null,this.useCPURendering=q0(),this._configureRenderingPipeline(),this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport(),this.currentImageIdIndex=0,this.targetImageIdIndex=0,this.resetCamera(),this.initializeElementDisabledHandler()}setUseCPURendering(e){this.useCPURendering=e,this._configureRenderingPipeline(e)}static get useCustomRenderingPipeline(){return q0()}_configureRenderingPipeline(e){this.useCPURendering=e??q0();for(const r in this.renderingPipelineFunctions)if(Object.prototype.hasOwnProperty.call(this.renderingPipelineFunctions,r)){const n=this.renderingPipelineFunctions[r];this[r]=this.useCPURendering?n.cpu:n.gpu}this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport()}_resetCPUFallbackElement(){this._cpuFallbackEnabledElement={canvas:this.canvas,renderingTools:{},transform:new Hh,viewport:{rotation:0}}}_resetGPUViewport(){const e=this.getRenderer(),r=I4.newInstance();e.setActiveCamera(r),this.initialViewUp=[0,-1,0],r.setDirectionOfProjection(-0,-0,1),r.setViewUp(...this.initialViewUp),r.setParallelProjection(!0),r.setThicknessFromFocalPoint(.1),r.setFreezeFocalPoint(!0)}initializeElementDisabledHandler(){et.addEventListener(rt.ELEMENT_DISABLED,function e(){clearTimeout(this.debouncedTimeout),et.removeEventListener(rt.ELEMENT_DISABLED,e)})}getImageDataGPU(){const e=this.getDefaultActor();if(!e||!tc(e))return;const{actor:r}=e,n=r.getMapper().getInputData(),i=this.csImage;return{dimensions:n.getDimensions(),spacing:n.getSpacing(),origin:n.getOrigin(),direction:n.getDirection(),get scalarData(){return i==null?void 0:i.voxelManager.getScalarData()},imageData:r.getMapper().getInputData(),metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,hasPixelSpacing:this.hasPixelSpacing,calibration:{...i==null?void 0:i.calibration,...this.calibration},preScale:{...i==null?void 0:i.preScale},voxelManager:i==null?void 0:i.voxelManager}}getImageDataCPU(){const{metadata:e}=this._cpuFallbackEnabledElement;if(!e)return;const r=e.spacing,n=this.csImage;return{dimensions:e.dimensions,spacing:r,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getScalarData:()=>this.cpuImagePixelData,getSpacing:()=>r,worldToIndex:i=>{const o=this.worldToCanvasCPU(i),a=wv(this._cpuFallbackEnabledElement,o);return[a[0],a[1],0]},indexToWorld:(i,o)=>{const a=e9(this._cpuFallbackEnabledElement,[i[0],i[1]]);return this.canvasToWorldCPU(a,o)}},scalarData:this.cpuImagePixelData,hasPixelSpacing:this.hasPixelSpacing,calibration:{...n==null?void 0:n.calibration,...this.calibration},preScale:{...n==null?void 0:n.preScale},voxelManager:n==null?void 0:n.voxelManager}}calibrateIfNecessary(e,r){const n=wt("calibratedPixelSpacing",e),i=this.calibration!==n,{scale:o}=n||{};return this.hasPixelSpacing=o>0||r.rowPixelSpacing>0,r.calibration=n,i&&(this.calibration=n,this._publishCalibratedEvent=!0,this._calibrationEvent={scale:o,calibration:n}),r}setDefaultProperties(e,r){r==null?this.globalDefaultProperties=e:(this.perImageIdDefaultProperties.set(r,e),this.getCurrentImageId()===r&&this.setProperties(e))}clearDefaultProperties(e){e==null?(this.globalDefaultProperties={},this.resetProperties()):(this.perImageIdDefaultProperties.delete(e),this.resetToDefaultProperties())}setProperties({colormap:e,voiRange:r,VOILUTFunction:n,invert:i,interpolationType:o}={},a=!1){this.viewportStatus=this.csImage?Lo.PRE_RENDER:Lo.LOADING,this.globalDefaultProperties={colormap:this.globalDefaultProperties.colormap??e,voiRange:this.globalDefaultProperties.voiRange??r,VOILUTFunction:this.globalDefaultProperties.VOILUTFunction??n,invert:this.globalDefaultProperties.invert??i,interpolationType:this.globalDefaultProperties.interpolationType??o},typeof e<"u"&&this.setColormap(e),typeof r<"u"&&this.setVOI(r,{suppressEvents:a,voiUpdatedWithSetProperties:!0}),typeof n<"u"&&this.setVOILUTFunction(n,a),typeof i<"u"&&this.setInvertColor(i),typeof o<"u"&&this.setInterpolationType(o)}resetProperties(){this.cpuRenderingInvalidated=!0,this.voiUpdatedWithSetProperties=!1,this.viewportStatus=Lo.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={}),this._resetProperties(),this.render()}_resetProperties(){let e;if(this._isCurrentImagePTPrescaled()?e=this._getDefaultPTPrescaledVOIRange():e=this._getVOIRangeForCurrentImage(),this.setVOI(e),this.setInvertColor(this.initialInvert),this.setInterpolationType(Vl.LINEAR),!this.useCPURendering){const r=this.getTransferFunction();mw(r,this.initialTransferFunctionNodes);const i=Ny(r).reduce((s,c)=>(s.push(c[0],c[1],c[2],c[3]),s),[]),o=this.getDefaultActor(),a=V4(i,o.actor);this.setColormap(a)}}resetToDefaultProperties(){var i;this.cpuRenderingInvalidated=!0,this.viewportStatus=Lo.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={});const e=this.getCurrentImageId(),r=this.perImageIdDefaultProperties.get(e)||this.globalDefaultProperties;(i=r.colormap)!=null&&i.name&&this.setColormap(r.colormap);let n;r.voiRange==null?n=this._getVOIRangeForCurrentImage():n=r.voiRange,this.setVOI(n),this.setInterpolationType(Vl.LINEAR),this.setInvertColor(!1),this.render()}_getVOIFromCache(){let e;return this.voiUpdatedWithSetProperties?e=this.voiRange:this._isCurrentImagePTPrescaled()?e=this._getDefaultPTPrescaledVOIRange():e=this._getVOIRangeForCurrentImage()??this.voiRange,e}_setPropertiesFromCache(){const e=this._getVOIFromCache(),{interpolationType:r,invert:n}=this;this.setVOI(e),this.setInterpolationType(r),this.setInvertColor(n)}getCameraCPU(){const{metadata:e,viewport:r}=this._cpuFallbackEnabledElement;if(!e)return{};const{direction:n}=e,i=n.slice(6,9).map(u=>-u);let o=n.slice(3,6).map(u=>-u);if(r.rotation){const u=n4(ba(),r.rotation*Math.PI/180,i);o=Yt(Ke(),o,u)}const a=[this.element.clientWidth/2,this.element.clientHeight/2],s=this.canvasToWorld(a),c=this.canvasToWorld([0,0]),l=this.canvasToWorld([0,this.element.clientHeight]),f=Qi(c,l)/2;return{parallelProjection:!0,focalPoint:s,position:[0,0,0],parallelScale:f,scale:r.scale,viewPlaneNormal:[i[0],i[1],i[2]],viewUp:[o[0],o[1],o[2]],flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}setCameraCPU(e){const{viewport:r,image:n}=this._cpuFallbackEnabledElement,i=this.getCameraCPU(),{focalPoint:o,parallelScale:a,scale:s,flipHorizontal:c,flipVertical:l}=e,{clientHeight:f}=this.element;if(o){const d=this.worldToCanvasCPU(o),h=wv(this._cpuFallbackEnabledElement,d),g=this.worldToCanvasCPU(i.focalPoint),p=wv(this._cpuFallbackEnabledElement,g),v=rn();Jr(v,K6(h[0],h[1]),K6(p[0],p[1]));const y=fle({x:v[0],y:v[1]},r);r.translation.x-=y.x,r.translation.y-=y.y}if(a){const{rowPixelSpacing:d}=n,h=f*d*.5/a;r.scale=h,r.parallelScale=a}if(s){const{rowPixelSpacing:d}=n;r.scale=s,r.parallelScale=f*d*.5/s}(c!==void 0||l!==void 0)&&this.setFlipCPU({flipHorizontal:c,flipVertical:l}),this._cpuFallbackEnabledElement.transform=v1(this._cpuFallbackEnabledElement);const u={previousCamera:i,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,u)}getPanCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return[e.translation.x,e.translation.y]}setPanCPU(e){const r=this.getCameraCPU();this.setCameraCPU({...r,focalPoint:[...e.map(n=>-n),0]})}getZoomCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return e.scale}setZoomCPU(e){const r=this.getCameraCPU();this.setCameraCPU({...r,scale:e})}setFlipCPU({flipHorizontal:e,flipVertical:r}){const{viewport:n}=this._cpuFallbackEnabledElement;e!==void 0&&(n.hflip=e,this.flipHorizontal=n.hflip),r!==void 0&&(n.vflip=r,this.flipVertical=n.vflip)}setVOILUTFunction(e,r){if(this.useCPURendering)throw new Error("VOI LUT function is not supported in CPU rendering");const n=this._getValidVOILUTFunction(e);let i=!1;this.VOILUTFunction!==n&&(i=!0),this.VOILUTFunction=n;const{voiRange:o}=this.getProperties();this.setVOI(o,{suppressEvents:r,forceRecreateLUTFunction:i})}setRotationCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r.rotation=e}setRotationGPU(e){const r=this.getPan(this.fitToCanvasCamera),n=this.getPan(),i=xs([0,0],r,n);this.setPan(i,!1);const{flipVertical:o,flipHorizontal:a,viewPlaneNormal:s}=this.getCamera(),c=t9(this.initialViewUp,a,o,s);this.setCameraNoEvent({viewUp:c}),this.getVtkActiveCamera().roll(-e);const l=this.getPan(),f=this.getPan(this.fitToCanvasCamera),u=xs([0,0],l,f),d=mo([0,0],r,u);this.setPan(d,!1)}setInterpolationTypeGPU(e){const r=this.getDefaultActor();if(!r||!tc(r))return;const{actor:n}=r;n.getProperty().setInterpolationType(e),this.interpolationType=e}setInterpolationTypeCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r.pixelReplication=e!==Vl.LINEAR,this.interpolationType=e}setInvertColorCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r&&(r.invert=e,this.invert=e)}setInvertColorGPU(e){const r=this.getDefaultActor();if(r&&tc(r)){if(_a(r,"vtkVolume")){const i=r.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&wp(i),this.invert=e}else if(_a(r,"vtkImageSlice")){const i=r.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&wp(i),this.invert=e}}}setVOICPU(e,r={}){const{suppressEvents:n=!1}=r,{viewport:i,image:o}=this._cpuFallbackEnabledElement;if(!i||!o)return;if(typeof e>"u"){const{windowWidth:s,windowCenter:c}=o,l=Array.isArray(s)?s[0]:s,f=Array.isArray(c)?c[0]:c;i.voi={windowWidth:l,windowCenter:f,voiLUTFunction:o.voiLUTFunction};const{lower:u,upper:d}=Xu(l,f,o.voiLUTFunction);e={lower:u,upper:d}}else{const{lower:s,upper:c}=e,{windowCenter:l,windowWidth:f}=im(s,c);i.voi||(i.voi={windowWidth:0,windowCenter:0,voiLUTFunction:o.voiLUTFunction}),i.voi.windowWidth=f,i.voi.windowCenter=l}this.voiRange=e;const a={viewportId:this.id,range:e};n||ut(this.element,rt.VOI_MODIFIED,a)}getTransferFunction(){const e=this.getDefaultActor();return!e||!tc(e)?void 0:e.actor.getProperty().getRGBTransferFunction(0)}setVOIGPU(e,r={}){const{suppressEvents:n=!1,forceRecreateLUTFunction:i=!1,voiUpdatedWithSetProperties:o=!1}=r;if(e&&this.voiRange&&this.voiRange.lower===e.lower&&this.voiRange.upper===e.upper&&!i&&!this.stackInvalidated)return;const a=this.getDefaultActor();if(!a||!tc(a))return;const s=a.actor;let c=e;if(typeof c>"u"){const h=s.getMapper().getInputData().getPointData().getScalars().getRange();c={lower:h[0],upper:h[1]}}s.getProperty().setUseLookupTableScalarRange(!0);let l=s.getProperty().getRGBTransferFunction(0);const f=this.VOILUTFunction===wo.SAMPLED_SIGMOID;if((f||!l||i)&&(l=(f?G4:Ik)(c),this.invert&&wp(l),s.getProperty().setRGBTransferFunction(0,l),this.initialTransferFunctionNodes=Ny(l)),f||l.setRange(c.lower,c.upper),this.voiRange=c,this.voiUpdatedWithSetProperties||(this.voiUpdatedWithSetProperties=o),n)return;const u={viewportId:this.id,range:c,VOILUTFunction:this.VOILUTFunction};ut(this.element,rt.VOI_MODIFIED,u)}_addScalingToViewport(e){if(this.scaling.PT)return;const{suvbw:r,suvlbm:n,suvbsa:i}=e,o={};n&&(o.suvbwToSuvlbm=n/r),i&&(o.suvbwToSuvbsa=i/r),this.scaling.PT=o}getImageDataMetadata(e){const r=e.imageId,n=vw(e),{numberOfComponents:i,origin:o,direction:a,dimensions:s,spacing:c,numVoxels:l,imagePixelModule:f,voiLUTFunction:u,modality:d,scalingFactor:h,calibration:g}=n;d==="PT"&&h&&this._addScalingToViewport(h),this.modality=d;const p=this._getValidVOILUTFunction(u);this.VOILUTFunction=p,this.calibration=g;let v=this._getImagePlaneModule(r);return this.useCPURendering||(v=this.calibrateIfNecessary(r,v)),{bitsAllocated:f.bitsAllocated,numberOfComponents:i,origin:o,direction:a,dimensions:s,spacing:c,numVoxels:l,imagePlaneModule:v,imagePixelModule:f}}matchImagesForOverlay(e,r){return(i=>{const o=wt(Qo.IMAGE_PLANE,r),a=wt(Qo.IMAGE_PLANE,i),s=o.imageOrientationPatient,c=a.imageOrientationPatient;if(s&&c){if(Zt(o.imageOrientationPatient,a.imageOrientationPatient)){const f=o.imagePositionPatient,u=a.imagePositionPatient;if(f&&u&&Zt(f,u)){const h=o.rows,g=o.columns,p=a.rows,v=a.columns;if(h===p&&g===v)return i}}}else{const l=o.rows,f=o.columns,u=a.rows,d=a.columns;if(l===u&&f===d)return i}})(e)}getImagePlaneReferenceData(e=this.getCurrentImageIdIndex()){const r=this.imageIds[e];if(!r)return;const n=wt(Qo.IMAGE_PLANE,r);if(!n)return;const{imagePositionPatient:i,frameOfReferenceUID:o}=n;let{rowCosines:a,columnCosines:s}=n;a||(a=[1,0,0]),s||(s=[0,1,0]);const c=kn([0,0,0],s,a);return{FrameOfReferenceUID:o,viewPlaneNormal:c,cameraFocalPoint:i,referencedImageId:r,sliceIndex:e}}_getCameraOrientation(e){const r=e.slice(6,9).map(i=>-i),n=e.slice(3,6).map(i=>-i);return{viewPlaneNormal:[r[0],r[1],r[2]],viewUp:[n[0],n[1],n[2]]}}createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a}){const s=new a.constructor(a.length),c=Bt.newInstance({name:"Pixels",numberOfComponents:o,values:s}),l=tm.newInstance();return l.setDimensions(n),l.setSpacing(i),l.setDirection(r),l.setOrigin(e),l.getPointData().setScalars(c),l}_createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a}){try{this._imageData=this.createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a})}catch(s){n9.error(s)}}async setStack(e,r=0){if(this._throwIfDestroyed(),this.imageIds=e,r>e.length)throw new Error("Current image index is greater than the number of images in the stack");this.imageKeyToIndexMap.clear(),e.forEach((a,s)=>{this.imageKeyToIndexMap.set(a,s),this.imageKeyToIndexMap.set(Ur(a),s)}),this.currentImageIdIndex=r,this.targetImageIdIndex=r;const n=wt(h1.IMAGE_RETRIEVE_CONFIGURATION,e[r],"stack");this.imagesLoader=n?(n.create||ck)(n):this,this.stackInvalidated=!0,this.flipVertical=!1,this.flipHorizontal=!1,this.voiRange=null,this.interpolationType=Vl.LINEAR,this.invert=!1,this.viewportStatus=Lo.LOADING,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={},delete this._cpuFallbackEnabledElement.viewport.colormap);const i=await this._setImageIdIndex(r),o={imageIds:e,viewportId:this.id,element:this.element,currentImageIdIndex:r};return ut(this.element,rt.VIEWPORT_NEW_IMAGE_SET,o),i}_throwIfDestroyed(){if(this.isDisabled)throw new Error("The stack viewport has been destroyed and is no longer usable. Renderings will not be performed. If you are using the same viewportId and have re-enabled the viewport, you need to grab the new viewport instance using renderingEngine.getViewport(viewportId), instead of using your lexical scoped reference to the viewport instance.")}_checkVTKImageDataMatchesCornerstoneImage(e,r){if(!r)return!1;const[n,i]=r.getSpacing(),[o,a]=r.getDimensions(),s=this._getImagePlaneModule(e.imageId),c=r.getDirection(),l=c.slice(0,3),f=c.slice(3,6),u=r.getPointData().getScalars().getDataType(),d=Zt(n,e.columnPixelSpacing),h=Zt(i,e.rowPixelSpacing),g=d||e.columnPixelSpacing===null&&n===1,p=h||e.rowPixelSpacing===null&&i===1,v=o===e.columns,y=a===e.rows,m=Zt(s.rowCosines,l),w=Zt(s.columnCosines,f),x=u===e.voxelManager.getScalarData().constructor.name;return g&&p&&v&&y&&m&&w&&x}_updateVTKImageDataFromCornerstoneImage(e){let n=this._getImagePlaneModule(e.imageId).imagePositionPatient;n==null&&(n=[0,0,0]),this._imageData.setOrigin(n);const i=this.getActor(this.id);i&&(i.referencedId=e.imageId),yw(this._imageData,e)}_loadAndDisplayImage(e,r){return this.useCPURendering?this._loadAndDisplayImageCPU(e,r):this._loadAndDisplayImageGPU(e,r)}_loadAndDisplayImageCPU(e,r){return new Promise((n,i)=>{function o(h,g,p){if(this.currentImageIdIndex!==g)return;const v=h.voxelManager.getScalarData(),y=h.preScale,m=y==null?void 0:y.scalingParameters,w=(y==null?void 0:y.scaled)&&(m==null?void 0:m.rescaleIntercept)%1!==0||(m==null?void 0:m.rescaleSlope)%1!==0;if(v instanceof Float32Array&&w){const C={min:h.minPixelValue,max:h.maxPixelValue},_=Math.abs(C.max-C.min)/65535,E=C.min,b=v.length,D=new Uint16Array(b);let I=65535,P=0;for(let O=0;OD:h.getPixelData=()=>D,h.preScale={...h.preScale,scaled:!1}}this._setCSImage(h),this.viewportStatus=Lo.PRE_RENDER;const x={image:h,imageId:p,imageIdIndex:g,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.STACK_NEW_IMAGE,x),this._updateToDisplayImageCPU(h),this.render(),this.currentImageIdIndex=g,n(p)}function a(h,g,p){const v={error:h,imageIdIndex:g,imageId:p};this.suppressEvents||ut(et,rt.IMAGE_LOAD_ERROR,v),i(h)}function s(h,g,p){return _s(h,p).then(v=>{o.call(this,v,g,h)},v=>{a.call(this,v,g,h)})}const c=-5,l=pn.Interaction,f={imageId:e,imageIdIndex:r},u={useRGBA:!0,requestType:l},d={imageId:e,imageIdIndex:r,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.PRE_STACK_NEW_IMAGE,d),Bi.addRequest(s.bind(this,e,r,u),l,f,c)})}successCallback(e,r){var l,f;const n=this.imageIds.indexOf(e);if(this.currentImageIdIndex!==n)return;const i=(l=this.csImage)==null?void 0:l.imageFrame,o=r==null?void 0:r.imageFrame,a=(i==null?void 0:i.photometricInterpretation)||((f=this.csImage)==null?void 0:f.photometricInterpretation),s=(o==null?void 0:o.photometricInterpretation)||(r==null?void 0:r.photometricInterpretation);a!==s&&(this.stackInvalidated=!0),this._setCSImage(r);const c={image:r,imageId:e,imageIdIndex:n,viewportId:this.id,renderingEngineId:this.renderingEngineId};this._updateActorToDisplayImageId(r),ut(this.element,rt.STACK_NEW_IMAGE,c),this.render(),this.currentImageIdIndex=n}errorCallback(e,r,n){if(!r)return;const i=this.imageIds.indexOf(e),o={error:n,imageIdIndex:i,imageId:e};ut(et,rt.IMAGE_LOAD_ERROR,o)}getLoaderImageOptions(e){const r=this.imageIds.indexOf(e),{transferSyntaxUID:n}=wt("transferSyntax",e)||{};return{useRGBA:!1,transferSyntaxUID:n,priority:5,requestType:pn.Interaction,additionalDetails:{imageId:e,imageIdIndex:r}}}async loadImages(e,r){const n=await Promise.allSettled(e.map(o=>{const a=this.getLoaderImageOptions(o);return _s(o,a).then(s=>(r.successCallback(o,s),o),s=>(r.errorCallback(o,!0,s),o))})),i=n.filter(o=>o.status==="rejected");if(i&&i.length){const o=new CustomEvent(rt.IMAGE_LOAD_ERROR,{detail:i,cancelable:!0});et.dispatchEvent(o)}return n}_loadAndDisplayImageGPU(e,r){if(!e){console.warn("No image id set yet to load");return}const n={imageId:e,imageIdIndex:r,viewportId:this.id,renderingEngineId:this.renderingEngineId};return ut(this.element,rt.PRE_STACK_NEW_IMAGE,n),this.imagesLoader.loadImages([e],this).then(i=>e)}_updateToDisplayImageCPU(e){const r=this.getImageDataMetadata(e),n=Vk(this.canvas,e,this.modality,this._cpuFallbackEnabledElement.viewport.colormap),{windowCenter:i,windowWidth:o,voiLUTFunction:a}=n.voi;this.voiRange=Xu(o,i,a),this._cpuFallbackEnabledElement.image=e,this._cpuFallbackEnabledElement.metadata={...r},this.cpuImagePixelData=e.voxelManager.getScalarData();const s=Object.assign({},n,this._cpuFallbackEnabledElement.viewport);this._cpuFallbackEnabledElement.viewport=this.stackInvalidated?n:s,this.stackInvalidated=!1,this.cpuRenderingInvalidated=!0,this._cpuFallbackEnabledElement.transform=v1(this._cpuFallbackEnabledElement)}getSliceViewInfo(){throw new Error("Method not implemented.")}addImages(e){const r=[];e.forEach(n=>{const{imageId:i,...o}=n,a=$e.getImage(i),{origin:s,dimensions:c,direction:l,spacing:f,numberOfComponents:u}=this.getImageDataMetadata(a),d=this.createVTKImageData({origin:s,dimensions:c,direction:l,spacing:f,numberOfComponents:u,pixelArray:a.voxelManager.getScalarData()}),h=this.createActorMapper(d);h&&(r.push({uid:n.actorUID??Pn(),actor:h,referencedId:i,...o}),n.callback&&n.callback({imageActor:h,imageId:n.imageId}))}),this.addActors(r)}_updateActorToDisplayImageId(e){const r=this._checkVTKImageDataMatchesCornerstoneImage(e,this._imageData),n=this.getViewPresentation();if(r&&!this.stackInvalidated){this._updateVTKImageDataFromCornerstoneImage(e),this.resetCameraNoEvent(),this.setViewPresentation(n),this._setPropertiesFromCache(),this.stackActorReInitialized=!1;return}const{origin:i,direction:o,dimensions:a,spacing:s,numberOfComponents:c,imagePixelModule:l}=this.getImageDataMetadata(e),f=e.voxelManager.getScalarData();this._createVTKImageData({origin:i,direction:o,dimensions:a,spacing:s,numberOfComponents:c,pixelArray:f}),this._updateVTKImageDataFromCornerstoneImage(e);const u=this.createActorMapper(this._imageData),d=this.getActors();d.length&&d[0].uid===this.id?d[0].actor=u:d.unshift({uid:this.id,actor:u,referencedId:e.imageId}),this.setActors(d);const{viewPlaneNormal:h,viewUp:g}=this._getCameraOrientation(o),p=this.getCamera();this.setCameraNoEvent({viewUp:g,viewPlaneNormal:h}),this.initialViewUp=g,this.resetCameraNoEvent(),this.setViewPresentation(n),this.triggerCameraEvent(this.getCamera(),p);const v=l.photometricInterpretation==="MONOCHROME1";this.stackInvalidated=!0;const y=this._getInitialVOIRange(e);this.setVOI(y,{forceRecreateLUTFunction:!!v}),this.initialInvert=!!v,this.setInvertColor(this.invert||this.initialInvert),this.stackInvalidated=!1,this.stackActorReInitialized=!0,this._publishCalibratedEvent&&this.triggerCalibrationEvent()}_getInitialVOIRange(e){if(this.voiRange&&this.voiUpdatedWithSetProperties)return this.voiRange;const{windowCenter:r,windowWidth:n,voiLUTFunction:i}=e;let o=this._getVOIRangeFromWindowLevel(n,r,i);return o=this._getPTPreScaledRange()||o,o}_getPTPreScaledRange(){if(this._isCurrentImagePTPrescaled())return this._getDefaultPTPrescaledVOIRange()}_isCurrentImagePTPrescaled(){var e;return!(this.modality!=="PT"||!this.csImage.isPreScaled||!((e=this.csImage.preScale)!=null&&e.scalingParameters.suvbw))}_getDefaultPTPrescaledVOIRange(){return{lower:0,upper:5}}_getVOIRangeFromWindowLevel(e,r,n=wo.LINEAR){let i,o;if(typeof r=="number"&&typeof e=="number"?(i=r,o=e):Array.isArray(r)&&Array.isArray(e)&&(i=r[0],o=e[0]),i!==void 0&&o!==void 0)return Xu(o,i,n)}async _setImageIdIndex(e){if(e>=this.imageIds.length)throw new Error(`ImageIdIndex provided ${e} is invalid, the stack only has ${this.imageIds.length} elements`);this.currentImageIdIndex=e,this.hasPixelSpacing=!0,this.viewportStatus=Lo.PRE_RENDER;const r=await this._loadAndDisplayImage(this.imageIds[e],e);if(this.perImageIdDefaultProperties.size>=1){const n=this.perImageIdDefaultProperties.get(r);n!==void 0?this.setProperties(n):this.globalDefaultProperties!==void 0&&this.setProperties(this.globalDefaultProperties)}return r}resetCameraCPU({resetPan:e=!0,resetZoom:r=!0}){const{image:n}=this._cpuFallbackEnabledElement;if(!n)return;dle(this._cpuFallbackEnabledElement,e,r);const{scale:i}=this._cpuFallbackEnabledElement.viewport,{clientWidth:o,clientHeight:a}=this.element,s=[o/2,a/2],c=this.canvasToWorldCPU(s);this.setCameraCPU({focalPoint:c,scale:i})}resetCameraGPU({resetPan:e,resetZoom:r}){return this.setCamera({flipHorizontal:!1,flipVertical:!1,viewUp:this.initialViewUp}),super.resetCamera({resetPan:e,resetZoom:r,resetToCenter:!0})}scroll(e,r=!0,n=!1){const i=this.imageIds;if(isNaN(this.targetImageIdIndex))return;const o=this.targetImageIdIndex,a=i.length;let s=o+e;n?s=(s+a)%a:s=Math.max(0,Math.min(a-1,s)),this.targetImageIdIndex=s;const c=i[s];$e.isLoaded(c)||!r?this.setImageIdIndex(s):(clearTimeout(this.debouncedTimeout),this.debouncedTimeout=window.setTimeout(()=>{this.setImageIdIndex(s)},40));const f={newImageIdIndex:s,imageId:c,direction:e};s!==o&&ut(this.element,rt.STACK_VIEWPORT_SCROLL,f)}setImageIdIndex(e){if(this._throwIfDestroyed(),this.currentImageIdIndex===e)return Promise.resolve(this.getCurrentImageId());const r=this._setImageIdIndex(e);return this.targetImageIdIndex=e,r}calibrateSpacing(e){const r=this.getImageIds().indexOf(e);this.stackInvalidated=!0,this._loadAndDisplayImage(e,r)}triggerCameraEvent(e,r){const n={previousCamera:r,camera:e,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};this.suppressEvents||ut(this.element,rt.CAMERA_MODIFIED,n)}triggerCalibrationEvent(){const{imageData:e}=this.getImageData(),r={element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,imageId:this.getCurrentImageId(),imageData:e,worldToIndex:e.getWorldToIndex(),...this._calibrationEvent};this.suppressEvents||ut(this.element,rt.IMAGE_SPACING_CALIBRATED,r),this._publishCalibratedEvent=!1}jumpToWorld(e){const r=this.getImageIds(),n=this.getImageData(),{direction:i,spacing:o}=n,a=Zl({direction:i,spacing:o,imageIds:r},e,this.getCamera().viewPlaneNormal,{ignoreSpacing:!0}),s=r.indexOf(a);return s===-1?!1:(this.setImageIdIndex(s),this.render(),!0)}_getVOIRangeForCurrentImage(){const{windowCenter:e,windowWidth:r,voiLUTFunction:n}=this.csImage;return this._getVOIRangeFromWindowLevel(r,e,n)}_getValidVOILUTFunction(e){return Object.values(wo).includes(e)?e:wo.LINEAR}getSliceInfo(){const e=this.getSliceIndex(),{dimensions:r}=this.getImageData();return{width:r[0],height:r[1],sliceIndex:e,slicePlane:2}}isReferenceViewable(e,r={}){const n=this.getCurrentImageIdIndex(),i=this.imageIds[n];if(!i||!e)return!1;const{referencedImageId:o,multiSliceReference:a}=e;if(o){if(o===i)return!0;e.referencedImageURI||(e.referencedImageURI=Ur(o));const{referencedImageURI:c}=e,l=this.imageKeyToIndexMap.get(c);if(r.asOverlay&&this.matchImagesForOverlay(i,o))return!0;if(l===void 0)return!1;if(r.withNavigation)return!0;const f=a&&this.imageKeyToIndexMap.get(a.referencedImageId);return n<=f&&n>=l}if(!super.isReferenceViewable(e,r))return!1;if(e.volumeId)return r.asVolume;const{cameraFocalPoint:s}=e;if(r.asNearbyProjection&&s){const{spacing:c,direction:l,origin:f}=this.getImageData(),u=l.slice(6,9),d=xf({direction:l,spacing:c},u),h=qn(Ke(),s,f),g=kt(h,u),p=d/2;if(Math.abs(g)<=p)return!0}return!1}getViewReference(e={}){const{sliceIndex:r=this.getCurrentImageIdIndex()}=e,n=super.getViewReference(e),i=this.getCurrentImageId(r);if(i){if(n.referencedImageId=i,this.getCurrentImageIdIndex()!==r){const o=this.getImagePlaneReferenceData(r);if(!o)return;Object.assign(n,o)}return n}}setViewReference(e){if(!(e!=null&&e.referencedImageId)){(e==null?void 0:e.sliceIndex)!==void 0&&this.scroll(e.sliceIndex-this.targetImageIdIndex);return}const{referencedImageId:r}=e;e.referencedImageURI||(e.referencedImageURI=Ur(r));const{referencedImageURI:n}=e,i=this.imageKeyToIndexMap.get(n);if(i===void 0){n9.error(`No image URI found for ${n}`);return}this.scroll(i-this.targetImageIdIndex)}getViewReferenceId(e={}){const{sliceIndex:r=this.currentImageIdIndex}=e;return`imageId:${this.imageIds[r]}`}getSliceIndexForImage(e){if(e){if(typeof e=="string")return this.imageKeyToIndexMap.get(e);if(e.referencedImageId)return this.imageKeyToIndexMap.get(e.referencedImageId)}}getCPUFallbackError(e){return new Error(`method ${e} cannot be used during CPU Fallback mode`)}fillWithBackgroundColor(){const e=this.getRenderingEngine();e&&e.fillCanvasWithBackgroundColor(this.canvas,this.options.background)}unsetColormapCPU(){delete this._cpuFallbackEnabledElement.viewport.colormap,this._cpuFallbackEnabledElement.renderingTools={},this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.render()}setColormapCPU(e){this.colormap=e;const r=f1(e.name);this._cpuFallbackEnabledElement.viewport.colormap=r,this._cpuFallbackEnabledElement.renderingTools={},this.fillWithBackgroundColor(),this.cpuRenderingInvalidated=!0,this.render();const n={viewportId:this.id,colormap:e};ut(this.element,rt.COLORMAP_MODIFIED,n)}setColormapGPU(e){const i=this.getDefaultActor().actor.getProperty(),o=i.getRGBTransferFunction(),a=f1(e.name)||u1.getPresetByName(e.name);if(o)o.applyColorMap(a),o.setMappingRange(this.voiRange.lower,this.voiRange.upper),i.setRGBTransferFunction(0,o);else{const c=Ql.newInstance();c.applyColorMap(a),c.setMappingRange(this.voiRange.lower,this.voiRange.upper),i.setRGBTransferFunction(0,c)}this.colormap=e,this.render();const s={viewportId:this.id,colormap:e};ut(this.element,rt.COLORMAP_MODIFIED,s)}unsetColormapGPU(){throw new Error("unsetColormapGPU not implemented.")}_getImagePlaneModule(e){var n,i;const r=bk(e);return this.hasPixelSpacing=!r.usingDefaultValues||((n=this.calibration)==null?void 0:n.scale)>0||((i=this.calibration)==null?void 0:i.rowPixelSpacing)>0,this.calibration||(this.calibration=r.calibration),r}isInAcquisitionPlane(){return!0}}class rE extends Tr{constructor(e){super(e),this.getNumberOfSlices=()=>1,this.getRotation=()=>0,this.getCurrentImageIdIndex=()=>0,this.getCurrentImageId=()=>null,this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0});const{parallelProjection:r,orientation:n}=this.options,i=this.getVtkActiveCamera();r!=null&&i.setParallelProjection(r),n&&n!==Cd.ACQUISITION&&this.applyViewOrientation(n)}isInAcquisitionPlane(){return!1}resetCamera({resetPan:e=!0,resetZoom:r=!0,resetToCenter:n=!0}={}){super.resetCamera({resetPan:e,resetZoom:r,resetToCenter:n});const i=this.getVtkActiveCamera();return i.getParallelProjection()?i.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):i.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE),this.getRenderer().resetCameraClippingRange(),!0}setSlabThickness(e,r){return null}setBlendMode(e,r,n){return null}resetProperties(e){const r=e?this.getActor(e):this.getDefaultActor();if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);r.slabThickness&&(r.slabThickness=Qr.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera())),e||(e=this.getVolumeId());const n=$e.getVolume(e);if(!n)throw new Error(`imageVolume with id: ${e} does not exist in cache`);if(J4(r.actor,n),tc(r)){const i=r.actor.getProperty().getRGBTransferFunction(0);mw(i,this.initialTransferFunctionNodes)}this.setCamera(this.initialCamera),ut(this.element,rt.VOI_MODIFIED,super.getVOIModifiedEventDetail(e))}getSliceIndex(){return null}setCamera(e){super.setCamera(e),this.getRenderer().resetCameraClippingRange(),this.render()}setCameraClippingRange(){const e=this.getVtkActiveCamera();e.getParallelProjection()?e.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):e.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE)}resetSlabThickness(){return null}}async function Fk(t,e,r,n=!1,i=!1){r.forEach(a=>{const s=t.getViewport(a);if(!s)throw new Error(`Viewport with Id ${a} does not exist`);if(!(s instanceof Tr))throw new Error("setVolumesForViewports only supports VolumeViewport and VolumeViewport3D")});const o=r.map(async a=>{await t.getViewport(a).setVolumes(e,n,i)});await Promise.all(o)}async function Uk(t,e,r,n=!1,i=!1){for(const a of r){const s=t.getViewport(a);if(!s)throw new Error(`Viewport with Id ${a} does not exist`);if(!(s instanceof Tr)){console.warn(`Viewport with Id ${a} is not a BaseVolumeViewport. Cannot add volume to this viewport.`);return}}const o=r.map(async a=>{await t.getViewport(a).addVolumes(e,n,i)});await Promise.all(o)}function Bk(t,e,r){for(const n of r){const i=t.getViewport(n);if(!i)throw new Error(`Viewport with Id ${n} does not exist`);if(!i.addImages){console.warn(`Viewport with Id ${n} does not have addImages. Cannot add image segmentation to this viewport.`);return}}r.forEach(n=>{t.getViewport(n).addImages(e)})}class gle{constructor(e){this.opacity=.4,this.outlineOpacity=.4,this.transferFunction=[],this.actor=e}setRGBTransferFunction(e,r){this.transferFunction[e]=r}setScalarOpacity(e){}setInterpolationTypeToNearest(){}setUseLabelOutline(){}setLabelOutlineOpacity(e){this.outlineOpacity=e}setLabelOutlineThickness(){}getColor(e){const r=this.transferFunction[0],n=r.getRedValue(e),i=r.getGreenValue(e),o=r.getBlueValue(e);return[n,i,o,this.opacity]}}class ple{constructor(e){this.actor=e}getInputData(){return this.actor.getImage()}}class mle{constructor(e,r){this.canvasProperties=new gle(this),this.visibility=!1,this.mapper=new ple(this),this.className="CanvasActor",this.derivedImage=r,this.viewport=e}renderRLE(e,r,n){const{width:i,height:o}=this.image;let{canvas:a}=this;(!a||a.width!==i||a.height!==o)&&(this.canvas=a=new window.OffscreenCanvas(i,o));const s=a.getContext("2d"),c=s.createImageData(i,o),{data:l}=c;l.fill(0);const{map:f}=n;let u=1/0,d=1/0,h=-1/0,g=-1/0;for(let y=0;yD*255);let b=w+(S<<2);for(let D=S;Di)return;const p=h-u,v=g-d;s.putImageData(c,0,0,u-1,d-1,p+2,v+2),r.drawImage(a,u,d,p,v,u,d,p,v)}setMapper(e){this.mapper=e}render(e,r){if(!this.visibility)return;const n=this.image||this.getImage(),{width:i,height:o}=n,a=n.getScalarData();if(!a)return;const{voxelManager:s}=n;if(s&&s.map.getRun){this.renderRLE(e,r,s);return}let{canvas:c}=this;(!c||c.width!==i||c.height!==o)&&(this.canvas=c=new window.OffscreenCanvas(i,o));const l=c.getContext("2d"),f=l.createImageData(i,o),{data:u}=f;let d=0,h=0,g=1/0,p=1/0,v=-1/0,y=-1/0;for(let x=0;xi)return;const m=v-g+1,w=y-p+1;l.putImageData(f,0,0,g,p,m,w),r.drawImage(c,g,p,m,w,g,p,m,w)}getClassName(){return this.className}getProperty(){return this.canvasProperties}setVisibility(e){this.visibility=e}getMapper(){return this.mapper}isA(e){return e===this.className}getImage(){if(this.image)return this.image;this.image={...this.derivedImage};const e=this.viewport.getImageData();return Object.assign(this.image,{worldToIndex:r=>e.imageData.worldToIndex(r),indexToWorld:(r,n)=>e.imageData.indexToWorld(r,n),getDimensions:()=>e.dimensions,getScalarData:()=>{var r;return(r=this.derivedImage)==null?void 0:r.getPixelData()},getDirection:()=>e.direction,getSpacing:()=>e.spacing,setOrigin:()=>null,setDerivedImage:r=>{this.derivedImage=r,this.image=null},modified:()=>null}),this.image}}const Z8=class Z8{static imageIdToFrames(e){const r=e.match(this.frameRangeExtractor);if(!r||!r[2])return null;const n=r[2].split("-").map(i=>Number(i));return n.length===1?n[0]:n}static imageIdToFrameEnd(e){const r=this.imageIdToFrames(e);return Array.isArray(r)?r[1]:r}static imageIdToFrameStart(e){const r=this.imageIdToFrames(e);return Array.isArray(r)?r[0]:r}static framesToString(e){return Array.isArray(e)?`${e[0]}-${e[1]}`:String(e)}static framesToImageId(e,r){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const i=this.framesToString(r);return e.replace(this.frameRangeExtractor,`${n[1]}${i}`)}};Z8.frameRangeExtractor=/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i;let Q0=Z8;const Rp=class Rp extends bd{constructor(e){super({...e,canvas:e.canvas||Hc(e.element)}),this.videoWidth=0,this.videoHeight=0,this.loop=!0,this.mute=!0,this.isPlaying=!1,this.scrollSpeed=1,this.playbackRate=1,this.frameRange=[0,0],this.fps=30,this.videoCamera={panWorld:[0,0],parallelScale:1},this.voiRange={lower:0,upper:255},this.getProperties=()=>({loop:this.videoElement.loop,muted:this.videoElement.muted,playbackRate:this.playbackRate,scrollSpeed:this.scrollSpeed,voiRange:{...this.voiRange}}),this.getMiddleSliceData=()=>{throw new Error("Method not implemented.")},this.useCustomRenderingPipeline=!0,this.resetCamera=()=>(this.refreshRenderValues(),this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame(),!0),this.getNumberOfSlices=()=>{const r=Math.round(this.videoElement.duration*this.fps/this.scrollSpeed);return isNaN(r)?this.numberOfFrames:r},this.getFrameOfReferenceUID=()=>this.videoElement.src,this.resize=()=>{const r=this.canvas,{clientWidth:n,clientHeight:i}=r;(r.width!==n||r.height!==i)&&(r.width=n,r.height=i),this.refreshRenderValues(),this.isPlaying||this.renderFrame()},this.canvasToWorld=(r,n=[0,0,0])=>{const i=this.videoCamera.panWorld,o=this.getWorldToCanvasRatio(),a=[i[0]*o,i[1]*o],s=[r[0]-a[0],r[1]-a[1]];return n.splice(0,2,s[0]/o,s[1]/o),n},this.worldToCanvas=r=>{const n=this.videoCamera.panWorld,i=this.getWorldToCanvasRatio();return[(r[0]+n[0])*i,(r[1]+n[1])*i]},this.getRotation=()=>0,this.canvasToIndex=r=>{const n=this.getTransform();return n.invert(),n.transformPoint(r.map(i=>i*devicePixelRatio))},this.indexToCanvas=r=>this.getTransform().transformPoint(r).map(i=>i/devicePixelRatio),this.customRenderViewportToCanvas=()=>{this.renderFrame()},this.renderFrame=()=>{var s;const r=window.devicePixelRatio||1,i=this.getTransform().getMatrix(),o=this.canvasContext;o.resetTransform(),o.clearRect(0,0,this.canvas.width,this.canvas.height),o.transform(i[0]/r,i[1]/r,i[2]/r,i[3]/r,i[4]/r,i[5]/r),o.drawImage(this.videoElement,0,0,this.videoWidth,this.videoHeight);for(const c of this.getActors())c.actor.render(this,this.canvasContext);this.canvasContext.resetTransform(),ut(this.element,rt.STACK_NEW_IMAGE,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),ut(this.element,rt.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,imageIndex:this.getCurrentImageIdIndex(),numberOfSlices:this.numberOfFrames,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),(s=this.initialRender)==null||s.call(this);const a=this.getFrameNumber();this.isPlaying&&(athis.frameRange[1]&&(this.loop?this.setFrameNumber(this.frameRange[0]):this.pause()))},this.renderWhilstPlaying=()=>{this.renderFrame(),this.isPlaying&&requestAnimationFrame(this.renderWhilstPlaying)},this.canvasContext=this.canvas.getContext("2d"),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.videoElement=document.createElement("video"),this.videoElement.muted=this.mute,this.videoElement.loop=this.loop,this.videoElement.autoplay=!0,this.videoElement.crossOrigin="anonymous",this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners(),this.videoElement.remove()}getImageDataMetadata(e){const r=typeof e=="string"?e:e.imageId,n=wt(Qo.IMAGE_PLANE,r);let i=n.rowCosines,o=n.columnCosines;(n.usingDefaultValues||i==null||o==null)&&(i=[1,0,0],o=[0,1,0]);const s=Ft(i[0],i[1],i[2]),c=Ft(o[0],o[1],o[2]),{rows:l,columns:f}=n,u=Ke();kn(u,s,c);let d=n.imagePositionPatient;d==null&&(d=[0,0,0]);const h=n.columnPixelSpacing||1,g=n.rowPixelSpacing||1,p=n.columns,v=n.rows,y=1,m=1;return this.hasPixelSpacing=!!n.columnPixelSpacing,{bitsAllocated:8,numberOfComponents:3,origin:d,rows:l,columns:f,direction:[...s,...c,...u],dimensions:[p,v,m],spacing:[h,g,y],hasPixelSpacing:this.hasPixelSpacing,numVoxels:p*v*m,imagePlaneModule:n}}setDataIds(e,r){var n;this.setVideo(e[0],(((n=r.viewReference)==null?void 0:n.sliceIndex)||0)+1)}setVideo(e,r){this.imageId=Array.isArray(e)?e[0]:e;const n=wt(Qo.IMAGE_URL,e);if(!(n!=null&&n.rendered))throw new Error(`Video Image ID ${e} does not have a rendered video view`);const{rendered:i}=n,o=wt(Qo.GENERAL_SERIES,e);this.modality=o==null?void 0:o.Modality,this.metadata=this.getImageDataMetadata(e);let{cineRate:a,numberOfFrames:s}=wt(Qo.CINE,e);return this.numberOfFrames=s,this.setVideoURL(i).then(()=>((!s||s===1)&&(s=Math.round(this.videoElement.duration*(a||30))),a||(a=Math.round(s/this.videoElement.duration)),this.fps=a,this.numberOfFrames=s,this.setFrameRange([1,s]),this.initialRender=()=>{this.initialRender=null,this.pause(),this.setFrameNumber(r||1)},new Promise(c=>{window.setTimeout(()=>{this.setFrameNumber(r||1),c(this)},25)})))}async setVideoURL(e){return new Promise(r=>{this.videoElement.src=e,this.videoElement.preload="auto";const n=()=>{this.videoWidth=this.videoElement.videoWidth,this.videoHeight=this.videoElement.videoHeight,this.videoElement.removeEventListener("loadedmetadata",n),this.refreshRenderValues(),r(!0)};this.videoElement.addEventListener("loadedmetadata",n)})}getImageIds(){const e=new Array(this.numberOfFrames),r=this.imageId.replace(/[0-9]+$/,"");for(let n=0;n{n(),r.removeEventListener("seeked",a)};r.addEventListener("seeked",a)}async start(){const e=this.videoElement,r=this.renderFrame;if(e.currentTime=0,e.paused){const n=i=>{r(),e.removeEventListener("seeked",n)};e.addEventListener("seeked",n)}}async end(){const e=this.videoElement,r=this.renderFrame;if(e.currentTime=e.duration,e.paused){const n=i=>{r(),e.removeEventListener("seeked",n)};e.addEventListener("seeked",n)}}async setTime(e){const r=this.videoElement,n=this.renderFrame;if(r.currentTime=e,r.paused){const i=o=>{n(),r.removeEventListener("seeked",i)};r.addEventListener("seeked",i)}}getSliceViewInfo(){throw new Error("Method not implemented.")}async setFrameNumber(e){this.setTime((e-1)/this.fps)}setFrameRange(e){if(!e){this.frameRange=[1,this.numberOfFrames];return}e.length!==2||e[0]===e[1]||(this.frameRange=[e[0],e[1]])}getSliceIndexForImage(e){if(e){if(typeof e=="string")return Q0.imageIdToFrameStart(e);if(e.referencedImageId)return Q0.imageIdToFrameStart(e.referencedImageId)}}getFrameRange(){return this.frameRange}setProperties(e){e.loop!==void 0&&(this.videoElement.loop=e.loop),e.muted!==void 0&&(this.videoElement.muted=e.muted),e.playbackRate!==void 0&&this.setPlaybackRate(e.playbackRate),e.scrollSpeed!==void 0&&this.setScrollSpeed(e.scrollSpeed),e.voiRange&&this.setVOI(e.voiRange)}setPlaybackRate(e=1){if(this.playbackRate=e,e<.0625){this.pause();return}this.videoElement&&(this.videoElement.playbackRate=e,this.play())}setScrollSpeed(e=1,r=i1.FRAME){this.scrollSpeed=r===i1.SECOND?e*this.fps:e}resetProperties(){this.setProperties({loop:!1,muted:!0,voiRange:{lower:0,upper:255}})}getScalarData(){var o;if(((o=this.scalarData)==null?void 0:o.frameNumber)===this.getFrameNumber())return this.scalarData;if(!this.videoElement||!this.videoElement.videoWidth||!this.videoElement.videoHeight){console.debug("Video not ready yet, returning empty scalar data");const a=new Uint8ClampedArray;return a.getRange=()=>[0,255],a.frameNumber=-1,a}const e=document.createElement("canvas");e.width=this.videoElement.videoWidth,e.height=this.videoElement.videoHeight;const r=e.getContext("2d");r.drawImage(this.videoElement,0,0);const i=r.getImageData(0,0,e.width,e.height).data;return i.getRange=()=>[0,255],i.frameNumber=this.getFrameNumber(),this.scalarData=i,i}getImageData(){const{metadata:e}=this,r=e.spacing,n={getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:o=>{const a=this.worldToCanvas(o),s=this.canvasToIndex(a);return[s[0],s[1],0]},indexToWorld:(o,a)=>{const s=this.indexToCanvas([o[0],o[1]]);return this.canvasToWorld(s,a)}},i={dimensions:e.dimensions,spacing:r,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:e.FrameOfReferenceUID},getScalarData:()=>this.getScalarData(),scalarData:this.getScalarData(),imageData:n,voxelManager:{forEach:(o,a)=>z4(a.imageData,{pointInShapeFn:a.isInObject??(()=>!0),callback:o,boundsIJK:a.boundsIJK,returnPoints:a.returnPoints??!1})},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1}};return Object.defineProperty(n,"scalarData",{get:()=>this.getScalarData(),enumerable:!0}),i}hasImageURI(e){const r=e.match(Rp.frameRangeExtractor),n=r?e.substring(0,r.index):e;return this.imageId.includes(n)}setVOI(e){this.voiRange=e;const r=this.setColorTransform(e,this.averageWhite);this.canvas.style.filter=r}setWindowLevel(e=256,r=128){const n=r-e/2,i=r+e/2-1;this.setVOI({lower:n,upper:i}),this.setColorTransform({lower:n,upper:i},this.averageWhite)}setAverageWhite(e){this.averageWhite=e,this.setColorTransform(this.voiRange,e)}setCamera(e){const{parallelScale:r,focalPoint:n}=e;if(r&&(this.videoCamera.parallelScale=this.element.clientHeight/2/r),n!==void 0){const i=this.worldToCanvas(n),o=[this.element.clientWidth/2,this.element.clientHeight/2],a=[(i[0]-o[0])/this.videoCamera.parallelScale,(i[1]-o[1])/this.videoCamera.parallelScale];this.videoCamera.panWorld=[this.videoCamera.panWorld[0]-a[0],this.videoCamera.panWorld[1]-a[1]]}this.canvasContext.fillStyle="rgba(0,0,0,1)",this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame()}getCurrentImageId(e=this.getCurrentImageIdIndex()){return this.imageId.replace("/frames/1",`/frames/${e+1}`)}getViewReferenceId(e={}){const{sliceIndex:r}=e;return r===void 0?`videoId:${this.getCurrentImageId()}`:Array.isArray(r)?`videoId:${this.imageId.substring(0,this.imageId.length-1)}${r[0]+1}-${r[1]+1}`:`videoId:${this.imageId.replace("/frames/1",`/frames/${1+r}`)}`}isReferenceViewable(e,r={}){let{imageURI:n}=r;const{referencedImageId:i,sliceIndex:o,multiSliceReference:a}=e;if(!super.isReferenceViewable(e))return!1;const s=this.getCurrentImageId();if(!n){const d=s.indexOf(":");n=s.substring(d+1,s.length-1)}if(r.withNavigation)return!0;const c=this.getSliceIndex();if(a){const d=Q0.imageIdToFrameEnd(a.referencedImageId);return c>=o&&c<=d}if(o!==void 0)return c===o;if(!i)return!1;const l=i.match(Rp.frameRangeExtractor);if(!l||!l[2])return!0;const f=l[2].split("-").map(d=>Number(d)),u=c+1;return f[0]<=u&&u<=(f[1]??f[0])}setViewReference(e){typeof e.sliceIndex=="number"?this.setFrameNumber(e.sliceIndex+1):Array.isArray(e.sliceIndex)&&this.setFrameRange(e.sliceIndex)}getViewReference(e){const r=(e==null?void 0:e.sliceIndex)??(this.isPlaying?this.frameRange[0]:this.getCurrentImageIdIndex()),n=(e==null?void 0:e.rangeEndSliceIndex)??(this.isPlaying?this.frameRange[1]-1:void 0),i=n>r?{sliceIndex:n,referencedImageId:this.getCurrentImageId(n)}:void 0;return{...super.getViewReference(e),referencedImageId:this.getViewReferenceId(e),sliceIndex:r,multiSliceReference:i}}getFrameNumber(){return 1+this.getCurrentImageIdIndex()}getCurrentImageIdIndex(){return Math.round(this.videoElement.currentTime*this.fps)}getSliceIndex(){return this.getCurrentImageIdIndex()/this.scrollSpeed}getCamera(){const{parallelScale:e}=this.videoCamera,r=[this.element.clientWidth/2,this.element.clientHeight/2];return{parallelProjection:!0,focalPoint:this.canvasToWorld(r),position:[0,0,0],viewUp:[0,-1,0],parallelScale:this.element.clientHeight/2/e,viewPlaneNormal:[0,0,1]}}getFrameRate(){return this.fps}getPan(){const e=this.videoCamera.panWorld;return[e[0],e[1]]}refreshRenderValues(){let e=this.canvas.offsetWidth/this.videoWidth;this.videoHeight*e>this.canvas.height&&(e=this.canvas.offsetHeight/this.videoHeight);const r=Math.floor(this.videoWidth*e),n=Math.floor(this.videoHeight*e),i=(this.canvas.offsetWidth-r)/2,o=(this.canvas.offsetHeight-n)/2,a=i/e,s=o/e;this.videoCamera.panWorld=[a,s],this.videoCamera.parallelScale=e}getWorldToCanvasRatio(){return this.videoCamera.parallelScale}getCanvasToWorldRatio(){return 1/this.videoCamera.parallelScale}getTransform(){const e=this.videoCamera.panWorld,r=window.devicePixelRatio||1,n=this.getWorldToCanvasRatio(),i=this.getCanvasToWorldRatio(),o=[this.canvas.offsetWidth/2,this.canvas.offsetHeight/2],a=[o[0]*i,o[1]*i],s=new Hh;return s.scale(r,r),s.translate(o[0],o[1]),s.scale(n,n),s.translate(e[0],e[1]),s.translate(-a[0],-a[1]),s}updateCameraClippingPlanesAndRange(){}addImages(e){const r=this.getActors();e.forEach(n=>{const{imageId:i,...o}=n,a=$e.getImage(i),s=this.createActorMapper(a),c=n.actorUID??Pn();s&&(r.push({uid:c,actor:s,referencedId:i,...o}),n.callback&&n.callback({imageActor:s,imageId:i}))}),this.setActors(r)}createActorMapper(e){return new mle(this,e)}};Rp.frameRangeExtractor=/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i;let Th=Rp;const vle=` +`;function Yae(t,e,r){if(e.apply(t)){const i=t.getIndependentComponents();return`${t.getMTime()}-${i}-${r}`}return"0"}const Va=new Float64Array(16),Fc=new Float64Array(16),yv=new Float64Array(16),_l=new Float64Array(4),Ai=new Float64Array(4);function Jae(t,e){e.classHierarchy.push("vtkWebGPUImageMapper"),t.buildPass=i=>{if(i){e.WebGPUImageSlice=t.getFirstAncestorOfType("vtkWebGPUImageSlice"),e.WebGPURenderer=e.WebGPUImageSlice.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.device=e.WebGPURenderWindow.getDevice();const o=e.WebGPURenderer.getRenderable();e.renderable.getSliceAtFocalPoint()&&e.renderable.setSliceFromCamera(o.getActiveCamera())}},t.translucentPass=i=>{i&&t.render()},t.opaquePass=i=>{i&&t.render()},t.render=()=>{e.renderable.update(),e.currentInput=e.renderable.getInputData(),t.prepareToDraw(e.WebGPURenderer.getRenderEncoder()),e.renderEncoder.registerDrawCallback(e.pipeline,t.draw)},t.computePipelineHash=()=>{const i=e.currentInput.getExtent();i[0]===i[1]||i[2]===i[3]||i[4]===i[5]?(e.dimensions=2,e.pipelineHash="img2"):(e.dimensions=3,e.pipelineHash="img3")},t.updateUBO=()=>{const i=e.UBO.getSendTime(),o=e.WebGPUImageSlice.getRenderable(),a=o.getMapper();if(t.getMTime()>i||e.renderable.getMTime()>i||o.getProperty().getMTime()>i){const s=a.getInputData(),c=e.WebGPURenderer.getStabilizedCenterByReference();Wt(Va),dr(Va,Va,c);const l=o.getMatrix();En(Fc,l),$r(Fc,Fc),An(Va,Fc,Va);const f=s.getWorldToIndex();An(Va,f,Va),$r(yv,Va),em(Fc,[.5,.5,.5]),An(Va,Fc,Va);const u=s.getDimensions();Wt(Fc),cl(Fc,Fc,[1/u[0],1/u[1],1/u[2]]),An(Va,Fc,Va),e.UBO.setArray("SCTCMatrix",Va);const d=e.currentInput.getExtent(),{ijkMode:h}=e.renderable.getClosestIJKAxis();let g=e.renderable.getSlice();h!==e.renderable.getSlicingMode()&&(g=e.renderable.getSliceAtPosition(g));let p=2,v=0,y=1;h===GD.I?(p=0,v=1,y=2):h===GD.J&&(p=1,v=2,y=0),_l[p]=g,_l[v]=d[v*2]-.5,_l[y]=d[y*2]-.5,_l[3]=1,ku(_l,_l,yv),e.UBO.setArray("Origin",_l),Ai[p]=g,Ai[v]=d[v*2+1]+.5,Ai[y]=d[y*2]-.5,Ai[3]=1,ku(Ai,Ai,yv),z6(Ai,Ai,_l),Ai[3]=1,e.UBO.setArray("Axis1",Ai),Ai[p]=g,Ai[v]=d[v*2]-.5,Ai[y]=d[y*2+1]+.5,Ai[3]=1,ku(Ai,Ai,yv),z6(Ai,Ai,_l),Ai[3]=1,e.UBO.setArray("Axis2",Ai);const m=[1,1,1,1],w=[0,0,0,0],x=e.textureViews[0],C=x.getTexture().getScale(),S=x.getTexture().getNumberOfComponents();for(let T=0;T{const i=e.WebGPUImageSlice.getRenderable().getProperty();t.getTextureViews()[0].getTexture().getNumberOfComponents();const a=1,s=Yae(i,i.getRGBTransferFunction,a);if(e.colorTextureString!==s){e.numRows=a;const c=new Uint8ClampedArray(e.numRows*2*e.rowLength*4);let l=i.getRGBTransferFunction();if(l){const f=new Float32Array(e.rowLength*3);for(let u=0;u{r();const i=e.device.getTextureManager().getTextureForImageData(e.currentInput),o=e.textureViews;if(!o[0]||o[0].getTexture()!==i){const c=i.createView("imgTexture");o[0]=c}t.updateLUTImage(),t.updateUBO();const s=e.WebGPUImageSlice.getRenderable().getProperty().getInterpolationType()===cd.NEAREST?"nearest":"linear";(!e.clampSampler||s!==e.clampSampler.getOptions().minFilter)&&(e.clampSampler=ZN.newInstance({label:"clampSampler"}),e.clampSampler.create(e.device,{minFilter:s,magFilter:s}),e.additionalBindables=[e.clampSampler])};const n=t.getShaderReplacements();t.replaceShaderPosition=(i,o,a)=>{const s=o.getShaderDescription("vertex");s.addBuiltinOutput("vec4","@builtin(position) Position");let c=s.getCode();const l=["var pos: vec4 = mapperUBO.Origin +"," (vertexBC.x * 0.5 + 0.5) * mapperUBO.Axis1 + (vertexBC.y * 0.5 + 0.5) * mapperUBO.Axis2;","pos.w = 1.0;"];e.dimensions===2?l.push("var tcoord : vec2 = (mapperUBO.SCTCMatrix * pos).xy;"):l.push("var tcoord : vec3 = (mapperUBO.SCTCMatrix * pos).xyz;"),l.push("output.tcoordVS = tcoord;","output.Position = rendererUBO.SCPCMatrix * pos;"),c=sr.substitute(c,"//VTK::Position::Impl",l).result,s.setCode(c)},n.set("replaceShaderPosition",t.replaceShaderPosition),t.replaceShaderTCoord=(i,o,a)=>{const s=o.getShaderDescription("vertex");e.dimensions===2?s.addOutput("vec2","tcoordVS"):s.addOutput("vec3","tcoordVS")},n.set("replaceShaderTCoord",t.replaceShaderTCoord),t.replaceShaderImage=(i,o,a)=>{const s=o.getShaderDescription("fragment");let c=s.getCode();e.dimensions===3?c=sr.substitute(c,"//VTK::Image::Sample",[" var computedColor: vec4 ="," textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);","//VTK::Image::Sample"]).result:c=sr.substitute(c,"//VTK::Image::Sample",[" var computedColor: vec4 ="," textureSampleLevel(imgTexture, clampSampler, input.tcoordVS, 0.0);","//VTK::Image::Sample"]).result,c=sr.substitute(c,"//VTK::Image::Sample",[" var coord: vec2 ="," vec2(computedColor.r * mapperUBO.cScale.r + mapperUBO.cShift.r, 0.5);"," computedColor = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);"]).result,s.setCode(c)},n.set("replaceShaderImage",t.replaceShaderImage)}const Zae={rowLength:1024};function Qae(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Zae,r),CS.extend(t,e,r),t.setFragmentShaderTemplate(Xae),e.UBO=Y0.newInstance({label:"mapperUBO"}),e.UBO.addEntry("SCTCMatrix","mat4x4"),e.UBO.addEntry("Origin","vec4"),e.UBO.addEntry("Axis2","vec4"),e.UBO.addEntry("Axis1","vec4"),e.UBO.addEntry("cScale","vec4"),e.UBO.addEntry("cShift","vec4"),e.lutBuildTime={},yr(e.lutBuildTime,{mtime:0}),e.imagemat=Wt(new Float64Array(16)),e.imagematinv=Wt(new Float64Array(16)),e.VBOBuildTime={},yr(e.VBOBuildTime),Jae(t,e)}const ese=$n(Qae,"vtkWebGPUImageMapper");Es("vtkImageMapper",ese);function tse(t,e){e.classHierarchy.push("vtkWebGPUImageSlice"),t.buildPass=r=>{if(!(!e.renderable||!e.renderable.getVisibility())&&r){if(!e.renderable)return;e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes()}},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children.forEach(n=>{n.traverse(r)}),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children.forEach(n=>{n.traverse(r)}),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const n=e.renderable.getMatrix(),i=r.getStabilizedCenterByReference();e.bufferShift[0]=n[3]-i[0],e.bufferShift[1]=n[7]-i[1],e.bufferShift[2]=n[11]-i[2],En(e.keyMatrices.bcwc,n),e.renderable.getIsIdentity()?Wt(e.keyMatrices.normalMatrix):(kr(e.keyMatrices.normalMatrix,e.keyMatrices.bcwc),e.keyMatrices.normalMatrix[3]=0,e.keyMatrices.normalMatrix[7]=0,e.keyMatrices.normalMatrix[11]=0,$r(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix),En(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix)),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-i[0],-i[1],-i[2]]),e.keyMatricesTime.modified()}return e.keyMatrices}}const nse={bufferShift:void 0,keyMatrixTime:null,keyMatrices:null,propID:void 0};function rse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,nse,r),fr.extend(t,e,r),e.keyMatricesTime={},yr(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},e.keyMatrixTime={},yr(e.keyMatrixTime,{mtime:0}),e.keyMatrices={mcwc:Wt(new Float64Array(16))},e.bufferShift=[0,0,0,0],Go(t,e,["propID","keyMatricesTime"]),tse(t,e)}const ise=$n(rse,"vtkWebGPUImageSlice");Es("vtkImageSlice",ise);function ose(t,e){e.classHierarchy.push("vtkWebGPUVolume"),t.buildPass=i=>{!e.renderable||!e.renderable.getVisibility()||i&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),e.renderable.getMapper().update())},t.queryPass=(i,o)=>{if(i){if(!e.renderable||!e.renderable.getVisibility())return;const a=e.renderable.getMapper().getBounds();if(!a||a.length!==6||a[0]>a[1])return;o.addVolume(t)}};const r=new Float64Array(3),n=new Float64Array(3);t.getBoundingCubePoints=(i,o)=>{const a=e.renderable.getMapper().getInputData();if(!a)return;const s=a.getExtent(),c=e.renderable.getMatrix();let l=0;for(let f=4;f<6;f++){r[2]=s[f];for(let u=2;u<4;u++){r[1]=s[u];for(let d=0;d<2;d++){r[0]=s[d],a.indexToWorld(r,n);let h=o+l*3;i[h++]=c[0]*n[0]+c[1]*n[1]+c[2]*n[2]+c[3],i[h++]=c[4]*n[0]+c[5]*n[1]+c[6]*n[2]+c[7],i[h++]=c[8]*n[0]+c[9]*n[1]+c[10]*n[2]+c[11],l++}}}},t.getKeyMatrices=i=>{if(Math.max(e.renderable.getMTime(),i.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const o=e.renderable.getMatrix(),a=i.getStabilizedCenterByReference();En(e.keyMatrices.bcwc,o),dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-a[0],-a[1],-a[2]]),e.keyMatricesTime.modified()}return e.keyMatrices}}const ase={propID:void 0,keyMatricesTime:null};function sse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ase,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),ose(t,e)}const cse=J.newInstance(sse,"vtkWebGPUVolume");Es("vtkVolume",cse);function lse(t,e){e.classHierarchy.push("vtkWebGPUPixelSpaceCallbackMapper"),t.opaquePass=(r,n)=>{e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent();const i=e.WebGPURenderer.getAspectRatio(),o=e.WebGPURenderer?e.WebGPURenderer.getRenderable().getActiveCamera():null,a=e.WebGPURenderer.getTiledSizeAndOrigin(),s=null;e.renderable.getUseZValues(),e.renderable.invokeCallback(e.renderable.getInputData(),o,i,a,s)}}const use={};function fse(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,use,r),fr.extend(t,e,r),lse(t,e)}const dse=J.newInstance(fse,"vtkWebGPUPixelSpaceCallbackMapper");Es("vtkPixelSpaceCallbackMapper",dse);const WD=[[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],zD=[[0,-1,0],[0,1,0]],hse=[[0,-1,0],[0,1,0],[0,0,-1]],gse=[[0,-1,0],[0,1,0],[0,0,1]];var lh;let s0=(lh=class{static copyMap(e,r){for(const[n,i]of r.rows)e.rows.set(n,structuredClone(i))}constructor(e,r,n=1){this.rows=new Map,this.height=1,this.width=1,this.depth=1,this.jMultiple=1,this.kMultiple=1,this.numComps=1,this.pixelDataConstructor=Uint8Array,this.updateScalarData=function(i){i.fill(0);const o=(a,s,c)=>{const{start:l,end:f,value:u}=s;for(let d=l;d{const o=i%this.jMultiple,a=(i-o)/this.jMultiple,s=this.getRLE(o,a);return(s==null?void 0:s.value)??this.defaultValue},this.getRun=(i,o)=>{const a=i+o*this.height;return this.rows.get(a)},this.set=(i,o)=>{if(o===void 0)return;const a=i%this.width,s=(i-a)/this.width,c=this.rows.get(s);if(!c){this.rows.set(s,[{start:a,end:a+1,value:o}]);return}const l=this.findIndex(c,a),f=c[l],u=c[l-1];if(!f){if(!u||u.value!==o||u.end!==a){c[l]={start:a,end:a+1,value:o};return}u.end++;return}const{start:d,end:h,value:g}=f;if(o===g&&a>=d)return;const p={start:a,end:a+1,value:o},v=a>d,y=v?l+1:l,m=v?f:u;let w=v?c[l+1]:f;if((m==null?void 0:m.value)===o&&(m==null?void 0:m.end)===a){m.end++,(w==null?void 0:w.value)===o&&w.start===a+1?(m.end=w.end,c.splice(l,1)):(w==null?void 0:w.start)===a&&(w.start++,w.start===w.end&&(c.splice(l,1),w=c[l],(w==null?void 0:w.start)===a+1&&w.value===o&&(m.end=w.end,c.splice(l,1))));return}if((w==null?void 0:w.value)===o&&w.start===a+1){w.start--,(m==null?void 0:m.end)>a&&(m.end=a,m.end===m.start&&c.splice(l,1));return}if((w==null?void 0:w.start)===a&&w.end===a+1){w.value=o;const x=c[l+1];(x==null?void 0:x.start)==a+1&&x.value===o&&(c.splice(l+1,1),w.end=x.end);return}a===(w==null?void 0:w.start)&&w.start++,v&&h>a+1?c.splice(y,0,p,{start:a+1,end:m.end,value:m.value}):c.splice(y,0,p),(m==null?void 0:m.end)>a&&(m.end=a)},this.width=e,this.height=r,this.depth=n,this.jMultiple=e,this.kMultiple=this.jMultiple*r}toIJK(e){const r=e%this.jMultiple,n=(e-r)/this.jMultiple%this.height,i=Math.floor(e/this.kMultiple);return[r,n,i]}toIndex([e,r,n]){return e+n*this.kMultiple+r*this.jMultiple}getRLE(e,r,n=0){const i=this.rows.get(r+n*this.height);if(!i)return;const o=this.findIndex(i,e),a=i[o];return e>=(a==null?void 0:a.start)?a:void 0}has(e){const r=e%this.jMultiple,n=(e-r)/this.jMultiple,i=this.getRLE(r,n);return(i==null?void 0:i.value)!==void 0}delete(e){const r=e%this.width,n=(e-r)/this.width,i=this.rows.get(n);if(!i)return;const o=this.findIndex(i,r),a=i[o];if(!a||a.start>r)return;if(a.end===r+1){a.end--,a.start>=a.end&&(i.splice(o,1),i.length||this.rows.delete(n));return}if(a.start===r){a.start++;return}const s={value:a.value,start:r+1,end:a.end};a.end=r,i.splice(o+1,0,s)}findIndex(e,r){for(let n=0;nh&&h[0].value===r);e.push(...d)}return o}fillFrom(e,r){for(let n=r[2][0];n<=r[2][1];n++)for(let i=r[1][0];i<=r[1][1];i++){let o,a;for(let s=r[0][0];s<=r[0][1];s++){const c=e(s,i,n);if(c===void 0){o=void 0;continue}a||(a=[],this.rows.set(i+n*this.height,a)),o&&o.value!==c&&(o=void 0),o||(o={start:s,end:s,value:c},a.push(o)),o.end++}}}findAdjacents(e,{diagonals:r=!0,planar:n=!0,singlePlane:i=!1}){const[o,a,s,c]=e,{start:l,end:f}=o,u=l>0&&this.getRLE(l-1,a,s),d=f0?l-1:l,f=this.height||w<0||w>=this.depth)continue;const x=this.getRun(m,w);if(x)for(const C of x){const S=c||i&&zD||n&&y>0&&gse||n&&y<0&&hse||WD;C.end<=h[0]||C.start>=h[1]||g.push([C,m,w,S])}}return g}},lh.getScalarData=function(e=Uint8ClampedArray){const r=new e(this.frameSize);return this.map.updateScalarData(r),r},lh),M2=class Zg{constructor(e={}){this._dimensions=3,this._length=0,this._byteSize=4,this.growSize=128;const{initialSize:r=1024,dimensions:n=3,growSize:i=128}=e,o=r*n;this.growSize=i,this.array=new ArrayBuffer(o*this._byteSize),this.data=new Float32Array(this.array),this._dimensions=n}forEach(e){for(let r=0;r=this._length)return;const r=this._dimensions*e;return this.data.subarray(r,r+this._dimensions)}getPointArray(e){const r=[];if(e<0&&(e+=this._length),e<0||e>=this._length)return;const n=this._dimensions*e;for(let i=0;ie)}toXYZ(){const e={x:[],y:[]};this._dimensions>=3&&(e.z=[]);const{x:r,y:n,z:i}=e;return this.forEach(o=>{r.push(o[0]),n.push(o[1]),i&&i.push(o[2])}),e}static fromXYZ({x:e,y:r,z:n}){const i=Zg.create3(e.length);let o=0;for(let a=0;an.push(i)),n}static create2(e=128){return new Zg({initialSize:e,dimensions:2})}};function QN(t){const e=Ke(),r=t.getDimensions(),n=M2.create3(r[0]),i=M2.create3(r[1]),o=M2.create3(r[2]),a=t.getDirection(),s=a.slice(0,3),c=a.slice(3,6),l=a.slice(6,9),f=t.getSpacing(),[u,d,h]=f,g=t.indexToWorld([0,0,0]),p=Ft(s[0]*u,s[1]*u,s[2]*u),v=Ft(c[0]*d,c[1]*d,c[2]*d),y=Ft(l[0]*h,l[1]*h,l[2]*h),m=Ke();for(let S=0;S{const[_,E,b]=S,D=_*3,I=E*3,P=b*3;return T[0]=w[D]+x[I]+C[P],T[1]=w[D+1]+x[I+1]+C[P+1],T[2]=w[D+2]+x[I+2]+C[P+2],T}}function z4(t,e){const{pointInShapeFn:r,callback:n,boundsIJK:i,returnPoints:o=!1}=e;let a;if(t.getScalarData)a=t.getScalarData();else{const u=t.getPointData().getScalars();if(u)a=u.getData();else{const{voxelManager:d}=t.get("voxelManager")||{};d&&(a=d.getCompleteScalarDataArray())}}const s=t.getDimensions(),c=[[0,s[0]],[0,s[1]],[0,s[2]]],f=pse({imageData:t,bounds:i||c,scalarData:a,pointInShapeFn:r,callback:n});return o?f:void 0}function pse({imageData:t,bounds:e,scalarData:r,pointInShapeFn:n,callback:i}){const[[o,a],[s,c],[l,f]]=e,{numComps:u}=t,d=t.getDimensions(),h=QN(t),g=[0,0,0],p=u||r.length/d[2]/d[1]/d[0],v=d[0]*p,y=d[1]*v,m=[];for(let w=l;w<=f;w++){g[2]=w;const x=w*y;for(let C=s;C<=c;C++){g[1]=C;const S=x+C*v;for(let T=o;T<=a;T++){g[0]=T;const _=h(g);if(n(_,g)){const E=S+T*p;let b;p>2?b=[r[E],r[E+1],r[E+2]]:b=r[E],m.push({value:b,index:E,pointIJK:g,pointLPS:_.slice()}),i({value:b,index:E,pointIJK:g,pointLPS:_})}}}}return m}function mse({voxelManager:t,bounds:e,imageData:r,pointInShapeFn:n,callback:i,returnPoints:o}){const[[a,s],[c,l],[f,u]]=e,d=QN(r),h=[0,0,0],g=[];for(let p=f;p<=u;p++){h[2]=p;for(let v=c;v<=l;v++){h[1]=v;for(let y=a;y<=s;y++){h[0]=y;const m=d(h);if(n(m,h)){const w=t.toIndex(h),x=t.getAtIndex(w);o&&g.push({value:x,index:w,pointIJK:[...h],pointLPS:m.slice()}),i==null||i({value:x,index:w,pointIJK:h,pointLPS:m})}}}}return g}const vse=5*1024;let hc=class Ni{get id(){return this._id}constructor(e,r){this.modifiedSlices=new Set,this.boundsIJK=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]],this.scalarData=null,this._sliceDataCache=null,this.getAtIJK=(n,i,o)=>{const a=this.toIndex([n,i,o]);return this._get(a)},this.setAtIJK=(n,i,o,a)=>{const s=this.toIndex([n,i,o]),c=this._set(s,a);return c!==!1&&(this.modifiedSlices.add(o),Ni.addBounds(this.boundsIJK,[n,i,o])),c},this.getAtIJKPoint=([n,i,o])=>this.getAtIJK(n,i,o),this.setAtIJKPoint=([n,i,o],a)=>{this.setAtIJK(n,i,o,a)},this.getAtIndex=n=>this._get(n),this.setAtIndex=(n,i)=>{const o=this._set(n,i);if(o!==!1){const a=this.toIJK(n);this.modifiedSlices.add(a[2]),Ni.addBounds(this.boundsIJK,a)}return o},this.getMiddleSliceData=()=>{const n=Math.floor(this.dimensions[2]/2);return this.getSliceData({sliceIndex:n,slicePlane:2})},this.forEach=(n,i={})=>{const o=i.boundsIJK||this.getBoundsIJK(),a=i.isInObject||this.isInObject||(()=>!0),s=i.returnPoints||!1,c=i.imageData,l=Math.min(o[0][0],o[0][1]),f=Math.max(o[0][0],o[0][1]),u=Math.min(o[1][0],o[1][1]),d=Math.max(o[1][0],o[1][1]),h=Math.min(o[2][0],o[2][1]),g=Math.max(o[2][0],o[2][1]),p=[];if(c)return mse({voxelManager:this,imageData:i.imageData,bounds:[[l,f],[u,d],[h,g]],pointInShapeFn:a,callback:n,returnPoints:s});if(this.map){if(this.map instanceof s0)return this.rleForEach(n,i);for(const v of this.map.keys()){const y=this.toIJK(v);if(!a(null,y))continue;const m=this._get(v);s&&p.push({value:m,index:v,pointIJK:y,pointLPS:null}),n({value:m,index:v,pointIJK:y,pointLPS:null})}return p}else{for(let v=h;v<=g;v++){const y=v*this.frameSize;for(let m=u;m<=d;m++){const w=y+m*this.width;for(let x=l,C=w+x;x<=f;x++,C++){const S=this.getAtIndex(C),T=[x,m,v];a(null,T)&&(s&&p.push({value:S,index:C,pointIJK:T,pointLPS:null}),n({value:S,index:C,pointIJK:[x,m,v],pointLPS:null}))}}}return p}},this.getSliceData=({sliceIndex:n,slicePlane:i})=>{const[o,a,s]=this.dimensions,c=o*a,l=n*c;let f;const u=this.getConstructor();function d(g){return typeof g=="function"}if(!d(u))return new Uint8Array(0);let h;switch(i){case 0:f=a*s,h=new u(f);for(let g=0;g{const o=Array.isArray(i);if(e===void 0&&(e=o?[...i]:i,r=o?[...i]:i),o)for(let a=0;a[0,e-1])}getBoundsIJK(){return this.boundsIJK[0][0]{e[0]=1/0,e[1]=-1/0})}clear(){var e,r;(e=this.map)==null||e.clear(),this.clearBounds(),this.modifiedSlices.clear(),(r=this.points)==null||r.clear()}getConstructor(){return this.scalarData?this.scalarData.constructor:this._getConstructor?this._getConstructor():(console.warn("No scalar data available or can be used to get the constructor"),Float32Array)}getArrayOfModifiedSlices(){return Array.from(this.modifiedSlices)}resetModifiedSlices(){this.modifiedSlices.clear()}setBounds(e){this.boundsIJK=e}static addBounds(e,r){e||(e=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]]),e[0][0]=Math.min(r[0],e[0][0]),e[0][1]=Math.max(r[0],e[0][1]),e[1][0]=Math.min(r[1],e[1][0]),e[1][1]=Math.max(r[1],e[1][1]),e[2][0]=Math.min(r[2],e[2][0]),e[2][1]=Math.max(r[2],e[2][1])}addPoint(e){const r=Array.isArray(e)?e[0]+this.width*e[1]+this.frameSize*e[2]:e;this.points||(this.points=new Set),this.points.add(r)}getPoints(){return this.points?[...this.points].map(e=>this.toIJK(e)):[]}setSliceDataValue(e,r,n){if(Array.isArray(n))for(let i=0;i(a*=n,[r[a++],r[a++],r[a++]]),_id:i||"_createRGBScalarVolumeVoxelManager",_set:(a,s)=>{a*=3;const c=!Zt(r[a],s);return r[a++]=s[0],r[a++]=s[1],r[a++]=s[2],c},numberOfComponents:n,scalarData:r});return o.clear=()=>{r.fill(0)},o}static createImageVolumeVoxelManager({dimensions:e,imageIds:r,numberOfComponents:n=1,id:i}){const o=e[0]*e[1];function a(u){const d=Math.floor(u/o);if(d<0||d>=e[2])return{};const h=r[d];if(!h)return console.warn(`ImageId not found for sliceIndex: ${d}`),{pixelData:null,pixelIndex:null};const g=$e.getImage(h);if(!g)return console.warn(`Image not found for imageId: ${h}`),{pixelData:null,pixelIndex:null};const p=g.voxelManager,v=u%o;return{voxelManager:p,pixelIndex:v}}function s(u){const{voxelManager:d,pixelIndex:h}=a(u);return!d||h===null?null:d.getAtIndex(h)}function c(u,d){const{voxelManager:h,pixelIndex:g}=a(u);if(!h||g===null)return!1;const p=h.getAtIndex(g),v=!Zt(d,p);return v&&(h.setAtIndex(g,d),!0)}const l=()=>{const{voxelManager:u,pixelIndex:d}=a(0);return!u||d===null?null:u.getConstructor()},f=new Ni(e,{_get:s,_set:c,numberOfComponents:n,_getConstructor:l,_id:i||"createImageVolumeVoxelManager"});return f.getMiddleSliceData=()=>{const u=Math.floor(e[2]/2);return f.getSliceData({sliceIndex:u,slicePlane:2})},f.clear=()=>{for(const u of r)$e.getImage(u).voxelManager.clear()},f.getRange=()=>{let u=1/0,d=-1/0;for(const h of r){const g=$e.getImage(h);g&&(g.minPixelValued&&(d=g.maxPixelValue))}return u===1/0&&d===-1/0?[0,0]:[u,d]},f._getScalarDataLength=()=>{const{voxelManager:u,pixelIndex:d}=a(0);return!u||d===null?0:u.getScalarDataLength()*e[2]},f.getCompleteScalarDataArray=()=>{const u=f._getConstructor();if(!u)return new Uint8Array(0);const d=f.getScalarDataLength(),h=new u(d),g=e[0]*e[1]*n;for(let p=0;p{const d=e[0]*e[1]*n,h=f._getConstructor();let g=1/0,p=-1/0;for(let v=0;v4||n<1||n===2))throw new Error(`Number of components ${n} must be 1, 3 or 4`);return n>1?Ni._createRGBScalarVolumeVoxelManager({dimensions:e,scalarData:r,numberOfComponents:n,id:i}):Ni._createNumberVolumeVoxelManager({dimensions:e,scalarData:r,id:i})}static createScalarDynamicVolumeVoxelManager({imageIdGroups:e,dimensions:r,dimensionGroupNumber:n=1,timePoint:i=0,numberOfComponents:o=1,id:a}){let s=0;if(n!==void 0?s=n-1:i!==void 0&&(console.warn("Warning: timePoint parameter is deprecated. Please use dimensionGroupNumber instead. timePoint is zero-based while dimensionGroupNumber starts at 1."),s=i),!o){const f=$e.getImage(e[0][0]);if(!f)throw new Error("Unable to determine number of components: No image found");if(o=f.getPixelData().length/(r[0]*r[1]),o>4||o<1||o===2)throw new Error(`Number of components ${o} must be 1, 3 or 4`)}const c=e.map(f=>Ni.createImageVolumeVoxelManager({dimensions:r,imageIds:f,numberOfComponents:o,id:a})),l=new Ni(r,{_get:f=>c[s]._get(f),_set:(f,u)=>c[s]._set(f,u),numberOfComponents:o,_id:a||"createScalarDynamicVolumeVoxelManager"});return l.getScalarDataLength=()=>c[s].getScalarDataLength(),l.getConstructor=()=>c[s].getConstructor(),l.getRange=()=>c[s].getRange(),l.getMiddleSliceData=()=>c[s].getMiddleSliceData(),l.setTimePoint=f=>{console.warn("Warning: setTimePoint is deprecated. Please use setDimensionGroupNumber instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.setDimensionGroupNumber(f+1)},l.setDimensionGroupNumber=f=>{s=f-1,l._get=u=>c[s]._get(u),l._set=(u,d)=>c[s]._set(u,d)},l.getAtIndexAndTimePoint=(f,u)=>(console.warn("Warning: getAtIndexAndTimePoint is deprecated. Please use getAtIndexAndDimensionGroup instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.getAtIndexAndDimensionGroup(f,u+1)),l.getAtIndexAndDimensionGroup=(f,u)=>c[u-1]._get(f),l.getTimePointScalarData=f=>(console.warn("Warning: getTimePointScalarData is deprecated. Please use getDimensionGroupScalarData instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),l.getDimensionGroupScalarData(f+1)),l.getDimensionGroupScalarData=f=>c[f-1].getCompleteScalarDataArray(),l.getCurrentTimePointScalarData=()=>(console.warn("Warning: getCurrentTimePointScalarData is deprecated. Please use getCurrentDimensionGroupScalarData instead."),l.getCurrentDimensionGroupScalarData()),l.getCurrentDimensionGroupScalarData=()=>c[s].getCompleteScalarDataArray(),l.getCurrentTimePoint=()=>(console.warn("Warning: getCurrentTimePoint is deprecated. Please use getCurrentDimensionGroupNumber instead. Note that timePoint is zero-based while dimensionGroupNumber starts at 1."),s),l.getCurrentDimensionGroupNumber=()=>s+1,l}static createImageVoxelManager({width:e,height:r,scalarData:n,numberOfComponents:i=1,id:o}){const a=[e,r,1];if(!i&&(i=n.length/e/r,i>4||i<1||i===2))throw new Error(`Number of components ${i} must be 1, 3 or 4`);return i>1?Ni._createRGBScalarVolumeVoxelManager({dimensions:a,scalarData:n,numberOfComponents:i,id:o}):Ni._createNumberVolumeVoxelManager({dimensions:a,scalarData:n,id:o})}static _createNumberVolumeVoxelManager({dimensions:e,scalarData:r,id:n}){const i=new Ni(e,{_get:o=>r[o],_set:(o,a)=>{const s=r[o]!==a;return r[o]=a,s},_getConstructor:()=>r.constructor,_id:n||"_createNumberVolumeVoxelManager"});return i.scalarData=r,i.clear=()=>{i.scalarData.fill(0)},i.getMiddleSliceData=()=>{const o=Math.floor(e[2]/2);return i.getSliceData({sliceIndex:o,slicePlane:2})},i}static createMapVoxelManager({dimension:e,id:r}){const n=new Map,i=new Ni(e,{_get:n.get.bind(n),_set:(o,a)=>n.set(o,a)&&!0,_id:r||"createMapVoxelManager"});return i.map=n,i}static createHistoryVoxelManager(e,r){const n=new Map,{dimensions:i}=e,o=new Ni(i,{_get:a=>n.get(a),_set:function(a,s){if(n.has(a))s===n.get(a)&&n.delete(a);else{const c=this.sourceVoxelManager.getAtIndex(a);if(c===s)return!1;n.set(a,c)}this.sourceVoxelManager.setAtIndex(a,s)},_id:r||"createHistoryVoxelManager"});return o.map=n,o.scalarData=e.scalarData,o.sourceVoxelManager=e,o}static createRLEHistoryVoxelManager(e,r){const{dimensions:n}=e,i=new s0(n[0],n[1],n[2]),o=new Ni(n,{_get:a=>i.get(a),_set:function(a,s){const c=i.get(a);if(c===void 0){const l=this.sourceVoxelManager.getAtIndex(a);if(l===s||l===void 0&&s===0||s===null)return!1;i.set(a,l??0)}else(s===c||s===null)&&(i.delete(a),s=c);this.sourceVoxelManager.setAtIndex(a,s)},_getScalarData:s0.getScalarData,_updateScalarData:a=>(i.updateScalarData(a),a),_id:r||"createRLEHistoryVoxelManager"});return o.map=i,o.sourceVoxelManager=e,o}static createLazyVoxelManager({dimensions:e,planeFactory:r,id:n}){const i=new Map,[o,a]=e,s=o*a,c=new Ni(e,{_get:l=>i.get(Math.floor(l/s))[l%s],_set:(l,f)=>{const u=Math.floor(l/s);let d=i.get(u);return d||(d=r(o,a),i.set(u,d)),d[l%s]=f,!0},_id:n||"createLazyVoxelManager"});return c.map=i,c}static createRLEVolumeVoxelManager({dimensions:e,id:r}){const[n,i,o]=e,a=new s0(n,i,o),s=new Ni(e,{_get:c=>a.get(c),_set:(c,l)=>(a.set(c,l),!0),_getScalarData:s0.getScalarData,_updateScalarData:c=>(a.updateScalarData(c),c),_id:r||"createRLEVolumeVoxelManager"});return s.map=a,s.getPixelData=a.getPixelData.bind(a),s}static createRLEImageVoxelManager({dimensions:e,id:r}){const[n,i]=e;return Ni.createRLEVolumeVoxelManager({dimensions:[n,i,1],id:r})}static addInstanceToImage(e){const{width:r,height:n}=e,i=e.voxelManager.getScalarData();if(i.length>=r*n){e.voxelManager=Ni.createScalarVolumeVoxelManager({dimensions:[r,n,1],scalarData:i});return}e.voxelManager=Ni.createRLEVolumeVoxelManager({dimensions:[r,n,1]}),e.getPixelData=e.voxelManager.getPixelData,e.sizeInBytes=vse}};class Ud{constructor(e){this._imageIdsIndexMap=new Map,this._imageURIsIndexMap=new Map,this.cornerstoneImageMetaData=null,this.isPreScaled=!1,this.numTimePoints=null,this.numFrames=null;const{imageIds:r,scaling:n,dimensions:i,spacing:o,origin:a,direction:s,dataType:c,volumeId:l,referencedVolumeId:f,metadata:u,referencedImageIds:d,additionalDetails:h,voxelManager:g,numberOfComponents:p}=e;if(!c)throw new Error('Data type is required, please provide a data type as string such as "Uint8Array", "Float32Array", etc.');let{imageData:v}=e;this.imageIds=r,this.volumeId=l,this.metadata=u,this.dimensions=i,this.spacing=o,this.origin=a,this.direction=s,this.dataType=c,this.vtkOpenGLTexture=$re.newInstance(),this.vtkOpenGLTexture.setVolumeId(l),this.voxelManager=g??hc.createImageVolumeVoxelManager({dimensions:i,imageIds:r,numberOfComponents:p}),this.numVoxels=this.dimensions[0]*this.dimensions[1]*this.dimensions[2],v||(v=tm.newInstance(),v.setDimensions(i),v.setSpacing(o),v.setDirection(s),v.setOrigin(a)),v.set({dataType:c,voxelManager:this.voxelManager,id:l,numberOfComponents:p||1}),v.set({hasScalarVolume:!1}),this.imageData=v,this.numFrames=this._getNumFrames(),this._reprocessImageIds(),n&&(this.scaling=n),f&&(this.referencedVolumeId=f),d&&(this.referencedImageIds=d),h&&(this.additionalDetails=h)}get sizeInBytes(){return this.voxelManager.sizeInBytes}get imageIds(){return this._imageIds}set imageIds(e){this._imageIds=e,this._reprocessImageIds()}_reprocessImageIds(){this._imageIdsIndexMap.clear(),this._imageURIsIndexMap.clear(),this._imageIds.forEach((e,r)=>{const n=Ur(e);this._imageIdsIndexMap.set(e,r),this._imageURIsIndexMap.set(n,r)})}isDynamicVolume(){return this.numTimePoints>1}getImageIdIndex(e){return this._imageIdsIndexMap.get(e)}getImageIdByIndex(e){return this._imageIds[e]}getImageURIIndex(e){return this._imageURIsIndexMap.get(e)}load(e){}destroy(){this.imageData.delete(),this.imageData=null,this.voxelManager.clear(),this.vtkOpenGLTexture.releaseGraphicsResources(),this.vtkOpenGLTexture.delete()}invalidate(){for(let e=0;e$e.getImage(r))}}let Eg={};const Fu={add:(t,e)=>{Fu.addRaw(t,{...e,metadata:structuredClone(e.metadata)})},addRaw:(t,e)=>{const r=e.type;Eg[t]||(Eg[t]={}),Eg[t][r]=e.metadata},get:(t,e)=>{var r;return(r=Eg[e])==null?void 0:r[t]},clear:()=>{Eg={}}};Wh(Fu.get);const Bi=new D4("imageLoadPool");Bi.grabDelay=0;Bi.setMaxSimultaneousRequests(pn.Interaction,1e3);Bi.setMaxSimultaneousRequests(pn.Thumbnail,1e3);Bi.setMaxSimultaneousRequests(pn.Prefetch,1e3);const ky={};let Vy;function ek(t,e){const r=$e.getImageLoadObject(t);if(r)return $D(r.promise,t),r;const n=t.split(":")[0],i=ky[n]||Vy;if(!i)throw new Error(`loadImageFromImageLoader: No image loader found for scheme '${n}'`);const o=i(t,e);return $D(o.promise,t),o}function $D(t,e){Promise.resolve(t).then(r=>{yse(r),ut(et,rt.IMAGE_LOADED,{image:r})}).catch(r=>{const n={imageId:e,error:r};ut(et,rt.IMAGE_LOAD_FAILED,n)})}function yse(t){if(!t.voxelManager){const{width:e,height:r,numberOfComponents:n}=t,i=hc.createImageVoxelManager({scalarData:t.getPixelData(),width:e,height:r,numberOfComponents:n});t.voxelManager=i,t.getPixelData=()=>i.getScalarData(),delete t.imageFrame.pixelData}}function tk(t,e={priority:0,requestType:"prefetch"}){if(t===void 0)throw new Error("loadImage: parameter imageId must not be undefined");return ek(t,e).promise}function _s(t,e={priority:0,requestType:"prefetch"}){if(t===void 0)throw new Error("loadAndCacheImage: parameter imageId must not be undefined");const r=ek(t,e);return $e.getImageLoadObject(t)||$e.putImageLoadObject(t,r),r.promise}function wse(t,e={priority:0,requestType:"prefetch"}){if(!t||t.length===0)throw new Error("loadAndCacheImages: parameter imageIds must be list of image Ids");return t.map(n=>_s(n,e))}function d1(t,e={}){var p;if(t===void 0)throw new Error("createAndCacheDerivedImage: parameter imageId must not be undefined");e.imageId===void 0&&(e.imageId=`derived:${Pn()}`);const{imageId:r,skipCreateBuffer:n,onCacheAdd:i,voxelRepresentation:o}=e,a=wt("imagePlaneModule",t),s=a.rows*a.columns,{TypedArrayConstructor:c}=E4((p=e.targetBuffer)==null?void 0:p.type,s),l=new c(n?1:s),f=r,u=wt("imagePlaneModule",t);Fu.add(f,{type:"imagePlaneModule",metadata:u});const d=wt("generalSeriesModule",t);Fu.add(f,{type:"generalSeriesModule",metadata:d}),Fu.add(f,{type:"generalImageModule",metadata:{instanceNumber:e.instanceNumber}});const h=wt("imagePixelModule",t);Fu.add(f,{type:"imagePixelModule",metadata:{...h,bitsAllocated:8,bitsStored:8,highBit:7,samplesPerPixel:1,pixelRepresentation:0}});const g=j4(r,{scalarData:l,onCacheAdd:i,skipCreateBuffer:n,targetBuffer:{type:l.constructor.name},voxelRepresentation:o,dimensions:[a.columns,a.rows],spacing:[a.columnPixelSpacing,a.rowPixelSpacing],origin:a.imagePositionPatient,direction:a.imageOrientationPatient,frameOfReferenceUID:a.frameOfReferenceUID,referencedImageId:t});return g.referencedImageId=t,$e.getImageLoadObject(r)||$e.putImageSync(r,g),g}function $4(t,e={}){if(t.length===0)throw new Error("createAndCacheDerivedImages: parameter imageIds must be list of image Ids");return t.map((n,i)=>{var a;const o={imageId:((a=e==null?void 0:e.getDerivedImageId)==null?void 0:a.call(e,n))||`derived:${Pn()}`,...e};return d1(n,{...o,instanceNumber:i+1})})}function j4(t,e){const{scalarData:r,origin:n,direction:i,targetBuffer:o,skipCreateBuffer:a,onCacheAdd:s,frameOfReferenceUID:c,voxelRepresentation:l,referencedImageId:f}=e,u=e.dimensions,d=e.spacing;if(!u||!d)throw new Error("createAndCacheLocalImage: dimensions and spacing are required");const h=u[0],g=u[1],p=d[0],v=d[1],y={frameOfReferenceUID:c,rows:g,columns:h,imageOrientationPatient:i??[1,0,0,0,1,0],rowCosines:i?i.slice(0,3):[1,0,0],columnCosines:i?i.slice(3,6):[0,1,0],imagePositionPatient:n??[0,0,0],pixelSpacing:[v,p],rowPixelSpacing:v,columnPixelSpacing:p},m=h*g,w=r.length/m;let x;if(r){if(!(r instanceof Uint8Array||r instanceof Float32Array||r instanceof Uint16Array||r instanceof Int16Array))throw new Error("createAndCacheLocalImage: scalarData must be of type Uint8Array, Uint16Array, Int16Array or Float32Array");x=r}else if(!a){const{TypedArrayConstructor:A}=E4(o==null?void 0:o.type,m);x=new A(m)}let C,S,T;if(x instanceof Uint8Array)C=8,S=8,T=7;else if(x instanceof Uint16Array)C=16,S=16,T=15;else if(x instanceof Int16Array)C=16,S=16,T=15;else if(x instanceof Float32Array)C=32,S=32,T=31;else throw new Error("Unsupported scalarData type");const _={samplesPerPixel:1,photometricInterpretation:x.length>u[0]*u[1]?"RGB":"MONOCHROME2",rows:g,columns:h,bitsAllocated:C,bitsStored:S,highBit:T},E={imagePlaneModule:y,imagePixelModule:_};["imagePlaneModule","imagePixelModule"].forEach(A=>{Fu.add(t,{type:A,metadata:E[A]||{}})});const b=t,D=l===fy.RLE&&hc.createRLEImageVoxelManager({dimensions:u,id:b})||hc.createImageVoxelManager({height:g,width:h,numberOfComponents:w,scalarData:x,id:b});let I=x[0],P=x[0];for(let A=1;AP&&(P=x[A]);const O={imageId:t,intercept:0,windowCenter:0,windowWidth:0,color:_.photometricInterpretation==="RGB",numberOfComponents:_.samplesPerPixel,dataType:o==null?void 0:o.type,slope:1,minPixelValue:I,maxPixelValue:P,rows:_.rows,columns:_.columns,getCanvas:void 0,height:_.rows,width:_.columns,rgba:void 0,columnPixelSpacing:y.columnPixelSpacing,rowPixelSpacing:y.rowPixelSpacing,FrameOfReferenceUID:y.frameOfReferenceUID,invert:!1,getPixelData:()=>D.getScalarData(),voxelManager:D,sizeInBytes:r.byteLength,referencedImageId:f};return s==null||s(O),$e.putImageSync(O.imageId,O),O}function nk(t){const e=({additionalDetails:n})=>n.imageId?n.imageId!==t:!0;Bi.filterRequests(e);const r=$e.getImageLoadObject(t);r&&r.cancelFn()}function xse(t){t.forEach(e=>{nk(e)})}function Cse(){const t=Bi.getRequestPool();Object.keys(t).forEach(e=>{const r=t[e];Object.keys(r).forEach(n=>{const i=r[n].pop();if(!i)return;const o=i.additionalDetails,{imageId:a,volumeId:s}=o;let c;a?c=$e.getImageLoadObject(a):s&&(c=$e.getVolumeLoadObject(s)),c&&c.cancel()}),Bi.clearRequestStack(e)})}function ld(t,e){ky[t]=e}function Sse(t){const e=Vy;return Vy=t,e}function Tse(){Object.keys(ky).forEach(t=>delete ky[t]),Vy=void 0}function _se(t,e={}){return $4(t,{...e,targetBuffer:{type:"Uint8Array"}})}function Ese(t,e={}){return d1(t,{...e,targetBuffer:{type:"Uint8Array"}})}const bse=Object.freeze(Object.defineProperty({__proto__:null,cancelLoadAll:Cse,cancelLoadImage:nk,cancelLoadImages:xse,createAndCacheDerivedImage:d1,createAndCacheDerivedImages:$4,createAndCacheDerivedLabelmapImage:Ese,createAndCacheDerivedLabelmapImages:_se,createAndCacheLocalImage:j4,loadAndCacheImage:_s,loadAndCacheImages:wse,loadImage:tk,registerImageLoader:ld,registerUnknownImageLoader:Sse,unregisterAllImageLoaders:Tse},Symbol.toStringTag,{value:"Module"}));function rk(t){const e=t[0],{pixelRepresentation:r,bitsAllocated:n,bitsStored:i,highBit:o,photometricInterpretation:a,samplesPerPixel:s}=wt("imagePixelModule",e),c=[],l=wt("voiLutModule",e);let f;if(l){const{windowWidth:m,windowCenter:w}=l;if(f=l==null?void 0:l.voiLUTFunction,Array.isArray(m))for(let x=0;x({distance:l(p),imageId:p}));h.sort((p,v)=>v.distance-p.distance);const g=h.length;c=Math.abs(h[g-1].distance-h[0].distance)/(g-1)}const{sliceThickness:f,spacingBetweenSlices:u}=wt("imagePlaneModule",t[0]),{strictZSpacingForVolumeViewport:d}=dw().rendering;return(c===0||isNaN(c))&&!d&&(u?(console.debug("Could not calculate spacing. Using spacingBetweenSlices"),c=u):f?(console.debug("Could not calculate spacing and no spacingBetweenSlices. Using sliceThickness"),c=f):(console.debug("Could not calculate spacing. The VolumeViewport visualization is compromised. Setting spacing to 1 to render"),c=1)),c}function H4(t,e){const{imagePositionPatient:r,imageOrientationPatient:n}=wt("imagePlaneModule",t[0]);if(!e){const f=Ft(n[0],n[1],n[2]),u=Ft(n[3],n[4],n[5]);e=Ke(),kn(e,f,u)}const i=t[0].split(":")[0]==="wadouri",o=ik(t);let a;function s(f){const{imagePositionPatient:u}=wt("imagePlaneModule",f),d=Ke();return Mn(d,r,u),kt(d,e)}if(i){const f=[t[0],t[Math.floor(t.length/2)]];a=t;const u=s(f[0]),d=s(f[1]);u-d<0&&a.reverse()}else{const f=t.map(u=>({distance:s(u),imageId:u}));f.sort((u,d)=>d.distance-u.distance),a=f.map(u=>u.imageId)}const{imagePositionPatient:c}=wt("imagePlaneModule",a[0]);return{zSpacing:o,origin:c,sortedImageIds:a}}function ok(t){const e=wt("modalityLutModule",t)||{},r=wt("generalSeriesModule",t)||{},{modality:n}=r,i={rescaleSlope:e.rescaleSlope||1,rescaleIntercept:e.rescaleIntercept??0,modality:n},o=wt("scalingModule",t)||{};return{...i,...n==="PT"&&{suvbw:o.suvbw,suvbsa:o.suvbsa,suvlbm:o.suvlbm},...n==="RTDOSE"&&{doseGridScaling:o.DoseGridScaling,doseSummation:o.DoseSummation,doseType:o.DoseType,doseUnit:o.DoseUnit}}}const K4=t=>Object.values(t).some(r=>typeof r=="number"&&!Number.isInteger(r)),jD={Uint8Array:"Uint8Array",Int16Array:"Int16Array",Uint16Array:"Uint16Array",Float32Array:"Float32Array"};function am(t,e){const r=rk(t),{ImageOrientationPatient:n,PixelSpacing:i,Columns:o,Rows:a}=r,s=Ft(n[0],n[1],n[2]),c=Ft(n[3],n[4],n[5]),l=Ke();kn(l,s,c);const{zSpacing:f,origin:u,sortedImageIds:d}=H4(t,l),h=t.length,g=[i[1],i[0],f],p=[o,a,h].map(y=>Math.floor(y)),v=[...s,...c,...l];return{dimensions:p,spacing:g,origin:u,dataType:Dse(d,r),direction:v,metadata:r,imageIds:d,volumeId:e,voxelManager:null,numberOfComponents:r.PhotometricInterpretation==="RGB"?3:1}}function Dse(t,e){const{BitsAllocated:r,PixelRepresentation:n}=e,i=n===1,o=Ise(t);if(o)return o;const[a,s,c]=[0,Math.floor(t.length/2),t.length-1],l=[a,s,c].map(h=>ok(t[h])),f=l.some(h=>h.rescaleIntercept<0||h.rescaleSlope<0),u=l.some(h=>K4(h)),d=fw();switch(r){case 8:return"Uint8Array";case 16:return d&&u?"Float32Array":i||f?"Int16Array":!i&&!f?"Uint16Array":"Float32Array";case 24:return"Uint8Array";case 32:return"Float32Array";default:throw new Error(`Bits allocated of ${r} is not defined to generate scalarData for the volume.`)}}function Ise(t){const r=[0,Math.floor(t.length/2),t.length-1].map(i=>$e.getImage(t[i]));if(!r.every(Boolean))return null;const n=r[0].getPixelData().constructor.name;return r.every(i=>i.getPixelData().constructor.name===n)&&n in jD?jD[n]:null}let Fy=class ak{constructor(e){this.name=e||"unknown"}static as(e){if(e.iterator)return e.iterator;const r=new ak("as iterator");return e.then(n=>{try{r.add(n,!0)}catch(i){r.reject(i)}},n=>{r.reject(n)}),r}add(e,r=!1){this.nextValue=e,this.done||(this.done=r),this.waiting&&(this.waiting.resolve(e),this.waiting=void 0)}resolve(){this.done=!0,this.waiting&&(this.waiting.resolve(this.nextValue),this.waiting=void 0)}reject(e){var r;this.rejectReason=e,(r=this.waiting)==null||r.reject(e)}getRecent(){if(this.rejectReason)throw this.rejectReason;return this.nextValue}async*[Symbol.asyncIterator](){for(;!this.done;){if(this.rejectReason)throw this.rejectReason;if(this.nextValue!==void 0&&(yield this.nextValue,this.done))break;this.waiting||(this.waiting={},this.waiting.promise=new Promise((e,r)=>{this.waiting.resolve=e,this.waiting.reject=r})),await this.waiting.promise}yield this.nextValue}async forEach(e,r){let n=0;try{for await(const i of this){const{done:o}=this;try{await e(i,o,n),n++}catch(a){if(!o){console.warn("Caught exception in intermediate value",a);continue}if(r)r(a,o);else throw a}}}catch(i){if(r)r(i,!0);else throw i}}generate(e,r){return e(this,this.reject.bind(this)).then(()=>{this.done||this.resolve()},n=>{this.reject(n),r?r(n):console.warn("Couldn't process because",n)})}async nextPromise(){for await(const e of this)if(e)return e;return this.nextValue}async donePromise(){for await(const e of this);return this.nextValue}getNextPromise(){const e=this.nextPromise();return e.iterator=this,e}getDonePromise(){const e=this.donePromise();return e.iterator=this,e}};const Zd=new Map,HD="imageRetrieveConfiguration",h1={IMAGE_RETRIEVE_CONFIGURATION:HD,clear:()=>{Zd.clear()},add:(t,e)=>{Zd.set(t,e)},clone:()=>new Map(Zd),restore:t=>{Zd.clear(),t.forEach((e,r)=>{Zd.set(r,e)})},get:(t,...e)=>{if(t===HD)return e.map(r=>Zd.get(r)).find(r=>r!==void 0)}};Wh(h1.get.bind(h1));function sm(t){const e=Bo(),r=[];return e.forEach(n=>{const o=n.getVolumeViewports().filter(a=>a.hasVolumeId(t));r.push(...o)}),r}const TS=t=>{const e=Ose(t);e!=null&&e.length&&e.forEach(({renderingEngine:r,viewportIds:n})=>{r.hasBeenDestroyed||r.renderViewports(n)})};function Ose(t){const e=Bo(),r=[];return e.forEach(n=>{const i=sm(t);i.length&&r.push({renderingEngine:n,viewportIds:i.map(o=>o.id)})}),r}const KD=[{id:"initialImages",retrieveType:"single"}],Mse=[{id:"lossySequential",retrieveType:"singleFast"},{id:"finalSequential",retrieveType:"singleFinal"}],Qx=[{offset:-1,imageQualityStatus:ya.ADJACENT_REPLICATE},{offset:1,imageQualityStatus:ya.ADJACENT_REPLICATE},{offset:2,imageQualityStatus:ya.FAR_REPLICATE}],Pse=[{id:"initialImages",positions:[.5,0,-1],retrieveType:"default",requestType:pn.Thumbnail,priority:5,nearbyFrames:Qx},{id:"quarterThumb",decimate:4,offset:3,requestType:pn.Thumbnail,retrieveType:"multipleFast",priority:6,nearbyFrames:Qx},{id:"halfThumb",decimate:4,offset:1,priority:7,requestType:pn.Thumbnail,retrieveType:"multipleFast",nearbyFrames:Qx},{id:"quarterFull",decimate:4,offset:2,priority:8,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"halfFull",decimate:4,offset:0,priority:9,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"threeQuarterFull",decimate:4,offset:1,priority:10,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"finalFull",decimate:4,offset:3,priority:11,requestType:pn.Thumbnail,retrieveType:"multipleFinal"},{id:"errorRetrieve"}];function sk(t,e,r=0){const n=[];for(let i=r;i=a)continue;const c={...r,imageId:o,imageQualityStatus:a};$e.setPartialImage(o,c),t.successCallback(o,c)}catch(o){console.warn("Couldn't fill nearby item ",i.itemId,o)}}const M0=class M0{constructor(e){this.stages=e.stages||KD,this.retrieveOptions=e.retrieveOptions||{}}loadImages(e,r){return new Lse(this,e,r).loadImages()}};M0.createProgressive=ck,M0.interleavedRetrieveStages={stages:Pse},M0.singleRetrieveStages={stages:KD},M0.sequentialRetrieveStages={stages:Mse};let g1=M0;class Lse{constructor(e,r,n){this.outstandingRequests=0,this.stageStatusMap=new Map,this.displayedIterator=new Fy("displayed"),this.stages=e.stages,this.retrieveOptions=e.retrieveOptions,this.imageIds=r,this.listener=n}async loadImages(){const e=this.createStageRequests();this.outstandingRequests=e.length;for(const r of e)this.addRequest(r);return this.outstandingRequests===0?Promise.resolve(null):this.displayedIterator.getDonePromise()}sendRequest(e,r){const{imageId:n,next:i}=e,o=(f,u)=>{this.listener.errorCallback(n,c||!i,f),u&&this.updateStageStatus(e.stage,f)},a=(r.loader||_s)(n,r),s=Fy.as(a);let c=!1;return s.forEach(async(f,u)=>{const d=$e.getImageQuality(n);if(!f){console.warn("No image retrieved",n);return}const{imageQualityStatus:h}=f;if(c||(c=h===ya.FULL_RESOLUTION),d!==void 0&&d>h){this.updateStageStatus(e.stage,null,!0);return}this.listener.successCallback(n,f),this.displayedIterator.add(f),u&&this.updateStageStatus(e.stage),Rse(this.listener,e,f)},o).finally(()=>{if(!c&&i)$e.setPartialImage(n),this.addRequest(i,r.streamingData);else{c||this.listener.errorCallback(n,!0,"Couldn't decode"),this.outstandingRequests--;for(let f=i;f;f=f.next)this.updateStageStatus(f.stage,null,!0)}this.outstandingRequests<=0&&this.displayedIterator.resolve()}),s.getDonePromise().catch(f=>null)}addRequest(e,r={}){const{imageId:n,stage:i}=e,o=this.listener.getLoaderImageOptions(n);if(!o)return;const{retrieveType:a="default"}=i,{retrieveOptions:s}=this,c=s[a]||s.default,l={...o,retrieveType:a,retrieveOptions:c,streamingData:r},f=i.priority??-5,u=i.requestType||pn.Interaction,d={imageId:n};Bi.addRequest(this.sendRequest.bind(this,e,l),u,d,f)}updateStageStatus(e,r,n=!1){const{id:i}=e,o=this.stageStatusMap.get(i);if(o&&(o.imageLoadPendingCount--,r?o.imageLoadFailedCount++:n||o.totalImageCount++,!n&&!o.stageStartTime&&(o.stageStartTime=Date.now()),!o.imageLoadPendingCount)){const{imageLoadFailedCount:a,totalImageCount:s,stageStartTime:c=Date.now(),startTime:l}=o,f={stageId:i,numberOfFailures:a,numberOfImages:s,stageDurationInMS:c?Date.now()-c:null,startDurationInMS:Date.now()-l};ut(et,rt.IMAGE_RETRIEVAL_STAGE,f),this.stageStatusMap.delete(i)}}createStageRequests(){const e=new Array,r=new Map,n=(i,o)=>{const a=o<0?this.imageIds.length+o:o<1?Math.floor((this.imageIds.length-1)*o):o,s=this.imageIds[a];if(!s)throw new Error(`No value found to add to requests at ${o}`);const c={imageId:s,stage:i,index:a,nearbyRequests:this.findNearbyRequests(a,i)};this.addStageStatus(i);const l=r.get(s);l?l.next=c:e.push(c),r.set(s,c)};for(const i of this.stages)(i.positions||sk(this.imageIds,i.decimate||1,i.offset??0)).forEach(a=>{n(i,a)});return e}findNearbyRequests(e,r){const n=new Array;if(!r.nearbyFrames)return n;for(const i of r.nearbyFrames){const o=e+i.offset;o<0||o>=this.imageIds.length||n.push({itemId:this.imageIds[o],imageQualityStatus:i.imageQualityStatus,index:o})}return n}addStageStatus(e){const{id:r}=e,n=this.stageStatusMap.get(r)||{stageId:r,startTime:Date.now(),stageStartTime:null,totalImageCount:0,imageLoadFailedCount:0,imageLoadPendingCount:0};return n.imageLoadPendingCount++,this.stageStatusMap.set(r,n),n}}function ck(t){return new g1(t)}const qD=pn.Prefetch;class lk extends Ud{constructor(e,r){super(e),this.framesLoaded=0,this.framesProcessed=0,this.framesUpdated=0,this.autoRenderOnLoad=!0,this.cachedFrames=[],this.reRenderTarget=0,this.reRenderFraction=2,this.imagesLoader=this,this.cancelLoading=()=>{const{loadStatus:n}=this;if(!n||!n.loading)return;n.loading=!1,n.cancelled=!0,this.clearLoadCallbacks();const i=({additionalDetails:o})=>o.volumeId!==this.volumeId;Bi.filterRequests(i)},this.loadStatus=r.loadStatus}invalidateVolume(e){const{vtkOpenGLTexture:r}=this,{numFrames:n}=this;for(let i=0;ithis.reRenderTarget||n===i)&&(this.reRenderTarget+=a,TS(o)),n===i){s.callbacks.forEach(u=>u(e));const f={FrameOfReferenceUID:l,volumeId:o};ut(et,rt.IMAGE_VOLUME_LOADING_COMPLETED,f)}}updateTextureAndTriggerEvents(e,r,n=ya.FULL_RESOLUTION){const i=this.imageIdIndexToFrameIndex(e),{cachedFrames:o,numFrames:a,totalNumFrames:s}=this,{FrameOfReferenceUID:c}=this.metadata;if(o[i]>n||o[i]===ya.FULL_RESOLUTION)return;const f=n===ya.FULL_RESOLUTION;o[e]=n,this.framesUpdated++,f&&(this.framesLoaded++,this.framesProcessed++);const u={FrameOfReferenceUID:c,volumeId:this.volumeId,numberOfFrames:a,framesProcessed:this.framesProcessed};ut(et,rt.IMAGE_VOLUME_MODIFIED,u),f&&this.framesProcessed===this.totalNumFrames&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!0,imageIdIndex:e,imageId:r,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:a,totalNumFrames:s,complete:f,imageQualityStatus:n}),this.vtkOpenGLTexture.setUpdatedFrame(i),this.loadStatus.loaded&&(this.loadStatus.callbacks=[])}successCallback(e,r){const n=this.getImageIdIndex(e),{imageQualityStatus:i}=r;if(this.loadStatus.cancelled){console.warn("volume load cancelled, returning for imageIdIndex: ",n);return}this.updateTextureAndTriggerEvents(n,e,i),this.isDynamicVolume()&&this.checkDimensionGroupCompletion(n)}errorCallback(e,r,n){if(!r)return;const{totalNumFrames:i,numFrames:o}=this,a=this.getImageIdIndex(e);this.framesProcessed++,this.framesProcessed===i&&(this.loadStatus.loaded=!0,this.loadStatus.loading=!1),this.callLoadStatusCallback({success:!1,imageId:e,imageIdIndex:a,error:n,framesLoaded:this.framesLoaded,framesProcessed:this.framesProcessed,framesUpdated:this.framesUpdated,numFrames:o,totalNumFrames:i}),this.loadStatus.loaded&&(this.loadStatus.callbacks=[]);const s={error:n,imageIdIndex:a,imageId:e};ut(et,rt.IMAGE_LOAD_ERROR,s)}load(e){const{imageIds:r,loadStatus:n,numFrames:i}=this,{transferSyntaxUID:o}=wt("transferSyntax",r[0])||{},a=wt(h1.IMAGE_RETRIEVE_CONFIGURATION,this.volumeId,o,"volume");if(this.imagesLoader=this.isDynamicVolume()?this:a?(a.create||g1.createProgressive)(a):this,n.loading===!0)return;const{loaded:s}=this.loadStatus,c=r.length;if(s){e&&e({success:!0,framesLoaded:c,framesProcessed:c,numFrames:i,totalNumFrames:c});return}e&&this.loadStatus.callbacks.push(e),this._prefetchImageIds()}getLoaderImageOptions(e){const{transferSyntaxUID:r}=wt("transferSyntax",e)||{},n=wt("imagePlaneModule",e)||{},{rows:i,columns:o}=n,a=this.getImageIdIndex(e),s=wt("modalityLutModule",e)||{},c=wt("generalSeriesModule",e)||{},l={rescaleSlope:s.rescaleSlope,rescaleIntercept:s.rescaleIntercept,modality:c.modality},f=l.modality;if(f==="PT"||f==="RTDOSE"){const g=wt("scalingModule",e);g&&(this._addScalingToVolume(g),Object.assign(l,g))}const u=K4(l),d=fw();if(this.isPreScaled=!0,l&&l.rescaleSlope!==void 0&&l.rescaleIntercept!==void 0){const{rescaleSlope:g,rescaleIntercept:p}=l;this.isPreScaled=typeof g=="number"&&typeof p=="number"}return!d&&u&&(this.isPreScaled=!1),{targetBuffer:{type:this.dataType,rows:i,columns:o},allowFloatRendering:d,preScale:{enabled:this.isPreScaled,scalingParameters:l},transferPixelData:!0,requestType:qD,transferSyntaxUID:r,additionalDetails:{imageId:e,imageIdIndex:a,volumeId:this.volumeId}}}callLoadImage(e,r,n){const{cachedFrames:i}=this;if(i[r]===ya.FULL_RESOLUTION)return;const o=s=>{const{image:c}=s.detail;c.imageId===e&&(this.vtkOpenGLTexture.setUpdatedFrame(r),et.removeEventListener(rt.IMAGE_CACHE_IMAGE_ADDED,o))};return et.addEventListener(rt.IMAGE_CACHE_IMAGE_ADDED,o),Fy.as(_s(e,n)).forEach(s=>{this.successCallback(e,s)},this.errorCallback.bind(this,r,e))}getImageIdsRequests(e,r){this.totalNumFrames=this.imageIds.length;const n=2;return this.autoRenderOnLoad&&(this.reRenderFraction=this.totalNumFrames*(n/100),this.reRenderTarget=this.reRenderFraction),e.map(o=>{const a=this.getImageIdIndex(o),s=qD,c=r,l=this.getLoaderImageOptions(o);return{callLoadImage:this.callLoadImage.bind(this),imageId:o,imageIdIndex:a,options:l,priority:c,requestType:s,additionalDetails:{volumeId:this.volumeId}}})}getImageLoadRequests(e){throw new Error("Abstract method")}getImageIdsToLoad(){throw new Error("Abstract method")}loadImages(){return this.loadStatus.loading=!0,this.getImageLoadRequests(5).reverse().forEach(r=>{if(!r)return;const{callLoadImage:n,imageId:i,imageIdIndex:o,options:a,priority:s,requestType:c,additionalDetails:l}=r;Bi.addRequest(n.bind(this,i,o,a),c,l,s)}),Promise.resolve(!0)}_prefetchImageIds(){this.loadStatus.loading=!0;const e=[...this.getImageIdsToLoad()];this.totalNumFrames=this.imageIds.length;const r=2;return this.autoRenderOnLoad&&(this.reRenderFraction=this.totalNumFrames*(r/100),this.reRenderTarget=this.reRenderFraction),this.imagesLoader.loadImages(e,this).catch(n=>{console.debug("progressive loading failed to complete",n)})}_addScalingToVolume(e){if(this.scaling)return;const{suvbw:r,suvlbm:n,suvbsa:i}=e,o={};n&&(o.suvbwToSuvlbm=n/r),i&&(o.suvbwToSuvbsa=i/r),r&&(o.suvbw=r),this.scaling={PT:o}}checkDimensionGroupCompletion(e){}}class uk extends lk{constructor(e,r){e.imageIds||(e.imageIds=r.imageIds),super(e,r),this.getImageIdsToLoad=()=>{const{imageIds:n}=this;return this.numFrames=n.length,n}}getScalarData(){return this.voxelManager.getScalarData()}getImageLoadRequests(e){const{imageIds:r}=this;return this.getImageIdsRequests(r,e)}}function fk(t,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a streaming image volume");async function r(){if(e.imageIds[0].split(":")[0]==="wadouri"){const[g,p]=[Math.floor(e.imageIds.length/2),e.imageIds.length-1],v=[0,g,p];await Promise.all(v.map(y=>$e.isLoaded(e.imageIds[y])?Promise.resolve(!0):new Promise((m,w)=>{const x=e.imageIds[y];Bi.addRequest(async()=>{tk(x).then(()=>{console.log(`Prefetched imageId: ${x}`),m(!0)}).catch(C=>{w(C)})},pn.Prefetch,{volumeId:t},1)}))).catch(console.error)}const i=am(e.imageIds,t),{dimensions:o,spacing:a,origin:s,direction:c,metadata:l,imageIds:f,dataType:u,numberOfComponents:d}=i;return new uk({volumeId:t,metadata:l,dimensions:o,spacing:a,origin:s,direction:c,imageIds:f,dataType:u,numberOfComponents:d},{imageIds:f,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}})}const n=r();return{promise:n,decache:()=>{n.then(i=>{i.destroy(),i=null})},cancel:()=>{n.then(i=>{i.cancelLoading()})}}}const q4={};let J0=fk;function dk(t,e){const r=t.indexOf(":"),n=t.substring(0,r);let i=q4[n];if(i==null){if(J0==null||typeof J0!="function")throw new Error(`No volume loader for scheme ${n} has been registered`);i=J0}const o=i(t,e);return o.promise.then(function(a){ut(et,rt.VOLUME_LOADED,{volume:a})},function(a){const s={volumeId:t,error:a};ut(et,rt.VOLUME_LOADED_FAILED,s)}),o}function X4(t,e={imageIds:[]}){if(t===void 0)throw new Error("loadVolume: parameter volumeId must not be undefined");let r=$e.getVolumeLoadObject(t);return r!==void 0?r.promise:(r=dk(t,e),r.promise.then(n=>n))}async function p1(t,e){if(t===void 0)throw new Error("createAndCacheVolume: parameter volumeId must not be undefined");let r=$e.getVolumeLoadObject(t);return r!==void 0||(r=dk(t,e),$e.putVolumeLoadObject(t,r)),r.promise}function hk(t,e){const r=$e.getVolume(t);if(!r)throw new Error(`Cannot created derived volume: Referenced volume with id ${t} does not exist.`);let{volumeId:n}=e;const{voxelRepresentation:i}=e;n===void 0&&(n=Pn());const{metadata:o,dimensions:a,spacing:s,origin:c,direction:l}=r,f=r.isDynamicVolume()?r.getCurrentDimensionGroupImageIds():r.imageIds??[],u=$4(f,{targetBuffer:e.targetBuffer,voxelRepresentation:i}),d=u[0].dataType,h=u.map(p=>p.imageId),g=new Ud({volumeId:n,dataType:d,metadata:structuredClone(o),dimensions:[a[0],a[1],a[2]],spacing:s,origin:c,direction:l,referencedVolumeId:t,imageIds:h,referencedImageIds:r.imageIds??[]});return $e.putVolumeSync(n,g),g}async function Y4(t,e){if(e===void 0)throw new Error("createAndCacheVolumeFromImages: parameter imageIds must not be undefined");if(t===void 0)throw new Error("createAndCacheVolumeFromImages: parameter volumeId must not be undefined");const r=$e.getVolume(t);return r||(e.filter(o=>!$e.getImage(o)).length===0?cm(t,e):await p1(t,{imageIds:e}))}function cm(t,e){if(e===void 0)throw new Error("createAndCacheVolumeFromImagesSync: parameter imageIds must not be undefined");if(t===void 0)throw new Error("createAndCacheVolumeFromImagesSync: parameter volumeId must not be undefined");const r=$e.getVolume(t);if(r)return r;const n=am(e,t),i=new Ud({volumeId:t,dataType:n.dataType,metadata:structuredClone(n.metadata),dimensions:n.dimensions,spacing:n.spacing,origin:n.origin,direction:n.direction,referencedVolumeId:n.referencedVolumeId,imageIds:n.imageIds,referencedImageIds:n.referencedImageIds});return $e.putVolumeSync(t,i),i}function lm(t,e={}){const{metadata:r,dimensions:n,spacing:i,origin:o,direction:a,scalarData:s,targetBuffer:c,preventCache:l=!1}=e,f=$e.getVolume(t);if(f)return f;const u=n[0]*n[1],d=s?s.constructor.name:(c==null?void 0:c.type)??"Float32Array",h=u*n[2];let g;switch(d){case"Uint8Array":case"Int8Array":g=h;break;case"Uint16Array":case"Int16Array":g=h*2;break;case"Float32Array":g=h*4;break}if(!$e.isCacheable(g))throw new Error(`Cannot created derived volume: Volume with id ${t} is not cacheable.`);const v=[];for(let w=0;w1&&(u=Math.min(...u),d=Math.max(...d)),{lower:u,upper:d}}function zse(t,e){var r;return!(t!=="PT"||!e.isPreScaled||!((r=e.scaling)!=null&&r.PT.suvbw))}async function Uy(t,e,r,n=!1){const{volumeId:i,callback:o,blendMode:a}=t,s=await X4(i);if(!s)throw new Error(`imageVolume with id: ${s.volumeId} does not exist`);const{imageData:c,vtkOpenGLTexture:l}=s,f=mk(c,l);a&&f.setBlendMode(a);const u=Gie.newInstance();u.setMapper(f);const{numberOfComponents:d}=c.get("numberOfComponents");return u.getProperty().set({viewportId:r}),d===3&&u.getProperty().setIndependentComponents(!1),await J4(u,s),o&&o({volumeActor:u,volumeId:i}),n||$se(e,r,u,i),u}function $se(t,e,r,n){const i=r.getProperty().getRGBTransferFunction(0).getRange(),o={viewportId:e,range:{lower:i[0],upper:i[1]},volumeId:n};ut(t,rt.VOI_MODIFIED,o)}const yl=t=>{const e="volumeId:",r=t.includes(e)?t.substring(e.length):t,n=r.indexOf("sliceIndex=");return n===-1?r:r.substring(0,n-1)},jse=1+qa,Hse=(t,e)=>e===t.substring(0,Math.min(t.length,e.length)),XD=t=>!!gk().find(e=>Hse(t.volumeId,e));function jh(t,e,r,n=!1){const{viewPlaneNormal:i}=e,o=t.getActors();if(!o.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const a=o.map(l=>{const f=l.referencedId??l.uid;return $e.getVolume(f)}).filter(l=>!!l);if(r){const l=yl(r),f=a.findIndex(g=>l.includes(g.volumeId)),u=a[f],{uid:d}=o[f],h=YD(u,i,t,n);return{imageVolume:u,spacingInNormalDirection:h,actorUID:d}}if(!a.length)return{spacingInNormalDirection:null,imageVolume:null,actorUID:null};const s={spacingInNormalDirection:1/0,imageVolume:null,actorUID:null},c=a.find(XD);for(let l=0;lg.referencedId===n.volumeId||g.uid===n.volumeId);a||console.warn("No actor found for with actorUID of",n.volumeId);const s=a.actor,c=pw(s,i,o),{min:l,max:f,current:u}=c,d=Math.round((f-l)/r)+1;let h=(u-l)/(f-l)*d;return h=Math.floor(h),h>d-1?h=d-1:h<0&&(h=0),{numberOfSlices:d,imageIndex:h}}const S0={};function Kse(t){S0[t]!==void 0&&delete S0[t]}function qse(t){const{renderingEngineId:e,viewportId:r}=t.detail,i=jr(e).getViewport(r);if(!("setVolumes"in i))throw new Error("volumeNewImageEventDispatcher: viewport does not have setVolumes method");S0[i.id]===void 0&&(S0[i.id]=0);const o=By(i);if(!o){console.warn(`volumeNewImageEventDispatcher: sliceData is undefined for viewport ${i.id}`);return}const{numberOfSlices:a,imageIndex:s}=o;if(S0[i.id]===s)return;S0[i.id]=s;const c={imageIndex:s,viewportId:r,renderingEngineId:e,numberOfSlices:a};ut(i.element,rt.VOLUME_NEW_IMAGE,c)}function Ch(t,e,r){const[n,i,o]=t,[a,s,c]=e,[l,f,u,d]=r,h=a-n,g=s-i,p=c-o,v=-1*(l*n+f*i+u*o-d)/(l*h+f*g+u*p),y=h*v+n,m=g*v+i,w=p*v+o;return[y,m,w]}function nl(t,e,r=!1){const[n,i,o]=t,a=n*e[0]+i*e[1]+o*e[2];if(r){const s=Math.sqrt(n*n+i*i+o*o);return[n/s,i/s,o/s,a/s]}return[n,i,o,a]}function yk(t,e,r){const[n,i,o,a]=t,[s,c,l,f]=e,[u,d,h,g]=r,p=Kg(n,s,u,i,c,d,o,l,h),v=Kg(a,f,g,i,c,d,o,l,h),y=Kg(n,s,u,a,f,g,o,l,h),m=Kg(n,s,u,i,c,d,a,f,g),w=Wf(v)/Wf(p),x=Wf(y)/Wf(p),C=Wf(m)/Wf(p);return[w,x,C]}function m1(t,e,r=!1){const[n,i,o,a]=t,[s,c,l]=e,f=n*s+i*c+o*l-a,u=Math.abs(f)/Math.sqrt(n*n+i*i+o*o);return(r?Math.sign(f):1)*u}function wk(t,e,r=qa){return m1(e,t)Number.isNaN(e)):Number.isNaN(t)}function vs(t){if(t===null||typeof t!="object"||typeof t=="function"||typeof structuredClone=="function")return t;if(Array.isArray(t))return t.map(vs);{const e={};for(const r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=vs(t[r]));return e}}const Pp=class Pp{constructor(e){this.insetImageMultiplier=1.1,this.flipHorizontal=!1,this.flipVertical=!1,this.viewportStatus=Lo.NO_DATA,this._suppressCameraModifiedEvents=!1,this.hasPixelSpacing=!0,this.getProperties=()=>({}),this.setRotation=r=>{},this.viewportWidgets=new Map,this.addWidget=(r,n)=>{this.viewportWidgets.set(r,n)},this.getWidget=r=>this.viewportWidgets.get(r),this.getWidgets=()=>Array.from(this.viewportWidgets.values()),this.removeWidgets=()=>{this.getWidgets().forEach(n=>{if(n.getEnabled()&&n.setEnabled(!1),n.getActor&&n.getRenderer){const i=n.getActor(),o=n.getRenderer();o&&i&&o.removeActor(i)}})},this.id=e.id,this.renderingEngineId=e.renderingEngineId,this.type=e.type,this.element=e.element,this.canvas=e.canvas,this.sx=e.sx,this.sy=e.sy,this.sWidth=e.sWidth,this.sHeight=e.sHeight,this._actors=new Map,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.defaultOptions=vs(e.defaultOptions),this.suppressEvents=e.defaultOptions.suppressEvents?e.defaultOptions.suppressEvents:!1,this.options=vs(e.defaultOptions),this.isDisabled=!1}static get useCustomRenderingPipeline(){return!1}setRendered(){this.viewportStatus===Lo.NO_DATA||this.viewportStatus===Lo.LOADING||(this.viewportStatus=Lo.RENDERED)}setColorTransform(e,r){let n=null;if(!e&&!r)return;const i=r||[255,255,255],o=Math.max(...i),a=i.map(u=>o/u),{lower:s=0,upper:c=255}=e||{},l=(c-s+1)/255,f=s/255;return n=`url('data:image/svg+xml, #colour')`,n}getRenderingEngine(){return o1.get(this.renderingEngineId)}getRenderer(){var r;const e=this.getRenderingEngine();if(!e||e.hasBeenDestroyed)throw new Error("Rendering engine has been destroyed");return(r=e.offscreenMultiRenderWindow)==null?void 0:r.getRenderer(this.id)}render(){this.getRenderingEngine().renderViewport(this.id)}setOptions(e,r=!1){var n,i;this.options=structuredClone(e),(n=this.options)!=null&&n.displayArea&&this.setDisplayArea((i=this.options)==null?void 0:i.displayArea),r&&this.render()}reset(e=!1){this.options=structuredClone(this.defaultOptions),e&&this.render()}getSliceViewInfo(){throw new Error("Method not implemented.")}flip({flipHorizontal:e,flipVertical:r}){const n=this.getDefaultImageData();if(!n)return;const i=this.getCamera(),{viewPlaneNormal:o,viewUp:a,focalPoint:s,position:c}=i,l=kn(Ke(),o,a);let f=OY(Ke(),a);const u=el(Ke(),o),d=Qi(c,s),g=n.getDimensions().map(C=>Math.floor(C/2)),p=[g[0],g[1],g[2]],v=n.indexToWorld(p,Ke()),y=this._getFocalPointForResetCamera(v,i,{resetPan:!0,resetToCenter:!1}),m=qn(Ke(),s,y),w=ta(m),x=C=>{const S=Ir(Ke(),C,2*kt(m,C));return qn(S,S,m),Qn(S,S),S};if(e){const C=x(f),S=On(Ke(),y,C,w),T=On(Ke(),S,u,d);this.setCamera({viewPlaneNormal:u,position:T,focalPoint:S}),this.flipHorizontal=!this.flipHorizontal}if(r){f=el(f,a);const C=x(l),S=On(Ke(),y,C,w),T=On(Ke(),S,u,d);this.setCamera({focalPoint:S,viewPlaneNormal:u,viewUp:f,position:T}),this.flipVertical=!this.flipVertical}this.render()}getDefaultImageData(){const e=this.getDefaultActor();if(e&&tc(e))return e.actor.getMapper().getInputData()}getDefaultActor(){return this.getActors()[0]}getActors(){return Array.from(this._actors.values())}getActorUIDs(){return Array.from(this._actors.keys())}getActor(e){return this._actors.get(e)}getImageActor(e){const r=this.getActors();let n=r[0];return e&&(n=r.find(o=>o.referencedId===e)),!n||!tc(n)?null:n.actor}getActorUIDByIndex(e){const r=this.getActors()[e];if(r)return r.uid}getActorByIndex(e){return this.getActors()[e]}setActors(e){const r=this.getActors();this.removeAllActors(),this.addActors(e,{resetCamera:!0}),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:r,addedActors:e,currentActors:e})}_removeActor(e){const r=this.getActor(e);if(!r){console.warn(`Actor ${e} does not exist in ${this.id}, can't remove`);return}return this.getRenderer().removeActor(r.actor),this._actors.delete(e),r}removeActors(e){const r=[];e.forEach(i=>{const o=this._removeActor(i);o&&r.push(o)});const n=this.getActors();ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:r,addedActors:[],currentActors:n})}addActors(e,r={}){const{resetCamera:n=!1}=r,i=this.getRenderingEngine();if(!i||i.hasBeenDestroyed){console.warn("Viewport::addActors::Rendering engine has not been initialized or has been destroyed");return}e.forEach(s=>{this.addActor(s)});const o=this.getViewPresentation(),a=this.getViewReference();this.resetCamera(),n||(this.setViewReference(a),this.setViewPresentation(o)),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:[],addedActors:e,currentActors:this.getActors()})}addActor(e){const{uid:r,actor:n}=e,i=this.getRenderingEngine();if(!i||i.hasBeenDestroyed){console.warn(`Cannot add actor UID of ${r} Rendering Engine has been destroyed`);return}if(!r||!n)throw new Error("Actors should have uid and vtk Actor properties");if(this.getActor(r)){console.warn(`Actor ${r} already exists for this viewport`);return}const o=this.getRenderer();o==null||o.addActor(n),this._actors.set(r,Object.assign({},e)),this.updateCameraClippingPlanesAndRange(),ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:[],addedActors:[e],currentActors:this.getActors()})}removeAllActors(){var r;const e=this.getActors();(r=this.getRenderer())==null||r.removeAllViewProps(),this._actors=new Map,ut(this.element,rt.ACTORS_CHANGED,{viewportId:this.id,removedActors:e,addedActors:[],currentActors:[]})}resetCameraNoEvent(){this._suppressCameraModifiedEvents=!0,this.resetCamera(),this._suppressCameraModifiedEvents=!1}setCameraNoEvent(e){this._suppressCameraModifiedEvents=!0,this.setCamera(e),this._suppressCameraModifiedEvents=!1}_getViewImageDataIntersections(e,r,n){const i=n[0],o=n[1],a=n[2],s=i*r[0]+o*r[1]+a*r[2],c=e.getBounds(),l=this._getEdges(c),f=[];for(const u of l){const[[d,h,g],[p,v,y]]=u;if(i*(p-d)+o*(v-h)+a*(y-g)===0)continue;const m=Ch([d,h,g],[p,v,y],[i,o,a,s]);this._isInBounds(m,c)&&f.push(m)}return f}setInterpolationType(e,r){}setDisplayArea(e,r=!1){var a;if(!e)return;const{storeAsInitialCamera:n,type:i}=e;n&&(this.options.displayArea=e);const{_suppressCameraModifiedEvents:o}=this;if(this._suppressCameraModifiedEvents=!0,this.setCamera(this.fitToCanvasCamera),i==="SCALE"?this.setDisplayAreaScale(e):(this.setInterpolationType(((a=this.getProperties())==null?void 0:a.interpolationType)??Vl.LINEAR),this.setDisplayAreaFit(e)),n&&(this.initialCamera=this.getCamera()),this._suppressCameraModifiedEvents=o,!r&&!o){const s={viewportId:this.id,displayArea:e,storeAsInitialCamera:n};ut(this.element,rt.DISPLAY_AREA_MODIFIED,s),this.setCamera(this.getCamera())}}setDisplayAreaScale(e){const{scale:r=1}=e,n=this.canvas,i=n.height,o=n.width;if(i<8||o<8)return;const c=this.getDefaultImageData().getSpacing()[1];this.setInterpolationType(Vl.NEAREST),this.setCamera({parallelScale:i*c/(2*r)}),delete e.imageArea,this.setDisplayAreaFit(e);const{focalPoint:l,position:f,viewUp:u,viewPlaneNormal:d}=this.getCamera(),h=Ke();if(n.height%2&&On(h,h,u,r*.5*c),n.width%2){const g=kn(Ke(),u,d);On(h,h,g,r*.5*c)}!h[0]&&!h[1]&&!h[2]||this.setCamera({focalPoint:ri(Ke(),l,h),position:ri(Ke(),f,h)})}setDisplayAreaFit(e){const{imageArea:r,imageCanvasPoint:n}=e,i=(window==null?void 0:window.devicePixelRatio)||1,o=this.getDefaultImageData();if(!o)return;const a=this.sWidth/i,s=this.sHeight/i,c=o.getDimensions(),l=this.worldToCanvas(o.indexToWorld([0,0,0])),f=this.worldToCanvas(o.indexToWorld([c[0],c[1],c[2]])),u=[Math.abs(f[0]-l[0]),Math.abs(f[1]-l[1])],[d,h]=u;let g=this.getZoom()/this.insetImageMultiplier;if(r){const[p,v]=r,y=Math.max(Math.abs(d/a),Math.abs(h/s)),m=Math.abs(p*d/a),w=Math.abs(v*h/s),x=this.getZoom(),C=this.getZoom(this.fitToCanvasCamera);g=(m>w?y/m:y/w)*x/C,this.setZoom(this.insetImageMultiplier*g,!1)}if(n){const{imagePoint:p,canvasPoint:v=p||[.5,.5]}=n,[y,m]=v,w=a*(y-.5),x=s*(m-.5),[C,S]=p||v,T=g,_=this.insetImageMultiplier*T*d*(.5-C),E=this.insetImageMultiplier*T*h*(.5-S),b=_+w,D=E+x,I=[b,D];mo(I,I,this.getPan()),this.setPan(I,!1)}}getDisplayArea(){var e;return(e=this.options)==null?void 0:e.displayArea}resetCamera(e){const{resetPan:r=!0,resetZoom:n=!0,resetToCenter:i=!0,storeAsInitialCamera:o=!0}=e||{},a=this.getRenderer();this.setCameraNoEvent({flipHorizontal:!1,flipVertical:!1});const s=this.getCamera();let c;const l=this.getDefaultActor();l&&tc(l)?c=l.actor.getMapper().getInputData().getBounds():c=a.computeVisiblePropBounds();const f=[0,0,0],u=this.getDefaultImageData();if(u){const O=u.getSpacing();c[0]=c[0]+O[0]/2,c[1]=c[1]-O[0]/2,c[2]=c[2]+O[1]/2,c[3]=c[3]-O[1]/2,c[4]=c[4]+O[2]/2,c[5]=c[5]-O[2]/2}const d=this.getVtkActiveCamera(),h=d.getViewPlaneNormal(),g=d.getViewUp();if(f[0]=(c[0]+c[1])/2,f[1]=(c[2]+c[3])/2,f[2]=(c[4]+c[5])/2,u){const A=u.getDimensions().map(G=>Math.floor(G/2)),V=[A[0],A[1],A[2]];u.indexToWorld(V,f)}const{widthWorld:p,heightWorld:v}=this._getWorldDistanceViewUpAndViewRight(c,g,h),y=[this.sWidth,this.sHeight],m=p/v,w=y[0]/y[1],x=m/w,C=x<1?this.insetImageMultiplier*v/2:this.insetImageMultiplier*v*x/2,S=Pp.boundsRadius(c)*(this.type===vr.VOLUME_3D?10:1),T=this.insetImageMultiplier*S,_=Math.abs(nn.dot(g,h))>.999?[-g[2],g[0],g[1]]:g,E=this._getFocalPointForResetCamera(f,s,{resetPan:r,resetToCenter:i}),b=[E[0]+T*h[0],E[1]+T*h[1],E[2]+T*h[2]];a.resetCameraClippingRange(c);const D=[-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE];d.setPhysicalScale(S),d.setPhysicalTranslation(-E[0],-E[1],-E[2]),this.setCamera({parallelScale:n?C:s.parallelScale,focalPoint:E,position:b,viewAngle:90,viewUp:_,clippingRange:D});const I=this.getCamera();this.setFitToCanvasCamera(this.getCamera()),o&&this.setInitialCamera(I),n&&this.setZoom(1,o);const P={type:"ResetCameraEvent",renderer:a};return a.invokeEvent(P),this.triggerCameraModifiedEventIfNecessary(s,I),u&&this.options.displayArea&&n&&r&&i&&this.setDisplayArea(this.options.displayArea),!0}setInitialCamera(e){this.initialCamera=e}setFitToCanvasCamera(e){this.fitToCanvasCamera=e}getPan(e=this.initialCamera){if(!e)return[0,0];const n=this.getVtkActiveCamera().getFocalPoint(),i=this.canvasToWorld([0,0]),o=this.worldToCanvas(qn([0,0,0],e.focalPoint,i)),a=this.worldToCanvas(qn([0,0,0],n,i));return Jr([0,0],o,a)}getCurrentImageIdIndex(){throw new Error("Not implemented")}getSliceIndex(){throw new Error("Not implemented")}getImageData(){throw new Error("Not implemented")}getViewReferenceId(e){return null}setPan(e,r=!1){const n=this.getCamera(),{focalPoint:i,position:o}=n,a=this.canvasToWorld([0,0]),s=Jr([0,0],e,this.getPan());if(Math.abs(s[0])<1&&Math.abs(s[1])<1&&!r)return;const c=qn(Ke(),this.canvasToWorld(s),a),l=qn(Ke(),i,c),f=qn(Ke(),o,c);this.setCamera({...n,focalPoint:l,position:f},r)}getZoom(e=this.initialCamera){if(!e)return 1;const r=this.getVtkActiveCamera(),{parallelScale:n}=e;return n/r.getParallelScale()}setZoom(e,r=!1){const n=this.getCamera(),{parallelScale:i}=this.initialCamera,o=i/e;n.parallelScale===o&&!r||this.setCamera({...n,parallelScale:o},r)}_getFocalPointForViewPlaneReset(e){const{focalPoint:r,viewPlaneNormal:n}=this.getCamera(),i=this._getViewImageDataIntersections(e,r,n);let o=0,a=0,s=0;return i.forEach(([l,f,u])=>{o+=l,a+=f,s+=u}),[o/i.length,a/i.length,s/i.length]}getCanvas(){return this.canvas}getVtkActiveCamera(){const e=this.getRenderer();return e?e.getActiveCamera():(console.warn("No renderer found for the viewport"),null)}getCameraNoRotation(){const e=this.getVtkActiveCamera(),r=(s,c)=>s.some(l=>isNaN(l))?c:s,n=r([...e.getViewUp()],[0,1,0]),i=r([...e.getViewPlaneNormal()],[0,0,-1]),o=r([...e.getPosition()],[0,0,1]),a=r([...e.getFocalPoint()],[0,0,0]);return{viewUp:n,viewPlaneNormal:i,position:o,focalPoint:a,parallelProjection:e.getParallelProjection(),parallelScale:e.getParallelScale(),viewAngle:e.getViewAngle(),flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}getCamera(){return{...this.getCameraNoRotation(),rotation:this.getRotation()}}setCamera(e,r=!1){const n=this.getVtkActiveCamera(),i=this.getCamera(),o=Object.assign({},i,e),{viewUp:a,viewPlaneNormal:s,position:c,focalPoint:l,parallelScale:f,viewAngle:u,flipHorizontal:d,flipVertical:h,clippingRange:g}=e;if(d!==void 0){const y=d&&!this.flipHorizontal||!d&&this.flipHorizontal;y&&this.flip({flipHorizontal:y})}if(h!==void 0){const y=h&&!this.flipVertical||!h&&this.flipVertical;y&&this.flip({flipVertical:y})}a!==void 0&&n.setViewUp(a),s!==void 0&&n.setDirectionOfProjection(-s[0],-s[1],-s[2]),c!==void 0&&n.setPosition(...c),l!==void 0&&n.setFocalPoint(...l),f!==void 0&&n.setParallelScale(f),u!==void 0&&n.setViewAngle(u),g!==void 0&&n.setClippingRange(g);const p=i.focalPoint,v=i.viewUp;if(p&&l||v&&a){const y=n.getViewPlaneNormal(),m=n.getViewUp();let w=!1,x=!1;if(l){const C=[l[0]-p[0],l[1]-p[1],l[2]-p[2]];w=Math.abs(nn.dot(C,y))>0}if(a&&(x=!Zt(m,v)),w||x){const C=this.getDefaultActor();if(!(C!=null&&C.actor))return;_a(C,"vtkActor")||this.updateClippingPlanesForActors(o),(_a(C,"vtkImageSlice")||this.type===vr.VOLUME_3D)&&this.getRenderer().resetCameraClippingRange()}}r&&this.setInitialCamera(o),this.triggerCameraModifiedEventIfNecessary(i,this.getCamera())}triggerCameraModifiedEventIfNecessary(e,r){if(!this._suppressCameraModifiedEvents&&!this.suppressEvents){const n={previousCamera:e,camera:r,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,n)}}updateCameraClippingPlanesAndRange(){const e=this.getCamera();this.updateClippingPlanesForActors(e),this.getRenderer().resetCameraClippingRange()}async updateClippingPlanesForActors(e){this.getActors().map(n=>{if(!n.actor)return;const i=n.actor.getMapper();let o=n!=null&&n.clippingFilter?n==null?void 0:n.clippingFilter.getClippingPlanes():i.getClippingPlanes();o.length===0&&(n!=null&&n.clippingFilter)&&(o=[Vo.newInstance(),Vo.newInstance()]);let a=Qr.MINIMUM_SLAB_THICKNESS;n.slabThickness&&(a=n.slabThickness);const{viewPlaneNormal:s,focalPoint:c}=e;this.setOrientationOfClippingPlanes(o,a,s,c),ut(this.element,rt.CLIPPING_PLANES_UPDATED,{actorEntry:n,focalPoint:c,vtkPlanes:o,viewport:this})})}setOrientationOfClippingPlanes(e,r,n,i){if(e.length<2)return;const o=[n[0],n[1],n[2]];nn.multiplyScalar(o,r),e[0].setNormal(n);const a=[0,0,0];nn.subtract(i,o,a),e[0].setOrigin(a),e[1].setNormal(-n[0],-n[1],-n[2]);const s=[0,0,0];nn.add(i,o,s),e[1].setOrigin(s)}getClippingPlanesForActor(e){if(e||(e=this.getDefaultActor()),!e.actor)throw new Error("Invalid actor entry: Actor is undefined");const r=e.actor.getMapper();let n=e!=null&&e.clippingFilter?e==null?void 0:e.clippingFilter.getClippingPlanes():r.getClippingPlanes();return n.length===0&&(e!=null&&e.clippingFilter)&&(n=[Vo.newInstance(),Vo.newInstance()]),n}_getWorldDistanceViewUpAndViewRight(e,r,n){const i=this._getCorners(e),o=this._getCorners(e),a=kn(Ke(),r,n);let s=Yi.buildFromDegree().identity().rotateFromDirections(r,[1,0,0]);i.forEach(d=>s.apply(d));let c=1/0,l=-1/0;for(let d=0;d<8;d++){const h=i[d][0];h>l&&(l=h),hs.apply(d));let f=1/0,u=-1/0;for(let d=0;d<8;d++){const h=o[d][0];h>u&&(u=h),h=0&&this.setRotation(o)}_getCorners(e){return[[e[0],e[2],e[4]],[e[0],e[2],e[5]],[e[0],e[3],e[4]],[e[0],e[3],e[5]],[e[1],e[2],e[4]],[e[1],e[2],e[5]],[e[1],e[3],e[4]],[e[1],e[3],e[5]]]}_getFocalPointForResetCamera(e,r,{resetPan:n=!0,resetToCenter:i=!0}){if(i&&n)return e;if(i&&!n)return _S(r.focalPoint)?e:r.focalPoint;if(!i&&n){const o=r,a=o.focalPoint,s=o.viewPlaneNormal,c=qn(Ke(),e,a),l=kt(c,s),f=On(Ke(),e,s,-1*l);return[f[0],f[1],f[2]]}if(!n&&!i)return _S(r.focalPoint)?e:r.focalPoint}_isInBounds(e,r){const[n,i,o,a,s,c]=r,[l,f,u]=e;return!(li||fa||uc)}_getEdges(e){const[r,n,i,o,a,s,c,l]=this._getCorners(e);return[[r,n],[r,a],[r,i],[n,o],[n,s],[i,o],[i,c],[o,l],[a,c],[a,s],[s,l],[c,l]]}static boundsRadius(e){const r=(e[1]-e[0])**2,n=(e[3]-e[2])**2,i=(e[5]-e[4])**2;return Math.sqrt(r+n+i||1)*.5}setDataIds(e,r){throw new Error("Unsupported operatoin setDataIds")}};Pp.CameraViewPresentation={rotation:!0,pan:!0,zoom:!0,displayArea:!0},Pp.TransferViewPresentation={windowLevel:!0,paletteLut:!0};let bd=Pp;function xk(t,e,r=!1){const n=t.getCamera(),{focalPoint:i,viewPlaneNormal:o}=n,{spacingInNormalDirection:a,actorUID:s}=jh(t,n,e,r);if(!s)throw new Error(`Could not find image volume with id ${e} in the viewport`);const c=t.getActor(s);if(!c)return console.warn("No actor found for with actorUID of",s),null;const l=c.actor;return{sliceRange:pw(l,o,i),spacingInNormalDirection:a,camera:n}}function ud(t,e,r=!1){const{sliceRange:n,spacingInNormalDirection:i,camera:o}=xk(t,e,r),{min:a,max:s,current:c}=n,l=Math.round((s-a)/i),u=(c-a)/(s-a)*l,d=Math.round(u);return{numScrollSteps:l,currentStepIndex:d,sliceRangeInfo:{sliceRange:n,spacingInNormalDirection:i,camera:o}}}function Ck(t){let e=[];const[r,n]=t.getRange();t.getTable(r,n,1024,e),e=e.filter((h,g)=>g%3===0);const i=[...Array(1024).keys()].map((h,g)=>r+(n-r)/1023*g),o=e[256],a=Math.log((1-o)/o),s=i[256],c=e[256*3],l=Math.log((1-c)/c),f=i[256*3],u=Math.round(4*(f-s)/(a-l)),d=Math.round(s+u*a/4);return[Math.round(d-u/2),Math.round(d+u/2)]}function Sk(t,e){const r=e.colorTransfer.split(" ").splice(1).map(parseFloat),{shiftRange:n}=Yse(r),i=n[0],o=n[1]-n[0],a=Ql.newInstance(),s=[];for(let x=0;x[o*n+e[0],a,s,c]);return r.removeAllPoints(),i.forEach(([o,a,s,c])=>r.addRGBPoint(o,a,s,c)),i}function Zse(t,e,r){const n=e[1]-e[0],i=t.map(([o,a])=>[o*n+e[0],a]);return r.removeAllPoints(),i.forEach(([o,a])=>r.addPoint(o,a)),i}class Tr extends bd{constructor(e){if(super(e),this.useCPURendering=!1,this.perVolumeIdDefaultProperties=new Map,this.viewportProperties={},this.volumeIds=new Set,this.setRotation=i=>{const o=this.getPan(this.fitToCanvasCamera),a=this.getPan(),s=this.getCamera(),c=xs([0,0],o,a);this.setPan(c,!1);const{flipVertical:l}=this.getCamera(),f=l?el([0,0,0],this.initialViewUp):this.initialViewUp;this.setCameraNoEvent({viewUp:f}),this.rotateCamera(i);const u=this.getPan(),d=this.getPan(this.fitToCanvasCamera),h=xs([0,0],u,d),g=mo([0,0],o,h);if(this.setPan(g,!1),this._suppressCameraModifiedEvents)return;const p=this.getCamera(),v={previousCamera:s,camera:p,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,v)},this.getDefaultProperties=i=>{let o;return i!==void 0&&(o=this.perVolumeIdDefaultProperties.get(i)),o!==void 0?o:{...this.globalDefaultProperties}},this.getProperties=i=>{var C;if(!this._getApplicableVolumeActor(i))return;const{colormap:a,VOILUTFunction:s,interpolationType:c,invert:l,slabThickness:f,preset:u}=this.viewportProperties;if(i||(i=this.getVolumeId()),!$e.getVolume(i))return null;const h=this.getActors().find(S=>S.referencedId===i);if(!h)return;const p=h.actor.getProperty().getRGBTransferFunction(0),[v,y]=((C=this.viewportProperties)==null?void 0:C.VOILUTFunction)==="SIGMOID"?Ck(p):p.getRange(),m={lower:v,upper:y},w=this.getColormap(i);return{colormap:i&&w?w:a,voiRange:m,VOILUTFunction:s,interpolationType:c,invert:l,slabThickness:f,preset:u}},this.getColormap=i=>{const o=this._getApplicableVolumeActor(i);if(!o)return;const{volumeActor:a}=o,s=this._getOrCreateColorTransferFunction(i),{nodes:c}=s.getState(),l=c.reduce((h,g)=>(h.push(g.x,g.r,g.g,g.b),h),[]),f=V4(l,a)||{},u=U4(a),d=B4(a);return f.threshold=u,f.opacity=d,f},this.getRotation=()=>{const{viewUp:i,viewPlaneNormal:o,flipVertical:a}=this.getCameraNoRotation(),s=a?el([0,0,0],this.initialViewUp):this.initialViewUp;if(!s)return 0;const c=o4(s,i)*180/Math.PI,l=kn([0,0,0],s,i);return kt(l,o)>=0?c:(360-c)%360},this.getFrameOfReferenceUID=()=>this._FrameOfReferenceUID,this.canvasToWorld=i=>{var u,d;const o=this.getVtkActiveCamera();(u=o.setIsPerformingCoordinateTransformation)==null||u.call(o,!0);const a=this.getRenderer(),s=this.getVtkDisplayCoords(i),f=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow().displayToWorld(s[0],s[1],s[2],a);return(d=o.setIsPerformingCoordinateTransformation)==null||d.call(o,!1),[f[0],f[1],f[2]]},this.getVtkDisplayCoords=i=>{const o=window.devicePixelRatio||1,a=[i[0]*o,i[1]*o],l=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow().getSize(),f=[a[0]+this.sx,a[1]+this.sy];return f[1]=l[1]-f[1],[f[0],f[1],0]},this.worldToCanvas=i=>{var g;const o=this.getVtkActiveCamera();(g=o.setIsPerformingCoordinateTransformation)==null||g.call(o,!0);const a=this.getRenderer(),c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=c.worldToDisplay(...i,a);f[1]=l[1]-f[1];const u=[f[0]-this.sx,f[1]-this.sy],d=window.devicePixelRatio||1,h=[u[0]/d,u[1]/d];return o.setIsPerformingCoordinateTransformation(!1),h},this.hasImageURI=i=>this.getActors().filter(a=>_a(a,"vtkVolume")).some(({uid:a,referencedId:s})=>{const c=$e.getVolume(s||a);return c!=null&&c.imageIds?c.imageIds.map(Ur).includes(i):!1}),this.getImageIds=i=>{const o=this._getApplicableVolumeActor(i);if(!o)throw new Error(`No actor found for the given volumeId: ${i}`);const a=o.volumeId,s=$e.getVolume(a);if(!s)throw new Error(`imageVolume with id: ${a} does not exist in cache`);return s.imageIds},this.useCPURendering=q0(),this.useCPURendering)throw new Error("VolumeViewports cannot be used whilst CPU Fallback Rendering is enabled.");const r=this.getRenderer(),n=qre.newInstance();switch(r.setActiveCamera(n),this.type){case vr.ORTHOGRAPHIC:n.setParallelProjection(!0);break;case vr.VOLUME_3D:n.setParallelProjection(!0);break;case vr.PERSPECTIVE:n.setParallelProjection(!1);break;default:throw new Error(`Unrecognized viewport type: ${this.type}`)}this.initializeVolumeNewImageEventDispatcher()}static get useCustomRenderingPipeline(){return!1}getSliceViewInfo(){throw new Error("Method not implemented.")}applyViewOrientation(e,r=!0){const{viewPlaneNormal:n,viewUp:i}=this._getOrientationVectors(e),o=this.getVtkActiveCamera();o.setDirectionOfProjection(-n[0],-n[1],-n[2]),o.setViewUpFrom(i),this.initialViewUp=i,r&&this.resetCamera({resetOrientation:!1,resetRotation:!1})}initializeVolumeNewImageEventDispatcher(){const e=n.bind(this),r=i.bind(this);function n(o){const{viewportId:a}=o.detail;a!==this.id||this.isDisabled||!this.getImageData()||qse(o)}function i(o){const{viewportId:a}=o.detail;a===this.id&&(this.element.removeEventListener(rt.CAMERA_MODIFIED,e),et.removeEventListener(rt.ELEMENT_DISABLED,r),Kse(a))}this.element.removeEventListener(rt.CAMERA_MODIFIED,e),this.element.addEventListener(rt.CAMERA_MODIFIED,e),et.addEventListener(rt.ELEMENT_DISABLED,r)}setVOILUTFunction(e,r,n){Object.values(wo).includes(e)||(e=wo.LINEAR);const{voiRange:i}=this.getProperties();this.setVOI(i,r,n),this.viewportProperties.VOILUTFunction=e}setColormap(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i,a=Ql.newInstance();let s=f1(e.name);const{name:c}=e;if(s||(s=u1.getPresetByName(c)),!s)throw new Error(`Colormap ${e} not found`);const l=o.getProperty().getRGBTransferFunction(0).getRange();if(a.applyColorMap(s),a.setMappingRange(l[0],l[1]),o.getProperty().setRGBTransferFunction(0,a),this.viewportProperties.colormap=e,!n){const f=this.getColormap(r),u={viewportId:this.id,colormap:f,volumeId:r};ut(this.element,rt.VOI_MODIFIED,u),ut(this.element,rt.COLORMAP_MODIFIED,u)}}setOpacity(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n,o=Ed.newInstance();typeof e.opacity=="number"?DN(i,e.opacity):(e.opacity.forEach(({opacity:c,value:l})=>{o.addPoint(l,c)}),i.getProperty().setScalarOpacity(0,o)),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.opacity=e.opacity;const a=this.getColormap(r),s={viewportId:this.id,colormap:a,volumeId:r};ut(this.element,rt.COLORMAP_MODIFIED,s)}setInvert(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const o=i.volumeId,a=this._getOrCreateColorTransferFunction(o);if(wp(a),this.viewportProperties.invert=e,!n){const s={...this.getVOIModifiedEventDetail(o),invertStateChanged:!0};ut(this.element,rt.VOI_MODIFIED,s)}}getVOIModifiedEventDetail(e){const r=this._getApplicableVolumeActor(e);if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);const o=r.volumeActor.getProperty().getRGBTransferFunction(0).getMappingRange(),a=this.getColormap(e),{VOILUTFunction:s,invert:c}=this.getProperties(e);return{viewportId:this.id,range:{lower:o[0],upper:o[1]},volumeId:r.volumeId,VOILUTFunction:s,colormap:a,invert:c}}_getOrCreateColorTransferFunction(e){const r=this._getApplicableVolumeActor(e);if(!r)return null;const{volumeActor:n}=r,i=n.getProperty().getRGBTransferFunction(0);if(i)return i;const o=Ql.newInstance();return n.getProperty().setRGBTransferFunction(0,o),o}setInterpolationType(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n;i.getProperty().setInterpolationType(e),this.viewportProperties.interpolationType=e}setVOI(e,r,n=!1){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i,a=i.volumeId,s=e;if(typeof s>"u")throw new Error("voiRangeToUse is undefined, need to implement this in the new volume model");const{VOILUTFunction:c}=this.getProperties(a);if(c===wo.SAMPLED_SIGMOID){const l=G4(s);o.getProperty().setRGBTransferFunction(0,l)}else{const{lower:l,upper:f}=s;o.getProperty().getRGBTransferFunction(0).setRange(l,f)}if(!n){const l={...this.getVOIModifiedEventDetail(a)};ut(this.element,rt.VOI_MODIFIED,l)}this.viewportProperties.voiRange=s}rotateCamera(e){const r=e-this.getRotation();this.getVtkActiveCamera().roll(-r)}setDefaultProperties(e,r){r==null?this.globalDefaultProperties=e:this.perVolumeIdDefaultProperties.set(r,e)}clearDefaultProperties(e){e==null?(this.globalDefaultProperties={},this.resetProperties()):(this.perVolumeIdDefaultProperties.delete(e),this.resetToDefaultProperties(e))}getViewReference(e={}){const r=super.getViewReference(e),n=this.getVolumeId(e);if((e==null?void 0:e.forFrameOfReference)!==!1&&(r.volumeId=n),typeof(e==null?void 0:e.sliceIndex)!="number")return r;const{viewPlaneNormal:i}=r,o=(e==null?void 0:e.sliceIndex)-this.getSliceIndex(),{sliceRangeInfo:a}=ud(this,n,!0),{sliceRange:s,spacingInNormalDirection:c,camera:l}=a,{focalPoint:f,position:u}=l,{newFocalPoint:d}=X0(f,u,s,i,c,o);return r.cameraFocalPoint=d,r}isReferenceViewable(e,r){if(!e.FrameOfReferenceUID||!super.isReferenceViewable(e,r))return!1;if(r!=null&&r.withNavigation)return!0;const n=this.getSliceIndex(),{sliceIndex:i}=e;return Array.isArray(i)?i[0]<=n&&n<=i[1]:i===void 0||i===n}scroll(e=1){const r=this.getVolumeId(),{sliceRangeInfo:n}=ud(this,r,!0);if(!n)return;const{sliceRange:i,spacingInNormalDirection:o,camera:a}=n,{focalPoint:s,viewPlaneNormal:c,position:l}=a,{newFocalPoint:f,newPosition:u}=X0(s,l,i,c,o,e);this.setCamera({focalPoint:f,position:u}),this.render()}setViewReference(e){if(!e)return;const r=this.getVolumeId(),{viewPlaneNormal:n,FrameOfReferenceUID:i,cameraFocalPoint:o,referencedImageId:a,viewUp:s}=e;let{sliceIndex:c}=e;const{focalPoint:l,viewPlaneNormal:f,position:u}=this.getCamera(),d=EN(f,n),h=Zt(f,n);if(typeof c=="number"&&r!==void 0&&e.volumeId===r&&(d||h)){const{currentStepIndex:g,sliceRangeInfo:p,numScrollSteps:v}=ud(this,r,!0),{sliceRange:y,spacingInNormalDirection:m}=p;d&&(c=v-c-1);const w=c-g,{newFocalPoint:x,newPosition:C}=X0(l,u,y,f,m,w);this.setCamera({focalPoint:x,position:C})}else if(i===this.getFrameOfReferenceUID()){if(n&&!d&&!h){this.setOrientation({viewPlaneNormal:n,viewUp:s}),this.setViewReference(e);return}if(a&&this.isInAcquisitionPlane()){const g=wt(Qo.IMAGE_PLANE,a),{imagePositionPatient:p}=g,{focalPoint:v}=this.getCamera(),y=qn(Ke(),v,p),m=kt(y,f),w=On(Ke(),v,[-f[0],-f[1],-f[2]],m);this.setCamera({focalPoint:w}),this.render();return}if(o){const g=qn([0,0,0],o,l),p=n??f,v=kt(g,p);Zt(v,0)||Ir(g,p,v);const y=ri([0,0,0],l,g),m=ri([0,0,0],u,g);this.setCamera({focalPoint:y,position:m})}}else throw new Error(`Incompatible view refs: ${i}!==${this.getFrameOfReferenceUID()}`)}setThreshold(e,r){const n=this._getApplicableVolumeActor(r);if(!n)return;const{volumeActor:i}=n;IN(i,e.threshold),this.viewportProperties.colormap||(this.viewportProperties.colormap={}),this.viewportProperties.colormap.threshold=e.threshold;const o=this.getColormap(r),a={viewportId:this.id,colormap:o,volumeId:r};ut(this.element,rt.COLORMAP_MODIFIED,a)}setProperties({voiRange:e,VOILUTFunction:r,invert:n,colormap:i,preset:o,interpolationType:a,slabThickness:s}={},c,l=!1){this.globalDefaultProperties==null&&this.setDefaultProperties({voiRange:e,VOILUTFunction:r,invert:n,colormap:i,preset:o,slabThickness:s}),n!==void 0&&this.viewportProperties.invert!==n&&this.setInvert(n,c,l),i!=null&&i.name&&this.setColormap(i,c,l),(i==null?void 0:i.opacity)!=null&&this.setOpacity(i,c),(i==null?void 0:i.threshold)!=null&&this.setThreshold(i,c),e!==void 0&&this.setVOI(e,c,l),typeof a<"u"&&this.setInterpolationType(a),r!==void 0&&this.setVOILUTFunction(r,c,l),o!==void 0&&this.setPreset(o,c,l),s!==void 0&&this.setSlabThickness(s)}resetToDefaultProperties(e){var n,i;const r=this.globalDefaultProperties;(n=r.colormap)!=null&&n.name&&this.setColormap(r.colormap,e),((i=r.colormap)==null?void 0:i.opacity)!=null&&this.setOpacity(r.colormap,e),r.voiRange!==void 0&&this.setVOI(r.voiRange,e),r.VOILUTFunction!==void 0&&this.setVOILUTFunction(r.VOILUTFunction,e),r.invert!==void 0&&this.setInvert(r.invert,e),r.slabThickness!==void 0&&(this.setSlabThickness(r.slabThickness),this.viewportProperties.slabThickness=r.slabThickness),r.preset!==void 0&&this.setPreset(r.preset,e,!1),r.preset!==void 0&&this.setPreset(r.preset,e,!1),this.render()}setPreset(e,r,n){const i=this._getApplicableVolumeActor(r);if(!i)return;const{volumeActor:o}=i;let a=e;typeof a=="string"&&(a=uP.find(s=>s.name===e)),a&&(Sk(o,a),this.viewportProperties.preset=a,this.render(),n||ut(this.element,rt.PRESET_MODIFIED,{viewportId:this.id,volumeId:i.volumeId,actor:o,presetName:a.name}))}async setVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist, you need to create/allocate the volume first`);const o=i.metadata.FrameOfReferenceUID;this._isValidVolumeInputArray(e,o),this._FrameOfReferenceUID=o,e.forEach(s=>{this._addVolumeId(s.volumeId)});const a=[];for(let s=0;s{this._addVolumeId(a.volumeId)});for(let a=0;ao.referencedId===e);return i?{volumeActor:i.actor,volumeId:e,actorUID:i.uid}:void 0}const n=r[0];return{volumeActor:n.actor,volumeId:n.referencedId,actorUID:n.uid}}async _isValidVolumeInputArray(e,r){const n=e.length;for(let i=1;if.referencedId===e);if(!_a(n,"vtkVolume"))return;const i=n.actor,o=$e.getVolume(e),a=i.getMapper().getInputData();return{dimensions:a.getDimensions(),spacing:a.getSpacing(),origin:a.getOrigin(),direction:a.getDirection(),imageData:i.getMapper().getInputData(),metadata:{Modality:(c=o==null?void 0:o.metadata)==null?void 0:c.Modality,FrameOfReferenceUID:(l=o==null?void 0:o.metadata)==null?void 0:l.FrameOfReferenceUID},get scalarData(){var f;return(f=o==null?void 0:o.voxelManager)==null?void 0:f.getScalarData()},scaling:o==null?void 0:o.scaling,hasPixelSpacing:!0,voxelManager:o==null?void 0:o.voxelManager}}setCameraClippingRange(){throw new Error("Method not implemented.")}getSliceIndex(){throw new Error("Method not implemented.")}setCamera(e,r){super.setCamera(e,r),this.setCameraClippingRange()}_setVolumeActors(e){for(let r=0;r-s),a=i.slice(3,6).map(s=>-s);return{viewPlaneNormal:o,viewUp:a}}getSlabThickness(){const e=this.getActors();let r=Qr.MINIMUM_SLAB_THICKNESS;return e.forEach(n=>{n.slabThickness>r&&(r=n.slabThickness)}),r}getIntensityFromWorld(e){const r=this.getDefaultActor();if(!_a(r,"vtkVolume"))return;const{actor:n}=r,i=n.getMapper().getInputData(),o=$e.getVolume(this.getVolumeId()),a=zr(i,e);return o.voxelManager.getAtIJKPoint(a)}getVolumeId(e){const r=this.getActors();if(!r)return;if(!(e!=null&&e.volumeId)){const i=r.find(o=>o.actor.getClassName()==="vtkVolume");return(i==null?void 0:i.referencedId)||(i==null?void 0:i.uid)}const n=r.find(i=>i.actor.getClassName()==="vtkVolume"&&i.referencedId===(e==null?void 0:e.volumeId));return(n==null?void 0:n.referencedId)||(n==null?void 0:n.uid)}getViewReferenceId(e={}){var c;let{volumeId:r,sliceIndex:n}=e;if(!r){const l=this.getActors();if(!l)return;r=(c=l.find(f=>f.actor.getClassName()==="vtkVolume"))==null?void 0:c.referencedId}const i=this.getSliceIndex();n??(n=i);const{viewPlaneNormal:o,focalPoint:a}=this.getCamera(),s=r.includes("?")?"&":"?";return`volumeId:${r}${s}sliceIndex=${n}&viewPlaneNormal=${o.join(",")}`}_addVolumeId(e){this.volumeIds.add(e)}getAllVolumeIds(){return Array.from(this.volumeIds)}}function Pu(t,e){const{imageData:r}=t.getImageData(),n=t.canvasToWorld(e);return zr(r,n)}function Sh(t,e){return t.indexToWorld(e)}function Qse(t,e){const{imageData:r}=t.getImageData(),n=Sh(r,e);return t.worldToCanvas(n)}class ur extends Tr{constructor(e){super(e),this._useAcquisitionPlaneForViewPlane=!1,this.getNumberOfSlices=()=>{const{numberOfSlices:n}=By(this)||{};return n},this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!1,suppressEvents:!0}),this.getCurrentImageIdIndex=(n,i=!0)=>{const{currentStepIndex:o}=ud(this,n||this.getVolumeId(),i);return o},this.getSliceIndex=()=>{const{imageIndex:n}=By(this)||{};return n},this.getCurrentImageId=()=>{const n=this.getDefaultActor();if(!n||!_a(n,"vtkVolume"))return;const i=$e.getVolume(this.getVolumeId());if(!i)return;const{viewPlaneNormal:o,focalPoint:a}=this.getCamera();return Zl(i,a,o)},this.getSlicePlaneCoordinates=()=>{const n=this.getDefaultActor();if(!(n!=null&&n.actor))return console.warn("No image data found for calculating vtkPlanes."),[];const i=this.getVolumeId(),o=$e.getVolume(i),a=this.getCamera(),{focalPoint:s,position:c,viewPlaneNormal:l}=a,f=xf(o,l),u=pw(n.actor,l,s),d=Math.round((u.current-u.min)/f),h=Math.round((u.max-u.current)/f),g=this.getSliceIndex(),p=[];for(let v=-d;v<=h;v++){const{newFocalPoint:y}=X0(s,c,u,l,f,v);p.push({sliceIndex:g+v,point:y})}return p};const{orientation:r}=this.options;if(r&&r!==Cd.ACQUISITION){this.applyViewOrientation(r);return}this._useAcquisitionPlaneForViewPlane=!0}async setVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(i),this._useAcquisitionPlaneForViewPlane=!1),super.setVolumes(e,r,n)}async addVolumes(e,r=!1,n=!1){const i=$e.getVolume(e[0].volumeId);if(!i)throw new Error(`imageVolume with id: ${i.volumeId} does not exist`);return this._useAcquisitionPlaneForViewPlane&&(this._setViewPlaneToAcquisitionPlane(i),this._useAcquisitionPlaneForViewPlane=!1),super.addVolumes(e,r,n)}jumpToWorld(e){const{focalPoint:r}=this.getCamera(),n=[0,0,0];Mn(n,e,r);const i=this.getCamera(),o=i.viewPlaneNormal,a=kt(n,o),s=Ft(o[0],o[1],o[2]);if(Ir(s,s,a),Math.abs(s[0])>.001||Math.abs(s[1])>.001||Math.abs(s[2])>.001){const c=[0,0,0],l=[0,0,0];ri(c,i.focalPoint,s),ri(l,i.position,s),this.setCamera({focalPoint:c,position:l}),this.render()}return!0}setOrientation(e,r=!0){let n,i;if(typeof e=="string"){if(e===Cd.ACQUISITION)({viewPlaneNormal:n,viewUp:i}=super._getAcquisitionPlaneOrientation());else if(Au[e])({viewPlaneNormal:n,viewUp:i}=Au[e]);else throw new Error(`Invalid orientation: ${e}. Use Enums.OrientationAxis instead.`);this.setCamera({viewPlaneNormal:n,viewUp:i}),this.viewportProperties.orientation=e,this.resetCamera()}else({viewPlaneNormal:n,viewUp:i}=e),this.applyViewOrientation(e);r&&this.render()}setCameraClippingRange(){const e=this.getVtkActiveCamera();if(!e){console.warn("No active camera found");return}e.getParallelProjection()?e.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):e.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE)}_setViewPlaneToAcquisitionPlane(e){let r,n;if(e){const{direction:i}=e;r=i.slice(6,9).map(o=>-o),n=i.slice(3,6).map(o=>-o)}else({viewPlaneNormal:r,viewUp:n}=this._getAcquisitionPlaneOrientation());this.setCamera({viewPlaneNormal:r,viewUp:n}),this.initialViewUp=n,this.resetCamera()}getBlendMode(e){const r=this.getActors(),n=(e==null?void 0:e.length)>0?r.find(i=>e.includes(i.uid)):r[0];return(n==null?void 0:n.blendMode)||(n==null?void 0:n.actor.getMapper().getBlendMode())}setBlendMode(e,r=[],n=!1){let i=this.getActors();(r==null?void 0:r.length)>0&&(i=i.filter(o=>r.includes(o.uid))),i.forEach(o=>{var c;const{actor:a}=o,s=a.getMapper();(c=s.setBlendMode)==null||c.call(s,e),o.blendMode=e}),n&&this.render()}resetCamera(e){const{resetPan:r=!0,resetZoom:n=!0,resetRotation:i=!0,resetToCenter:o=!0,suppressEvents:a=!1,resetOrientation:s=!0}=e||{},{orientation:c}=this.viewportProperties;c&&s&&this.applyViewOrientation(c,!1),super.resetCamera({resetPan:r,resetZoom:n,resetToCenter:o});const l=this.getVtkActiveCamera(),f=l.getViewPlaneNormal(),u=l.getFocalPoint();if(this.getActors().forEach(h=>{if(!h.actor)return;const g=h.actor.getMapper();if(g.getClippingPlanes().length===0&&!(h!=null&&h.clippingFilter)){const v=Vo.newInstance(),y=Vo.newInstance(),m=[v,y];let w=Qr.MINIMUM_SLAB_THICKNESS;h.slabThickness&&(w=h.slabThickness),this.setOrientationOfClippingPlanes(m,w,f,u),g.addClippingPlane(v),g.addClippingPlane(y)}}),i&&Au[this.viewportProperties.orientation]!==void 0){const h=Au[this.viewportProperties.orientation];this.setCameraNoEvent({viewUp:h.viewUp,viewPlaneNormal:h.viewPlaneNormal})}if(!a){const h={viewportId:this.id,camera:this.getCamera(),renderingEngineId:this.renderingEngineId,element:this.element};ut(this.element,rt.CAMERA_RESET,h)}return!0}setSlabThickness(e,r=[]){e<.1&&(e=.1);let n=this.getActors();(r==null?void 0:r.length)>0&&(n=n.filter(o=>r.includes(o.uid))),n.forEach(o=>{_a(o,"vtkVolume")&&(o.slabThickness=e)});const i=this.getCamera();this.updateClippingPlanesForActors(i),this.triggerCameraModifiedEventIfNecessary(i,i),this.viewportProperties.slabThickness=e}resetSlabThickness(){this.getActors().forEach(n=>{_a(n,"vtkVolume")&&(n.slabThickness=Qr.MINIMUM_SLAB_THICKNESS)});const r=this.getCamera();this.updateClippingPlanesForActors(r),this.triggerCameraModifiedEventIfNecessary(r,r),this.viewportProperties.slabThickness=void 0}isInAcquisitionPlane(){const e=this.getImageData();if(!e)return!1;const{direction:r}=e,{viewPlaneNormal:n}=this.getCamera(),i=[r[6],r[7],r[8]];return Math.abs(kt(n,i))>.99}getSliceViewInfo(){const{width:e,height:r}=this.getCanvas(),n=Pu(this,[0,0]),i=Pu(this,[e-1,0]),o=Pu(this,[0,r-1]),a=Mn(Ke(),i,n),s=Mn(Ke(),o,n),c=kn(Ke(),a,s);Qn(a,a),Qn(s,s),Qn(c,c);const{dimensions:l}=this.getImageData(),[f,u,d]=l,p=[[0,0,0],[f-1,0,0],[0,u-1,0],[f-1,u-1,0],[0,0,d-1],[f-1,0,d-1],[0,u-1,d-1],[f-1,u-1,d-1]].map(b=>Qse(this,b)).reduce((b,D)=>(b.minX=Math.min(b.minX,D[0]),b.minY=Math.min(b.minY,D[1]),b.maxX=Math.max(b.maxX,D[0]),b.maxY=Math.max(b.maxY,D[1]),b),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}),v=Pu(this,[p.minX,p.minY]),y=J_(a[0],a[1],a[2],0,s[0],s[1],s[2],0,c[0],c[1],c[2],0,v[0],v[1],v[2],1),m=Pu(this,[p.maxX,p.maxY]),w=Mn(Ke(),m,v),x=$r(ba(),y),{viewPlaneNormal:C}=this.getCamera();if(C.filter(b=>Math.abs(b)>qa).length>1)throw new Error("getSliceInfo is not supported for oblique views");const T=C.findIndex(b=>Math.abs(b)>1-qa);if(T===-1)throw new Error("Unable to determine slice axis");const _=kt(a,w)+1,E=kt(s,w)+1;return{sliceIndex:this.getSliceIndex(),width:_,height:E,slicePlane:T,sliceToIndexMatrix:y,indexToSliceMatrix:x}}getCurrentSlicePixelData(){const{voxelManager:e}=this.getImageData();return e.getSliceData(this.getSliceViewInfo())}getViewReference(e={}){const r=super.getViewReference(e);if(!(r!=null&&r.volumeId))return;const n=$e.getVolume(r.volumeId);return r.referencedImageId=Zl(n,r.cameraFocalPoint,r.viewPlaneNormal),r}resetProperties(e){this._resetProperties(e)}_resetProperties(e){const r=e?this.getActor(e):this.getDefaultActor();if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);r.slabThickness&&(r.slabThickness=Qr.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera())),e||(e=this.getVolumeId());const n=$e.getVolume(e);if(!n)throw new Error(`imageVolume with id: ${e} does not exist in cache`);if(J4(r.actor,n),tc(r)){const l=r.actor.getProperty().getRGBTransferFunction(0);mw(l,this.initialTransferFunctionNodes)}const i={...super.getVOIModifiedEventDetail(e)};this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetCameraRotation:!0}),ut(this.element,rt.VOI_MODIFIED,i)}getSlicesClippingPlanes(){const e=this.getSlicePlaneCoordinates(),{viewPlaneNormal:r}=this.getCamera(),n=Qr.MINIMUM_SLAB_THICKNESS;return e.map(({point:i,sliceIndex:o})=>{const a=[Vo.newInstance(),Vo.newInstance()];return this.setOrientationOfClippingPlanes(a,n,r,i),{sliceIndex:o,planes:a.map(s=>({normal:s.getNormal(),origin:s.getOrigin()}))}})}}function ece(t,e){e.classHierarchy.push("vtkAbstractImageMapper"),t.getIsOpaque=()=>!0,t.getCurrentImage=()=>null,t.getBoundsForSlice=()=>(J.vtkErrorMacro("vtkAbstractImageMapper.getBoundsForSlice - NOT IMPLEMENTED"),rf())}const tce={slice:0,customDisplayExtent:[0,0,0,0,0,0],useCustomExtents:!1,backgroundColor:[0,0,0,1]};function nce(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,tce,r),w4.extend(t,e,r),J.setGet(t,e,["slice","useCustomExtents"]),J.setGetArray(t,e,["customDisplayExtent"],6),J.setGetArray(t,e,["backgroundColor"],4),ece(t,e)}var rce={extend:nce};function Tk(t,e,r){const n=r.getCurrentImage(),i=n.getExtent(),o=[i[0],i[2],i[4]],{ijkMode:a}=r.getClosestIJKAxis();let s=r.isA("vtkImageArrayMapper")?r.getSubSlice():r.getSlice();a!==r.getSlicingMode()&&(s=r.getSliceAtPosition(s)),o[a]+=s;const c=[0,0,0];n.indexToWorld(o,c),o[a]+=1;const l=[0,0,0];n.indexToWorld(o,l),l[0]-=c[0],l[1]-=c[1],l[2]-=c[2],Qn(l,l);const f=Vo.intersectWithLine(t,e,c,l);if(f.intersection){const u=f.x,d=[0,0,0];return n.worldToIndex(u,d),{t:f.t,absoluteIJK:d}}return null}function ice(t,e,r){const n=Tk(t,e,r);if(n){const o=r.getCurrentImage().getExtent(),a=[Math.round(n.absoluteIJK[0]),Math.round(n.absoluteIJK[1]),Math.round(n.absoluteIJK[2])];return a[0]o[1]||a[1]o[3]||a[2]o[5]?null:{t:n.t,ijk:a}}return null}function oce(t,e,r){const n=Tk(t,e,r);if(n){const o=r.getCurrentImage().getExtent(),a=n.absoluteIJK,s=[Math.floor(a[0]),Math.floor(a[1]),Math.floor(a[2])];if(s[0]o[1]-1||s[1]o[3]-1||s[2](o[5]?o[5]-1:o[5]))return null;const c=[a[0]-s[0],a[1]-s[1],a[2]-s[2]];return{t:n.t,ijk:s,pCoords:c}}return null}const{staticOffsetAPI:ace,otherStaticMethods:sce}=cw,{SlicingMode:Hn}=uw;function cce(t,e){e.classHierarchy.push("vtkImageMapper"),t.getSliceAtPosition=n=>{const i=t.getCurrentImage();let o;if(n.length===3)o=n;else if(Number.isFinite(n)){const f=i.getBounds();switch(e.slicingMode){case Hn.X:o=[n,(f[3]+f[2])/2,(f[5]+f[4])/2];break;case Hn.Y:o=[(f[1]+f[0])/2,n,(f[5]+f[4])/2];break;case Hn.Z:o=[(f[1]+f[0])/2,(f[3]+f[2])/2,n];break}}const a=[0,0,0];i.worldToIndex(o,a);const s=i.getExtent(),{ijkMode:c}=t.getClosestIJKAxis();let l=0;switch(c){case Hn.I:l=oc(a[0],s[0],s[1]);break;case Hn.J:l=oc(a[1],s[2],s[3]);break;case Hn.K:l=oc(a[2],s[4],s[5]);break;default:return 0}return l},t.setSliceFromCamera=n=>{const i=n.getFocalPoint();switch(e.slicingMode){case Hn.I:case Hn.J:case Hn.K:{const o=t.getSliceAtPosition(i);t.setSlice(o)}break;case Hn.X:t.setSlice(i[0]);break;case Hn.Y:t.setSlice(i[1]);break;case Hn.Z:t.setSlice(i[2]);break}},t.setXSlice=n=>{t.setSlicingMode(Hn.X),t.setSlice(n)},t.setYSlice=n=>{t.setSlicingMode(Hn.Y),t.setSlice(n)},t.setZSlice=n=>{t.setSlicingMode(Hn.Z),t.setSlice(n)},t.setISlice=n=>{t.setSlicingMode(Hn.I),t.setSlice(n)},t.setJSlice=n=>{t.setSlicingMode(Hn.J),t.setSlice(n)},t.setKSlice=n=>{t.setSlicingMode(Hn.K),t.setSlice(n)},t.getSlicingModeNormal=()=>{const n=[0,0,0],i=t.getCurrentImage().getDirection();switch(e.slicingMode){case Hn.X:n[0]=1;break;case Hn.Y:n[1]=1;break;case Hn.Z:n[2]=1;break;case Hn.I:v2(i,[1,0,0],n);break;case Hn.J:v2(i,[0,1,0],n);break;case Hn.K:v2(i,[0,0,1],n);break}return n};function r(){let n;switch(e.slicingMode){case Hn.X:n=0;break;case Hn.Y:n=1;break;case Hn.Z:n=2;break;default:e.closestIJKAxis={ijkMode:e.slicingMode,flip:!1};return}const i=t.getCurrentImage().getDirection(),o=pR(i);let a=0;for(;a<3&&o[n+3*a]===0;++a);const s=o[n+3*a]<0;e.closestIJKAxis={ijkMode:a,flip:s}}t.setSlicingMode=n=>{e.slicingMode!==n&&(e.slicingMode=n,t.getCurrentImage()&&r(),t.modified())},t.getClosestIJKAxis=()=>((e.closestIJKAxis===void 0||e.closestIJKAxis.ijkMode===Hn.NONE)&&t.getCurrentImage()&&r(),e.closestIJKAxis),t.getBounds=()=>{const n=t.getCurrentImage();if(!n)return rf();if(!e.useCustomExtents)return n.getBounds();const i=e.customDisplayExtent.slice(),{ijkMode:o}=t.getClosestIJKAxis();let a=e.slice;switch(o!==e.slicingMode&&(a=t.getSliceAtPosition(e.slice)),o){case Hn.I:i[0]=a,i[1]=a;break;case Hn.J:i[2]=a,i[3]=a;break;case Hn.K:i[4]=a,i[5]=a;break}return n.extentToBounds(i)},t.getBoundsForSlice=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:e.slice,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const o=t.getCurrentImage();if(!o)return rf();const a=o.getSpatialExtent(),{ijkMode:s}=t.getClosestIJKAxis();let c=n;switch(s!==e.slicingMode&&(c=t.getSliceAtPosition(n)),s){case Hn.I:a[0]=c-i,a[1]=c+i;break;case Hn.J:a[2]=c-i,a[3]=c+i;break;case Hn.K:a[4]=c-i,a[5]=c+i;break}return o.extentToBounds(a)},t.intersectWithLineForPointPicking=(n,i)=>ice(n,i,t),t.intersectWithLineForCellPicking=(n,i)=>oce(n,i,t),t.getCurrentImage=()=>t.getInputData()}const lce={slicingMode:Hn.NONE,closestIJKAxis:{ijkMode:Hn.NONE,flip:!1},renderToRectangle:!1,sliceAtFocalPoint:!1,preferSizeOverAccuracy:!1};function _k(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,lce,r),rce.extend(t,e,r),J.get(t,e,["slicingMode"]),J.setGet(t,e,["closestIJKAxis","renderToRectangle","sliceAtFocalPoint","preferSizeOverAccuracy"]),cw.implementCoincidentTopologyMethods(t,e),cce(t,e)}const uce=J.newInstance(_k,"vtkImageMapper");var fce={newInstance:uce,extend:_k,...ace,...sce,...uw};const{InterpolationType:P2}=Tee,{vtkErrorMacro:JD}=J,R2=4;function dce(t,e){e.classHierarchy.push("vtkImageProperty"),t.getMTime=()=>{let r=e.mtime,n;for(let i=0;in?r:n),e.componentData[i].piecewiseFunction&&(n=e.componentData[i].piecewiseFunction.getMTime(),r=r>n?r:n);return r},t.setRGBTransferFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),e.componentData[i].rGBTransferFunction!==o?(e.componentData[i].rGBTransferFunction=o,t.modified(),!0):!1},t.getRGBTransferFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[r].rGBTransferFunction},t.setPiecewiseFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),e.componentData[i].piecewiseFunction!==o?(e.componentData[i].piecewiseFunction=o,t.modified(),!0):!1},t.getPiecewiseFunction=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return e.componentData[r].piecewiseFunction},t.setScalarOpacity=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,i=r,o=n;return Number.isInteger(r)||(o=r,i=0),t.setPiecewiseFunction(i,o)},t.getScalarOpacity=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return t.getPiecewiseFunction(r)},t.setComponentWeight=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;if(r<0||r>=R2)return JD("Invalid index"),!1;const i=Math.min(1,Math.max(0,n));return e.componentData[r].componentWeight!==i?(e.componentData[r].componentWeight=i,t.modified(),!0):!1},t.getComponentWeight=function(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return r<0||r>=R2?(JD("Invalid index"),0):e.componentData[r].componentWeight},t.setInterpolationTypeToNearest=()=>t.setInterpolationType(P2.NEAREST),t.setInterpolationTypeToLinear=()=>t.setInterpolationType(P2.LINEAR),t.getInterpolationTypeAsString=()=>J.enumToString(P2,e.interpolationType)}const hce={independentComponents:!1,interpolationType:P2.LINEAR,colorWindow:255,colorLevel:127.5,ambient:1,diffuse:0,opacity:1,useLookupTableScalarRange:!1,useLabelOutline:!1,labelOutlineThickness:[1],labelOutlineOpacity:1};function gce(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,hce,r),J.obj(t,e),!e.componentData){e.componentData=[];for(let n=0;nt,t.getImages=()=>t,t.getIsOpaque=()=>{if(e.forceOpaque)return!0;if(e.forceTranslucent)return!1;e.property||t.getProperty();let r=e.property.getOpacity()>=1;return r=r&&(!e.mapper||e.mapper.getIsOpaque()),r},t.hasTranslucentPolygonalGeometry=()=>!1,t.makeProperty=mce.newInstance,t.getProperty=()=>(e.property===null&&(e.property=t.makeProperty()),e.property),t.getBounds=()=>{if(e.mapper===null)return e.bounds;const r=e.mapper.getBounds();if(!r||r.length!==6)return r;if(r[0]>r[1])return e.mapperBounds=r.concat(),e.bounds=[1,-1,1,-1,1,-1],e.boundsMTime.modified(),r;const n=i=>i[0].map((o,a)=>i.map(s=>s[a]));if(!e.mapperBounds||!n([r,e.mapperBounds]).reduce((i,o)=>i&&o[0]===o[1],!0)||t.getMTime()>e.boundsMTime.getMTime()){vce("Recomputing bounds..."),e.mapperBounds=r.map(o=>o),t.computeMatrix();const i=new Float64Array(16);En(i,e.matrix),ir.transformBounds(r,i,e.bounds),e.boundsMTime.modified()}return e.bounds},t.getBoundsForSlice=(r,n)=>{const i=e.mapper.getBoundsForSlice(r,n);if(!ir.isValid(i))return i;t.computeMatrix();const o=new Float64Array(16);return En(o,e.matrix),ir.transformBounds(i,o)},t.getMinXBound=()=>t.getBounds()[0],t.getMaxXBound=()=>t.getBounds()[1],t.getMinYBound=()=>t.getBounds()[2],t.getMaxYBound=()=>t.getBounds()[3],t.getMinZBound=()=>t.getBounds()[4],t.getMaxZBound=()=>t.getBounds()[5],t.getMTime=()=>{let r=e.mtime;if(e.property!==null){const n=e.property.getMTime();r=n>r?n:r}return r},t.getRedrawMTime=()=>{let r=e.mtime;if(e.mapper!==null){let n=e.mapper.getMTime();r=n>r?n:r,e.mapper.getInput()!==null&&(e.mapper.getInputAlgorithm().update(),n=e.mapper.getInput().getMTime(),r=n>r?n:r)}if(e.property!==null){let n=e.property.getMTime();r=n>r?n:r,e.property.getRGBTransferFunction()!==null&&(n=e.property.getRGBTransferFunction().getMTime(),r=n>r?n:r)}return r},t.getSupportsSelection=()=>e.mapper?e.mapper.getSupportsSelection():!1}const wce={mapper:null,property:null,forceOpaque:!1,forceTranslucent:!1,bounds:[...ir.INIT_BOUNDS]};function Ek(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,wce,r),P4.extend(t,e,r),e.boundsMTime={},J.obj(e.boundsMTime),J.set(t,e,["property"]),J.setGet(t,e,["mapper","forceOpaque","forceTranslucent"]),J.getArray(t,e,["bounds"],6),yce(t,e)}const xce=J.newInstance(Ek,"vtkImageSlice");var Cce={newInstance:xce,extend:Ek};function Sce(t){return Object.values(wo).includes(t)?t:wo.LINEAR}function bk(t){const r={...wt(Qo.IMAGE_PLANE,t)};return r.columnPixelSpacing||(r.columnPixelSpacing=1),r.rowPixelSpacing||(r.rowPixelSpacing=1),r.columnCosines||(r.columnCosines=[0,1,0]),r.rowCosines||(r.rowCosines=[1,0,0]),r.imagePositionPatient||(r.imagePositionPatient=[0,0,0]),r.imageOrientationPatient||(r.imageOrientationPatient=new Float32Array([1,0,0,0,1,0])),r}function Dk(t){const e=t.imageId,{pixelRepresentation:r,bitsAllocated:n,bitsStored:i,highBit:o,photometricInterpretation:a,samplesPerPixel:s}=wt("imagePixelModule",e),{windowWidth:c,windowCenter:l,voiLUTFunction:f}=t,{modality:u}=wt("generalSeriesModule",e),d=wt("scalingModule",e),h=wt(Qo.CALIBRATION,e),g=Sce(f),p=bk(e);return{calibration:h,scalingFactor:d,voiLUTFunction:g,modality:u,imagePlaneModule:p,imagePixelModule:{bitsAllocated:n,bitsStored:i,samplesPerPixel:s,highBit:o,photometricInterpretation:a,pixelRepresentation:r,windowWidth:c,windowCenter:l,modality:u,voiLUTFunction:g}}}function vw(t){const{imagePlaneModule:e,imagePixelModule:r,voiLUTFunction:n,modality:i,scalingFactor:o,calibration:a}=Dk(t);let{rowCosines:s,columnCosines:c}=e;(s==null||c==null)&&(s=[1,0,0],c=[0,1,0]);const l=Ft(s[0],s[1],s[2]),f=Ft(c[0],c[1],c[2]),u=Ke();kn(u,l,f);let d=e.imagePositionPatient;d==null&&(d=[0,0,0]);const h=e.columnPixelSpacing||t.columnPixelSpacing,g=e.rowPixelSpacing||t.rowPixelSpacing,p=t.columns,v=t.rows,y=qa,m=1;return!r.photometricInterpretation&&t.sizeInBytes===3*t.width*t.height&&(t.numberOfComponents=3),{numberOfComponents:t.numberOfComponents||Tce(r.photometricInterpretation),origin:d,direction:[...l,...f,...u],dimensions:[p,v,m],spacing:[h,g,y],numVoxels:p*v*m,imagePlaneModule:e,imagePixelModule:r,bitsAllocated:r.bitsAllocated,voiLUTFunction:n,modality:i,scalingFactor:o,calibration:a,scanAxisNormal:u}}function Tce(t){let e=1;return(t==="RGB"||t!=null&&t.includes("YBR")||t==="PALETTE COLOR")&&(e=3),e}function Ik(t){const e=Ql.newInstance();let r=0,n=1024;return t.lower!==void 0&&t.upper!==void 0&&(r=t.lower,n=t.upper),e.addRGBPoint(r,0,0,0),e.addRGBPoint(n,1,1,1),e}function yw(t,e){const r=e.voxelManager.getScalarData();if(!t.getPointData)return;const n=t.getPointData().getScalars().getData();if(e.color&&e.rgba){const i=new Uint8Array(e.columns*e.rows*3);for(let o=0;oi,n.set(i)}else n.set(r);t.modified()}function bn(){return window.performance?performance.now():Date.now()}function _ce(t,e){return function(r){const n=((r-(e-.5))/(t-1)+.5)*255;return Math.min(Math.max(n,0),255)}}function Ece(t){const r=Math.max(...t.lut).toString(2).length-8,n=t.lut[0]>>r,i=t.lut[t.lut.length-1]>>r,o=t.firstValueMapped+t.lut.length-1;return function(a){return a=o?i:t.lut[a-t.firstValueMapped]>>r}}function Ok(t,e,r){return r?Ece(r):_ce(t,e)}function bce(t,e,r,n,i){const o=t.maxPixelValue,a=t.minPixelValue,s=Math.min(a,0);if(t.cachedLut===void 0){const f=o-s+1;t.cachedLut={},t.cachedLut.lutArray=new Uint8ClampedArray(f)}const c=t.cachedLut.lutArray,l=Ok(Array.isArray(e)?e[0]:e,Array.isArray(r)?r[0]:r,i);if(n)for(let f=a;f<=o;f++)c[f+-s]=255-l(f);else for(let f=a;f<=o;f++)c[f+-s]=l(f);return c}function Dce(t,e,r){let n=bn();const i=t.voxelManager.getScalarData();t.stats.lastGetPixelDataTime=bn()-n;const o=t.minPixelValue;let a=0,s=0;const c=i.length;if(n=bn(),o<0)for(;s0||t.voi.windowWidth!==void 0&&t.voi.windowCenter!==void 0}function ZD(t,e){return!t&&!e?!0:!t||!e?!1:t.id===e.id}function Fce(t,e){return r=>r*t+e}function Uce(t){const e=t.lut[0],r=t.lut[t.lut.length-1],n=t.firstValueMapped+t.lut.length;return i=>i=n?r:t.lut[i]}function Bce(t,e,r){return r?Uce(r):Fce(t,e)}function Gce(t,e,r,n,i,o){const a=t.maxPixelValue,s=t.minPixelValue,c=Math.min(s,0);if(t.cachedLut===void 0){const d=a-c+1;t.cachedLut={},t.cachedLut.lutArray=new Uint8ClampedArray(d)}const l=t.cachedLut.lutArray,f=Bce(t.slope,t.intercept,i),u=Ok(e,r,o);if(t.isPreScaled)if(n)for(let d=s;d<=a;d++)l[d+-c]=255-u(d);else for(let d=s;d<=a;d++)l[d+-c]=u(d);else if(n)for(let d=s;d<=a;d++)l[d+-c]=255-u(f(d));else for(let d=s;d<=a;d++)l[d+-c]=u(f(d));return l}function Lk(t,e,r){return t.cachedLut!==void 0&&t.cachedLut.windowCenter===e.voi.windowCenter&&t.cachedLut.windowWidth===e.voi.windowWidth&&ZD(t.cachedLut.modalityLUT,e.modalityLUT)&&ZD(t.cachedLut.voiLUT,e.voiLUT)&&t.cachedLut.invert===e.invert&&!r||(kce(e,t),Gce(t,e.voi.windowWidth,e.voi.windowCenter,e.invert,e.modalityLUT,e.voiLUT),t.cachedLut.windowWidth=e.voi.windowWidth,t.cachedLut.windowCenter=e.voi.windowCenter,t.cachedLut.invert=e.invert,t.cachedLut.voiLUT=e.voiLUT,t.cachedLut.modalityLUT=e.modalityLUT),t.cachedLut.lutArray}function Wce(t,e,r,n=!0){const i=t.renderingTools.lastRenderedIsColor;(!t.renderingTools.renderCanvas||i)&&(t.renderingTools.renderCanvas=fm(null,e.width,e.height),Gy(t,e));const o=t.renderingTools.renderCanvas;if(!Q4(t,e)&&!r)return o;(o.width!==e.width||o.height!==e.height)&&Gy(t,e),e.stats=e.stats||{};const a=t.renderingTools.renderCanvasData,s=t.renderingTools.renderCanvasContext;let c=bn();e.stats.lastLutGenerateTime=bn()-c;const{viewport:l}=t;if(l.modality==="PT"&&e.isPreScaled){const{windowWidth:f,windowCenter:u}=l.voi,d=u-f/2,p=255/(u+f/2-d);let v;l.invert?v=y=>255-(y-d)*p:v=y=>(y-d)*p,Ace(e,v,a.data)}else{const f=Lk(e,l,r);n?Lce(e,f,a.data):Nce(e,f,a.data)}return c=bn(),s.putImageData(a,0,0),e.stats.lastPutImageDataTime=bn()-c,o}function zce(t,e){if(t===void 0)throw new Error("drawImage: enabledElement parameter must not be undefined");const r=t.image;if(r===void 0)throw new Error("drawImage: image must be loaded before it can be drawn");const n=t.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,t.canvas.width,t.canvas.height),n.imageSmoothingEnabled=!t.viewport.pixelReplication,Z4(t,n);const i=Wce(t,r,e),o=t.viewport.displayedArea.tlhc.x-1,a=t.viewport.displayedArea.tlhc.y-1,s=t.viewport.displayedArea.brhc.x-o,c=t.viewport.displayedArea.brhc.y-a;n.drawImage(i,o,a,s,c,0,0,s,c),t.renderingTools=eE(t)}const bS=0,DS=1,$ce=2;function jce(t,e,r){if(t>1)throw new Error("HSVToRGB expects hue < 1");const n=[];if(e===0)return n[0]=r,n[1]=r,n[2]=r,n;const i=Math.floor(t*6),o=6*t-i,a=r*(1-e),s=r*(1-e*o),c=r*(1-e*(1-o));switch(i){case 0:case 6:n[0]=r,n[1]=c,n[2]=a;break;case 1:n[0]=s,n[1]=r,n[2]=a;break;case 2:n[0]=a,n[1]=r,n[2]=c;break;case 3:n[0]=a,n[1]=s,n[2]=r;break;case 4:n[0]=c,n[1]=a,n[2]=r;break;case 5:n[0]=r,n[1]=a,n[2]=s;break}return n}function Hce(t,e){let r;return te.Range[1]?r=e.MaxIndex+DS+1.5:r=(t+e.Shift)*e.Scale,Math.floor(r)}class tE{constructor(){this.NumberOfColors=256,this.Ramp="linear",this.TableRange=[0,255],this.HueRange=[0,.66667],this.SaturationRange=[1,1],this.ValueRange=[1,1],this.AlphaRange=[1,1],this.NaNColor=[128,0,0,255],this.BelowRangeColor=[0,0,0,255],this.UseBelowRangeColor=!0,this.AboveRangeColor=[255,255,255,255],this.UseAboveRangeColor=!0,this.InputRange=[0,255],this.Table=[]}setNumberOfTableValues(e){this.NumberOfColors=e}setRamp(e){this.Ramp=e}setTableRange(e,r){this.TableRange[0]=e,this.TableRange[1]=r}setHueRange(e,r){this.HueRange[0]=e,this.HueRange[1]=r}setSaturationRange(e,r){this.SaturationRange[0]=e,this.SaturationRange[1]=r}setValueRange(e,r){this.ValueRange[0]=e,this.ValueRange[1]=r}setRange(e,r){this.InputRange[0]=e,this.InputRange[1]=r}setAlphaRange(e,r){this.AlphaRange[0]=e,this.AlphaRange[1]=r}getColor(e){return this.mapValue(e)}build(e){if(this.Table.length>1&&!e)return;this.Table=[];const r=this.NumberOfColors-1;let n,i,o,a;r?(n=(this.HueRange[1]-this.HueRange[0])/r,i=(this.SaturationRange[1]-this.SaturationRange[0])/r,o=(this.ValueRange[1]-this.ValueRange[0])/r,a=(this.AlphaRange[1]-this.AlphaRange[0])/r):n=i=o=a=0;for(let s=0;s<=r;s++){const c=this.HueRange[0]+s*n,l=this.SaturationRange[0]+s*i,f=this.ValueRange[0]+s*o,u=this.AlphaRange[0]+s*a,d=jce(c,l,f),h=[0,0,0,0];switch(this.Ramp){case"scurve":h[0]=Math.floor(127.5*(1+Math.cos((1-d[0])*Math.PI))),h[1]=Math.floor(127.5*(1+Math.cos((1-d[1])*Math.PI))),h[2]=Math.floor(127.5*(1+Math.cos((1-d[2])*Math.PI))),h[3]=Math.floor(u*255);break;case"linear":h[0]=Math.floor(d[0]*255+.5),h[1]=Math.floor(d[1]*255+.5),h[2]=Math.floor(d[2]*255+.5),h[3]=Math.floor(u*255+.5);break;case"sqrt":h[0]=Math.floor(Math.sqrt(d[0])*255+.5),h[1]=Math.floor(Math.sqrt(d[1])*255+.5),h[2]=Math.floor(Math.sqrt(d[2])*255+.5),h[3]=Math.floor(Math.sqrt(u)*255+.5);break;default:throw new Error(`Invalid Ramp value (${this.Ramp})`)}this.Table.push(h)}this.buildSpecialColors()}buildSpecialColors(){const e=this.NumberOfColors,r=e+bS,n=e+DS,i=e+$ce;this.UseBelowRangeColor||e===0?this.Table[r]=this.BelowRangeColor:this.Table[r]=this.Table[0],this.UseAboveRangeColor||e===0?this.Table[n]=this.AboveRangeColor:this.Table[n]=this.Table[e-1],this.Table[i]=this.NaNColor}mapValue(e){const r=this.getIndex(e);if(r<0)return this.NaNColor;if(r===0){if(this.UseBelowRangeColor&&ethis.TableRange[1])return this.AboveRangeColor;return this.Table[r]}getIndex(e){const r={Range:[],MaxIndex:this.NumberOfColors-1,Shift:-this.TableRange[0],Scale:1};if(this.TableRange[1]<=this.TableRange[0]?r.Scale=Number.MAX_VALUE:r.Scale=r.MaxIndex/(this.TableRange[1]-this.TableRange[0]),r.Range[0]=this.TableRange[0],r.Range[1]=this.TableRange[1],isNaN(e))return-1;let n=Hce(e,r);return n===this.NumberOfColors+bS?n=0:n===this.NumberOfColors+DS&&(n=this.NumberOfColors-1),n}setTableValue(e,r,n,i,o){let a;if(typeof r=="number"&&n!==void 0&&i!==void 0&&o!==void 0)a=[r,n,i,o];else if(Array.isArray(r))a=r;else throw new Error("Invalid arguments for setTableValue");if(e<0)throw new Error(`Can't set the table value for negative index (${e})`);if(e>=this.NumberOfColors)throw new Error(`Index ${e} is greater than the number of colors ${this.NumberOfColors}`);this.Table[e]=a,(e===0||e===this.NumberOfColors-1)&&this.buildSpecialColors()}}const QD=[0,0,0,0];function Kce(t,e,r){r=r===null?100:r;const n=(e-t)/(r-1),i=[];for(;r-- >0;)i.push(t),t+=n;return i[i.length-1]=e,i}function qce(t,e){let r=0,n=t.length-1;for(;r<=n;){const i=r+Math.floor((n-r)/2),o=t[i];if(o===e)return i;e=0&&iIS(Math.floor(255-(m-h)*v),0,255):y=m=>IS(Math.floor((m-h)*v),0,255),Qce(e,y,f,s.data)}else{const u=Lk(e,t.viewport,r);e.stats=e.stats||{},e.stats.lastLutGenerateTime=bn()-a,Zce(e,u,f,s.data)}return a=bn(),c.putImageData(s,0,0),e.stats.lastPutImageDataTime=bn()-a,n}function tle(t,e){if(t===void 0)throw new Error("drawImage: enabledElement parameter must not be undefined");const r=t.image;if(r===void 0)throw new Error("drawImage: image must be loaded before it can be drawn");const n=t.canvas.getContext("2d");n.setTransform(1,0,0,1,0,0),n.fillStyle="black",n.fillRect(0,0,t.canvas.width,t.canvas.height),n.imageSmoothingEnabled=!t.viewport.pixelReplication,Z4(t,n);const i=ele(t,r,e),o=t.viewport.displayedArea.tlhc.x-1,a=t.viewport.displayedArea.tlhc.y-1,s=t.viewport.displayedArea.brhc.x-o,c=t.viewport.displayedArea.brhc.y-a;n.drawImage(i,o,a,s,c,0,0,s,c),t.renderingTools=eE(t)}function Ak(t,e){const r=t.image;if(!t.canvas||!t.image)return;const n=bn();if(r.stats={lastGetPixelDataTime:-1,lastStoredPixelDataToCanvasImageDataTime:-1,lastPutImageDataTime:-1,lastRenderTime:-1,lastLutGenerateTime:-1},r){let o=r.render;o||(t.viewport.colormap?o=tle:r.color?o=Rce:o=zce),o(t,e)}const i=bn()-n;r.stats.lastRenderTime=i,t.invalid=!1,t.needsRedraw=!1}function Nk(t){return v1(t)}function wv(t,e){const r=Nk(t);return r.invert(),r.transformPoint(e)}const nle={viewport:{}};function rle(){return{tlhc:{x:1,y:1},brhc:{x:1,y:1},rowPixelSpacing:1,columnPixelSpacing:1,presentationSizeMode:"NONE"}}function ile(){const t=rle(),e={scale:1,translation:{x:0,y:0},voi:{windowWidth:void 0,windowCenter:void 0,voiLUTFunction:wo.LINEAR},invert:!1,pixelReplication:!1,rotation:0,hflip:!1,vflip:!1,modalityLUT:void 0,voiLUT:void 0,colormap:void 0,labelmap:!1,displayedArea:t};return Object.assign({},e,nle.viewport)}function xp(t,e){if(t==null)throw new Error(e)}function ole(t){return!(t==null||t===0||t===180)}function kk(t,e=null){return xp(t,"getImageSize: parameter image must not be undefined"),xp(t.width,"getImageSize: parameter image must have width"),xp(t.height,"getImageSize: parameter image must have height"),ole(e)?{height:t.width,width:t.height}:{width:t.width,height:t.height}}function nE(t,e,r=null){xp(t,"getImageScale: parameter canvas must not be undefined"),xp(e,"getImageScale: parameter image must not be undefined");const n=kk(e,r),i=e.rowPixelSpacing||1,o=e.columnPixelSpacing||1;let a=1,s=1;i{this._configureRenderingPipeline()},this.resize=()=>{this.useCPURendering&&this._resizeCPU()},this._resizeCPU=()=>{this._cpuFallbackEnabledElement.viewport&&ule(this._cpuFallbackEnabledElement)},this.getFrameOfReferenceUID=r=>{var n;return(n=this.getImagePlaneReferenceData(r))==null?void 0:n.FrameOfReferenceUID},this.getCornerstoneImage=()=>this.csImage,this.createActorMapper=r=>{const n=fce.newInstance();n.setInputData(r);const i=Cce.newInstance();i.setMapper(n);const{preferSizeOverAccuracy:o}=dw().rendering;return o&&n.setPreferSizeOverAccuracy(!0),r.getPointData().getScalars().getNumberOfComponents()>1&&i.getProperty().setIndependentComponents(!1),i},this.getNumberOfSlices=()=>this.imageIds.length,this.getDefaultProperties=r=>{let n;return r!==void 0&&(n=this.perImageIdDefaultProperties.get(r)),n!==void 0?n:{...this.globalDefaultProperties}},this.getProperties=()=>{const{colormap:r,voiRange:n,VOILUTFunction:i,interpolationType:o,invert:a,voiUpdatedWithSetProperties:s}=this;return{colormap:r,voiRange:n,VOILUTFunction:i,interpolationType:o,invert:a,isComputedVOI:!s}},this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,suppressEvents:!0}),this.getRotationCPU=()=>{const{viewport:r}=this._cpuFallbackEnabledElement;return r.rotation},this.getRotationGPU=()=>{const{viewUp:r,viewPlaneNormal:n,flipVertical:i,flipHorizontal:o}=this.getCameraNoRotation(),a=t9(this.initialViewUp,o,i,n),c=o4(a,r)*180/Math.PI,l=kn(Ke(),a,r);return kt(l,n)>=0?c:(360-c)%360},this.setRotation=r=>{const n=this.getCamera();if(this.useCPURendering?this.setRotationCPU(r):this.setRotationGPU(r),this._suppressCameraModifiedEvents)return;const i=this.getCamera(),o={previousCamera:n,camera:i,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,o)},this.renderImageObject=r=>{this._setCSImage(r),(this.useCPURendering?this._updateToDisplayImageCPU:this._updateActorToDisplayImageId).call(this,r)},this._setCSImage=r=>{var n;r.isPreScaled=(n=r.preScale)==null?void 0:n.scaled,this.csImage=r},this.canvasToWorldCPU=(r,n=[0,0,0])=>{if(!this._cpuFallbackEnabledElement.image)return;const[i,o]=wv(this._cpuFallbackEnabledElement,r),{origin:a,spacing:s,direction:c}=this.getImageData(),l=c.slice(0,3),f=c.slice(3,6);return On(n,a,l,i*s[0]),On(n,n,f,o*s[1]),n},this.worldToCanvasCPU=r=>{const{spacing:n,direction:i,origin:o}=this.getImageData(),a=i.slice(0,3),s=i.slice(3,6),c=qn(Ke(),r,o),l=[kt(c,a)/n[0],kt(c,s)/n[1]];return e9(this._cpuFallbackEnabledElement,l)},this.canvasToWorldGPU=r=>{const n=this.getRenderer(),i=this.getVtkActiveCamera(),o=i.getClippingRange(),a=i.getDistance();i.setClippingRange(a,a+.1);const c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=window.devicePixelRatio||1,u=[r[0]*f,r[1]*f],d=[u[0]+this.sx,u[1]+this.sy];d[1]=l[1]-d[1];const h=c.displayToWorld(d[0],d[1],0,n);return i.setClippingRange(o[0],o[1]),[h[0],h[1],h[2]]},this.worldToCanvasGPU=r=>{const n=this.getRenderer(),i=this.getVtkActiveCamera(),o=i.getClippingRange(),a=i.getDistance();i.setClippingRange(a,a+.1);const c=this.getRenderingEngine().offscreenMultiRenderWindow.getOpenGLRenderWindow(),l=c.getSize(),f=c.worldToDisplay(...r,n);f[1]=l[1]-f[1];const u=[f[0]-this.sx,f[1]-this.sy];i.setClippingRange(o[0],o[1]);const d=window.devicePixelRatio||1;return[u[0]/d,u[1]/d]},this.getCurrentImageIdIndex=()=>this.currentImageIdIndex,this.getSliceIndex=()=>this.currentImageIdIndex,this.getTargetImageIdIndex=()=>this.targetImageIdIndex,this.getImageIds=()=>this.imageIds,this.getCurrentImageId=(r=this.getCurrentImageIdIndex())=>this.imageIds[r],this.hasImageId=r=>this.imageKeyToIndexMap.has(r),this.hasImageURI=r=>this.imageKeyToIndexMap.has(r),this.customRenderViewportToCanvas=()=>{if(!this.useCPURendering)throw new Error("Custom cpu rendering pipeline should only be hit in CPU rendering mode");return this._cpuFallbackEnabledElement.image?(Ak(this._cpuFallbackEnabledElement,this.cpuRenderingInvalidated),this.cpuRenderingInvalidated=!1):this.fillWithBackgroundColor(),{canvas:this.canvas,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,viewportStatus:this.viewportStatus}},this.renderingPipelineFunctions={getImageData:{cpu:this.getImageDataCPU,gpu:this.getImageDataGPU},setColormap:{cpu:this.setColormapCPU,gpu:this.setColormapGPU},getCamera:{cpu:this.getCameraCPU,gpu:super.getCamera},setCamera:{cpu:this.setCameraCPU,gpu:super.setCamera},getPan:{cpu:this.getPanCPU,gpu:super.getPan},setPan:{cpu:this.setPanCPU,gpu:super.setPan},getZoom:{cpu:this.getZoomCPU,gpu:super.getZoom},setZoom:{cpu:this.setZoomCPU,gpu:super.setZoom},setVOI:{cpu:this.setVOICPU,gpu:this.setVOIGPU},getRotation:{cpu:this.getRotationCPU,gpu:this.getRotationGPU},setInterpolationType:{cpu:this.setInterpolationTypeCPU,gpu:this.setInterpolationTypeGPU},setInvertColor:{cpu:this.setInvertColorCPU,gpu:this.setInvertColorGPU},resetCamera:{cpu:(r={})=>{const{resetPan:n=!0,resetZoom:i=!0}=r;return this.resetCameraCPU({resetPan:n,resetZoom:i}),!0},gpu:(r={})=>{const{resetPan:n=!0,resetZoom:i=!0}=r;return this.resetCameraGPU({resetPan:n,resetZoom:i}),!0}},canvasToWorld:{cpu:this.canvasToWorldCPU,gpu:this.canvasToWorldGPU},worldToCanvas:{cpu:this.worldToCanvasCPU,gpu:this.worldToCanvasGPU},getRenderer:{cpu:()=>this.getCPUFallbackError("getRenderer"),gpu:super.getRenderer},getDefaultActor:{cpu:()=>this.getCPUFallbackError("getDefaultActor"),gpu:super.getDefaultActor},getActors:{cpu:()=>this.getCPUFallbackError("getActors"),gpu:super.getActors},getActor:{cpu:()=>this.getCPUFallbackError("getActor"),gpu:super.getActor},setActors:{cpu:()=>this.getCPUFallbackError("setActors"),gpu:super.setActors},addActors:{cpu:()=>this.getCPUFallbackError("addActors"),gpu:super.addActors},addActor:{cpu:()=>this.getCPUFallbackError("addActor"),gpu:super.addActor},removeAllActors:{cpu:()=>this.getCPUFallbackError("removeAllActors"),gpu:super.removeAllActors},unsetColormap:{cpu:this.unsetColormapCPU,gpu:this.unsetColormapGPU}},this.scaling={},this.modality=null,this.useCPURendering=q0(),this._configureRenderingPipeline(),this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport(),this.currentImageIdIndex=0,this.targetImageIdIndex=0,this.resetCamera(),this.initializeElementDisabledHandler()}setUseCPURendering(e){this.useCPURendering=e,this._configureRenderingPipeline(e)}static get useCustomRenderingPipeline(){return q0()}_configureRenderingPipeline(e){this.useCPURendering=e??q0();for(const r in this.renderingPipelineFunctions)if(Object.prototype.hasOwnProperty.call(this.renderingPipelineFunctions,r)){const n=this.renderingPipelineFunctions[r];this[r]=this.useCPURendering?n.cpu:n.gpu}this.useCPURendering?this._resetCPUFallbackElement():this._resetGPUViewport()}_resetCPUFallbackElement(){this._cpuFallbackEnabledElement={canvas:this.canvas,renderingTools:{},transform:new Hh,viewport:{rotation:0}}}_resetGPUViewport(){const e=this.getRenderer(),r=I4.newInstance();e.setActiveCamera(r),this.initialViewUp=[0,-1,0],r.setDirectionOfProjection(-0,-0,1),r.setViewUp(...this.initialViewUp),r.setParallelProjection(!0),r.setThicknessFromFocalPoint(.1),r.setFreezeFocalPoint(!0)}initializeElementDisabledHandler(){et.addEventListener(rt.ELEMENT_DISABLED,function e(){clearTimeout(this.debouncedTimeout),et.removeEventListener(rt.ELEMENT_DISABLED,e)})}getImageDataGPU(){const e=this.getDefaultActor();if(!e||!tc(e))return;const{actor:r}=e,n=r.getMapper().getInputData(),i=this.csImage;return{dimensions:n.getDimensions(),spacing:n.getSpacing(),origin:n.getOrigin(),direction:n.getDirection(),get scalarData(){return i==null?void 0:i.voxelManager.getScalarData()},imageData:r.getMapper().getInputData(),metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,hasPixelSpacing:this.hasPixelSpacing,calibration:{...i==null?void 0:i.calibration,...this.calibration},preScale:{...i==null?void 0:i.preScale},voxelManager:i==null?void 0:i.voxelManager}}getImageDataCPU(){const{metadata:e}=this._cpuFallbackEnabledElement;if(!e)return;const r=e.spacing,n=this.csImage;return{dimensions:e.dimensions,spacing:r,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.getFrameOfReferenceUID()},scaling:this.scaling,imageData:{getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getScalarData:()=>this.cpuImagePixelData,getSpacing:()=>r,worldToIndex:i=>{const o=this.worldToCanvasCPU(i),a=wv(this._cpuFallbackEnabledElement,o);return[a[0],a[1],0]},indexToWorld:(i,o)=>{const a=e9(this._cpuFallbackEnabledElement,[i[0],i[1]]);return this.canvasToWorldCPU(a,o)}},scalarData:this.cpuImagePixelData,hasPixelSpacing:this.hasPixelSpacing,calibration:{...n==null?void 0:n.calibration,...this.calibration},preScale:{...n==null?void 0:n.preScale},voxelManager:n==null?void 0:n.voxelManager}}calibrateIfNecessary(e,r){const n=wt("calibratedPixelSpacing",e),i=this.calibration!==n,{scale:o}=n||{};return this.hasPixelSpacing=o>0||r.rowPixelSpacing>0,r.calibration=n,i&&(this.calibration=n,this._publishCalibratedEvent=!0,this._calibrationEvent={scale:o,calibration:n}),r}setDefaultProperties(e,r){r==null?this.globalDefaultProperties=e:(this.perImageIdDefaultProperties.set(r,e),this.getCurrentImageId()===r&&this.setProperties(e))}clearDefaultProperties(e){e==null?(this.globalDefaultProperties={},this.resetProperties()):(this.perImageIdDefaultProperties.delete(e),this.resetToDefaultProperties())}setProperties({colormap:e,voiRange:r,VOILUTFunction:n,invert:i,interpolationType:o}={},a=!1){this.viewportStatus=this.csImage?Lo.PRE_RENDER:Lo.LOADING,this.globalDefaultProperties={colormap:this.globalDefaultProperties.colormap??e,voiRange:this.globalDefaultProperties.voiRange??r,VOILUTFunction:this.globalDefaultProperties.VOILUTFunction??n,invert:this.globalDefaultProperties.invert??i,interpolationType:this.globalDefaultProperties.interpolationType??o},typeof e<"u"&&this.setColormap(e),typeof r<"u"&&this.setVOI(r,{suppressEvents:a,voiUpdatedWithSetProperties:!0}),typeof n<"u"&&this.setVOILUTFunction(n,a),typeof i<"u"&&this.setInvertColor(i),typeof o<"u"&&this.setInterpolationType(o)}resetProperties(){this.cpuRenderingInvalidated=!0,this.voiUpdatedWithSetProperties=!1,this.viewportStatus=Lo.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={}),this._resetProperties(),this.render()}_resetProperties(){let e;if(this._isCurrentImagePTPrescaled()?e=this._getDefaultPTPrescaledVOIRange():e=this._getVOIRangeForCurrentImage(),this.setVOI(e),this.setInvertColor(this.initialInvert),this.setInterpolationType(Vl.LINEAR),!this.useCPURendering){const r=this.getTransferFunction();mw(r,this.initialTransferFunctionNodes);const i=Ny(r).reduce((s,c)=>(s.push(c[0],c[1],c[2],c[3]),s),[]),o=this.getDefaultActor(),a=V4(i,o.actor);this.setColormap(a)}}resetToDefaultProperties(){var i;this.cpuRenderingInvalidated=!0,this.viewportStatus=Lo.PRE_RENDER,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={});const e=this.getCurrentImageId(),r=this.perImageIdDefaultProperties.get(e)||this.globalDefaultProperties;(i=r.colormap)!=null&&i.name&&this.setColormap(r.colormap);let n;r.voiRange==null?n=this._getVOIRangeForCurrentImage():n=r.voiRange,this.setVOI(n),this.setInterpolationType(Vl.LINEAR),this.setInvertColor(!1),this.render()}_getVOIFromCache(){let e;return this.voiUpdatedWithSetProperties?e=this.voiRange:this._isCurrentImagePTPrescaled()?e=this._getDefaultPTPrescaledVOIRange():e=this._getVOIRangeForCurrentImage()??this.voiRange,e}_setPropertiesFromCache(){const e=this._getVOIFromCache(),{interpolationType:r,invert:n}=this;this.setVOI(e),this.setInterpolationType(r),this.setInvertColor(n)}getCameraCPU(){const{metadata:e,viewport:r}=this._cpuFallbackEnabledElement;if(!e)return{};const{direction:n}=e,i=n.slice(6,9).map(u=>-u);let o=n.slice(3,6).map(u=>-u);if(r.rotation){const u=n4(ba(),r.rotation*Math.PI/180,i);o=Yt(Ke(),o,u)}const a=[this.element.clientWidth/2,this.element.clientHeight/2],s=this.canvasToWorld(a),c=this.canvasToWorld([0,0]),l=this.canvasToWorld([0,this.element.clientHeight]),f=Qi(c,l)/2;return{parallelProjection:!0,focalPoint:s,position:[0,0,0],parallelScale:f,scale:r.scale,viewPlaneNormal:[i[0],i[1],i[2]],viewUp:[o[0],o[1],o[2]],flipHorizontal:this.flipHorizontal,flipVertical:this.flipVertical}}setCameraCPU(e){const{viewport:r,image:n}=this._cpuFallbackEnabledElement,i=this.getCameraCPU(),{focalPoint:o,parallelScale:a,scale:s,flipHorizontal:c,flipVertical:l}=e,{clientHeight:f}=this.element;if(o){const d=this.worldToCanvasCPU(o),h=wv(this._cpuFallbackEnabledElement,d),g=this.worldToCanvasCPU(i.focalPoint),p=wv(this._cpuFallbackEnabledElement,g),v=rn();Jr(v,K6(h[0],h[1]),K6(p[0],p[1]));const y=fle({x:v[0],y:v[1]},r);r.translation.x-=y.x,r.translation.y-=y.y}if(a){const{rowPixelSpacing:d}=n,h=f*d*.5/a;r.scale=h,r.parallelScale=a}if(s){const{rowPixelSpacing:d}=n;r.scale=s,r.parallelScale=f*d*.5/s}(c!==void 0||l!==void 0)&&this.setFlipCPU({flipHorizontal:c,flipVertical:l}),this._cpuFallbackEnabledElement.transform=v1(this._cpuFallbackEnabledElement);const u={previousCamera:i,camera:this.getCamera(),element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.CAMERA_MODIFIED,u)}getPanCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return[e.translation.x,e.translation.y]}setPanCPU(e){const r=this.getCameraCPU();this.setCameraCPU({...r,focalPoint:[...e.map(n=>-n),0]})}getZoomCPU(){const{viewport:e}=this._cpuFallbackEnabledElement;return e.scale}setZoomCPU(e){const r=this.getCameraCPU();this.setCameraCPU({...r,scale:e})}setFlipCPU({flipHorizontal:e,flipVertical:r}){const{viewport:n}=this._cpuFallbackEnabledElement;e!==void 0&&(n.hflip=e,this.flipHorizontal=n.hflip),r!==void 0&&(n.vflip=r,this.flipVertical=n.vflip)}setVOILUTFunction(e,r){if(this.useCPURendering)throw new Error("VOI LUT function is not supported in CPU rendering");const n=this._getValidVOILUTFunction(e);let i=!1;this.VOILUTFunction!==n&&(i=!0),this.VOILUTFunction=n;const{voiRange:o}=this.getProperties();this.setVOI(o,{suppressEvents:r,forceRecreateLUTFunction:i})}setRotationCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r.rotation=e}setRotationGPU(e){const r=this.getPan(this.fitToCanvasCamera),n=this.getPan(),i=xs([0,0],r,n);this.setPan(i,!1);const{flipVertical:o,flipHorizontal:a,viewPlaneNormal:s}=this.getCamera(),c=t9(this.initialViewUp,a,o,s);this.setCameraNoEvent({viewUp:c}),this.getVtkActiveCamera().roll(-e);const l=this.getPan(),f=this.getPan(this.fitToCanvasCamera),u=xs([0,0],l,f),d=mo([0,0],r,u);this.setPan(d,!1)}setInterpolationTypeGPU(e){const r=this.getDefaultActor();if(!r||!tc(r))return;const{actor:n}=r;n.getProperty().setInterpolationType(e),this.interpolationType=e}setInterpolationTypeCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r.pixelReplication=e!==Vl.LINEAR,this.interpolationType=e}setInvertColorCPU(e){const{viewport:r}=this._cpuFallbackEnabledElement;r&&(r.invert=e,this.invert=e)}setInvertColorGPU(e){const r=this.getDefaultActor();if(r&&tc(r)){if(_a(r,"vtkVolume")){const i=r.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&wp(i),this.invert=e}else if(_a(r,"vtkImageSlice")){const i=r.actor.getProperty().getRGBTransferFunction(0);(!this.invert&&e||this.invert&&!e)&&wp(i),this.invert=e}}}setVOICPU(e,r={}){const{suppressEvents:n=!1}=r,{viewport:i,image:o}=this._cpuFallbackEnabledElement;if(!i||!o)return;if(typeof e>"u"){const{windowWidth:s,windowCenter:c}=o,l=Array.isArray(s)?s[0]:s,f=Array.isArray(c)?c[0]:c;i.voi={windowWidth:l,windowCenter:f,voiLUTFunction:o.voiLUTFunction};const{lower:u,upper:d}=Xu(l,f,o.voiLUTFunction);e={lower:u,upper:d}}else{const{lower:s,upper:c}=e,{windowCenter:l,windowWidth:f}=im(s,c);i.voi||(i.voi={windowWidth:0,windowCenter:0,voiLUTFunction:o.voiLUTFunction}),i.voi.windowWidth=f,i.voi.windowCenter=l}this.voiRange=e;const a={viewportId:this.id,range:e};n||ut(this.element,rt.VOI_MODIFIED,a)}getTransferFunction(){const e=this.getDefaultActor();return!e||!tc(e)?void 0:e.actor.getProperty().getRGBTransferFunction(0)}setVOIGPU(e,r={}){const{suppressEvents:n=!1,forceRecreateLUTFunction:i=!1,voiUpdatedWithSetProperties:o=!1}=r;if(e&&this.voiRange&&this.voiRange.lower===e.lower&&this.voiRange.upper===e.upper&&!i&&!this.stackInvalidated)return;const a=this.getDefaultActor();if(!a||!tc(a))return;const s=a.actor;let c=e;if(typeof c>"u"){const h=s.getMapper().getInputData().getPointData().getScalars().getRange();c={lower:h[0],upper:h[1]}}s.getProperty().setUseLookupTableScalarRange(!0);let l=s.getProperty().getRGBTransferFunction(0);const f=this.VOILUTFunction===wo.SAMPLED_SIGMOID;if((f||!l||i)&&(l=(f?G4:Ik)(c),this.invert&&wp(l),s.getProperty().setRGBTransferFunction(0,l),this.initialTransferFunctionNodes=Ny(l)),f||l.setRange(c.lower,c.upper),this.voiRange=c,this.voiUpdatedWithSetProperties||(this.voiUpdatedWithSetProperties=o),n)return;const u={viewportId:this.id,range:c,VOILUTFunction:this.VOILUTFunction};ut(this.element,rt.VOI_MODIFIED,u)}_addScalingToViewport(e){if(this.scaling.PT)return;const{suvbw:r,suvlbm:n,suvbsa:i}=e,o={};n&&(o.suvbwToSuvlbm=n/r),i&&(o.suvbwToSuvbsa=i/r),this.scaling.PT=o}getImageDataMetadata(e){const r=e.imageId,n=vw(e),{numberOfComponents:i,origin:o,direction:a,dimensions:s,spacing:c,numVoxels:l,imagePixelModule:f,voiLUTFunction:u,modality:d,scalingFactor:h,calibration:g}=n;d==="PT"&&h&&this._addScalingToViewport(h),this.modality=d;const p=this._getValidVOILUTFunction(u);this.VOILUTFunction=p,this.calibration=g;let v=this._getImagePlaneModule(r);return this.useCPURendering||(v=this.calibrateIfNecessary(r,v)),{bitsAllocated:f.bitsAllocated,numberOfComponents:i,origin:o,direction:a,dimensions:s,spacing:c,numVoxels:l,imagePlaneModule:v,imagePixelModule:f}}matchImagesForOverlay(e,r){return(i=>{const o=wt(Qo.IMAGE_PLANE,r),a=wt(Qo.IMAGE_PLANE,i),s=o.imageOrientationPatient,c=a.imageOrientationPatient;if(s&&c){if(Zt(o.imageOrientationPatient,a.imageOrientationPatient)){const f=o.imagePositionPatient,u=a.imagePositionPatient;if(f&&u&&Zt(f,u)){const h=o.rows,g=o.columns,p=a.rows,v=a.columns;if(h===p&&g===v)return i}}}else{const l=o.rows,f=o.columns,u=a.rows,d=a.columns;if(l===u&&f===d)return i}})(e)}getImagePlaneReferenceData(e=this.getCurrentImageIdIndex()){const r=this.imageIds[e];if(!r)return;const n=wt(Qo.IMAGE_PLANE,r);if(!n)return;const{imagePositionPatient:i,frameOfReferenceUID:o}=n;let{rowCosines:a,columnCosines:s}=n;a||(a=[1,0,0]),s||(s=[0,1,0]);const c=kn([0,0,0],s,a);return{FrameOfReferenceUID:o,viewPlaneNormal:c,cameraFocalPoint:i,referencedImageId:r,sliceIndex:e}}_getCameraOrientation(e){const r=e.slice(6,9).map(i=>-i),n=e.slice(3,6).map(i=>-i);return{viewPlaneNormal:[r[0],r[1],r[2]],viewUp:[n[0],n[1],n[2]]}}createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a}){const s=new a.constructor(a.length),c=Bt.newInstance({name:"Pixels",numberOfComponents:o,values:s}),l=tm.newInstance();return l.setDimensions(n),l.setSpacing(i),l.setDirection(r),l.setOrigin(e),l.getPointData().setScalars(c),l}_createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a}){try{this._imageData=this.createVTKImageData({origin:e,direction:r,dimensions:n,spacing:i,numberOfComponents:o,pixelArray:a})}catch(s){n9.error(s)}}async setStack(e,r=0){if(this._throwIfDestroyed(),this.imageIds=e,r>e.length)throw new Error("Current image index is greater than the number of images in the stack");this.imageKeyToIndexMap.clear(),e.forEach((a,s)=>{this.imageKeyToIndexMap.set(a,s),this.imageKeyToIndexMap.set(Ur(a),s)}),this.currentImageIdIndex=r,this.targetImageIdIndex=r;const n=wt(h1.IMAGE_RETRIEVE_CONFIGURATION,e[r],"stack");this.imagesLoader=n?(n.create||ck)(n):this,this.stackInvalidated=!0,this.flipVertical=!1,this.flipHorizontal=!1,this.voiRange=null,this.interpolationType=Vl.LINEAR,this.invert=!1,this.viewportStatus=Lo.LOADING,this.fillWithBackgroundColor(),this.useCPURendering&&(this._cpuFallbackEnabledElement.renderingTools={},delete this._cpuFallbackEnabledElement.viewport.colormap);const i=await this._setImageIdIndex(r),o={imageIds:e,viewportId:this.id,element:this.element,currentImageIdIndex:r};return ut(this.element,rt.VIEWPORT_NEW_IMAGE_SET,o),i}_throwIfDestroyed(){if(this.isDisabled)throw new Error("The stack viewport has been destroyed and is no longer usable. Renderings will not be performed. If you are using the same viewportId and have re-enabled the viewport, you need to grab the new viewport instance using renderingEngine.getViewport(viewportId), instead of using your lexical scoped reference to the viewport instance.")}_checkVTKImageDataMatchesCornerstoneImage(e,r){if(!r)return!1;const[n,i]=r.getSpacing(),[o,a]=r.getDimensions(),s=this._getImagePlaneModule(e.imageId),c=r.getDirection(),l=c.slice(0,3),f=c.slice(3,6),u=r.getPointData().getScalars().getDataType(),d=Zt(n,e.columnPixelSpacing),h=Zt(i,e.rowPixelSpacing),g=d||e.columnPixelSpacing===null&&n===1,p=h||e.rowPixelSpacing===null&&i===1,v=o===e.columns,y=a===e.rows,m=Zt(s.rowCosines,l),w=Zt(s.columnCosines,f),x=u===e.voxelManager.getScalarData().constructor.name;return g&&p&&v&&y&&m&&w&&x}_updateVTKImageDataFromCornerstoneImage(e){let n=this._getImagePlaneModule(e.imageId).imagePositionPatient;n==null&&(n=[0,0,0]),this._imageData.setOrigin(n);const i=this.getActor(this.id);i&&(i.referencedId=e.imageId),yw(this._imageData,e)}_loadAndDisplayImage(e,r){return this.useCPURendering?this._loadAndDisplayImageCPU(e,r):this._loadAndDisplayImageGPU(e,r)}_loadAndDisplayImageCPU(e,r){return new Promise((n,i)=>{function o(h,g,p){if(this.currentImageIdIndex!==g)return;const v=h.voxelManager.getScalarData(),y=h.preScale,m=y==null?void 0:y.scalingParameters,w=(y==null?void 0:y.scaled)&&(m==null?void 0:m.rescaleIntercept)%1!==0||(m==null?void 0:m.rescaleSlope)%1!==0;if(v instanceof Float32Array&&w){const C={min:h.minPixelValue,max:h.maxPixelValue},_=Math.abs(C.max-C.min)/65535,E=C.min,b=v.length,D=new Uint16Array(b);let I=65535,P=0;for(let O=0;OD:h.getPixelData=()=>D,h.preScale={...h.preScale,scaled:!1}}this._setCSImage(h),this.viewportStatus=Lo.PRE_RENDER;const x={image:h,imageId:p,imageIdIndex:g,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.STACK_NEW_IMAGE,x),this._updateToDisplayImageCPU(h),this.render(),this.currentImageIdIndex=g,n(p)}function a(h,g,p){const v={error:h,imageIdIndex:g,imageId:p};this.suppressEvents||ut(et,rt.IMAGE_LOAD_ERROR,v),i(h)}function s(h,g,p){return _s(h,p).then(v=>{o.call(this,v,g,h)},v=>{a.call(this,v,g,h)})}const c=-5,l=pn.Interaction,f={imageId:e,imageIdIndex:r},u={useRGBA:!0,requestType:l},d={imageId:e,imageIdIndex:r,viewportId:this.id,renderingEngineId:this.renderingEngineId};ut(this.element,rt.PRE_STACK_NEW_IMAGE,d),Bi.addRequest(s.bind(this,e,r,u),l,f,c)})}successCallback(e,r){var l,f;const n=this.imageIds.indexOf(e);if(this.currentImageIdIndex!==n)return;const i=(l=this.csImage)==null?void 0:l.imageFrame,o=r==null?void 0:r.imageFrame,a=(i==null?void 0:i.photometricInterpretation)||((f=this.csImage)==null?void 0:f.photometricInterpretation),s=(o==null?void 0:o.photometricInterpretation)||(r==null?void 0:r.photometricInterpretation);a!==s&&(this.stackInvalidated=!0),this._setCSImage(r);const c={image:r,imageId:e,imageIdIndex:n,viewportId:this.id,renderingEngineId:this.renderingEngineId};this._updateActorToDisplayImageId(r),ut(this.element,rt.STACK_NEW_IMAGE,c),this.render(),this.currentImageIdIndex=n}errorCallback(e,r,n){if(!r)return;const i=this.imageIds.indexOf(e),o={error:n,imageIdIndex:i,imageId:e};ut(et,rt.IMAGE_LOAD_ERROR,o)}getLoaderImageOptions(e){const r=this.imageIds.indexOf(e),{transferSyntaxUID:n}=wt("transferSyntax",e)||{};return{useRGBA:!1,transferSyntaxUID:n,priority:5,requestType:pn.Interaction,additionalDetails:{imageId:e,imageIdIndex:r}}}async loadImages(e,r){const n=await Promise.allSettled(e.map(o=>{const a=this.getLoaderImageOptions(o);return _s(o,a).then(s=>(r.successCallback(o,s),o),s=>(r.errorCallback(o,!0,s),o))})),i=n.filter(o=>o.status==="rejected");if(i&&i.length){const o=new CustomEvent(rt.IMAGE_LOAD_ERROR,{detail:i,cancelable:!0});et.dispatchEvent(o)}return n}_loadAndDisplayImageGPU(e,r){if(!e){console.warn("No image id set yet to load");return}const n={imageId:e,imageIdIndex:r,viewportId:this.id,renderingEngineId:this.renderingEngineId};return ut(this.element,rt.PRE_STACK_NEW_IMAGE,n),this.imagesLoader.loadImages([e],this).then(i=>e)}_updateToDisplayImageCPU(e){const r=this.getImageDataMetadata(e),n=Vk(this.canvas,e,this.modality,this._cpuFallbackEnabledElement.viewport.colormap),{windowCenter:i,windowWidth:o,voiLUTFunction:a}=n.voi;this.voiRange=Xu(o,i,a),this._cpuFallbackEnabledElement.image=e,this._cpuFallbackEnabledElement.metadata={...r},this.cpuImagePixelData=e.voxelManager.getScalarData();const s=Object.assign({},n,this._cpuFallbackEnabledElement.viewport);this._cpuFallbackEnabledElement.viewport=this.stackInvalidated?n:s,this.stackInvalidated=!1,this.cpuRenderingInvalidated=!0,this._cpuFallbackEnabledElement.transform=v1(this._cpuFallbackEnabledElement)}getSliceViewInfo(){throw new Error("Method not implemented.")}addImages(e){const r=[];e.forEach(n=>{const{imageId:i,...o}=n,a=$e.getImage(i),{origin:s,dimensions:c,direction:l,spacing:f,numberOfComponents:u}=this.getImageDataMetadata(a),d=this.createVTKImageData({origin:s,dimensions:c,direction:l,spacing:f,numberOfComponents:u,pixelArray:a.voxelManager.getScalarData()}),h=this.createActorMapper(d);h&&(r.push({uid:n.actorUID??Pn(),actor:h,referencedId:i,...o}),n.callback&&n.callback({imageActor:h,imageId:n.imageId}))}),this.addActors(r)}_updateActorToDisplayImageId(e){const r=this._checkVTKImageDataMatchesCornerstoneImage(e,this._imageData),n=this.getViewPresentation();if(r&&!this.stackInvalidated){this._updateVTKImageDataFromCornerstoneImage(e),this.resetCameraNoEvent(),this.setViewPresentation(n),this._setPropertiesFromCache(),this.stackActorReInitialized=!1;return}const{origin:i,direction:o,dimensions:a,spacing:s,numberOfComponents:c,imagePixelModule:l}=this.getImageDataMetadata(e),f=e.voxelManager.getScalarData();this._createVTKImageData({origin:i,direction:o,dimensions:a,spacing:s,numberOfComponents:c,pixelArray:f}),this._updateVTKImageDataFromCornerstoneImage(e);const u=this.createActorMapper(this._imageData),d=this.getActors();d.length&&d[0].uid===this.id?d[0].actor=u:d.unshift({uid:this.id,actor:u,referencedId:e.imageId}),this.setActors(d);const{viewPlaneNormal:h,viewUp:g}=this._getCameraOrientation(o),p=this.getCamera();this.setCameraNoEvent({viewUp:g,viewPlaneNormal:h}),this.initialViewUp=g,this.resetCameraNoEvent(),this.setViewPresentation(n),this.triggerCameraEvent(this.getCamera(),p);const v=l.photometricInterpretation==="MONOCHROME1";this.stackInvalidated=!0;const y=this._getInitialVOIRange(e);this.setVOI(y,{forceRecreateLUTFunction:!!v}),this.initialInvert=!!v,this.setInvertColor(this.invert||this.initialInvert),this.stackInvalidated=!1,this.stackActorReInitialized=!0,this._publishCalibratedEvent&&this.triggerCalibrationEvent()}_getInitialVOIRange(e){if(this.voiRange&&this.voiUpdatedWithSetProperties)return this.voiRange;const{windowCenter:r,windowWidth:n,voiLUTFunction:i}=e;let o=this._getVOIRangeFromWindowLevel(n,r,i);return o=this._getPTPreScaledRange()||o,o}_getPTPreScaledRange(){if(this._isCurrentImagePTPrescaled())return this._getDefaultPTPrescaledVOIRange()}_isCurrentImagePTPrescaled(){var e;return!(this.modality!=="PT"||!this.csImage.isPreScaled||!((e=this.csImage.preScale)!=null&&e.scalingParameters.suvbw))}_getDefaultPTPrescaledVOIRange(){return{lower:0,upper:5}}_getVOIRangeFromWindowLevel(e,r,n=wo.LINEAR){let i,o;if(typeof r=="number"&&typeof e=="number"?(i=r,o=e):Array.isArray(r)&&Array.isArray(e)&&(i=r[0],o=e[0]),i!==void 0&&o!==void 0)return Xu(o,i,n)}async _setImageIdIndex(e){if(e>=this.imageIds.length)throw new Error(`ImageIdIndex provided ${e} is invalid, the stack only has ${this.imageIds.length} elements`);this.currentImageIdIndex=e,this.hasPixelSpacing=!0,this.viewportStatus=Lo.PRE_RENDER;const r=await this._loadAndDisplayImage(this.imageIds[e],e);if(this.perImageIdDefaultProperties.size>=1){const n=this.perImageIdDefaultProperties.get(r);n!==void 0?this.setProperties(n):this.globalDefaultProperties!==void 0&&this.setProperties(this.globalDefaultProperties)}return r}resetCameraCPU({resetPan:e=!0,resetZoom:r=!0}){const{image:n}=this._cpuFallbackEnabledElement;if(!n)return;dle(this._cpuFallbackEnabledElement,e,r);const{scale:i}=this._cpuFallbackEnabledElement.viewport,{clientWidth:o,clientHeight:a}=this.element,s=[o/2,a/2],c=this.canvasToWorldCPU(s);this.setCameraCPU({focalPoint:c,scale:i})}resetCameraGPU({resetPan:e,resetZoom:r}){return this.setCamera({flipHorizontal:!1,flipVertical:!1,viewUp:this.initialViewUp}),super.resetCamera({resetPan:e,resetZoom:r,resetToCenter:!0})}scroll(e,r=!0,n=!1){const i=this.imageIds;if(isNaN(this.targetImageIdIndex))return;const o=this.targetImageIdIndex,a=i.length;let s=o+e;n?s=(s+a)%a:s=Math.max(0,Math.min(a-1,s)),this.targetImageIdIndex=s;const c=i[s];$e.isLoaded(c)||!r?this.setImageIdIndex(s):(clearTimeout(this.debouncedTimeout),this.debouncedTimeout=window.setTimeout(()=>{this.setImageIdIndex(s)},40));const f={newImageIdIndex:s,imageId:c,direction:e};s!==o&&ut(this.element,rt.STACK_VIEWPORT_SCROLL,f)}setImageIdIndex(e){if(this._throwIfDestroyed(),this.currentImageIdIndex===e)return Promise.resolve(this.getCurrentImageId());const r=this._setImageIdIndex(e);return this.targetImageIdIndex=e,r}calibrateSpacing(e){const r=this.getImageIds().indexOf(e);this.stackInvalidated=!0,this._loadAndDisplayImage(e,r)}triggerCameraEvent(e,r){const n={previousCamera:r,camera:e,element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId};this.suppressEvents||ut(this.element,rt.CAMERA_MODIFIED,n)}triggerCalibrationEvent(){const{imageData:e}=this.getImageData(),r={element:this.element,viewportId:this.id,renderingEngineId:this.renderingEngineId,imageId:this.getCurrentImageId(),imageData:e,worldToIndex:e.getWorldToIndex(),...this._calibrationEvent};this.suppressEvents||ut(this.element,rt.IMAGE_SPACING_CALIBRATED,r),this._publishCalibratedEvent=!1}jumpToWorld(e){const r=this.getImageIds(),n=this.getImageData(),{direction:i,spacing:o}=n,a=Zl({direction:i,spacing:o,imageIds:r},e,this.getCamera().viewPlaneNormal,{ignoreSpacing:!0}),s=r.indexOf(a);return s===-1?!1:(this.setImageIdIndex(s),this.render(),!0)}_getVOIRangeForCurrentImage(){const{windowCenter:e,windowWidth:r,voiLUTFunction:n}=this.csImage;return this._getVOIRangeFromWindowLevel(r,e,n)}_getValidVOILUTFunction(e){return Object.values(wo).includes(e)?e:wo.LINEAR}getSliceInfo(){const e=this.getSliceIndex(),{dimensions:r}=this.getImageData();return{width:r[0],height:r[1],sliceIndex:e,slicePlane:2}}isReferenceViewable(e,r={}){const n=this.getCurrentImageIdIndex(),i=this.imageIds[n];if(!i||!e)return!1;const{referencedImageId:o,multiSliceReference:a}=e;if(o){if(o===i)return!0;e.referencedImageURI||(e.referencedImageURI=Ur(o));const{referencedImageURI:c}=e,l=this.imageKeyToIndexMap.get(c);if(r.asOverlay&&this.matchImagesForOverlay(i,o))return!0;if(l===void 0)return!1;if(r.withNavigation)return!0;const f=a&&this.imageKeyToIndexMap.get(a.referencedImageId);return n<=f&&n>=l}if(!super.isReferenceViewable(e,r))return!1;if(e.volumeId)return r.asVolume;const{cameraFocalPoint:s}=e;if(r.asNearbyProjection&&s){const{spacing:c,direction:l,origin:f}=this.getImageData(),u=l.slice(6,9),d=xf({direction:l,spacing:c},u),h=qn(Ke(),s,f),g=kt(h,u),p=d/2;if(Math.abs(g)<=p)return!0}return!1}getViewReference(e={}){const{sliceIndex:r=this.getCurrentImageIdIndex()}=e,n=super.getViewReference(e),i=this.getCurrentImageId(r);if(i){if(n.referencedImageId=i,this.getCurrentImageIdIndex()!==r){const o=this.getImagePlaneReferenceData(r);if(!o)return;Object.assign(n,o)}return n}}setViewReference(e){if(!(e!=null&&e.referencedImageId)){(e==null?void 0:e.sliceIndex)!==void 0&&this.scroll(e.sliceIndex-this.targetImageIdIndex);return}const{referencedImageId:r}=e;e.referencedImageURI||(e.referencedImageURI=Ur(r));const{referencedImageURI:n}=e,i=this.imageKeyToIndexMap.get(n);if(i===void 0){n9.error(`No image URI found for ${n}`);return}this.scroll(i-this.targetImageIdIndex)}getViewReferenceId(e={}){const{sliceIndex:r=this.currentImageIdIndex}=e;return`imageId:${this.imageIds[r]}`}getSliceIndexForImage(e){if(e){if(typeof e=="string")return this.imageKeyToIndexMap.get(e);if(e.referencedImageId)return this.imageKeyToIndexMap.get(e.referencedImageId)}}getCPUFallbackError(e){return new Error(`method ${e} cannot be used during CPU Fallback mode`)}fillWithBackgroundColor(){const e=this.getRenderingEngine();e&&e.fillCanvasWithBackgroundColor(this.canvas,this.options.background)}unsetColormapCPU(){delete this._cpuFallbackEnabledElement.viewport.colormap,this._cpuFallbackEnabledElement.renderingTools={},this.cpuRenderingInvalidated=!0,this.fillWithBackgroundColor(),this.render()}setColormapCPU(e){this.colormap=e;const r=f1(e.name);this._cpuFallbackEnabledElement.viewport.colormap=r,this._cpuFallbackEnabledElement.renderingTools={},this.fillWithBackgroundColor(),this.cpuRenderingInvalidated=!0,this.render();const n={viewportId:this.id,colormap:e};ut(this.element,rt.COLORMAP_MODIFIED,n)}setColormapGPU(e){const i=this.getDefaultActor().actor.getProperty(),o=i.getRGBTransferFunction(),a=f1(e.name)||u1.getPresetByName(e.name);if(o)o.applyColorMap(a),o.setMappingRange(this.voiRange.lower,this.voiRange.upper),i.setRGBTransferFunction(0,o);else{const c=Ql.newInstance();c.applyColorMap(a),c.setMappingRange(this.voiRange.lower,this.voiRange.upper),i.setRGBTransferFunction(0,c)}this.colormap=e,this.render();const s={viewportId:this.id,colormap:e};ut(this.element,rt.COLORMAP_MODIFIED,s)}unsetColormapGPU(){throw new Error("unsetColormapGPU not implemented.")}_getImagePlaneModule(e){var n,i;const r=bk(e);return this.hasPixelSpacing=!r.usingDefaultValues||((n=this.calibration)==null?void 0:n.scale)>0||((i=this.calibration)==null?void 0:i.rowPixelSpacing)>0,this.calibration||(this.calibration=r.calibration),r}isInAcquisitionPlane(){return!0}}class rE extends Tr{constructor(e){super(e),this.getNumberOfSlices=()=>1,this.getRotation=()=>0,this.getCurrentImageIdIndex=()=>0,this.getCurrentImageId=()=>null,this.resetCameraForResize=()=>this.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0});const{parallelProjection:r,orientation:n}=this.options,i=this.getVtkActiveCamera();r!=null&&i.setParallelProjection(r),n&&n!==Cd.ACQUISITION&&this.applyViewOrientation(n)}isInAcquisitionPlane(){return!1}resetCamera({resetPan:e=!0,resetZoom:r=!0,resetToCenter:n=!0}={}){super.resetCamera({resetPan:e,resetZoom:r,resetToCenter:n});const i=this.getVtkActiveCamera();return i.getParallelProjection()?i.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):i.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE),this.getRenderer().resetCameraClippingRange(),!0}setSlabThickness(e,r){return null}setBlendMode(e,r,n){return null}resetProperties(e){const r=e?this.getActor(e):this.getDefaultActor();if(!r)throw new Error(`No actor found for the given volumeId: ${e}`);r.slabThickness&&(r.slabThickness=Qr.MINIMUM_SLAB_THICKNESS,this.viewportProperties.slabThickness=void 0,this.updateClippingPlanesForActors(this.getCamera())),e||(e=this.getVolumeId());const n=$e.getVolume(e);if(!n)throw new Error(`imageVolume with id: ${e} does not exist in cache`);if(J4(r.actor,n),tc(r)){const i=r.actor.getProperty().getRGBTransferFunction(0);mw(i,this.initialTransferFunctionNodes)}this.setCamera(this.initialCamera),ut(this.element,rt.VOI_MODIFIED,super.getVOIModifiedEventDetail(e))}getSliceIndex(){return null}setCamera(e){super.setCamera(e),this.getRenderer().resetCameraClippingRange(),this.render()}setCameraClippingRange(){const e=this.getVtkActiveCamera();e.getParallelProjection()?e.setClippingRange(-Qr.MAXIMUM_RAY_DISTANCE,Qr.MAXIMUM_RAY_DISTANCE):e.setClippingRange(Qr.MINIMUM_SLAB_THICKNESS,Qr.MAXIMUM_RAY_DISTANCE)}resetSlabThickness(){return null}}async function Fk(t,e,r,n=!1,i=!1){r.forEach(a=>{const s=t.getViewport(a);if(!s)throw new Error(`Viewport with Id ${a} does not exist`);if(!(s instanceof Tr))throw new Error("setVolumesForViewports only supports VolumeViewport and VolumeViewport3D")});const o=r.map(async a=>{await t.getViewport(a).setVolumes(e,n,i)});await Promise.all(o)}async function Uk(t,e,r,n=!1,i=!1){for(const a of r){const s=t.getViewport(a);if(!s)throw new Error(`Viewport with Id ${a} does not exist`);if(!(s instanceof Tr)){console.warn(`Viewport with Id ${a} is not a BaseVolumeViewport. Cannot add volume to this viewport.`);return}}const o=r.map(async a=>{await t.getViewport(a).addVolumes(e,n,i)});await Promise.all(o)}function Bk(t,e,r){for(const n of r){const i=t.getViewport(n);if(!i)throw new Error(`Viewport with Id ${n} does not exist`);if(!i.addImages){console.warn(`Viewport with Id ${n} does not have addImages. Cannot add image segmentation to this viewport.`);return}}r.forEach(n=>{t.getViewport(n).addImages(e)})}class gle{constructor(e){this.opacity=.4,this.outlineOpacity=.4,this.transferFunction=[],this.actor=e}setRGBTransferFunction(e,r){this.transferFunction[e]=r}setScalarOpacity(e){}setInterpolationTypeToNearest(){}setUseLabelOutline(){}setLabelOutlineOpacity(e){this.outlineOpacity=e}setLabelOutlineThickness(){}getColor(e){const r=this.transferFunction[0],n=r.getRedValue(e),i=r.getGreenValue(e),o=r.getBlueValue(e);return[n,i,o,this.opacity]}}class ple{constructor(e){this.actor=e}getInputData(){return this.actor.getImage()}}class mle{constructor(e,r){this.canvasProperties=new gle(this),this.visibility=!1,this.mapper=new ple(this),this.className="CanvasActor",this.derivedImage=r,this.viewport=e}renderRLE(e,r,n){const{width:i,height:o}=this.image;let{canvas:a}=this;(!a||a.width!==i||a.height!==o)&&(this.canvas=a=new window.OffscreenCanvas(i,o));const s=a.getContext("2d"),c=s.createImageData(i,o),{data:l}=c;l.fill(0);const{map:f}=n;let u=1/0,d=1/0,h=-1/0,g=-1/0;for(let y=0;yD*255);let b=w+(S<<2);for(let D=S;Di)return;const p=h-u,v=g-d;s.putImageData(c,0,0,u-1,d-1,p+2,v+2),r.drawImage(a,u,d,p,v,u,d,p,v)}setMapper(e){this.mapper=e}render(e,r){if(!this.visibility)return;const n=this.image||this.getImage(),{width:i,height:o}=n,a=n.getScalarData();if(!a)return;const{voxelManager:s}=n;if(s&&s.map.getRun){this.renderRLE(e,r,s);return}let{canvas:c}=this;(!c||c.width!==i||c.height!==o)&&(this.canvas=c=new window.OffscreenCanvas(i,o));const l=c.getContext("2d"),f=l.createImageData(i,o),{data:u}=f;let d=0,h=0,g=1/0,p=1/0,v=-1/0,y=-1/0;for(let x=0;xi)return;const m=v-g+1,w=y-p+1;l.putImageData(f,0,0,g,p,m,w),r.drawImage(c,g,p,m,w,g,p,m,w)}getClassName(){return this.className}getProperty(){return this.canvasProperties}setVisibility(e){this.visibility=e}getMapper(){return this.mapper}isA(e){return e===this.className}getImage(){if(this.image)return this.image;this.image={...this.derivedImage};const e=this.viewport.getImageData();return Object.assign(this.image,{worldToIndex:r=>e.imageData.worldToIndex(r),indexToWorld:(r,n)=>e.imageData.indexToWorld(r,n),getDimensions:()=>e.dimensions,getScalarData:()=>{var r;return(r=this.derivedImage)==null?void 0:r.getPixelData()},getDirection:()=>e.direction,getSpacing:()=>e.spacing,setOrigin:()=>null,setDerivedImage:r=>{this.derivedImage=r,this.image=null},modified:()=>null}),this.image}}const Z8=class Z8{static imageIdToFrames(e){const r=e.match(this.frameRangeExtractor);if(!r||!r[2])return null;const n=r[2].split("-").map(i=>Number(i));return n.length===1?n[0]:n}static imageIdToFrameEnd(e){const r=this.imageIdToFrames(e);return Array.isArray(r)?r[1]:r}static imageIdToFrameStart(e){const r=this.imageIdToFrames(e);return Array.isArray(r)?r[0]:r}static framesToString(e){return Array.isArray(e)?`${e[0]}-${e[1]}`:String(e)}static framesToImageId(e,r){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const i=this.framesToString(r);return e.replace(this.frameRangeExtractor,`${n[1]}${i}`)}};Z8.frameRangeExtractor=/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i;let Q0=Z8;const Rp=class Rp extends bd{constructor(e){super({...e,canvas:e.canvas||Hc(e.element)}),this.videoWidth=0,this.videoHeight=0,this.loop=!0,this.mute=!0,this.isPlaying=!1,this.scrollSpeed=1,this.playbackRate=1,this.frameRange=[0,0],this.fps=30,this.videoCamera={panWorld:[0,0],parallelScale:1},this.voiRange={lower:0,upper:255},this.getProperties=()=>({loop:this.videoElement.loop,muted:this.videoElement.muted,playbackRate:this.playbackRate,scrollSpeed:this.scrollSpeed,voiRange:{...this.voiRange}}),this.getMiddleSliceData=()=>{throw new Error("Method not implemented.")},this.useCustomRenderingPipeline=!0,this.resetCamera=()=>(this.refreshRenderValues(),this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame(),!0),this.getNumberOfSlices=()=>{const r=Math.round(this.videoElement.duration*this.fps/this.scrollSpeed);return isNaN(r)?this.numberOfFrames:r},this.getFrameOfReferenceUID=()=>this.videoElement.src,this.resize=()=>{const r=this.canvas,{clientWidth:n,clientHeight:i}=r;(r.width!==n||r.height!==i)&&(r.width=n,r.height=i),this.refreshRenderValues(),this.isPlaying||this.renderFrame()},this.canvasToWorld=(r,n=[0,0,0])=>{const i=this.videoCamera.panWorld,o=this.getWorldToCanvasRatio(),a=[i[0]*o,i[1]*o],s=[r[0]-a[0],r[1]-a[1]];return n.splice(0,2,s[0]/o,s[1]/o),n},this.worldToCanvas=r=>{const n=this.videoCamera.panWorld,i=this.getWorldToCanvasRatio();return[(r[0]+n[0])*i,(r[1]+n[1])*i]},this.getRotation=()=>0,this.canvasToIndex=r=>{const n=this.getTransform();return n.invert(),n.transformPoint(r.map(i=>i*devicePixelRatio))},this.indexToCanvas=r=>this.getTransform().transformPoint(r).map(i=>i/devicePixelRatio),this.customRenderViewportToCanvas=()=>{this.renderFrame()},this.renderFrame=()=>{var s;const r=window.devicePixelRatio||1,i=this.getTransform().getMatrix(),o=this.canvasContext;o.resetTransform(),o.clearRect(0,0,this.canvas.width,this.canvas.height),o.transform(i[0]/r,i[1]/r,i[2]/r,i[3]/r,i[4]/r,i[5]/r),o.drawImage(this.videoElement,0,0,this.videoWidth,this.videoHeight);for(const c of this.getActors())c.actor.render(this,this.canvasContext);this.canvasContext.resetTransform(),ut(this.element,rt.STACK_NEW_IMAGE,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),ut(this.element,rt.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,imageIndex:this.getCurrentImageIdIndex(),numberOfSlices:this.numberOfFrames,renderingEngineId:this.renderingEngineId,time:this.videoElement.currentTime,duration:this.videoElement.duration}),(s=this.initialRender)==null||s.call(this);const a=this.getFrameNumber();this.isPlaying&&(athis.frameRange[1]&&(this.loop?this.setFrameNumber(this.frameRange[0]):this.pause()))},this.renderWhilstPlaying=()=>{this.renderFrame(),this.isPlaying&&requestAnimationFrame(this.renderWhilstPlaying)},this.canvasContext=this.canvas.getContext("2d"),this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.videoElement=document.createElement("video"),this.videoElement.muted=this.mute,this.videoElement.loop=this.loop,this.videoElement.autoplay=!0,this.videoElement.crossOrigin="anonymous",this.addEventListeners(),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){this.removeEventListeners(),this.videoElement.remove()}getImageDataMetadata(e){const r=typeof e=="string"?e:e.imageId,n=wt(Qo.IMAGE_PLANE,r);let i=n.rowCosines,o=n.columnCosines;(n.usingDefaultValues||i==null||o==null)&&(i=[1,0,0],o=[0,1,0]);const s=Ft(i[0],i[1],i[2]),c=Ft(o[0],o[1],o[2]),{rows:l,columns:f}=n,u=Ke();kn(u,s,c);let d=n.imagePositionPatient;d==null&&(d=[0,0,0]);const h=n.columnPixelSpacing||1,g=n.rowPixelSpacing||1,p=n.columns,v=n.rows,y=1,m=1;return this.hasPixelSpacing=!!n.columnPixelSpacing,{bitsAllocated:8,numberOfComponents:3,origin:d,rows:l,columns:f,direction:[...s,...c,...u],dimensions:[p,v,m],spacing:[h,g,y],hasPixelSpacing:this.hasPixelSpacing,numVoxels:p*v*m,imagePlaneModule:n}}setDataIds(e,r){var n;this.setVideo(e[0],(((n=r.viewReference)==null?void 0:n.sliceIndex)||0)+1)}setVideo(e,r){this.imageId=Array.isArray(e)?e[0]:e;const n=wt(Qo.IMAGE_URL,e);if(!(n!=null&&n.rendered))throw new Error(`Video Image ID ${e} does not have a rendered video view`);const{rendered:i}=n,o=wt(Qo.GENERAL_SERIES,e);this.modality=o==null?void 0:o.Modality,this.metadata=this.getImageDataMetadata(e);let{cineRate:a,numberOfFrames:s}=wt(Qo.CINE,e);return this.numberOfFrames=s,this.setVideoURL(i).then(()=>((!s||s===1)&&(s=Math.round(this.videoElement.duration*(a||30))),a||(a=Math.round(s/this.videoElement.duration)),this.fps=a,this.numberOfFrames=s,this.setFrameRange([1,s]),this.initialRender=()=>{this.initialRender=null,this.pause(),this.setFrameNumber(r||1)},new Promise(c=>{window.setTimeout(()=>{this.setFrameNumber(r||1),c(this)},25)})))}async setVideoURL(e){return new Promise(r=>{this.videoElement.src=e,this.videoElement.preload="auto";const n=()=>{this.videoWidth=this.videoElement.videoWidth,this.videoHeight=this.videoElement.videoHeight,this.videoElement.removeEventListener("loadedmetadata",n),this.refreshRenderValues(),r(!0)};this.videoElement.addEventListener("loadedmetadata",n)})}getImageIds(){const e=new Array(this.numberOfFrames),r=this.imageId.replace(/[0-9]+$/,"");for(let n=0;n{n(),r.removeEventListener("seeked",a)};r.addEventListener("seeked",a)}async start(){const e=this.videoElement,r=this.renderFrame;if(e.currentTime=0,e.paused){const n=i=>{r(),e.removeEventListener("seeked",n)};e.addEventListener("seeked",n)}}async end(){const e=this.videoElement,r=this.renderFrame;if(e.currentTime=e.duration,e.paused){const n=i=>{r(),e.removeEventListener("seeked",n)};e.addEventListener("seeked",n)}}async setTime(e){const r=this.videoElement,n=this.renderFrame;if(r.currentTime=e,r.paused){const i=o=>{n(),r.removeEventListener("seeked",i)};r.addEventListener("seeked",i)}}getSliceViewInfo(){throw new Error("Method not implemented.")}async setFrameNumber(e){this.setTime((e-1)/this.fps)}setFrameRange(e){if(!e){this.frameRange=[1,this.numberOfFrames];return}e.length!==2||e[0]===e[1]||(this.frameRange=[e[0],e[1]])}getSliceIndexForImage(e){if(e){if(typeof e=="string")return Q0.imageIdToFrameStart(e);if(e.referencedImageId)return Q0.imageIdToFrameStart(e.referencedImageId)}}getFrameRange(){return this.frameRange}setProperties(e){e.loop!==void 0&&(this.videoElement.loop=e.loop),e.muted!==void 0&&(this.videoElement.muted=e.muted),e.playbackRate!==void 0&&this.setPlaybackRate(e.playbackRate),e.scrollSpeed!==void 0&&this.setScrollSpeed(e.scrollSpeed),e.voiRange&&this.setVOI(e.voiRange)}setPlaybackRate(e=1){if(this.playbackRate=e,e<.0625){this.pause();return}this.videoElement&&(this.videoElement.playbackRate=e,this.play())}setScrollSpeed(e=1,r=i1.FRAME){this.scrollSpeed=r===i1.SECOND?e*this.fps:e}resetProperties(){this.setProperties({loop:!1,muted:!0,voiRange:{lower:0,upper:255}})}getScalarData(){var o;if(((o=this.scalarData)==null?void 0:o.frameNumber)===this.getFrameNumber())return this.scalarData;if(!this.videoElement||!this.videoElement.videoWidth||!this.videoElement.videoHeight){console.debug("Video not ready yet, returning empty scalar data");const a=new Uint8ClampedArray;return a.getRange=()=>[0,255],a.frameNumber=-1,a}const e=document.createElement("canvas");e.width=this.videoElement.videoWidth,e.height=this.videoElement.videoHeight;const r=e.getContext("2d");r.drawImage(this.videoElement,0,0);const i=r.getImageData(0,0,e.width,e.height).data;return i.getRange=()=>[0,255],i.frameNumber=this.getFrameNumber(),this.scalarData=i,i}getImageData(){const{metadata:e}=this,r=e.spacing,n={getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:o=>{const a=this.worldToCanvas(o),s=this.canvasToIndex(a);return[s[0],s[1],0]},indexToWorld:(o,a)=>{const s=this.indexToCanvas([o[0],o[1]]);return this.canvasToWorld(s,a)}},i={dimensions:e.dimensions,spacing:r,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:e.FrameOfReferenceUID},getScalarData:()=>this.getScalarData(),scalarData:this.getScalarData(),imageData:n,voxelManager:{forEach:(o,a)=>z4(a.imageData,{pointInShapeFn:a.isInObject??(()=>!0),callback:o,boundsIJK:a.boundsIJK,returnPoints:a.returnPoints??!1})},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1}};return Object.defineProperty(n,"scalarData",{get:()=>this.getScalarData(),enumerable:!0}),i}hasImageURI(e){const r=e.match(Rp.frameRangeExtractor),n=r?e.substring(0,r.index):e;return this.imageId.includes(n)}setVOI(e){this.voiRange=e;const r=this.setColorTransform(e,this.averageWhite);this.canvas.style.filter=r}setWindowLevel(e=256,r=128){const n=r-e/2,i=r+e/2-1;this.setVOI({lower:n,upper:i}),this.setColorTransform({lower:n,upper:i},this.averageWhite)}setAverageWhite(e){this.averageWhite=e,this.setColorTransform(this.voiRange,e)}setCamera(e){const{parallelScale:r,focalPoint:n}=e;if(r&&(this.videoCamera.parallelScale=this.element.clientHeight/2/r),n!==void 0){const i=this.worldToCanvas(n),o=[this.element.clientWidth/2,this.element.clientHeight/2],a=[(i[0]-o[0])/this.videoCamera.parallelScale,(i[1]-o[1])/this.videoCamera.parallelScale];this.videoCamera.panWorld=[this.videoCamera.panWorld[0]-a[0],this.videoCamera.panWorld[1]-a[1]]}this.canvasContext.fillStyle="rgba(0,0,0,1)",this.canvasContext.fillRect(0,0,this.canvas.width,this.canvas.height),this.isPlaying||this.renderFrame()}getCurrentImageId(e=this.getCurrentImageIdIndex()){return this.imageId.replace("/frames/1",`/frames/${e+1}`)}getViewReferenceId(e={}){const{sliceIndex:r}=e;return r===void 0?`videoId:${this.getCurrentImageId()}`:Array.isArray(r)?`videoId:${this.imageId.substring(0,this.imageId.length-1)}${r[0]+1}-${r[1]+1}`:`videoId:${this.imageId.replace("/frames/1",`/frames/${1+r}`)}`}isReferenceViewable(e,r={}){let{imageURI:n}=r;const{referencedImageId:i,sliceIndex:o,multiSliceReference:a}=e;if(!super.isReferenceViewable(e))return!1;const s=this.getCurrentImageId();if(!n){const d=s.indexOf(":");n=s.substring(d+1,s.length-1)}if(r.withNavigation)return!0;const c=this.getSliceIndex();if(a){const d=Q0.imageIdToFrameEnd(a.referencedImageId);return c>=o&&c<=d}if(o!==void 0)return c===o;if(!i)return!1;const l=i.match(Rp.frameRangeExtractor);if(!l||!l[2])return!0;const f=l[2].split("-").map(d=>Number(d)),u=c+1;return f[0]<=u&&u<=(f[1]??f[0])}setViewReference(e){typeof e.sliceIndex=="number"?this.setFrameNumber(e.sliceIndex+1):Array.isArray(e.sliceIndex)&&this.setFrameRange(e.sliceIndex)}getViewReference(e){const r=(e==null?void 0:e.sliceIndex)??(this.isPlaying?this.frameRange[0]:this.getCurrentImageIdIndex()),n=(e==null?void 0:e.rangeEndSliceIndex)??(this.isPlaying?this.frameRange[1]-1:void 0),i=n>r?{sliceIndex:n,referencedImageId:this.getCurrentImageId(n)}:void 0;return{...super.getViewReference(e),referencedImageId:this.getViewReferenceId(e),sliceIndex:r,multiSliceReference:i}}getFrameNumber(){return 1+this.getCurrentImageIdIndex()}getCurrentImageIdIndex(){return Math.round(this.videoElement.currentTime*this.fps)}getSliceIndex(){return this.getCurrentImageIdIndex()/this.scrollSpeed}getCamera(){const{parallelScale:e}=this.videoCamera,r=[this.element.clientWidth/2,this.element.clientHeight/2];return{parallelProjection:!0,focalPoint:this.canvasToWorld(r),position:[0,0,0],viewUp:[0,-1,0],parallelScale:this.element.clientHeight/2/e,viewPlaneNormal:[0,0,1]}}getFrameRate(){return this.fps}getPan(){const e=this.videoCamera.panWorld;return[e[0],e[1]]}refreshRenderValues(){let e=this.canvas.offsetWidth/this.videoWidth;this.videoHeight*e>this.canvas.height&&(e=this.canvas.offsetHeight/this.videoHeight);const r=Math.floor(this.videoWidth*e),n=Math.floor(this.videoHeight*e),i=(this.canvas.offsetWidth-r)/2,o=(this.canvas.offsetHeight-n)/2,a=i/e,s=o/e;this.videoCamera.panWorld=[a,s],this.videoCamera.parallelScale=e}getWorldToCanvasRatio(){return this.videoCamera.parallelScale}getCanvasToWorldRatio(){return 1/this.videoCamera.parallelScale}getTransform(){const e=this.videoCamera.panWorld,r=window.devicePixelRatio||1,n=this.getWorldToCanvasRatio(),i=this.getCanvasToWorldRatio(),o=[this.canvas.offsetWidth/2,this.canvas.offsetHeight/2],a=[o[0]*i,o[1]*i],s=new Hh;return s.scale(r,r),s.translate(o[0],o[1]),s.scale(n,n),s.translate(e[0],e[1]),s.translate(-a[0],-a[1]),s}updateCameraClippingPlanesAndRange(){}addImages(e){const r=this.getActors();e.forEach(n=>{const{imageId:i,...o}=n,a=$e.getImage(i),s=this.createActorMapper(a),c=n.actorUID??Pn();s&&(r.push({uid:c,actor:s,referencedId:i,...o}),n.callback&&n.callback({imageActor:s,imageId:i}))}),this.setActors(r)}createActorMapper(e){return new mle(this,e)}};Rp.frameRangeExtractor=/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i;let Th=Rp;const vle=` .DicomMicroscopyViewer { --ol-partial-background-color: rgba(127, 127, 127, 0.7); --ol-foreground-color: #000000; @@ -3393,9 +3393,9 @@ fn main( .DicomMicroscopyViewer .ol-tooltip { font-size: 16px !important; } -`;let bg=null;const r9=Symbol.for("map"),i9=Symbol.for("affine"),yle="postrender",P0=class P0 extends bd{constructor(e){super({...e,canvas:e.canvas||Hc(e.element)}),this.internalCamera={rotation:0,centerIndex:[0,0],extent:[0,-2,1,-1],xSpacing:1,ySpacing:1,resolution:1,zoom:1},this.voiRange={lower:0,upper:255},this.getProperties=()=>({voiRange:{...this.voiRange}}),this.resetCamera=()=>!0,this.getNumberOfSlices=()=>1,this.getFrameOfReferenceUID=()=>this.frameOfReferenceUID,this.resize=()=>{const n=this.canvas,{clientWidth:i,clientHeight:o}=n;(n.width!==i||n.height!==o)&&(n.width=i,n.height=o),this.refreshRenderValues()},this.canvasToWorld=n=>{if(!this.metadata)return;const i=this.canvasToIndex(n);return i[1]=-i[1],this.indexToWorld(i)},this.worldToCanvas=n=>{if(!this.metadata)return;const i=this.worldToIndex(n);return i[1]=-i[1],this.indexToCanvas([i[0],i[1],0])},this.postrender=()=>{this.refreshRenderValues(),ut(this.element,rt.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId})},this.getRotation=()=>0,this.canvasToIndex=n=>{const i=this.getTransform();i.invert();const o=i.transformPoint(n.map(a=>a*devicePixelRatio));return[o[0],o[1],0]},this.indexToCanvas=n=>this.getTransform().transformPoint([n[0],n[1]]).map(o=>o/devicePixelRatio),this.customRenderViewportToCanvas=()=>{},this.getImageIds=()=>[this.imageIds[0]],this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.element.style.position="relative",this.microscopyElement=document.createElement("div"),this.microscopyElement.setAttribute("class","DicomMicroscopyViewer"),this.microscopyElement.id=Pn(),this.microscopyElement.innerText="Initial",this.microscopyElement.style.background="grey",this.microscopyElement.style.width="100%",this.microscopyElement.style.height="100%",this.microscopyElement.style.position="absolute",this.microscopyElement.style.left="0",this.microscopyElement.style.top="0";const r=this.element.firstElementChild;r.insertBefore(this.microscopyElement,r.childNodes[1]),this.addEventListeners(),this.addWidget("DicomMicroscopyViewer",{getEnabled:()=>!!this.viewer,setEnabled:()=>{this.elementDisabledHandler()}}),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){var r;this.removeEventListeners(),(r=this.viewer)==null||r.cleanup(),this.viewer=null,this.element.firstElementChild.removeChild(this.microscopyElement),this.microscopyElement=null}getImageDataMetadata(e=0){var E;const r=this.metadataDicomweb.reduce((b,D)=>(b==null?void 0:b.NumberOfFrames){i.style.filter=r})}setAverageWhite(e){this.averageWhite=e,this.setColorTransform(this.voiRange,e)}getScalarData(){return null}computeTransforms(){const e=ba(),r=ba();return em(e,this.metadata.origin),e[0]=this.metadata.direction[0],e[1]=this.metadata.direction[1],e[2]=this.metadata.direction[2],e[4]=this.metadata.direction[3],e[5]=this.metadata.direction[4],e[6]=this.metadata.direction[5],e[8]=this.metadata.direction[6],e[9]=this.metadata.direction[7],e[10]=this.metadata.direction[8],cl(e,e,this.metadata.spacing),$r(r,e),{indexToWorld:e,worldToIndex:r}}getImageData(){const{metadata:e}=this;if(!e)return null;const{spacing:r}=e,n={getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:o=>this.worldToIndex(o),indexToWorld:o=>this.indexToWorld(o)};return{dimensions:e.dimensions,spacing:r,numberOfComponents:3,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.frameOfReferenceUID},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1},scalarData:this.getScalarData(),imageData:n}}hasImageURI(e){return!0}setCamera(e){const r=this.getCamera(),{parallelScale:n,focalPoint:i}=e,o=this.getView(),{xSpacing:a}=this.internalCamera;if(n){const c=this.element.clientHeight/n,l=1/a/c;o.setResolution(l)}if(i){const c=this.worldToCanvas(i),l=this.canvasToIndex(c);o.setCenter(l)}const s=this.getCamera();this.triggerCameraModifiedEventIfNecessary(r,s)}getCurrentImageId(){return this.imageIds[0]}getFrameNumber(){return 1}getCamera(){this.refreshRenderValues();const{resolution:e,xSpacing:r,centerIndex:n}=this.internalCamera,i=e*r,o=this.indexToCanvas([n[0],n[1],0]),a=this.canvasToWorld(o);return{parallelProjection:!0,focalPoint:a,position:a,viewUp:[0,-1,0],parallelScale:this.element.clientHeight*i,viewPlaneNormal:[0,0,1]}}worldToIndexWSI(e){if(!bg)return;const r=this.viewer[i9],n=bg.applyInverseTransform({coordinate:[e[0],e[1]],affine:r});return[n[0],n[1]]}indexToWorldWSI(e){if(!bg)return;const r=bg.applyTransform({coordinate:[e[0],e[1]],affine:this.viewer[i9]});return[r[0],r[1],0]}worldToIndex(e){const{worldToIndex:r}=this.computeTransforms(),n=Ke();return Yt(n,e,r),n}indexToWorld(e){const{indexToWorld:r}=this.computeTransforms(),n=Ke(),i=Ft(...e);return Yt(n,i,r),[n[0],n[1],n[2]]}setDataIds(e,r){(r==null?void 0:r.miniNavigationOverlay)!==!1&&P0.addMiniNavigationOverlayCss();const n=(r==null?void 0:r.webClient)||wt(Qo.WADO_WEB_CLIENT,e[0]);if(!n)throw new Error(`To use setDataIds on WSI data, you must provide metaData.webClient for ${e[0]}`);return this.setWSI(e,n)}async setWSI(e,r){this.microscopyElement.style.background="black",this.microscopyElement.innerText="Loading",this.imageIds=e;const n=await P0.getDicomMicroscopyViewer();bg||(bg=n.utils),this.frameOfReferenceUID=null;const i=this.imageIds.map(s=>{var u,d,h;const c=r.getDICOMwebMetadata(s);Object.defineProperty(c,"isMultiframe",{value:c.isMultiframe,enumerable:!1}),Object.defineProperty(c,"frameNumber",{value:void 0,enumerable:!1});const l=(u=c["00080008"])==null?void 0:u.Value;(l==null?void 0:l.length)===1&&(c["00080008"].Value=l[0].split("\\"));const f=(h=(d=c["00200052"])==null?void 0:d.Value)==null?void 0:h[0];return this.frameOfReferenceUID?f!==this.frameOfReferenceUID&&(c["00200052"].Value=[this.frameOfReferenceUID]):this.frameOfReferenceUID=f,c}),o=[];i.forEach(s=>{const c=new n.metadata.VLWholeSlideMicroscopyImage({metadata:s}),l=c.ImageType[2];l==="VOLUME"||l==="THUMBNAIL"?o.push(c):console.log("Unknown image type",c.ImageType)}),this.metadataDicomweb=o;const a=new n.viewer.VolumeImageViewer({client:r,metadata:o,controls:["overview","position"],retrieveRendered:!1,bindings:{}});a.render({container:this.microscopyElement}),this.metadata=this.getImageDataMetadata(),a.deactivateDragPanInteraction(),this.viewer=a,this.map=a[r9],this.map.on(yle,this.postrender),this.resize(),this.microscopyElement.innerText="",Object.assign(this.microscopyElement.style,{"--ol-partial-background-color":"rgba(127, 127, 127, 0.7)","--ol-foreground-color":"#000000","--ol-subtle-foreground-color":"#000","--ol-subtle-background-color":"rgba(78, 78, 78, 0.5)",background:"none"})}scroll(e){const r=this.getCamera();this.setCamera({parallelScale:r.parallelScale*(1+.1*e)})}getSliceIndex(){return 0}getView(){if(!this.viewer)return;const e=this.viewer[r9],r=window;return r.map=e,r.viewer=this.viewer,r.view=e==null?void 0:e.getView(),r.wsi=this,e==null?void 0:e.getView()}refreshRenderValues(){const e=this.getView();if(!e)return;const r=e.getResolution();if(!r||rkA("dicom-microscopy-viewer"),P0.overlayCssId="overlayCss";let Wy=P0;const Gk={[vr.ORTHOGRAPHIC]:ur,[vr.PERSPECTIVE]:ur,[vr.STACK]:lr,[vr.VOLUME_3D]:rE,[vr.VIDEO]:Th,[vr.WHOLE_SLIDE]:Wy};function Qd(t){return Gk[t].useCustomRenderingPipeline}const o9=2;class iE{constructor(e){if(this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this.renderFrameOfReference=r=>{const i=this._getViewportsAsArray().map(o=>{if(o.getFrameOfReferenceUID()===r)return o.id});this.renderViewports(i)},this._renderFlaggedViewports=()=>{this._throwIfDestroyed(),this.useCPURendering||this.performVtkDrawCall();const r=this._getViewportsAsArray(),n=[];for(let i=0;i{i!=null&&i.element&&ut(i.element,rt.IMAGE_RENDERED,i)})},this.id=e||Pn(),this.useCPURendering=q0(),o1.set(this),!NA())throw new Error("@cornerstonejs/core is not initialized, run init() first");this.useCPURendering||(this.offscreenMultiRenderWindow=bre.newInstance(),this.offScreenCanvasContainer=document.createElement("div"),this.offscreenMultiRenderWindow.setContainer(this.offScreenCanvasContainer)),this._viewports=new Map,this.hasBeenDestroyed=!1}enableElement(e){const r=this._normalizeViewportInputEntry(e);this._throwIfDestroyed();const{element:n,viewportId:i}=r;if(!n)throw new Error("No element provided");this.getViewport(i)&&this.disableElement(i);const{type:a}=r,s=Qd(a);!this.useCPURendering&&!s?this.enableVTKjsDrivenViewport(r):this.addCustomViewport(r);const c=Hc(n),{background:l}=r.defaultOptions;this.fillCanvasWithBackgroundColor(c,l)}disableElement(e){this._throwIfDestroyed();const r=this.getViewport(e);if(!r){console.warn(`viewport ${e} does not exist`);return}this._resetViewport(r),!Qd(r.type)&&!this.useCPURendering&&this.offscreenMultiRenderWindow.removeRenderer(e),this._removeViewport(e),r.isDisabled=!0,this._needsRender.delete(e),this.getViewports().length||this._clearAnimationFrame()}setViewports(e){const r=this._normalizeViewportInputEntries(e);this._throwIfDestroyed(),this._reset();const n=[],i=[];r.forEach(o=>{!this.useCPURendering&&!Qd(o.type)?n.push(o):i.push(o)}),this.setVtkjsDrivenViewports(n),this.setCustomViewports(i),r.forEach(o=>{const a=Hc(o.element),{background:s}=o.defaultOptions;this.fillCanvasWithBackgroundColor(a,s)})}resize(e=!0,r=!0){this._throwIfDestroyed();const n=this._getViewportsAsArray(),i=[],o=[];n.forEach(a=>{Qd(a.type)?o.push(a):i.push(a)}),i.length&&this._resizeVTKViewports(i,r,e),o.length&&this._resizeUsingCustomResizeHandler(o,r,e)}getViewport(e){var r;return(r=this._viewports)==null?void 0:r.get(e)}getViewports(){return this._throwIfDestroyed(),this._getViewportsAsArray()}getStackViewport(e){this._throwIfDestroyed();const r=this.getViewport(e);if(!r)throw new Error(`Viewport with Id ${e} does not exist`);if(!(r instanceof lr))throw new Error(`Viewport with Id ${e} is not a StackViewport.`);return r}getStackViewports(){return this._throwIfDestroyed(),this.getViewports().filter(r=>r instanceof lr)}getVolumeViewports(){this._throwIfDestroyed();const e=this.getViewports(),r=n=>n instanceof Tr;return e.filter(r)}render(){const r=this.getViewports().map(n=>n.id);this._setViewportsToBeRenderedNextFrame(r)}renderViewports(e){this._setViewportsToBeRenderedNextFrame(e)}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}destroy(){this.hasBeenDestroyed||(this.useCPURendering||(this._getViewportsAsArray().forEach(r=>{this.offscreenMultiRenderWindow.removeRenderer(r.id)}),this.offscreenMultiRenderWindow.delete(),delete this.offscreenMultiRenderWindow),this._reset(),o1.delete(this.id),this.hasBeenDestroyed=!0)}fillCanvasWithBackgroundColor(e,r){const n=e.getContext("2d");let i;if(r){const o=r.map(a=>Math.floor(255*a));i=`rgb(${o[0]}, ${o[1]}, ${o[2]})`}else i="black";n.fillStyle=i,n.fillRect(0,0,e.width,e.height)}_normalizeViewportInputEntry(e){const{type:r,defaultOptions:n}=e;let i=n;return(!i||Object.keys(i).length===0)&&(i={background:[0,0,0],orientation:null,displayArea:null},r===vr.ORTHOGRAPHIC&&(i={...i,orientation:Cd.AXIAL})),{...e,defaultOptions:i}}_normalizeViewportInputEntries(e){const r=[];return e.forEach(n=>{r.push(this._normalizeViewportInputEntry(n))}),r}_resizeUsingCustomResizeHandler(e,r=!0,n=!0){e.forEach(i=>{typeof i.resize=="function"&&i.resize()}),e.forEach(i=>{const o=i.getCamera();i.resetCamera(),r&&i.setCamera(o)}),n&&this.render()}_resizeVTKViewports(e,r=!0,n=!0){const i=e.map(o=>Hc(o.element));if(i.forEach(o=>{const a=window.devicePixelRatio||1;o.width=o.clientWidth*a,o.height=o.clientHeight*a}),i.length){const{offScreenCanvasWidth:o,offScreenCanvasHeight:a}=this._resizeOffScreenCanvas(i);this._resize(e,o,a)}e.forEach(o=>{const a=o.getCamera(),s=o.getRotation(),{flipHorizontal:c}=a;o.resetCameraForResize();const l=o.getDisplayArea();r&&(l?(c&&o.setCamera({flipHorizontal:c}),s&&o.setViewPresentation({rotation:s})):o.setCamera(a))}),n&&this.render()}enableVTKjsDrivenViewport(e){const n=this._getViewportsAsArray().filter(f=>Qd(f.type)===!1),i=n.map(f=>f.canvas),o=Hc(e.element);i.push(o);const{offScreenCanvasWidth:a,offScreenCanvasHeight:s}=this._resizeOffScreenCanvas(i),c=this._resize(n,a,s),l={...e,canvas:o};this.addVtkjsDrivenViewport(l,{offScreenCanvasWidth:a,offScreenCanvasHeight:s,xOffset:c})}_removeViewport(e){if(!this.getViewport(e)){console.warn(`viewport ${e} does not exist`);return}this._viewports.delete(e)}addVtkjsDrivenViewport(e,r){const{element:n,canvas:i,viewportId:o,type:a,defaultOptions:s}=e;n.tabIndex=-1;const{offScreenCanvasWidth:c,offScreenCanvasHeight:l,xOffset:f}=r,{sxStartDisplayCoords:u,syStartDisplayCoords:d,sxEndDisplayCoords:h,syEndDisplayCoords:g,sx:p,sy:v,sWidth:y,sHeight:m}=this._getViewportCoordsOnOffScreenCanvas(e,c,l,f);this.offscreenMultiRenderWindow.addRenderer({viewport:[u,d,h,g],id:o,background:s.background?s.background:[0,0,0]});const w={id:o,element:n,renderingEngineId:this.id,type:a,canvas:i,sx:p,sy:v,sWidth:y,sHeight:m,defaultOptions:s||{}};let x;if(a===vr.STACK)x=new lr(w);else if(a===vr.ORTHOGRAPHIC||a===vr.PERSPECTIVE)x=new ur(w);else if(a===vr.VOLUME_3D)x=new rE(w);else throw new Error(`Viewport Type ${a} is not supported`);this._viewports.set(o,x);const C={element:n,viewportId:o,renderingEngineId:this.id};x.suppressEvents||ut(et,rt.ELEMENT_ENABLED,C)}addCustomViewport(e){const{element:r,viewportId:n,type:i,defaultOptions:o}=e;r.tabIndex=-1;const a=Hc(r),{clientWidth:s,clientHeight:c}=a;(a.width!==s||a.height!==c)&&(a.width=s,a.height=c);const l={id:n,renderingEngineId:this.id,element:r,type:i,canvas:a,sx:0,sy:0,sWidth:s,sHeight:c,defaultOptions:o||{}},f=Gk[i],u=new f(l);this._viewports.set(n,u);const d={element:r,viewportId:n,renderingEngineId:this.id};ut(et,rt.ELEMENT_ENABLED,d)}setCustomViewports(e){e.forEach(r=>{this.addCustomViewport(r)})}setVtkjsDrivenViewports(e){if(e.length){const r=e.map(a=>Hc(a.element));r.forEach(a=>{const s=window.devicePixelRatio||1,c=a.getBoundingClientRect();a.width=c.width*s,a.height=c.height*s});const{offScreenCanvasWidth:n,offScreenCanvasHeight:i}=this._resizeOffScreenCanvas(r);let o=0;for(let a=0;aa.height));let o=0;return e.forEach(a=>{o+=a.width}),r.width=o,r.height=i,n.resize(),{offScreenCanvasWidth:o,offScreenCanvasHeight:i}}_resize(e,r,n){let i=0;for(let o=0;o{this._needsRender.add(r)}),this._render()}_render(){this._needsRender.size>0&&!this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}performVtkDrawCall(){const{offscreenMultiRenderWindow:e}=this,r=e.getRenderWindow(),n=e.getRenderers();if(n.length){for(let i=0;i{this._resetViewport(r)}),this._clearAnimationFrame(),this._viewports=new Map}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_downloadOffScreenCanvas(){const e=this._debugRender();wle(e)}_debugRender(){const{offscreenMultiRenderWindow:e}=this,r=e.getRenderWindow(),n=e.getRenderers();for(let c=0;c{const{sx:l,sy:f,sWidth:u,sHeight:d}=c,h=c.canvas,{width:g,height:p}=h;h.getContext("2d").drawImage(a,l,f,u,d,0,0,g,p)}),s}}function wle(t){const e=document.createElement("a");e.download="viewport.png",e.href=t,document.body.appendChild(e),e.click(),document.body.removeChild(e)}const xle="3.20.0";class Wk{constructor(e){this._color=[200,0,0],this.id=e.id,this._points=e.points,this._polys=e.polys,this._color=e.color??this._color,this.frameOfReferenceUID=e.frameOfReferenceUID,this._segmentIndex=e.segmentIndex,this.sizeInBytes=this._getSizeInBytes(),this._updateCentroid(),this._visible=!0}_getSizeInBytes(){return this._points.length*4+this._polys.length*4}_updateCentroid(){const e=this._points.length/3;let r=0,n=0,i=0;for(let o=0;o2&&arguments[2]!==void 0?arguments[2]:null;const n=zk(t),i=e.exec(n);if(!i)return{text:n};const o=i.index+i[0].length,a=n.substring(0,o);let s=null;const c=r?r.exec(n):null;if(c){const l=n.substr(c.index);s={text:a+l,binaryBuffer:t.slice(o,c.index)}}else s={text:a,binaryBuffer:t.slice(o)};return s}var y1={arrayBufferToString:zk,extractBinary:Cle};const oE={};function $k(t){return!!oE[t]}function Sle(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"http",e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return oE[t](e)}function jk(t,e){oE[t]=e}var dm={get:Sle,has:$k,registerType:jk};function Hk(){const t=new ArrayBuffer(4),e=new Uint8Array(t),r=new Uint32Array(t);return e[0]=161,e[1]=178,e[2]=195,e[3]=212,r[0]===3569595041?"LittleEndian":r[0]===2712847316?"BigEndian":null}const Tle=Hk();function _le(t,e){if(e<2)return;const r=new Int8Array(t),n=r.length,i=[];for(let o=0;o(Kk("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead."),Promise.reject(new Error("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead.")));let _h=0;function ww(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n=new XMLHttpRequest;return n.open(t,e,!0),r.headers&&Object.entries(r.headers).forEach(i=>{let[o,a]=i;return n.setRequestHeader(o,a)}),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}function ble(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Promise((r,n)=>{const i=ww("GET",t,e);i.onreadystatechange=o=>{i.readyState===4&&(i.status===200||i.status===0?r(i.response):n({xhr:i,e:o}))},i.responseType="arraybuffer",i.send()})}function Dle(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n&&n.compression?aE():r.ref&&!r.ref.pending?new Promise((i,o)=>{const a=[e,r.ref.basepath,r.ref.id].join("/"),s=ww("GET",a,n);s.onreadystatechange=c=>{s.readyState===1&&(r.ref.pending=!0,++_h===1&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!0)),s.readyState===4&&(r.ref.pending=!1,s.status===200||s.status===0?(r.buffer=s.response,r.ref.encode==="JSON"?r.values=JSON.parse(r.buffer):(t3.ENDIANNESS!==r.ref.encode&&t3.ENDIANNESS&&(Ele(`Swap bytes of ${r.name}`),t3.swapBytes(r.buffer,GP[r.dataType])),r.values=J.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Kk(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),t!=null&&t.modified&&t.modified(),i(r)):o({xhr:s,e:c}))},s.responseType=r.dataType!=="string"?"arraybuffer":"text",s.send()}):Promise.resolve(r)}function Ile(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return r&&r.compression?aE():new Promise((n,i)=>{const o=ww("GET",e,r);o.onreadystatechange=a=>{o.readyState===1&&++_h===1&&t!=null&&t.invokeBusy&&t.invokeBusy(!0),o.readyState===4&&(--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),o.status===200||o.status===0?n(JSON.parse(o.responseText)):i({xhr:o,e:a}))},o.responseType="text",o.send()})}function Ole(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return r&&r.compression?aE():new Promise((n,i)=>{const o=ww("GET",e,r);o.onreadystatechange=a=>{o.readyState===1&&++_h===1&&t!=null&&t.invokeBusy&&t.invokeBusy(!0),o.readyState===4&&(--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),o.status===200||o.status===0?n(o.responseText):i({xhr:o,e:a}))},o.responseType="text",o.send()})}function Mle(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new Promise((n,i)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>n(o),o.onerror=i,o.src=e})}const Ple={fetchArray:Dle,fetchJSON:Ile,fetchText:Ole,fetchBinary:ble,fetchImage:Mle};$k("http")||jk("http",t=>Ple);const n3={ASCII:"ascii",BINARY_LITTLE_ENDIAN:"binary_little_endian"},a9={diffuse_red:"red",diffuse_green:"green",diffuse_blue:"blue"},qk={patternHeader:/ply([\s\S]*)end_header\r?\n/,patternBody:/end_header\s([\s\S]*)$/};function s9(t){let e="",r=0;const n=qk.patternHeader.exec(t);n!==null&&(e=n[1],r=n[0].length);const i={comments:[],elements:[],headerLength:r},o=e.split(` -`);let a,s,c;for(let l=0;lp.name==="vertex"),n=e.find(p=>p.name==="face");let i=0,o=0;r&&(i=r.count),n&&(o=n.count);const a=new Float32Array(i*3),s=new Uint8Array(i*3),c=new Float32Array(i*2),l=new Float32Array(i*3),f=t.colors.length>0,u=t.uvs.length>0,d=t.normals.length>0,h=t.faceVertexUvs.length>0;for(let p=0;p0&&(t.indices.push(n.length),n.forEach((o,a)=>{t.indices.push(o)})),t.faceVertexUvs.push(i)}}function i3(t,e,r,n){let i;switch(r){case"int8":case"char":i=[t.getInt8(e),1];break;case"uint8":case"uchar":i=[t.getUint8(e),1];break;case"int16":case"short":i=[t.getInt16(e,n),2];break;case"uint16":case"ushort":i=[t.getUint16(e,n),2];break;case"int32":case"int":i=[t.getInt32(e,n),4];break;case"uint32":case"uint":i=[t.getUint32(e,n),4];break;case"float32":case"float":i=[t.getFloat32(e,n),4];break;case"float64":case"double":i=[t.getFloat64(e,n),8];break;default:console.log("Unsupported type");break}return i}function Lle(t,e,r,n){const i={};let o,a=0;for(let s=0;s1&&arguments[1]!==void 0?arguments[1]:{};const{compression:o,progressCallback:a}=e;return i.binary?e.dataAccessHelper.fetchBinary(n,{compression:o,progressCallback:a}):e.dataAccessHelper.fetchText(t,n,{compression:o,progressCallback:a})}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{binary:!0};e.url=n;const o=n.split("/");return o.pop(),e.baseURL=o.join("/"),e.compression=i.compression,t.loadData({progressCallback:i.progressCallback,binary:!!i.binary})},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const i=r(e.url,n);return i.then(t.parse),i},t.parse=n=>{typeof n=="string"?t.parseAsText(n):t.parseAsArrayBuffer(n)},t.parseAsArrayBuffer=n=>{if(!n)return;if(n!==e.parseData)t.modified();else return;const i=y1.arrayBufferToString(n),o=s9(i);if(!(o.format!==n3.ASCII)){t.parseAsText(n);return}e.parseData=n;const s={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[]},c=o.format===n3.BINARY_LITTLE_ENDIAN,l=n instanceof ArrayBuffer?n:n.buffer,f=new DataView(l,o.headerLength);let u,d=0;for(let g=0;g{if(!n)return;if(n!==e.parseData)t.modified();else return;e.parseData=n;const i=y1.arrayBufferToString(n),o=s9(i);if(o.format!==n3.ASCII){t.parseAsArrayBuffer(n);return}const s={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[]},c=qk.patternBody.exec(i);let l="";c!==null&&(l=c[1]);const f=l.split(` -`);let u=0,d=0;for(let g=0;g=o.elements[u].count&&(u++,d=0);const v=Rle(o.elements[u].properties,p);l9(s,o.elements[u].name,v),d++}}const h=c9(s,o.elements);e.output[0]=h},t.requestData=(n,i)=>{t.parse(e.parseData)}}const Nle={};function Xk(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Nle,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper"]),J.algo(t,e,0,1),Ale(t,e),e.compression||(e.compression=null),e.progressCallback||(e.progressCallback=null)}const kle=J.newInstance(Xk,"vtkPLYReader");var Vle={extend:Xk,newInstance:kle};const{vtkErrorMacro:o3}=J;function Fle(t){const r=t.split(" ").filter(i=>i.indexOf("=")>-1),n={};for(let i=0;if).slice(-3).map(Number);for(u9(l,i);t[e+s].indexOf("vertex")!==-1;){const u=t[e+s].split(/[ \t]+/).filter(d=>d).slice(-3).map(Number);u9(u,r),a++,s++}n.push(a);for(let f=0;f1&&arguments[1]!==void 0?arguments[1]:{};const a=o.compression!==void 0?o.compression:e.compression,s=o.progressCallback!==void 0?o.progressCallback:e.progressCallback;return o.binary?e.dataAccessHelper.fetchBinary(i,{compression:a,progressCallback:s}):e.dataAccessHelper.fetchText(t,i,{compression:a,progressCallback:s})}function n(i){const o=e.output[0],a=o.getPoints().getData(),s=o.getPolys().getData();if(!a||!s){console.warn("No valid polydata.");return}const c=new Map,l=new Map;let f=0,u=!1;for(let p=0;p+w*10**-i);d[y]=m[0],d[y+1]=m[1],d[y+2]=m[2]}const g=new Int32Array(s);for(let p=0;p1&&arguments[1]!==void 0?arguments[1]:{binary:!0};e.url=i;const a=i.split("/");return a.pop(),e.baseURL=a.join("/"),t.loadData(o)},t.loadData=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const o=r(e.url,i);return o.then(t.parse),o},t.parse=i=>{typeof i=="string"?t.parseAsText(i):t.parseAsArrayBuffer(i)},t.parseAsArrayBuffer=i=>{if(!i)return;if(i!==e.parseData)t.modified();else return;e.parseData=i;let o=!1;if(o=84+new DataView(i,0,84).getUint32(80,!0)*50===i.byteLength,!o){t.parseAsText(y1.arrayBufferToString(i));return}const c=i.slice(0,80),l=y1.arrayBufferToString(c),f=Fle(l),u=new DataView(i,84),d=(i.byteLength-84)/50,h=new Float32Array(d*9),g=new Float32Array(d*3),p=new Uint32Array(d*4),v=new Uint16Array(d);let y=0;for(let x=0;x=0&&n(e.removeDuplicateVertices)},t.parseAsText=i=>{if(!i)return;if(i!==e.parseData)t.modified();else return;e.parseData=i;const o=i.split(` +`;let bg=null;const r9=Symbol.for("map"),i9=Symbol.for("affine"),yle="postrender",P0=class P0 extends bd{constructor(e){super({...e,canvas:e.canvas||Hc(e.element)}),this.internalCamera={rotation:0,centerIndex:[0,0],extent:[0,-2,1,-1],xSpacing:1,ySpacing:1,resolution:1,zoom:1},this.voiRange={lower:0,upper:255},this.getProperties=()=>({voiRange:{...this.voiRange}}),this.resetCamera=()=>!0,this.getNumberOfSlices=()=>1,this.getFrameOfReferenceUID=()=>this.frameOfReferenceUID,this.resize=()=>{const n=this.canvas,{clientWidth:i,clientHeight:o}=n;(n.width!==i||n.height!==o)&&(n.width=i,n.height=o),this.refreshRenderValues()},this.canvasToWorld=n=>{if(!this.metadata)return;const i=this.canvasToIndex(n);return i[1]=-i[1],this.indexToWorld(i)},this.worldToCanvas=n=>{if(!this.metadata)return;const i=this.worldToIndex(n);return i[1]=-i[1],this.indexToCanvas([i[0],i[1],0])},this.postrender=()=>{this.refreshRenderValues(),ut(this.element,rt.IMAGE_RENDERED,{element:this.element,viewportId:this.id,viewport:this,renderingEngineId:this.renderingEngineId})},this.getRotation=()=>0,this.canvasToIndex=n=>{const i=this.getTransform();i.invert();const o=i.transformPoint(n.map(a=>a*devicePixelRatio));return[o[0],o[1],0]},this.indexToCanvas=n=>this.getTransform().transformPoint([n[0],n[1]]).map(o=>o/devicePixelRatio),this.customRenderViewportToCanvas=()=>{},this.getImageIds=()=>[this.imageIds[0]],this.renderingEngineId=e.renderingEngineId,this.element.setAttribute("data-viewport-uid",this.id),this.element.setAttribute("data-rendering-engine-uid",this.renderingEngineId),this.element.style.position="relative",this.microscopyElement=document.createElement("div"),this.microscopyElement.setAttribute("class","DicomMicroscopyViewer"),this.microscopyElement.id=Pn(),this.microscopyElement.innerText="Initial",this.microscopyElement.style.background="grey",this.microscopyElement.style.width="100%",this.microscopyElement.style.height="100%",this.microscopyElement.style.position="absolute",this.microscopyElement.style.left="0",this.microscopyElement.style.top="0";const r=this.element.firstElementChild;r.insertBefore(this.microscopyElement,r.childNodes[1]),this.addEventListeners(),this.addWidget("DicomMicroscopyViewer",{getEnabled:()=>!!this.viewer,setEnabled:()=>{this.elementDisabledHandler()}}),this.resize()}static get useCustomRenderingPipeline(){return!0}addEventListeners(){this.canvas.addEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}removeEventListeners(){this.canvas.removeEventListener(rt.ELEMENT_DISABLED,this.elementDisabledHandler)}elementDisabledHandler(){var r;this.removeEventListeners(),(r=this.viewer)==null||r.cleanup(),this.viewer=null,this.element.firstElementChild.removeChild(this.microscopyElement),this.microscopyElement=null}getImageDataMetadata(e=0){var E;const r=this.metadataDicomweb.reduce((b,D)=>(b==null?void 0:b.NumberOfFrames){i.style.filter=r})}setAverageWhite(e){this.averageWhite=e,this.setColorTransform(this.voiRange,e)}getScalarData(){return null}computeTransforms(){const e=ba(),r=ba();return em(e,this.metadata.origin),e[0]=this.metadata.direction[0],e[1]=this.metadata.direction[1],e[2]=this.metadata.direction[2],e[4]=this.metadata.direction[3],e[5]=this.metadata.direction[4],e[6]=this.metadata.direction[5],e[8]=this.metadata.direction[6],e[9]=this.metadata.direction[7],e[10]=this.metadata.direction[8],cl(e,e,this.metadata.spacing),$r(r,e),{indexToWorld:e,worldToIndex:r}}getImageData(){const{metadata:e}=this;if(!e)return null;const{spacing:r}=e,n={getDirection:()=>e.direction,getDimensions:()=>e.dimensions,getRange:()=>[0,255],getScalarData:()=>this.getScalarData(),getSpacing:()=>e.spacing,worldToIndex:o=>this.worldToIndex(o),indexToWorld:o=>this.indexToWorld(o)};return{dimensions:e.dimensions,spacing:r,numberOfComponents:3,origin:e.origin,direction:e.direction,metadata:{Modality:this.modality,FrameOfReferenceUID:this.frameOfReferenceUID},hasPixelSpacing:this.hasPixelSpacing,calibration:this.calibration,preScale:{scaled:!1},scalarData:this.getScalarData(),imageData:n}}hasImageURI(e){return!0}setCamera(e){const r=this.getCamera(),{parallelScale:n,focalPoint:i}=e,o=this.getView(),{xSpacing:a}=this.internalCamera;if(n){const c=this.element.clientHeight/n,l=1/a/c;o.setResolution(l)}if(i){const c=this.worldToCanvas(i),l=this.canvasToIndex(c);o.setCenter(l)}const s=this.getCamera();this.triggerCameraModifiedEventIfNecessary(r,s)}getCurrentImageId(){return this.imageIds[0]}getFrameNumber(){return 1}getCamera(){this.refreshRenderValues();const{resolution:e,xSpacing:r,centerIndex:n}=this.internalCamera,i=e*r,o=this.indexToCanvas([n[0],n[1],0]),a=this.canvasToWorld(o);return{parallelProjection:!0,focalPoint:a,position:a,viewUp:[0,-1,0],parallelScale:this.element.clientHeight*i,viewPlaneNormal:[0,0,1]}}worldToIndexWSI(e){if(!bg)return;const r=this.viewer[i9],n=bg.applyInverseTransform({coordinate:[e[0],e[1]],affine:r});return[n[0],n[1]]}indexToWorldWSI(e){if(!bg)return;const r=bg.applyTransform({coordinate:[e[0],e[1]],affine:this.viewer[i9]});return[r[0],r[1],0]}worldToIndex(e){const{worldToIndex:r}=this.computeTransforms(),n=Ke();return Yt(n,e,r),n}indexToWorld(e){const{indexToWorld:r}=this.computeTransforms(),n=Ke(),i=Ft(...e);return Yt(n,i,r),[n[0],n[1],n[2]]}setDataIds(e,r){(r==null?void 0:r.miniNavigationOverlay)!==!1&&P0.addMiniNavigationOverlayCss();const n=(r==null?void 0:r.webClient)||wt(Qo.WADO_WEB_CLIENT,e[0]);if(!n)throw new Error(`To use setDataIds on WSI data, you must provide metaData.webClient for ${e[0]}`);return this.setWSI(e,n)}async setWSI(e,r){this.microscopyElement.style.background="black",this.microscopyElement.innerText="Loading",this.imageIds=e;const n=await P0.getDicomMicroscopyViewer();bg||(bg=n.utils),this.frameOfReferenceUID=null;const i=this.imageIds.map(s=>{var u,d,h;const c=r.getDICOMwebMetadata(s);Object.defineProperty(c,"isMultiframe",{value:c.isMultiframe,enumerable:!1}),Object.defineProperty(c,"frameNumber",{value:void 0,enumerable:!1});const l=(u=c["00080008"])==null?void 0:u.Value;(l==null?void 0:l.length)===1&&(c["00080008"].Value=l[0].split("\\"));const f=(h=(d=c["00200052"])==null?void 0:d.Value)==null?void 0:h[0];return this.frameOfReferenceUID?f!==this.frameOfReferenceUID&&(c["00200052"].Value=[this.frameOfReferenceUID]):this.frameOfReferenceUID=f,c}),o=[];i.forEach(s=>{const c=new n.metadata.VLWholeSlideMicroscopyImage({metadata:s}),l=c.ImageType[2];l==="VOLUME"||l==="THUMBNAIL"?o.push(c):console.log("Unknown image type",c.ImageType)}),this.metadataDicomweb=o;const a=new n.viewer.VolumeImageViewer({client:r,metadata:o,controls:["overview","position"],retrieveRendered:!1,bindings:{}});a.render({container:this.microscopyElement}),this.metadata=this.getImageDataMetadata(),a.deactivateDragPanInteraction(),this.viewer=a,this.map=a[r9],this.map.on(yle,this.postrender),this.resize(),this.microscopyElement.innerText="",Object.assign(this.microscopyElement.style,{"--ol-partial-background-color":"rgba(127, 127, 127, 0.7)","--ol-foreground-color":"#000000","--ol-subtle-foreground-color":"#000","--ol-subtle-background-color":"rgba(78, 78, 78, 0.5)",background:"none"})}scroll(e){const r=this.getCamera();this.setCamera({parallelScale:r.parallelScale*(1+.1*e)})}getSliceIndex(){return 0}getView(){if(!this.viewer)return;const e=this.viewer[r9],r=window;return r.map=e,r.viewer=this.viewer,r.view=e==null?void 0:e.getView(),r.wsi=this,e==null?void 0:e.getView()}refreshRenderValues(){const e=this.getView();if(!e)return;const r=e.getResolution();if(!r||rkA("dicom-microscopy-viewer"),P0.overlayCssId="overlayCss";let Wy=P0;const Gk={[vr.ORTHOGRAPHIC]:ur,[vr.PERSPECTIVE]:ur,[vr.STACK]:lr,[vr.VOLUME_3D]:rE,[vr.VIDEO]:Th,[vr.WHOLE_SLIDE]:Wy};function Qd(t){return Gk[t].useCustomRenderingPipeline}const o9=2;class iE{constructor(e){if(this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this.renderFrameOfReference=r=>{const i=this._getViewportsAsArray().map(o=>{if(o.getFrameOfReferenceUID()===r)return o.id});this.renderViewports(i)},this._renderFlaggedViewports=()=>{this._throwIfDestroyed(),this.useCPURendering||this.performVtkDrawCall();const r=this._getViewportsAsArray(),n=[];for(let i=0;i{i!=null&&i.element&&ut(i.element,rt.IMAGE_RENDERED,i)})},this.id=e||Pn(),this.useCPURendering=q0(),o1.set(this),!NA())throw new Error("@cornerstonejs/core is not initialized, run init() first");this.useCPURendering||(this.offscreenMultiRenderWindow=bre.newInstance(),this.offScreenCanvasContainer=document.createElement("div"),this.offscreenMultiRenderWindow.setContainer(this.offScreenCanvasContainer)),this._viewports=new Map,this.hasBeenDestroyed=!1}enableElement(e){const r=this._normalizeViewportInputEntry(e);this._throwIfDestroyed();const{element:n,viewportId:i}=r;if(!n)throw new Error("No element provided");this.getViewport(i)&&this.disableElement(i);const{type:a}=r,s=Qd(a);!this.useCPURendering&&!s?this.enableVTKjsDrivenViewport(r):this.addCustomViewport(r);const c=Hc(n),{background:l}=r.defaultOptions;this.fillCanvasWithBackgroundColor(c,l)}disableElement(e){this._throwIfDestroyed();const r=this.getViewport(e);if(!r){console.warn(`viewport ${e} does not exist`);return}this._resetViewport(r),!Qd(r.type)&&!this.useCPURendering&&this.offscreenMultiRenderWindow.removeRenderer(e),this._removeViewport(e),r.isDisabled=!0,this._needsRender.delete(e),this.getViewports().length||this._clearAnimationFrame()}setViewports(e){const r=this._normalizeViewportInputEntries(e);this._throwIfDestroyed(),this._reset();const n=[],i=[];r.forEach(o=>{!this.useCPURendering&&!Qd(o.type)?n.push(o):i.push(o)}),this.setVtkjsDrivenViewports(n),this.setCustomViewports(i),r.forEach(o=>{const a=Hc(o.element),{background:s}=o.defaultOptions;this.fillCanvasWithBackgroundColor(a,s)})}resize(e=!0,r=!0){this._throwIfDestroyed();const n=this._getViewportsAsArray(),i=[],o=[];n.forEach(a=>{Qd(a.type)?o.push(a):i.push(a)}),i.length&&this._resizeVTKViewports(i,r,e),o.length&&this._resizeUsingCustomResizeHandler(o,r,e)}getViewport(e){var r;return(r=this._viewports)==null?void 0:r.get(e)}getViewports(){return this._throwIfDestroyed(),this._getViewportsAsArray()}getStackViewport(e){this._throwIfDestroyed();const r=this.getViewport(e);if(!r)throw new Error(`Viewport with Id ${e} does not exist`);if(!(r instanceof lr))throw new Error(`Viewport with Id ${e} is not a StackViewport.`);return r}getStackViewports(){return this._throwIfDestroyed(),this.getViewports().filter(r=>r instanceof lr)}getVolumeViewports(){this._throwIfDestroyed();const e=this.getViewports(),r=n=>n instanceof Tr;return e.filter(r)}render(){const r=this.getViewports().map(n=>n.id);this._setViewportsToBeRenderedNextFrame(r)}renderViewports(e){this._setViewportsToBeRenderedNextFrame(e)}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}destroy(){this.hasBeenDestroyed||(this.useCPURendering||(this._getViewportsAsArray().forEach(r=>{this.offscreenMultiRenderWindow.removeRenderer(r.id)}),this.offscreenMultiRenderWindow.delete(),delete this.offscreenMultiRenderWindow),this._reset(),o1.delete(this.id),this.hasBeenDestroyed=!0)}fillCanvasWithBackgroundColor(e,r){const n=e.getContext("2d");let i;if(r){const o=r.map(a=>Math.floor(255*a));i=`rgb(${o[0]}, ${o[1]}, ${o[2]})`}else i="black";n.fillStyle=i,n.fillRect(0,0,e.width,e.height)}_normalizeViewportInputEntry(e){const{type:r,defaultOptions:n}=e;let i=n;return(!i||Object.keys(i).length===0)&&(i={background:[0,0,0],orientation:null,displayArea:null},r===vr.ORTHOGRAPHIC&&(i={...i,orientation:Cd.AXIAL})),{...e,defaultOptions:i}}_normalizeViewportInputEntries(e){const r=[];return e.forEach(n=>{r.push(this._normalizeViewportInputEntry(n))}),r}_resizeUsingCustomResizeHandler(e,r=!0,n=!0){e.forEach(i=>{typeof i.resize=="function"&&i.resize()}),e.forEach(i=>{const o=i.getCamera();i.resetCamera(),r&&i.setCamera(o)}),n&&this.render()}_resizeVTKViewports(e,r=!0,n=!0){const i=e.map(o=>Hc(o.element));if(i.forEach(o=>{const a=window.devicePixelRatio||1;o.width=o.clientWidth*a,o.height=o.clientHeight*a}),i.length){const{offScreenCanvasWidth:o,offScreenCanvasHeight:a}=this._resizeOffScreenCanvas(i);this._resize(e,o,a)}e.forEach(o=>{const a=o.getCamera(),s=o.getRotation(),{flipHorizontal:c}=a;o.resetCameraForResize();const l=o.getDisplayArea();r&&(l?(c&&o.setCamera({flipHorizontal:c}),s&&o.setViewPresentation({rotation:s})):o.setCamera(a))}),n&&this.render()}enableVTKjsDrivenViewport(e){const n=this._getViewportsAsArray().filter(f=>Qd(f.type)===!1),i=n.map(f=>f.canvas),o=Hc(e.element);i.push(o);const{offScreenCanvasWidth:a,offScreenCanvasHeight:s}=this._resizeOffScreenCanvas(i),c=this._resize(n,a,s),l={...e,canvas:o};this.addVtkjsDrivenViewport(l,{offScreenCanvasWidth:a,offScreenCanvasHeight:s,xOffset:c})}_removeViewport(e){if(!this.getViewport(e)){console.warn(`viewport ${e} does not exist`);return}this._viewports.delete(e)}addVtkjsDrivenViewport(e,r){const{element:n,canvas:i,viewportId:o,type:a,defaultOptions:s}=e;n.tabIndex=-1;const{offScreenCanvasWidth:c,offScreenCanvasHeight:l,xOffset:f}=r,{sxStartDisplayCoords:u,syStartDisplayCoords:d,sxEndDisplayCoords:h,syEndDisplayCoords:g,sx:p,sy:v,sWidth:y,sHeight:m}=this._getViewportCoordsOnOffScreenCanvas(e,c,l,f);this.offscreenMultiRenderWindow.addRenderer({viewport:[u,d,h,g],id:o,background:s.background?s.background:[0,0,0]});const w={id:o,element:n,renderingEngineId:this.id,type:a,canvas:i,sx:p,sy:v,sWidth:y,sHeight:m,defaultOptions:s||{}};let x;if(a===vr.STACK)x=new lr(w);else if(a===vr.ORTHOGRAPHIC||a===vr.PERSPECTIVE)x=new ur(w);else if(a===vr.VOLUME_3D)x=new rE(w);else throw new Error(`Viewport Type ${a} is not supported`);this._viewports.set(o,x);const C={element:n,viewportId:o,renderingEngineId:this.id};x.suppressEvents||ut(et,rt.ELEMENT_ENABLED,C)}addCustomViewport(e){const{element:r,viewportId:n,type:i,defaultOptions:o}=e;r.tabIndex=-1;const a=Hc(r),{clientWidth:s,clientHeight:c}=a;(a.width!==s||a.height!==c)&&(a.width=s,a.height=c);const l={id:n,renderingEngineId:this.id,element:r,type:i,canvas:a,sx:0,sy:0,sWidth:s,sHeight:c,defaultOptions:o||{}},f=Gk[i],u=new f(l);this._viewports.set(n,u);const d={element:r,viewportId:n,renderingEngineId:this.id};ut(et,rt.ELEMENT_ENABLED,d)}setCustomViewports(e){e.forEach(r=>{this.addCustomViewport(r)})}setVtkjsDrivenViewports(e){if(e.length){const r=e.map(a=>Hc(a.element));r.forEach(a=>{const s=window.devicePixelRatio||1,c=a.getBoundingClientRect();a.width=c.width*s,a.height=c.height*s});const{offScreenCanvasWidth:n,offScreenCanvasHeight:i}=this._resizeOffScreenCanvas(r);let o=0;for(let a=0;aa.height));let o=0;return e.forEach(a=>{o+=a.width}),r.width=o,r.height=i,n.resize(),{offScreenCanvasWidth:o,offScreenCanvasHeight:i}}_resize(e,r,n){let i=0;for(let o=0;o{this._needsRender.add(r)}),this._render()}_render(){this._needsRender.size>0&&!this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}performVtkDrawCall(){const{offscreenMultiRenderWindow:e}=this,r=e.getRenderWindow(),n=e.getRenderers();if(n.length){for(let i=0;i{this._resetViewport(r)}),this._clearAnimationFrame(),this._viewports=new Map}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_downloadOffScreenCanvas(){const e=this._debugRender();wle(e)}_debugRender(){const{offscreenMultiRenderWindow:e}=this,r=e.getRenderWindow(),n=e.getRenderers();for(let c=0;c{const{sx:l,sy:f,sWidth:u,sHeight:d}=c,h=c.canvas,{width:g,height:p}=h;h.getContext("2d").drawImage(a,l,f,u,d,0,0,g,p)}),s}}function wle(t){const e=document.createElement("a");e.download="viewport.png",e.href=t,document.body.appendChild(e),e.click(),document.body.removeChild(e)}const xle="3.20.0";class Wk{constructor(e){this._color=[200,0,0],this.id=e.id,this._points=e.points,this._polys=e.polys,this._color=e.color??this._color,this.frameOfReferenceUID=e.frameOfReferenceUID,this._segmentIndex=e.segmentIndex,this.sizeInBytes=this._getSizeInBytes(),this._updateCentroid(),this._visible=!0}_getSizeInBytes(){return this._points.length*4+this._polys.length*4}_updateCentroid(){const e=this._points.length/3;let r=0,n=0,i=0;for(let o=0;o2&&arguments[2]!==void 0?arguments[2]:null;const n=zk(t),i=e.exec(n);if(!i)return{text:n};const o=i.index+i[0].length,a=n.substring(0,o);let s=null;const c=r?r.exec(n):null;if(c){const l=n.substr(c.index);s={text:a+l,binaryBuffer:t.slice(o,c.index)}}else s={text:a,binaryBuffer:t.slice(o)};return s}var y1={arrayBufferToString:zk,extractBinary:Cle};const oE={};function $k(t){return!!oE[t]}function Sle(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"http",e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return oE[t](e)}function jk(t,e){oE[t]=e}var dm={get:Sle,has:$k,registerType:jk};function Hk(){const t=new ArrayBuffer(4),e=new Uint8Array(t),r=new Uint32Array(t);return e[0]=161,e[1]=178,e[2]=195,e[3]=212,r[0]===3569595041?"LittleEndian":r[0]===2712847316?"BigEndian":null}const Tle=Hk();function _le(t,e){if(e<2)return;const r=new Int8Array(t),n=r.length,i=[];for(let o=0;o(Kk("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead."),Promise.reject(new Error("LiteHttpDataAccessHelper does not support compression. Need to register HttpDataAccessHelper instead.")));let _h=0;function ww(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const n=new XMLHttpRequest;return n.open(t,e,!0),r.headers&&Object.entries(r.headers).forEach(i=>{let[o,a]=i;return n.setRequestHeader(o,a)}),r.progressCallback&&n.addEventListener("progress",r.progressCallback),n}function ble(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Promise((r,n)=>{const i=ww("GET",t,e);i.onreadystatechange=o=>{i.readyState===4&&(i.status===200||i.status===0?r(i.response):n({xhr:i,e:o}))},i.responseType="arraybuffer",i.send()})}function Dle(t,e,r){let n=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{};return n&&n.compression?aE():r.ref&&!r.ref.pending?new Promise((i,o)=>{const a=[e,r.ref.basepath,r.ref.id].join("/"),s=ww("GET",a,n);s.onreadystatechange=c=>{s.readyState===1&&(r.ref.pending=!0,++_h===1&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!0)),s.readyState===4&&(r.ref.pending=!1,s.status===200||s.status===0?(r.buffer=s.response,r.ref.encode==="JSON"?r.values=JSON.parse(r.buffer):(tC.ENDIANNESS!==r.ref.encode&&tC.ENDIANNESS&&(Ele(`Swap bytes of ${r.name}`),tC.swapBytes(r.buffer,GP[r.dataType])),r.values=J.newTypedArray(r.dataType,r.buffer)),r.values.length!==r.size&&Kk(`Error in FetchArray: ${r.name}, does not have the proper array size. Got ${r.values.length}, instead of ${r.size}`),delete r.ref,--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),t!=null&&t.modified&&t.modified(),i(r)):o({xhr:s,e:c}))},s.responseType=r.dataType!=="string"?"arraybuffer":"text",s.send()}):Promise.resolve(r)}function Ile(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return r&&r.compression?aE():new Promise((n,i)=>{const o=ww("GET",e,r);o.onreadystatechange=a=>{o.readyState===1&&++_h===1&&t!=null&&t.invokeBusy&&t.invokeBusy(!0),o.readyState===4&&(--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),o.status===200||o.status===0?n(JSON.parse(o.responseText)):i({xhr:o,e:a}))},o.responseType="text",o.send()})}function Ole(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return r&&r.compression?aE():new Promise((n,i)=>{const o=ww("GET",e,r);o.onreadystatechange=a=>{o.readyState===1&&++_h===1&&t!=null&&t.invokeBusy&&t.invokeBusy(!0),o.readyState===4&&(--_h===0&&(t!=null&&t.invokeBusy)&&t.invokeBusy(!1),o.status===200||o.status===0?n(o.responseText):i({xhr:o,e:a}))},o.responseType="text",o.send()})}function Mle(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new Promise((n,i)=>{const o=new Image;r.crossOrigin&&(o.crossOrigin=r.crossOrigin),o.onload=()=>n(o),o.onerror=i,o.src=e})}const Ple={fetchArray:Dle,fetchJSON:Ile,fetchText:Ole,fetchBinary:ble,fetchImage:Mle};$k("http")||jk("http",t=>Ple);const nC={ASCII:"ascii",BINARY_LITTLE_ENDIAN:"binary_little_endian"},a9={diffuse_red:"red",diffuse_green:"green",diffuse_blue:"blue"},qk={patternHeader:/ply([\s\S]*)end_header\r?\n/,patternBody:/end_header\s([\s\S]*)$/};function s9(t){let e="",r=0;const n=qk.patternHeader.exec(t);n!==null&&(e=n[1],r=n[0].length);const i={comments:[],elements:[],headerLength:r},o=e.split(` +`);let a,s,c;for(let l=0;lp.name==="vertex"),n=e.find(p=>p.name==="face");let i=0,o=0;r&&(i=r.count),n&&(o=n.count);const a=new Float32Array(i*3),s=new Uint8Array(i*3),c=new Float32Array(i*2),l=new Float32Array(i*3),f=t.colors.length>0,u=t.uvs.length>0,d=t.normals.length>0,h=t.faceVertexUvs.length>0;for(let p=0;p0&&(t.indices.push(n.length),n.forEach((o,a)=>{t.indices.push(o)})),t.faceVertexUvs.push(i)}}function iC(t,e,r,n){let i;switch(r){case"int8":case"char":i=[t.getInt8(e),1];break;case"uint8":case"uchar":i=[t.getUint8(e),1];break;case"int16":case"short":i=[t.getInt16(e,n),2];break;case"uint16":case"ushort":i=[t.getUint16(e,n),2];break;case"int32":case"int":i=[t.getInt32(e,n),4];break;case"uint32":case"uint":i=[t.getUint32(e,n),4];break;case"float32":case"float":i=[t.getFloat32(e,n),4];break;case"float64":case"double":i=[t.getFloat64(e,n),8];break;default:console.log("Unsupported type");break}return i}function Lle(t,e,r,n){const i={};let o,a=0;for(let s=0;s1&&arguments[1]!==void 0?arguments[1]:{};const{compression:o,progressCallback:a}=e;return i.binary?e.dataAccessHelper.fetchBinary(n,{compression:o,progressCallback:a}):e.dataAccessHelper.fetchText(t,n,{compression:o,progressCallback:a})}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{binary:!0};e.url=n;const o=n.split("/");return o.pop(),e.baseURL=o.join("/"),e.compression=i.compression,t.loadData({progressCallback:i.progressCallback,binary:!!i.binary})},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const i=r(e.url,n);return i.then(t.parse),i},t.parse=n=>{typeof n=="string"?t.parseAsText(n):t.parseAsArrayBuffer(n)},t.parseAsArrayBuffer=n=>{if(!n)return;if(n!==e.parseData)t.modified();else return;const i=y1.arrayBufferToString(n),o=s9(i);if(!(o.format!==nC.ASCII)){t.parseAsText(n);return}e.parseData=n;const s={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[]},c=o.format===nC.BINARY_LITTLE_ENDIAN,l=n instanceof ArrayBuffer?n:n.buffer,f=new DataView(l,o.headerLength);let u,d=0;for(let g=0;g{if(!n)return;if(n!==e.parseData)t.modified();else return;e.parseData=n;const i=y1.arrayBufferToString(n),o=s9(i);if(o.format!==nC.ASCII){t.parseAsArrayBuffer(n);return}const s={indices:[],vertices:[],normals:[],uvs:[],faceVertexUvs:[],colors:[]},c=qk.patternBody.exec(i);let l="";c!==null&&(l=c[1]);const f=l.split(` +`);let u=0,d=0;for(let g=0;g=o.elements[u].count&&(u++,d=0);const v=Rle(o.elements[u].properties,p);l9(s,o.elements[u].name,v),d++}}const h=c9(s,o.elements);e.output[0]=h},t.requestData=(n,i)=>{t.parse(e.parseData)}}const Nle={};function Xk(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Nle,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper"]),J.algo(t,e,0,1),Ale(t,e),e.compression||(e.compression=null),e.progressCallback||(e.progressCallback=null)}const kle=J.newInstance(Xk,"vtkPLYReader");var Vle={extend:Xk,newInstance:kle};const{vtkErrorMacro:oC}=J;function Fle(t){const r=t.split(" ").filter(i=>i.indexOf("=")>-1),n={};for(let i=0;if).slice(-3).map(Number);for(u9(l,i);t[e+s].indexOf("vertex")!==-1;){const u=t[e+s].split(/[ \t]+/).filter(d=>d).slice(-3).map(Number);u9(u,r),a++,s++}n.push(a);for(let f=0;f1&&arguments[1]!==void 0?arguments[1]:{};const a=o.compression!==void 0?o.compression:e.compression,s=o.progressCallback!==void 0?o.progressCallback:e.progressCallback;return o.binary?e.dataAccessHelper.fetchBinary(i,{compression:a,progressCallback:s}):e.dataAccessHelper.fetchText(t,i,{compression:a,progressCallback:s})}function n(i){const o=e.output[0],a=o.getPoints().getData(),s=o.getPolys().getData();if(!a||!s){console.warn("No valid polydata.");return}const c=new Map,l=new Map;let f=0,u=!1;for(let p=0;p+w*10**-i);d[y]=m[0],d[y+1]=m[1],d[y+2]=m[2]}const g=new Int32Array(s);for(let p=0;p1&&arguments[1]!==void 0?arguments[1]:{binary:!0};e.url=i;const a=i.split("/");return a.pop(),e.baseURL=a.join("/"),t.loadData(o)},t.loadData=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const o=r(e.url,i);return o.then(t.parse),o},t.parse=i=>{typeof i=="string"?t.parseAsText(i):t.parseAsArrayBuffer(i)},t.parseAsArrayBuffer=i=>{if(!i)return;if(i!==e.parseData)t.modified();else return;e.parseData=i;let o=!1;if(o=84+new DataView(i,0,84).getUint32(80,!0)*50===i.byteLength,!o){t.parseAsText(y1.arrayBufferToString(i));return}const c=i.slice(0,80),l=y1.arrayBufferToString(c),f=Fle(l),u=new DataView(i,84),d=(i.byteLength-84)/50,h=new Float32Array(d*9),g=new Float32Array(d*3),p=new Uint32Array(d*4),v=new Uint16Array(d);let y=0;for(let x=0;x=0&&n(e.removeDuplicateVertices)},t.parseAsText=i=>{if(!i)return;if(i!==e.parseData)t.modified();else return;e.parseData=i;const o=i.split(` `);let a=1;const s=[],c=[],l=[];for(;a!==-1;)a=Ule(o,a,s,c,l);const f=Br.newInstance();f.getPoints().setData(Float32Array.from(s),3),f.getPolys().setData(Uint32Array.from(c)),f.getCellData().setNormals(Bt.newInstance({name:"Normals",values:Float32Array.from(l),numberOfComponents:3})),e.output[0]=f,e.removeDuplicateVertices>=0&&n(e.removeDuplicateVertices)},t.requestData=(i,o)=>{t.parse(e.parseData)}}const Gle={removeDuplicateVertices:-1};function Yk(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Gle,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper","removeDuplicateVertices"]),J.algo(t,e,0,1),Ble(t,e),e.compression||(e.compression=null),e.progressCallback||(e.progressCallback=null)}const Wle=J.newInstance(Yk,"vtkSTLReader");var zle={extend:Yk,newInstance:Wle},Jk={exports:{}};(function(t,e){(function(r,n){t.exports=n()})(Xi,function(){return function(r){var n={};function i(o){if(n[o])return n[o].exports;var a=n[o]={i:o,l:!1,exports:{}};return r[o].call(a.exports,a,a.exports,i),a.l=!0,a.exports}return i.m=r,i.c=n,i.d=function(o,a,s){i.o(o,a)||Object.defineProperty(o,a,{enumerable:!0,get:s})},i.r=function(o){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},i.t=function(o,a){if(1&a&&(o=i(o)),8&a||4&a&&typeof o=="object"&&o&&o.__esModule)return o;var s=Object.create(null);if(i.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:o}),2&a&&typeof o!="string")for(var c in o)i.d(s,c,(function(l){return o[l]}).bind(null,c));return s},i.n=function(o){var a=o&&o.__esModule?function(){return o.default}:function(){return o};return i.d(a,"a",a),a},i.o=function(o,a){return Object.prototype.hasOwnProperty.call(o,a)},i.p="",i(i.s=184)}([function(r,n,i){function o(a){for(var s in a)n.hasOwnProperty(s)||(n[s]=a[s])}Object.defineProperty(n,"__esModule",{value:!0}),o(i(240)),o(i(251)),o(i(175)),o(i(107)),o(i(29)),o(i(73)),o(i(106)),o(i(30)),o(i(252)),o(i(52)),o(i(97)),o(i(253)),o(i(37)),o(i(51)),o(i(173)),o(i(176)),o(i(172)),o(i(108)),o(i(254)),o(i(255)),o(i(256)),o(i(72)),o(i(177)),o(i(105)),o(i(17)),o(i(257)),o(i(12)),o(i(174))},function(r,n,i){var o=this&&this.__values||function(w){var x=typeof Symbol=="function"&&Symbol.iterator,C=x&&w[x],S=0;if(C)return C.call(w);if(w&&typeof w.length=="number")return{next:function(){return w&&S>=w.length&&(w=void 0),{value:w&&w[S++],done:!w}}};throw new TypeError(x?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var a=i(212);n.FixedSizeSet=a.FixedSizeSet;var s=i(213);n.ObjectCache=s.ObjectCache;var c=i(214);n.CompareCache=c.CompareCache;var l=i(215);n.Lazy=l.Lazy;var f=i(216);function u(w,x,C){if(y(w))w.forEach(function(T,_){return x.call(C,_,T)});else for(var S in w)w.hasOwnProperty(S)&&x.call(C,S,w[S])}function d(w){var x,C;if(h(w))return w;if(p(w)){var S=[];try{for(var T=o(w),_=T.next();!_.done;_=T.next()){var E=_.value;S.push(d(E))}}catch(I){x={error:I}}finally{try{_&&!_.done&&(C=T.return)&&C.call(T)}finally{if(x)throw x.error}}return S}if(g(w)){S={};for(var b in w)if(w.hasOwnProperty(b)){var D=w[b];S[b]=d(D)}return S}return w}function h(w){return!!w&&Object.prototype.toString.call(w)==="[object Function]"}function g(w){var x=typeof w;return!!w&&(x==="function"||x==="object")}function p(w){return Array.isArray(w)}function v(w){return w instanceof Set}function y(w){return w instanceof Map}function m(w){if(g(w)){var x=Object.getPrototypeOf(w),C=x.constructor;return x&&C&&typeof C=="function"&&C instanceof C&&Function.prototype.toString.call(C)===Function.prototype.toString.call(Object)}return!1}n.StringWalker=f.StringWalker,n.applyMixin=function(w,x){for(var C=[],S=2;S>6|192;else{if(T>55295&&T<56320){if(++S>=w.length)throw new Error("Incomplete surrogate pair.");var _=w.charCodeAt(S);if(_<56320||_>57343)throw new Error("Invalid surrogate character.");T=65536+((1023&T)<<10)+(1023&_),x[C++]=T>>18|240,x[C++]=T>>12&63|128}else x[C++]=T>>12|224;x[C++]=T>>6&63|128}x[C++]=63&T|128}}return x.subarray(0,C)},n.utf8Decode=function(w){for(var x="",C=0;C127)if(S>191&&S<224){if(C>=w.length)throw new Error("Incomplete 2-byte sequence.");S=(31&S)<<6|63&w[C++]}else if(S>223&&S<240){if(C+1>=w.length)throw new Error("Incomplete 3-byte sequence.");S=(15&S)<<12|(63&w[C++])<<6|63&w[C++]}else{if(!(S>239&&S<248))throw new Error("Unknown multi-byte start.");if(C+2>=w.length)throw new Error("Incomplete 4-byte sequence.");S=(7&S)<<18|(63&w[C++])<<12|(63&w[C++])<<6|63&w[C++]}if(S<=65535)x+=String.fromCharCode(S);else{if(!(S<=1114111))throw new Error("Code point exceeds UTF-16 limit.");S-=65536,x+=String.fromCharCode(S>>10|55296),x+=String.fromCharCode(1023&S|56320)}}return x}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0}),function(o){o[o.Before=0]="Before",o[o.Equal=1]="Equal",o[o.After=2]="After"}(n.BoundaryPosition||(n.BoundaryPosition={})),function(o){o[o.None=0]="None",o[o.Capturing=1]="Capturing",o[o.AtTarget=2]="AtTarget",o[o.Bubbling=3]="Bubbling"}(n.EventPhase||(n.EventPhase={})),function(o){o[o.Element=1]="Element",o[o.Attribute=2]="Attribute",o[o.Text=3]="Text",o[o.CData=4]="CData",o[o.EntityReference=5]="EntityReference",o[o.Entity=6]="Entity",o[o.ProcessingInstruction=7]="ProcessingInstruction",o[o.Comment=8]="Comment",o[o.Document=9]="Document",o[o.DocumentType=10]="DocumentType",o[o.DocumentFragment=11]="DocumentFragment",o[o.Notation=12]="Notation"}(n.NodeType||(n.NodeType={})),function(o){o[o.Disconnected=1]="Disconnected",o[o.Preceding=2]="Preceding",o[o.Following=4]="Following",o[o.Contains=8]="Contains",o[o.ContainedBy=16]="ContainedBy",o[o.ImplementationSpecific=32]="ImplementationSpecific"}(n.Position||(n.Position={})),function(o){o[o.Accept=1]="Accept",o[o.Reject=2]="Reject",o[o.Skip=3]="Skip"}(n.FilterResult||(n.FilterResult={})),function(o){o[o.All=4294967295]="All",o[o.Element=1]="Element",o[o.Attribute=2]="Attribute",o[o.Text=4]="Text",o[o.CDataSection=8]="CDataSection",o[o.EntityReference=16]="EntityReference",o[o.Entity=32]="Entity",o[o.ProcessingInstruction=64]="ProcessingInstruction",o[o.Comment=128]="Comment",o[o.Document=256]="Document",o[o.DocumentType=512]="DocumentType",o[o.DocumentFragment=1024]="DocumentFragment",o[o.Notation=2048]="Notation"}(n.WhatToShow||(n.WhatToShow={})),function(o){o[o.StartToStart=0]="StartToStart",o[o.StartToEnd=1]="StartToEnd",o[o.EndToEnd=2]="EndToEnd",o[o.EndToStart=3]="EndToStart"}(n.HowToCompare||(n.HowToCompare={}))},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(241);n.Cast=o.Cast;var a=i(150);n.Guard=a.Guard;var s=i(242);n.EmptySet=s.EmptySet},function(r,n,i){var o=i(11),a=i(55).f,s=i(21),c=i(25),l=i(80),f=i(119),u=i(123);r.exports=function(d,h){var g,p,v,y,m,w=d.target,x=d.global,C=d.stat;if(g=x?o:C?o[w]||l(w,{}):(o[w]||{}).prototype)for(p in h){if(y=h[p],v=d.noTargetGet?(m=a(g,p))&&m.value:g[p],!u(x?p:w+(C?".":"#")+p,d.forced)&&v!==void 0){if(typeof y==typeof v)continue;f(y,v)}(d.sham||v&&v.sham)&&s(y,"sham",!0),c(g,p,y,d)}}},function(r,n,i){var o=i(11),a=i(81),s=i(14),c=i(58),l=i(86),f=i(124),u=a("wks"),d=o.Symbol,h=f?d:d&&d.withoutSetter||c;r.exports=function(g){return s(u,g)||(l&&s(d,g)?u[g]=d[g]:u[g]=h("Symbol."+g)),u[g]}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(1),a=i(29),s=function(){function c(){this._features={mutationObservers:!0,customElements:!0,slots:!0,steps:!0},this._window=null,this._compareCache=new o.CompareCache,this._rangeList=new o.FixedSizeSet}return c.prototype.setFeatures=function(l){if(l===void 0&&(l=!0),o.isObject(l))for(var f in l)this._features[f]=l[f]||!1;else for(var f in this._features)this._features[f]=l},Object.defineProperty(c.prototype,"features",{get:function(){return this._features},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,"window",{get:function(){return this._window===null&&(this._window=a.create_window()),this._window},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,"compareCache",{get:function(){return this._compareCache},enumerable:!0,configurable:!0}),Object.defineProperty(c.prototype,"rangeList",{get:function(){return this._rangeList},enumerable:!0,configurable:!0}),Object.defineProperty(c,"instance",{get:function(){return c._instance||(c._instance=new c),c._instance},enumerable:!0,configurable:!0}),c}();n.dom=s.instance},function(r,n,i){var o=this&&this.__importStar||function(m){if(m&&m.__esModule)return m;var w={};if(m!=null)for(var x in m)Object.hasOwnProperty.call(m,x)&&(w[x]=m[x]);return w.default=m,w};Object.defineProperty(n,"__esModule",{value:!0});var a=o(i(228));n.base64=a;var s=o(i(146));n.byte=s;var c=o(i(147));n.byteSequence=c;var l=o(i(96));n.codePoint=l;var f=o(i(232));n.json=f;var u=o(i(233));n.list=u;var d=o(i(234));n.map=d;var h=o(i(235));n.namespace=h;var g=o(i(236));n.queue=g;var p=o(i(237));n.set=p;var v=o(i(238));n.stack=v;var y=o(i(239));n.string=y},function(r,n){r.exports=function(i){try{return!!i()}catch{return!0}}},function(r,n,i){var o,a=this&&this.__extends||(o=function(R,N){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(F,j){F.__proto__=j}||function(F,j){for(var te in j)j.hasOwnProperty(te)&&(F[te]=j[te])})(R,N)},function(R,N){function F(){this.constructor=R}o(R,N),R.prototype=N===null?Object.create(N):(F.prototype=N.prototype,new F)});Object.defineProperty(n,"__esModule",{value:!0});var s=function(R){function N(F,j){j===void 0&&(j="");var te=R.call(this,j)||this;return te.name=F,te}return a(N,R),N}(Error);n.DOMException=s;var c=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"DOMStringSizeError",F)||this}return a(N,R),N}(s);n.DOMStringSizeError=c;var l=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"WrongDocumentError","The object is in the wrong document. "+F)||this}return a(N,R),N}(s);n.WrongDocumentError=l;var f=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NoDataAllowedError",F)||this}return a(N,R),N}(s);n.NoDataAllowedError=f;var u=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NoModificationAllowedError","The object can not be modified. "+F)||this}return a(N,R),N}(s);n.NoModificationAllowedError=u;var d=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NotSupportedError","The operation is not supported. "+F)||this}return a(N,R),N}(s);n.NotSupportedError=d;var h=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InUseAttributeError",F)||this}return a(N,R),N}(s);n.InUseAttributeError=h;var g=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InvalidStateError","The object is in an invalid state. "+F)||this}return a(N,R),N}(s);n.InvalidStateError=g;var p=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InvalidModificationError","The object can not be modified in this way. "+F)||this}return a(N,R),N}(s);n.InvalidModificationError=p;var v=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NamespaceError","The operation is not allowed by Namespaces in XML. [XMLNS] "+F)||this}return a(N,R),N}(s);n.NamespaceError=v;var y=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InvalidAccessError","The object does not support the operation or argument. "+F)||this}return a(N,R),N}(s);n.InvalidAccessError=y;var m=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"ValidationError",F)||this}return a(N,R),N}(s);n.ValidationError=m;var w=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"TypeMismatchError",F)||this}return a(N,R),N}(s);n.TypeMismatchError=w;var x=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"SecurityError","The operation is insecure. "+F)||this}return a(N,R),N}(s);n.SecurityError=x;var C=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NetworkError","A network error occurred. "+F)||this}return a(N,R),N}(s);n.NetworkError=C;var S=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"AbortError","The operation was aborted. "+F)||this}return a(N,R),N}(s);n.AbortError=S;var T=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"URLMismatchError","The given URL does not match another URL. "+F)||this}return a(N,R),N}(s);n.URLMismatchError=T;var _=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"QuotaExceededError","The quota has been exceeded. "+F)||this}return a(N,R),N}(s);n.QuotaExceededError=_;var E=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"TimeoutError","The operation timed out. "+F)||this}return a(N,R),N}(s);n.TimeoutError=E;var b=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InvalidNodeTypeError","The supplied node is incorrect or has an incorrect ancestor for this operation. "+F)||this}return a(N,R),N}(s);n.InvalidNodeTypeError=b;var D=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"DataCloneError","The object can not be cloned. "+F)||this}return a(N,R),N}(s);n.DataCloneError=D;var I=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NotImplementedError","The DOM method is not implemented by this module. "+F)||this}return a(N,R),N}(s);n.NotImplementedError=I;var P=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"HierarchyRequestError","The operation would yield an incorrect node tree. "+F)||this}return a(N,R),N}(s);n.HierarchyRequestError=P;var O=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"NotFoundError","The object can not be found here. "+F)||this}return a(N,R),N}(s);n.NotFoundError=O;var A=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"IndexSizeError","The index is not in the allowed range. "+F)||this}return a(N,R),N}(s);n.IndexSizeError=A;var V=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"SyntaxError","The string did not match the expected pattern. "+F)||this}return a(N,R),N}(s);n.SyntaxError=V;var G=function(R){function N(F){return F===void 0&&(F=""),R.call(this,"InvalidCharacterError","The string contains invalid characters. "+F)||this}return a(N,R),N}(s);n.InvalidCharacterError=G},function(r,n,i){var o=i(53),a=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],s=["scalar","sequence","mapping"];r.exports=function(c,l){var f,u;if(l=l||{},Object.keys(l).forEach(function(d){if(a.indexOf(d)===-1)throw new o('Unknown option "'+d+'" is met in definition of "'+c+'" YAML type.')}),this.tag=c,this.kind=l.kind||null,this.resolve=l.resolve||function(){return!0},this.construct=l.construct||function(d){return d},this.instanceOf=l.instanceOf||null,this.predicate=l.predicate||null,this.represent=l.represent||null,this.defaultStyle=l.defaultStyle||null,this.styleAliases=(f=l.styleAliases||null,u={},f!==null&&Object.keys(f).forEach(function(d){f[d].forEach(function(h){u[String(h)]=d})}),u),s.indexOf(this.kind)===-1)throw new o('Unknown kind "'+this.kind+'" is specified for "'+c+'" YAML type.')}},function(r,n,i){(function(o){var a=function(s){return s&&s.Math==Math&&s};r.exports=a(typeof globalThis=="object"&&globalThis)||a(typeof window=="object"&&window)||a(typeof self=="object"&&self)||a(typeof o=="object"&&o)||Function("return this")()}).call(this,i(78))},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0}),n.idl_defineConst=function(o,a,s){Object.defineProperty(o,a,{writable:!1,enumerable:!0,configurable:!1,value:s})}},function(r,n){r.exports=function(i){return typeof i=="object"?i!==null:typeof i=="function"}},function(r,n){var i={}.hasOwnProperty;r.exports=function(o,a){return i.call(o,a)}},function(r,n,i){var o=i(16),a=i(115),s=i(18),c=i(56),l=Object.defineProperty;n.f=o?l:function(f,u,d){if(s(f),u=c(u,!0),s(d),a)try{return l(f,u,d)}catch{}if("get"in d||"set"in d)throw TypeError("Accessors not supported");return"value"in d&&(f[u]=d.value),f}},function(r,n,i){var o=i(8);r.exports=!o(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!=7})},function(r,n,i){var o=this&&this.__values||function(w){var x=typeof Symbol=="function"&&Symbol.iterator,C=x&&w[x],S=0;if(C)return C.call(w);if(w&&typeof w.length=="number")return{next:function(){return w&&S>=w.length&&(w=void 0),{value:w&&w[S++],done:!w}}};throw new TypeError(x?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var a=i(3),s=i(2);function c(w,x,C){if(C===void 0&&(C=!1),C&&a.Guard.isElementNode(x)&&a.Guard.isShadowRoot(x.shadowRoot)&&x.shadowRoot._firstChild)return x.shadowRoot._firstChild;if(x._firstChild)return x._firstChild;if(x===w)return null;if(x._nextSibling)return x._nextSibling;for(var S=x._parent;S&&S!==w;){if(S._nextSibling)return S._nextSibling;S=S._parent}return null}function l(){var w;return(w={})[Symbol.iterator]=function(){return{next:function(){return{done:!0,value:null}}}},w}function f(w,x,C,S){x===void 0&&(x=!1),C===void 0&&(C=!1);for(var T=x?w:c(w,w,C);T&&S&&!S(T);)T=c(w,T,C);return T}function u(w,x,C,S,T){S===void 0&&(S=!1);for(var _=c(w,x,S);_&&T&&!T(_);)_=c(w,_,S);return _}function d(w,x,C,S){var T;return x===void 0&&(x=!1),C===void 0&&(C=!1),x||w._children.size!==0?((T={})[Symbol.iterator]=function(){var _=x?w:c(w,w,C);return{next:function(){for(;_&&S&&!S(_);)_=c(w,_,C);if(_===null)return{done:!0,value:null};var E={done:!1,value:_};return _=c(w,_,C),E}}},T):l()}function h(w,x,C){x===void 0&&(x=!1);for(var S=x?w:w._parent;S&&C&&!C(S);)S=S._parent;return S}function g(w,x,C,S){for(var T=x._parent;T&&S&&!S(T);)T=T._parent;return T}function p(w){return a.Guard.isDocumentTypeNode(w)?0:a.Guard.isCharacterDataNode(w)?w._data.length:w._children.size}function v(w,x){if(x===void 0&&(x=!1),x){var C=v(w,!1);return a.Guard.isShadowRoot(C)?v(C._host,!0):C}return w._parent?v(w._parent):w}function y(w,x,C,S){C===void 0&&(C=!1),S===void 0&&(S=!1);for(var T=C?w:S&&a.Guard.isShadowRoot(w)?w._host:w._parent;T!==null;){if(T===x)return!0;T=S&&a.Guard.isShadowRoot(T)?T._host:T._parent}return!1}function m(w){for(var x=v(w),C=0,S=f(x);S!==null;){if(C++,S===w)return C;S=u(x,S)}return-1}n.tree_getFirstDescendantNode=f,n.tree_getNextDescendantNode=u,n.tree_getDescendantNodes=d,n.tree_getDescendantElements=function(w,x,C,S){var T;return x===void 0&&(x=!1),C===void 0&&(C=!1),x||w._children.size!==0?((T={})[Symbol.iterator]=function(){var _=d(w,x,C,function(b){return a.Guard.isElementNode(b)})[Symbol.iterator](),E=_.next().value;return{next:function(){for(;E&&S&&!S(E);)E=_.next().value;if(E===null)return{done:!0,value:null};var b={done:!1,value:E};return E=_.next().value,b}}},T):l()},n.tree_getSiblingNodes=function(w,x,C){var S;return x===void 0&&(x=!1),w._parent&&w._parent._children.size!==0?((S={})[Symbol.iterator]=function(){var T=w._parent?w._parent._firstChild:null;return{next:function(){for(;T&&(C&&!C(T)||!x&&T===w);)T=T._nextSibling;if(T===null)return{done:!0,value:null};var _={done:!1,value:T};return T=T._nextSibling,_}}},S):l()},n.tree_getFirstAncestorNode=h,n.tree_getNextAncestorNode=g,n.tree_getAncestorNodes=function(w,x,C){var S;return x===void 0&&(x=!1),x||w._parent?((S={})[Symbol.iterator]=function(){var T=h(w,x,C);return{next:function(){if(T===null)return{done:!0,value:null};var _={done:!1,value:T};return T=g(0,T,x,C),_}}},S):l()},n.tree_getCommonAncestor=function(w,x){if(w===x)return w._parent;for(var C=[],S=[],T=h(w,!0);T!==null;)C.push(T),T=g(0,T);for(var _=h(x,!0);_!==null;)S.push(_),_=g(0,_);for(var E=C.length,b=S.length,D=null,I=Math.min(E,b);I>0;I--){var P=C[--E];if(P!==S[--b])break;D=P}return D},n.tree_getFollowingNode=function(w,x){if(x._firstChild)return x._firstChild;if(x._nextSibling)return x._nextSibling;for(;;){var C=x._parent;if(C===null||C===w)return null;if(C._nextSibling)return C._nextSibling;x=C}},n.tree_getPrecedingNode=function(w,x){return x===w?null:x._previousSibling?(x=x._previousSibling)._lastChild?x._lastChild:x:x._parent},n.tree_isConstrained=function w(x){var C,S,T,_,E,b;switch(x._nodeType){case s.NodeType.Document:var D=!1,I=!1;try{for(var P=o(x._children),O=P.next();!O.done;O=P.next())switch(O.value._nodeType){case s.NodeType.ProcessingInstruction:case s.NodeType.Comment:break;case s.NodeType.DocumentType:if(D||I)return!1;D=!0;break;case s.NodeType.Element:if(I)return!1;I=!0;break;default:return!1}}catch(N){C={error:N}}finally{try{O&&!O.done&&(S=P.return)&&S.call(P)}finally{if(C)throw C.error}}break;case s.NodeType.DocumentFragment:case s.NodeType.Element:try{for(var A=o(x._children),V=A.next();!V.done;V=A.next())switch(V.value._nodeType){case s.NodeType.Element:case s.NodeType.Text:case s.NodeType.ProcessingInstruction:case s.NodeType.CData:case s.NodeType.Comment:break;default:return!1}}catch(N){T={error:N}}finally{try{V&&!V.done&&(_=A.return)&&_.call(A)}finally{if(T)throw T.error}}break;case s.NodeType.DocumentType:case s.NodeType.Text:case s.NodeType.ProcessingInstruction:case s.NodeType.CData:case s.NodeType.Comment:return!x.hasChildNodes()}try{for(var G=o(x._children),R=G.next();!R.done;R=G.next())if(!w(R.value))return!1}catch(N){E={error:N}}finally{try{R&&!R.done&&(b=G.return)&&b.call(G)}finally{if(E)throw E.error}}return!0},n.tree_nodeLength=p,n.tree_isEmpty=function(w){return p(w)===0},n.tree_rootNode=v,n.tree_isDescendantOf=function(w,x,C,S){C===void 0&&(C=!1),S===void 0&&(S=!1);for(var T=f(w,C,S);T!==null;){if(T===x)return!0;T=u(w,T,C,S)}return!1},n.tree_isAncestorOf=y,n.tree_isHostIncludingAncestorOf=function w(x,C,S){if(S===void 0&&(S=!1),y(x,C,S))return!0;var T=v(x);return!(!a.Guard.isDocumentFragmentNode(T)||T._host===null||!w(T._host,C,S))},n.tree_isSiblingOf=function(w,x,C){return C===void 0&&(C=!1),w!==x?w._parent!==null&&w._parent===x._parent:!!C},n.tree_isPreceding=function(w,x){var C=m(w),S=m(x);return C!==-1&&S!==-1&&v(w)===v(x)&&SC},n.tree_isParentOf=function(w,x){return w._parent===x},n.tree_isChildOf=function(w,x){return x._parent===w},n.tree_previousSibling=function(w){return w._previousSibling},n.tree_nextSibling=function(w){return w._nextSibling},n.tree_firstChild=function(w){return w._firstChild},n.tree_lastChild=function(w){return w._lastChild},n.tree_treePosition=m,n.tree_index=function(w){for(var x=0;w._previousSibling!==null;)x++,w=w._previousSibling;return x},n.tree_retarget=function(w,x){for(;;){if(!w||!a.Guard.isNode(w))return w;var C=v(w);if(!a.Guard.isShadowRoot(C)||x&&a.Guard.isNode(x)&&y(C,x,!0,!0))return w;w=C.host}}},function(r,n,i){var o=i(13);r.exports=function(a){if(!o(a))throw TypeError(String(a)+" is not an object");return a}},function(r,n,i){var o=i(24),a=i(130),s=i(49),c=i(43),l=i(88),f=c.set,u=c.getterFor("Array Iterator");r.exports=l(Array,"Array",function(d,h){f(this,{type:"Array Iterator",target:o(d),index:0,kind:h})},function(){var d=u(this),h=d.target,g=d.kind,p=d.index++;return!h||p>=h.length?(d.target=void 0,{value:void 0,done:!0}):g=="keys"?{value:p,done:!1}:g=="values"?{value:h[p],done:!1}:{value:[p,h[p]],done:!1}},"values"),s.Arguments=s.Array,a("keys"),a("values"),a("entries")},function(r,n,i){var o=i(90),a=i(25),s=i(202);o||a(Object.prototype,"toString",s,{unsafe:!0})},function(r,n,i){var o=i(16),a=i(15),s=i(40);r.exports=o?function(c,l,f){return a.f(c,l,s(1,f))}:function(c,l,f){return c[l]=f,c}},function(r,n,i){var o=i(137).charAt,a=i(43),s=i(88),c=a.set,l=a.getterFor("String Iterator");s(String,"String",function(f){c(this,{type:"String Iterator",string:String(f),index:0})},function(){var f,u=l(this),d=u.string,h=u.index;return h>=d.length?{value:void 0,done:!0}:(f=o(d,h),u.index+=f.length,{value:f,done:!1})})},function(r,n,i){var o=i(11),a=i(203),s=i(19),c=i(21),l=i(5),f=l("iterator"),u=l("toStringTag"),d=s.values;for(var h in a){var g=o[h],p=g&&g.prototype;if(p){if(p[f]!==d)try{c(p,f,d)}catch{p[f]=d}if(p[u]||c(p,u,h),a[h]){for(var v in s)if(p[v]!==s[v])try{c(p,v,s[v])}catch{p[v]=s[v]}}}}},function(r,n,i){var o=i(41),a=i(35);r.exports=function(s){return o(a(s))}},function(r,n,i){var o=i(11),a=i(21),s=i(14),c=i(80),l=i(117),f=i(43),u=f.get,d=f.enforce,h=String(String).split("String");(r.exports=function(g,p,v,y){var m=!!y&&!!y.unsafe,w=!!y&&!!y.enumerable,x=!!y&&!!y.noTargetGet;typeof v=="function"&&(typeof p!="string"||s(v,"name")||a(v,"name",p),d(v).source=h.join(typeof p=="string"?p:"")),g!==o?(m?!x&&g[p]&&(w=!0):delete g[p],w?g[p]=v:a(g,p,v)):w?g[p]=v:c(p,v)})(Function.prototype,"toString",function(){return typeof this=="function"&&u(this).source||l(this)})},function(r,n,i){var o=i(47),a=Math.min;r.exports=function(s){return s>0?a(o(s),9007199254740991):0}},function(r,n,i){var o=i(35);r.exports=function(a){return Object(o(a))}},function(r,n,i){var o=i(16),a=i(8),s=i(14),c=Object.defineProperty,l={},f=function(u){throw u};r.exports=function(u,d){if(s(l,u))return l[u];d||(d={});var h=[][u],g=!!s(d,"ACCESSORS")&&d.ACCESSORS,p=s(d,0)?d[0]:f,v=s(d,1)?d[1]:void 0;return l[u]=!!h&&!a(function(){if(g&&!o)return!0;var y={length:-1};g?c(y,1,{enumerable:!0,get:f}):y[1]=1,h.call(y,p,v)})}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(148),a=i(149),s=i(151),c=i(98),l=i(153),f=i(154),u=i(155),d=i(99),h=i(100),g=i(156),p=i(157),v=i(101),y=i(158),m=i(159),w=i(160),x=i(161),C=i(162),S=i(163),T=i(164),_=i(165),E=i(166),b=i(167),D=i(168),I=i(169),P=i(170);n.create_domImplementation=function(O){return o.DOMImplementationImpl._create(O)},n.create_window=function(){return a.WindowImpl._create()},n.create_xmlDocument=function(){return new s.XMLDocumentImpl},n.create_document=function(){return new c.DocumentImpl},n.create_abortController=function(){return new l.AbortControllerImpl},n.create_abortSignal=function(){return f.AbortSignalImpl._create()},n.create_documentType=function(O,A,V,G){return u.DocumentTypeImpl._create(O,A,V,G)},n.create_element=function(O,A,V,G){return d.ElementImpl._create(O,A,V,G)},n.create_htmlElement=function(O,A,V,G){return d.ElementImpl._create(O,A,V,G)},n.create_htmlUnknownElement=function(O,A,V,G){return d.ElementImpl._create(O,A,V,G)},n.create_documentFragment=function(O){return h.DocumentFragmentImpl._create(O)},n.create_shadowRoot=function(O,A){return g.ShadowRootImpl._create(O,A)},n.create_attr=function(O,A){return p.AttrImpl._create(O,A)},n.create_text=function(O,A){return v.TextImpl._create(O,A)},n.create_cdataSection=function(O,A){return y.CDATASectionImpl._create(O,A)},n.create_comment=function(O,A){return m.CommentImpl._create(O,A)},n.create_processingInstruction=function(O,A,V){return w.ProcessingInstructionImpl._create(O,A,V)},n.create_htmlCollection=function(O,A){return A===void 0&&(A=function(){return!0}),x.HTMLCollectionImpl._create(O,A)},n.create_nodeList=function(O){return C.NodeListImpl._create(O)},n.create_nodeListStatic=function(O,A){return S.NodeListStaticImpl._create(O,A)},n.create_namedNodeMap=function(O){return T.NamedNodeMapImpl._create(O)},n.create_range=function(O,A){return _.RangeImpl._create(O,A)},n.create_nodeIterator=function(O,A,V){return E.NodeIteratorImpl._create(O,A,V)},n.create_treeWalker=function(O,A){return b.TreeWalkerImpl._create(O,A)},n.create_nodeFilter=function(){return D.NodeFilterImpl._create()},n.create_mutationRecord=function(O,A,V,G,R,N,F,j,te){return I.MutationRecordImpl._create(O,A,V,G,R,N,F,j,te)},n.create_domTokenList=function(O,A){return P.DOMTokenListImpl._create(O,A)}},function(r,n,i){var o=this&&this.__values||function(p){var v=typeof Symbol=="function"&&Symbol.iterator,y=v&&p[v],m=0;if(y)return y.call(p);if(p&&typeof p.length=="number")return{next:function(){return p&&m>=p.length&&(p=void 0),{value:p&&p[m++],done:!p}}};throw new TypeError(v?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var a=i(6),s=i(17),c=i(3),l=i(72),f=new Map;function u(p,v){if(v!==p._root&&s.tree_isAncestorOf(p._reference,v,!0)){if(p._pointerBeforeReference)for(;;){var y=s.tree_getFollowingNode(p._root,v);if(y!==null&&s.tree_isDescendantOf(p._root,y,!0)&&!s.tree_isDescendantOf(v,y,!0))return void(p._reference=y);if(y===null)return void(p._pointerBeforeReference=!1)}if(v._previousSibling===null)v._parent!==null&&(p._reference=v._parent);else{for(var m=v._previousSibling,w=s.tree_getFirstDescendantNode(v._previousSibling,!0,!1);w!==null;)w!==null&&(m=w),w=s.tree_getNextDescendantNode(v._previousSibling,w,!0,!1);p._reference=m}}}function d(p,v,y,m,w){if(c.Guard.isSlot(p)&&v==="name"&&w===null){if(m===y||m===null&&y===""||m===""&&y===null)return;p._name=m===null||m===""?"":m,l.shadowTree_assignSlotablesForATree(s.tree_rootNode(p))}}function h(p,v,y,m,w){if(c.Guard.isSlotable(p)&&v==="slot"&&w===null){if(m===y||m===null&&y===""||m===""&&y===null)return;p._name=m===null||m===""?"":m,l.shadowTree_isAssigned(p)&&l.shadowTree_assignSlotables(p._assignedSlot),l.shadowTree_assignASlot(p)}}function g(p,v,y,m){v==="id"&&m===null&&(p._uniqueIdentifier=y||void 0)}n.dom_runRemovingSteps=function(p,v){},n.dom_runCloningSteps=function(p,v,y,m){},n.dom_runAdoptingSteps=function(p,v){},n.dom_runAttributeChangeSteps=function(p,v,y,m,w){var x,C;a.dom.features.slots&&(h.call(p,p,v,y,m,w),d.call(p,p,v,y,m,w)),g.call(p,p,v,m,w);try{for(var S=o(p._attributeChangeSteps),T=S.next();!T.done;T=S.next())T.value.call(p,p,v,y,m,w)}catch(_){x={error:_}}finally{try{T&&!T.done&&(C=S.return)&&C.call(S)}finally{if(x)throw x.error}}},n.dom_runInsertionSteps=function(p){},n.dom_runNodeIteratorPreRemovingSteps=function(p,v){u.call(p,p,v)},n.dom_hasSupportedTokens=function(p){return f.has(p)},n.dom_getSupportedTokens=function(p){return f.get(p)||new Set},n.dom_runEventConstructingSteps=function(p){},n.dom_runChildTextContentChangeSteps=function(p){}},function(r,n,i){var o=i(4),a=i(11),s=i(46),c=i(44),l=i(16),f=i(86),u=i(124),d=i(8),h=i(14),g=i(59),p=i(13),v=i(18),y=i(27),m=i(24),w=i(56),x=i(40),C=i(60),S=i(61),T=i(82),_=i(190),E=i(85),b=i(55),D=i(15),I=i(79),P=i(21),O=i(25),A=i(81),V=i(57),G=i(45),R=i(58),N=i(5),F=i(125),j=i(126),te=i(62),ie=i(43),he=i(36).forEach,ue=V("hidden"),ve=N("toPrimitive"),Me=ie.set,Ue=ie.getterFor("Symbol"),be=Object.prototype,B=a.Symbol,M=s("JSON","stringify"),$=b.f,W=D.f,Y=_.f,ne=I.f,re=A("symbols"),Se=A("op-symbols"),Re=A("string-to-symbol-registry"),je=A("symbol-to-string-registry"),qe=A("wks"),oe=a.QObject,ce=!oe||!oe.prototype||!oe.prototype.findChild,Te=l&&d(function(){return C(W({},"a",{get:function(){return W(this,"a",{value:7}).a}})).a!=7})?function(tt,gt,ht){var xt=$(be,gt);xt&&delete be[gt],W(tt,gt,ht),xt&&tt!==be&&W(be,gt,xt)}:W,ae=function(tt,gt){var ht=re[tt]=C(B.prototype);return Me(ht,{type:"Symbol",tag:tt,description:gt}),l||(ht.description=gt),ht},we=u?function(tt){return typeof tt=="symbol"}:function(tt){return Object(tt)instanceof B},Ze=function(tt,gt,ht){tt===be&&Ze(Se,gt,ht),v(tt);var xt=w(gt,!0);return v(ht),h(re,xt)?(ht.enumerable?(h(tt,ue)&&tt[ue][xt]&&(tt[ue][xt]=!1),ht=C(ht,{enumerable:x(0,!1)})):(h(tt,ue)||W(tt,ue,x(1,{})),tt[ue][xt]=!0),Te(tt,xt,ht)):W(tt,xt,ht)},le=function(tt,gt){v(tt);var ht=m(gt),xt=S(ht).concat(Ae(ht));return he(xt,function(jt){l&&!Tt.call(ht,jt)||Ze(tt,jt,ht[jt])}),tt},Tt=function(tt){var gt=w(tt,!0),ht=ne.call(this,gt);return!(this===be&&h(re,gt)&&!h(Se,gt))&&(!(ht||!h(this,gt)||!h(re,gt)||h(this,ue)&&this[ue][gt])||ht)},Ot=function(tt,gt){var ht=m(tt),xt=w(gt,!0);if(ht!==be||!h(re,xt)||h(Se,xt)){var jt=$(ht,xt);return!jt||!h(re,xt)||h(ht,ue)&&ht[ue][xt]||(jt.enumerable=!0),jt}},_t=function(tt){var gt=Y(m(tt)),ht=[];return he(gt,function(xt){h(re,xt)||h(G,xt)||ht.push(xt)}),ht},Ae=function(tt){var gt=tt===be,ht=Y(gt?Se:m(tt)),xt=[];return he(ht,function(jt){!h(re,jt)||gt&&!h(be,jt)||xt.push(re[jt])}),xt};f||(O((B=function(){if(this instanceof B)throw TypeError("Symbol is not a constructor");var tt=arguments.length&&arguments[0]!==void 0?String(arguments[0]):void 0,gt=R(tt),ht=function(xt){this===be&&ht.call(Se,xt),h(this,ue)&&h(this[ue],gt)&&(this[ue][gt]=!1),Te(this,gt,x(1,xt))};return l&&ce&&Te(be,gt,{configurable:!0,set:ht}),ae(gt,tt)}).prototype,"toString",function(){return Ue(this).tag}),O(B,"withoutSetter",function(tt){return ae(R(tt),tt)}),I.f=Tt,D.f=Ze,b.f=Ot,T.f=_.f=_t,E.f=Ae,F.f=function(tt){return ae(N(tt),tt)},l&&(W(B.prototype,"description",{configurable:!0,get:function(){return Ue(this).description}}),c||O(be,"propertyIsEnumerable",Tt,{unsafe:!0}))),o({global:!0,wrap:!0,forced:!f,sham:!f},{Symbol:B}),he(S(qe),function(tt){j(tt)}),o({target:"Symbol",stat:!0,forced:!f},{for:function(tt){var gt=String(tt);if(h(Re,gt))return Re[gt];var ht=B(gt);return Re[gt]=ht,je[ht]=gt,ht},keyFor:function(tt){if(!we(tt))throw TypeError(tt+" is not a symbol");if(h(je,tt))return je[tt]},useSetter:function(){ce=!0},useSimple:function(){ce=!1}}),o({target:"Object",stat:!0,forced:!f,sham:!l},{create:function(tt,gt){return gt===void 0?C(tt):le(C(tt),gt)},defineProperty:Ze,defineProperties:le,getOwnPropertyDescriptor:Ot}),o({target:"Object",stat:!0,forced:!f},{getOwnPropertyNames:_t,getOwnPropertySymbols:Ae}),o({target:"Object",stat:!0,forced:d(function(){E.f(1)})},{getOwnPropertySymbols:function(tt){return E.f(y(tt))}}),M&&o({target:"JSON",stat:!0,forced:!f||d(function(){var tt=B();return M([tt])!="[null]"||M({a:tt})!="{}"||M(Object(tt))!="{}"})},{stringify:function(tt,gt,ht){for(var xt,jt=[tt],Pt=1;arguments.length>Pt;)jt.push(arguments[Pt++]);if(xt=gt,(p(gt)||tt!==void 0)&&!we(tt))return g(gt)||(gt=function(Kt,en){if(typeof xt=="function"&&(en=xt.call(this,Kt,en)),!we(en))return en}),jt[1]=gt,M.apply(null,jt)}}),B.prototype[ve]||P(B.prototype,ve,B.prototype.valueOf),te(B,"Symbol"),G[ue]=!0},function(r,n,i){var o=i(4),a=i(16),s=i(11),c=i(14),l=i(13),f=i(15).f,u=i(119),d=s.Symbol;if(a&&typeof d=="function"&&(!("description"in d.prototype)||d().description!==void 0)){var h={},g=function(){var w=arguments.length<1||arguments[0]===void 0?void 0:String(arguments[0]),x=this instanceof g?new d(w):w===void 0?d():d(w);return w===""&&(h[x]=!0),x};u(g,d);var p=g.prototype=d.prototype;p.constructor=g;var v=p.toString,y=String(d("test"))=="Symbol(test)",m=/^Symbol\((.*)\)[^)]+$/;f(p,"description",{configurable:!0,get:function(){var w=l(this)?this.valueOf():this,x=v.call(w);if(c(h,w))return"";var C=y?x.slice(7,-1):x.replace(m,"$1");return C===""?void 0:C}}),o({global:!0,forced:!0},{Symbol:g})}},function(r,n,i){i(126)("iterator")},function(r,n,i){var o,a=this&&this.__extends||(o=function(y,m){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(w,x){w.__proto__=x}||function(w,x){for(var C in x)x.hasOwnProperty(C)&&(w[C]=x[C])})(y,m)},function(y,m){function w(){this.constructor=y}o(y,m),y.prototype=m===null?Object.create(m):(w.prototype=m.prototype,new w)}),s=this&&this.__values||function(y){var m=typeof Symbol=="function"&&Symbol.iterator,w=m&&y[m],x=0;if(w)return w.call(y);if(y&&typeof y.length=="number")return{next:function(){return y&&x>=y.length&&(y=void 0),{value:y&&y[x++],done:!y}}};throw new TypeError(m?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var c=i(6),l=i(2),f=i(70),u=i(3),d=i(9),h=i(0),g=i(152),p=i(12),v=function(y){function m(){var w=y.call(this)||this;return w._parent=null,w._firstChild=null,w._lastChild=null,w._previousSibling=null,w._nextSibling=null,w}return a(m,y),Object.defineProperty(m.prototype,"_childNodes",{get:function(){return this.__childNodes||(this.__childNodes=h.create_nodeList(this))},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"_nodeDocument",{get:function(){return this._nodeDocumentOverride||c.dom.window._associatedDocument},set:function(w){this._nodeDocumentOverride=w},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"_registeredObserverList",{get:function(){return this.__registeredObserverList||(this.__registeredObserverList=[])},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"nodeType",{get:function(){return this._nodeType},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"nodeName",{get:function(){return u.Guard.isElementNode(this)?this._htmlUppercasedQualifiedName:u.Guard.isAttrNode(this)?this._qualifiedName:u.Guard.isExclusiveTextNode(this)?"#text":u.Guard.isCDATASectionNode(this)?"#cdata-section":u.Guard.isProcessingInstructionNode(this)?this._target:u.Guard.isCommentNode(this)?"#comment":u.Guard.isDocumentNode(this)?"#document":u.Guard.isDocumentTypeNode(this)?this._name:u.Guard.isDocumentFragmentNode(this)?"#document-fragment":""},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"baseURI",{get:function(){return g.urlSerializer(this._nodeDocument._URL)},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"isConnected",{get:function(){return u.Guard.isElementNode(this)&&h.shadowTree_isConnected(this)},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"ownerDocument",{get:function(){return this._nodeType===l.NodeType.Document?null:this._nodeDocument},enumerable:!0,configurable:!0}),m.prototype.getRootNode=function(w){return h.tree_rootNode(this,!!w&&w.composed)},Object.defineProperty(m.prototype,"parentNode",{get:function(){return this._nodeType===l.NodeType.Attribute?null:this._parent},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"parentElement",{get:function(){return this._parent&&u.Guard.isElementNode(this._parent)?this._parent:null},enumerable:!0,configurable:!0}),m.prototype.hasChildNodes=function(){return this._firstChild!==null},Object.defineProperty(m.prototype,"childNodes",{get:function(){return this._childNodes},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"firstChild",{get:function(){return this._firstChild},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"lastChild",{get:function(){return this._lastChild},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"previousSibling",{get:function(){return this._previousSibling},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"nextSibling",{get:function(){return this._nextSibling},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"nodeValue",{get:function(){return u.Guard.isAttrNode(this)?this._value:u.Guard.isCharacterDataNode(this)?this._data:null},set:function(w){w===null&&(w=""),u.Guard.isAttrNode(this)?h.attr_setAnExistingAttributeValue(this,w):u.Guard.isCharacterDataNode(this)&&h.characterData_replaceData(this,0,this._data.length,w)},enumerable:!0,configurable:!0}),Object.defineProperty(m.prototype,"textContent",{get:function(){return u.Guard.isDocumentFragmentNode(this)||u.Guard.isElementNode(this)?h.text_descendantTextContent(this):u.Guard.isAttrNode(this)?this._value:u.Guard.isCharacterDataNode(this)?this._data:null},set:function(w){w===null&&(w=""),u.Guard.isDocumentFragmentNode(this)||u.Guard.isElementNode(this)?h.node_stringReplaceAll(w,this):u.Guard.isAttrNode(this)?h.attr_setAnExistingAttributeValue(this,w):u.Guard.isCharacterDataNode(this)&&h.characterData_replaceData(this,0,h.tree_nodeLength(this),w)},enumerable:!0,configurable:!0}),m.prototype.normalize=function(){for(var w,x,C,S,T=[],_=h.tree_getFirstDescendantNode(this,!1,!1,function(he){return u.Guard.isExclusiveTextNode(he)});_!==null;)T.push(_),_=h.tree_getNextDescendantNode(this,_,!1,!1,function(he){return u.Guard.isExclusiveTextNode(he)});for(var E=0;EP;P++)if((m||P in b)&&(_=D(T=b[P],P,E),d)){if(h)A[P]=_;else if(_)switch(d){case 3:return!0;case 5:return T;case 6:return P;case 2:f.call(A,T)}else if(v)return!1}return y?-1:p||v?v:A}};r.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6)}},function(r,n,i){var o=this&&this.__values||function(E){var b=typeof Symbol=="function"&&Symbol.iterator,D=b&&E[b],I=0;if(D)return D.call(E);if(E&&typeof E.length=="number")return{next:function(){return E&&I>=E.length&&(E=void 0),{value:E&&E[I++],done:!E}}};throw new TypeError(b?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(E,b){var D=typeof Symbol=="function"&&E[Symbol.iterator];if(!D)return E;var I,P,O=D.call(E),A=[];try{for(;(b===void 0||b-- >0)&&!(I=O.next()).done;)A.push(I.value)}catch(V){P={error:V}}finally{try{I&&!I.done&&(D=O.return)&&D.call(O)}finally{if(P)throw P.error}}return A},s=this&&this.__spread||function(){for(var E=[],b=0;b1)throw new l.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has "+ie+" element nodes.");if(ie===1){try{for(var Me=o(b._children),Ue=Me.next();!Ue.done;Ue=Me.next())if(Ue.value._nodeType===f.NodeType.Element)throw new l.HierarchyRequestError("The document node already has a document element node.")}catch(ne){O={error:ne}}finally{try{Ue&&!Ue.done&&(A=Me.return)&&A.call(Me)}finally{if(O)throw O.error}}if(D){if(te===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node.");for(var be=D._nextSibling;be;){if(be._nodeType===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node.");be=be._nextSibling}}}}else if(j===f.NodeType.Element){try{for(var B=o(b._children),M=B.next();!M.done;M=B.next())if(M.value._nodeType===f.NodeType.Element)throw new l.HierarchyRequestError("Document already has a document element node. Node is "+E.nodeName+".")}catch(ne){V={error:ne}}finally{try{M&&!M.done&&(G=B.return)&&G.call(B)}finally{if(V)throw V.error}}if(D){if(te===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node. Node is "+E.nodeName+".");for(be=D._nextSibling;be;){if(be._nodeType===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node. Node is "+E.nodeName+".");be=be._nextSibling}}}else if(j===f.NodeType.DocumentType){try{for(var $=o(b._children),W=$.next();!W.done;W=$.next())if(W.value._nodeType===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Document already has a document type node. Node is "+E.nodeName+".")}catch(ne){R={error:ne}}finally{try{W&&!W.done&&(N=$.return)&&N.call($)}finally{if(R)throw R.error}}if(D)for(var Y=D._previousSibling;Y;){if(Y._nodeType===f.NodeType.Element)throw new l.HierarchyRequestError("Cannot insert a document type node before an element node. Node is "+E.nodeName+".");Y=Y._previousSibling}else for(Y=b._firstChild;Y;){if(Y._nodeType===f.NodeType.Element)throw new l.HierarchyRequestError("Cannot insert a document type node before an element node. Node is "+E.nodeName+".");Y=Y._nextSibling}}}}function S(E,b,D){C(E,b,D);var I=D;return I===E&&(I=E._nextSibling),x.document_adopt(E,b._nodeDocument),T(E,b,I),E}function T(E,b,D,I){var P,O;if(D!==null||E._nodeType===f.NodeType.DocumentFragment){var A=E._nodeType===f.NodeType.DocumentFragment?E._children.size:1;if(D!==null&&c.dom.rangeList.size!==0){var V=p.tree_index(D);try{for(var G=o(c.dom.rangeList),R=G.next();!R.done;R=G.next()){var N=R.value;N._start[0]===b&&N._start[1]>V&&(N._start[1]+=A),N._end[0]===b&&N._end[1]>V&&(N._end[1]+=A)}}catch(Ue){P={error:Ue}}finally{try{R&&!R.done&&(O=G.return)&&O.call(G)}finally{if(P)throw P.error}}}var F=E._nodeType===f.NodeType.DocumentFragment?new(Array.bind.apply(Array,s([void 0],E._children))):[E];if(E._nodeType===f.NodeType.DocumentFragment)for(;E._firstChild;)_(E._firstChild,E,!0);c.dom.features.mutationObservers&&E._nodeType===f.NodeType.DocumentFragment&&m.observer_queueTreeMutationRecord(E,[],F,null,null);for(var j=D?D._previousSibling:b._lastChild,te=D===null?-1:p.tree_index(D),ie=0;ieF&&ie._start[1]--,ie._end[0]===b&&ie._end[1]>F&&ie._end[1]--}}catch(Re){I={error:Re}}finally{try{te&&!te.done&&(P=j.return)&&P.call(j)}finally{if(I)throw I.error}}try{for(var he=o(c.dom.rangeList),ue=he.next();!ue.done;ue=he.next())(ie=ue.value)._start[0]===b&&ie._start[1]>F&&(ie._start[1]-=1),ie._end[0]===b&&ie._end[1]>F&&(ie._end[1]-=1)}catch(Re){O={error:Re}}finally{try{ue&&!ue.done&&(A=he.return)&&A.call(he)}finally{if(O)throw O.error}}}if(c.dom.features.steps)try{for(var ve=o(v.nodeIterator_iteratorList()),Me=ve.next();!Me.done;Me=ve.next()){var Ue=Me.value;Ue._root._nodeDocument===E._nodeDocument&&w.dom_runNodeIteratorPreRemovingSteps(Ue,E)}}catch(Re){V={error:Re}}finally{try{Me&&!Me.done&&(G=ve.return)&&G.call(ve)}finally{if(V)throw V.error}}var be=E._previousSibling,B=E._nextSibling;u.Guard.isDocumentNode(b)&&u.Guard.isElementNode(E)&&(b._documentElement=null),E._parent=null,b._children.delete(E);var M=E._previousSibling,$=E._nextSibling;E._previousSibling=null,E._nextSibling=null,M&&(M._nextSibling=$),$&&($._previousSibling=M),M||(b._firstChild=$),$||(b._lastChild=M),c.dom.features.slots&&u.Guard.isSlotable(E)&&E._assignedSlot!==null&&y.shadowTree_isAssigned(E)&&y.shadowTree_assignSlotables(E._assignedSlot),c.dom.features.slots&&u.Guard.isShadowRoot(p.tree_rootNode(b))&&u.Guard.isSlot(b)&&d.isEmpty(b._assignedNodes)&&y.shadowTree_signalASlotChange(b),c.dom.features.slots&&p.tree_getFirstDescendantNode(E,!0,!1,function(Re){return u.Guard.isSlot(Re)})!==null&&(y.shadowTree_assignSlotablesForATree(p.tree_rootNode(b)),y.shadowTree_assignSlotablesForATree(E)),c.dom.features.steps&&w.dom_runRemovingSteps(E,b),c.dom.features.customElements&&u.Guard.isCustomElementNode(E)&&g.customElement_enqueueACustomElementCallbackReaction(E,"disconnectedCallback",[]);for(var W=p.tree_getFirstDescendantNode(E,!1,!0);W!==null;)c.dom.features.steps&&w.dom_runRemovingSteps(W,E),c.dom.features.customElements&&u.Guard.isCustomElementNode(W)&&g.customElement_enqueueACustomElementCallbackReaction(W,"disconnectedCallback",[]),W=p.tree_getNextDescendantNode(E,W,!1,!0);if(c.dom.features.mutationObservers)for(var Y=p.tree_getFirstAncestorNode(b,!0);Y!==null;){try{for(var ne=(R=void 0,o(Y._registeredObserverList)),re=ne.next();!re.done;re=ne.next()){var Se=re.value;Se.options.subtree&&E._registeredObserverList.push({observer:Se.observer,options:Se.options,source:Se})}}catch(Re){R={error:Re}}finally{try{re&&!re.done&&(N=ne.return)&&N.call(ne)}finally{if(R)throw R.error}}Y=p.tree_getNextAncestorNode(b,Y,!0)}c.dom.features.mutationObservers&&(D||m.observer_queueTreeMutationRecord(b,[],[E],be,B)),c.dom.features.steps&&u.Guard.isTextNode(E)&&w.dom_runChildTextContentChangeSteps(b)}n.mutation_ensurePreInsertionValidity=C,n.mutation_preInsert=S,n.mutation_insert=T,n.mutation_append=function(E,b){return S(E,b,null)},n.mutation_replace=function(E,b,D){var I,P,O,A,V,G,R,N;if(D._nodeType!==f.NodeType.Document&&D._nodeType!==f.NodeType.DocumentFragment&&D._nodeType!==f.NodeType.Element)throw new l.HierarchyRequestError("Only document, document fragment and element nodes can contain child nodes. Parent node is "+D.nodeName+".");if(p.tree_isHostIncludingAncestorOf(D,b,!0))throw new l.HierarchyRequestError("The node to be inserted cannot be an ancestor of parent node. Node is "+b.nodeName+", parent node is "+D.nodeName+".");if(E._parent!==D)throw new l.NotFoundError("The reference child node cannot be found under parent node. Child node is "+E.nodeName+", parent node is "+D.nodeName+".");if(b._nodeType!==f.NodeType.DocumentFragment&&b._nodeType!==f.NodeType.DocumentType&&b._nodeType!==f.NodeType.Element&&b._nodeType!==f.NodeType.Text&&b._nodeType!==f.NodeType.ProcessingInstruction&&b._nodeType!==f.NodeType.CData&&b._nodeType!==f.NodeType.Comment)throw new l.HierarchyRequestError("Only document fragment, document type, element, text, processing instruction, cdata section or comment nodes can be inserted. Node is "+b.nodeName+".");if(b._nodeType===f.NodeType.Text&&D._nodeType===f.NodeType.Document)throw new l.HierarchyRequestError("Cannot insert a text node as a child of a document node. Node is "+b.nodeName+".");if(b._nodeType===f.NodeType.DocumentType&&D._nodeType!==f.NodeType.Document)throw new l.HierarchyRequestError("A document type node can only be inserted under a document node. Parent node is "+D.nodeName+".");if(D._nodeType===f.NodeType.Document){if(b._nodeType===f.NodeType.DocumentFragment){var F=0;try{for(var j=o(b._children),te=j.next();!te.done;te=j.next()){var ie=te.value;if(ie._nodeType===f.NodeType.Element)F++;else if(ie._nodeType===f.NodeType.Text)throw new l.HierarchyRequestError("Cannot insert text a node as a child of a document node. Node is "+ie.nodeName+".")}}catch(Se){I={error:Se}}finally{try{te&&!te.done&&(P=j.return)&&P.call(j)}finally{if(I)throw I.error}}if(F>1)throw new l.HierarchyRequestError("A document node can only have one document element node. Document fragment to be inserted has "+F+" element nodes.");if(F===1){try{for(var he=o(D._children),ue=he.next();!ue.done;ue=he.next())if((M=ue.value)._nodeType===f.NodeType.Element&&M!==E)throw new l.HierarchyRequestError("The document node already has a document element node.")}catch(Se){O={error:Se}}finally{try{ue&&!ue.done&&(A=he.return)&&A.call(he)}finally{if(O)throw O.error}}for(var ve=E._nextSibling;ve;){if(ve._nodeType===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node.");ve=ve._nextSibling}}}else if(b._nodeType===f.NodeType.Element){try{for(var Me=o(D._children),Ue=Me.next();!Ue.done;Ue=Me.next())if((M=Ue.value)._nodeType===f.NodeType.Element&&M!==E)throw new l.HierarchyRequestError("Document already has a document element node. Node is "+b.nodeName+".")}catch(Se){V={error:Se}}finally{try{Ue&&!Ue.done&&(G=Me.return)&&G.call(Me)}finally{if(V)throw V.error}}for(ve=E._nextSibling;ve;){if(ve._nodeType===f.NodeType.DocumentType)throw new l.HierarchyRequestError("Cannot insert an element node before a document type node. Node is "+b.nodeName+".");ve=ve._nextSibling}}else if(b._nodeType===f.NodeType.DocumentType){try{for(var be=o(D._children),B=be.next();!B.done;B=be.next()){var M;if((M=B.value)._nodeType===f.NodeType.DocumentType&&M!==E)throw new l.HierarchyRequestError("Document already has a document type node. Node is "+b.nodeName+".")}}catch(Se){R={error:Se}}finally{try{B&&!B.done&&(N=be.return)&&N.call(be)}finally{if(R)throw R.error}}for(var $=E._previousSibling;$;){if($._nodeType===f.NodeType.Element)throw new l.HierarchyRequestError("Cannot insert a document type node before an element node. Node is "+b.nodeName+".");$=$._previousSibling}}}var W=E._nextSibling;W===b&&(W=b._nextSibling);var Y=E._previousSibling;x.document_adopt(b,D._nodeDocument);var ne=[];E._parent!==null&&(ne.push(E),_(E,E._parent,!0));var re=[];return b._nodeType===f.NodeType.DocumentFragment?re=Array.from(b._children):re.push(b),T(b,D,W,!0),c.dom.features.mutationObservers&&m.observer_queueTreeMutationRecord(D,re,ne,Y,W),E},n.mutation_replaceAll=function(E,b){var D,I;E!==null&&x.document_adopt(E,b._nodeDocument);var P=Array.from(b._children),O=[];E&&E._nodeType===f.NodeType.DocumentFragment?O=Array.from(E._children):E!==null&&O.push(E);try{for(var A=o(P),V=A.next();!V.done;V=A.next())_(V.value,b,!0)}catch(G){D={error:G}}finally{try{V&&!V.done&&(I=A.return)&&I.call(A)}finally{if(D)throw D.error}}E!==null&&T(E,b,null,!0),c.dom.features.mutationObservers&&m.observer_queueTreeMutationRecord(b,O,P,null,null)},n.mutation_preRemove=function(E,b){if(E._parent!==b)throw new l.NotFoundError("The child node cannot be found under parent node. Child node is "+E.nodeName+", parent node is "+b.nodeName+".");return _(E,b),E},n.mutation_remove=_},function(r,n,i){function o(a){return a==null}r.exports.isNothing=o,r.exports.isObject=function(a){return typeof a=="object"&&a!==null},r.exports.toArray=function(a){return Array.isArray(a)?a:o(a)?[]:[a]},r.exports.repeat=function(a,s){var c,l="";for(c=0;c0?o:i)(a)}},function(r,n,i){var o=i(8);r.exports=function(a,s){var c=[][a];return!!c&&o(function(){c.call(null,s||function(){throw 1},1)})}},function(r,n){r.exports={}},function(r,n,i){i(31),i(32),i(33),i(220),i(64),i(19),i(65),i(20),i(68),i(66),i(92),i(144),i(22),i(94),i(23);var o=this&&this.__values||function(g){var p=typeof Symbol=="function"&&Symbol.iterator,v=p&&g[p],y=0;if(v)return v.call(g);if(g&&typeof g.length=="number")return{next:function(){return g&&y>=g.length&&(g=void 0),{value:g&&g[y++],done:!g}}};throw new TypeError(p?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(g,p){var v=typeof Symbol=="function"&&g[Symbol.iterator];if(!v)return g;var y,m,w=v.call(g),x=[];try{for(;(p===void 0||p-- >0)&&!(y=w.next()).done;)x.push(y.value)}catch(C){m={error:C}}finally{try{y&&!y.done&&(v=w.return)&&v.call(w)}finally{if(m)throw m.error}}return x},s=this&&this.__spread||function(){for(var g=[],p=0;p/g,">");this.text(y)},g.prototype._serializeDocumentFragmentNS=function(p,v,y,m,w){var x,C;try{for(var S=o(p.childNodes),T=S.next();!T.done;T=S.next()){var _=T.value;this._serializeNodeNS(_,v,y,m,w)}}catch(E){x={error:E}}finally{try{T&&!T.done&&(C=S.return)&&C.call(S)}finally{if(x)throw x.error}}},g.prototype._serializeDocumentFragment=function(p,v){var y,m;try{for(var w=o(p._children),x=w.next();!x.done;x=w.next()){var C=x.value;this._serializeNode(C,v)}}catch(S){y={error:S}}finally{try{x&&!x.done&&(m=w.return)&&m.call(w)}finally{if(y)throw y.error}}},g.prototype._serializeDocumentType=function(p,v){if(v&&!d.xml_isPubidChar(p.publicId))throw new Error("DocType public identifier does not match PubidChar construct (well-formed required).");if(v&&(!d.xml_isLegalChar(p.systemId)||p.systemId.indexOf('"')!==-1&&p.systemId.indexOf("'")!==-1))throw new Error("DocType system identifier contains invalid characters (well-formed required).");this.docType(p.name,p.publicId,p.systemId)},g.prototype._serializeProcessingInstruction=function(p,v){if(v&&(p.target.indexOf(":")!==-1||/^xml$/i.test(p.target)))throw new Error("Processing instruction target contains invalid characters (well-formed required).");if(v&&(!d.xml_isLegalChar(p.data)||p.data.indexOf("?>")!==-1))throw new Error("Processing instruction data contains invalid characters (well-formed required).");this.instruction(p.target,p.data)},g.prototype._serializeCData=function(p,v){if(v&&p.data.indexOf("]]>")!==-1)throw new Error("CDATA contains invalid characters (well-formed required).");this.cdata(p.data)},g.prototype._serializeAttributesNS=function(p,v,y,m,w,x){var C,S,T=[],_=x?new l.LocalNameSet:void 0;try{for(var E=o(p.attributes),b=E.next();!b.done;b=E.next()){var D=b.value;if(x||w||D.namespaceURI!==null){if(x&&_&&_.has(D.namespaceURI,D.localName))throw new Error("Element contains duplicate attributes (well-formed required).");x&&_&&_.set(D.namespaceURI,D.localName);var I=D.namespaceURI,P=null;if(I!==null)if(P=v.get(D.prefix,I),I===u.namespace.XMLNS){if(D.value===u.namespace.XML||D.prefix===null&&w||D.prefix!==null&&(!(D.localName in m)||m[D.localName]!==D.value)&&v.has(D.localName,D.value))continue;if(x&&D.value===u.namespace.XMLNS)throw new Error("XMLNS namespace is reserved (well-formed required).");if(x&&D.value==="")throw new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required).");D.prefix==="xmlns"&&(P="xmlns")}else P===null&&(P=D.prefix===null||v.hasPrefix(D.prefix)&&!v.has(D.prefix,I)?this._generatePrefix(I,v,y):D.prefix,T.push([null,"xmlns",P,this._serializeAttributeValue(I,x)]));if(x&&(D.localName.indexOf(":")!==-1||!d.xml_isName(D.localName)||D.localName==="xmlns"&&I===null))throw new Error("Attribute local name contains invalid characters (well-formed required).");T.push([I,P,D.localName,this._serializeAttributeValue(D.value,x)])}else T.push([null,null,D.localName,this._serializeAttributeValue(D.value,x)])}}catch(O){C={error:O}}finally{try{b&&!b.done&&(S=E.return)&&S.call(E)}finally{if(C)throw C.error}}return T},g.prototype._serializeAttributes=function(p,v){var y,m,w=[],x=v?{}:void 0;try{for(var C=o(p.attributes),S=C.next();!S.done;S=C.next()){var T=S.value;if(v){if(v&&x&&T.localName in x)throw new Error("Element contains duplicate attributes (well-formed required).");if(v&&x&&(x[T.localName]=!0),v&&(T.localName.indexOf(":")!==-1||!d.xml_isName(T.localName)))throw new Error("Attribute local name contains invalid characters (well-formed required).");w.push([null,null,T.localName,this._serializeAttributeValue(T.value,v)])}else w.push([null,null,T.localName,this._serializeAttributeValue(T.value,v)])}}catch(_){y={error:_}}finally{try{S&&!S.done&&(m=C.return)&&m.call(C)}finally{if(y)throw y.error}}return w},g.prototype._recordNamespaceInformation=function(p,v,y){var m,w,x=null;try{for(var C=o(p.attributes),S=C.next();!S.done;S=C.next()){var T=S.value,_=T.namespaceURI,E=T.prefix;if(_===u.namespace.XMLNS){if(E===null){x=T.value;continue}var b=T.localName,D=T.value;if(D===u.namespace.XML||(D===""&&(D=null),v.has(b,D)))continue;v.set(b,D),y[b]=D||""}}}catch(I){m={error:I}}finally{try{S&&!S.done&&(w=C.return)&&w.call(C)}finally{if(m)throw m.error}}return x},g.prototype._generatePrefix=function(p,v,y){var m="ns"+y.value.toString();return y.value++,v.set(m,p),m},g.prototype._serializeAttributeValue=function(p,v){if(v&&p!==null&&!d.xml_isLegalChar(p))throw new Error("Invalid characters in attribute value.");return p===null?"":p.replace(/(?!&([^&;]*);)&/g,"&").replace(//g,">").replace(/"/g,""")},g._VoidElementNames=new Set(["area","base","basefont","bgsound","br","col","embed","frame","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"]),g}();n.BaseWriter=h},function(r,n,i){var o=this&&this.__values||function(v){var y=typeof Symbol=="function"&&Symbol.iterator,m=y&&v[y],w=0;if(m)return m.call(v);if(v&&typeof v.length=="number")return{next:function(){return v&&w>=v.length&&(v=void 0),{value:v&&v[w++],done:!v}}};throw new TypeError(y?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(v,y){var m=typeof Symbol=="function"&&v[Symbol.iterator];if(!m)return v;var w,x,C=m.call(v),S=[];try{for(;(y===void 0||y-- >0)&&!(w=C.next()).done;)S.push(w.value)}catch(T){x={error:T}}finally{try{w&&!w.done&&(m=C.return)&&m.call(C)}finally{if(x)throw x.error}}return S};Object.defineProperty(n,"__esModule",{value:!0});var s=i(6),c=i(3),l=i(7),f=i(29),u=i(17),d=i(97);function h(){var v=s.dom.window;v._mutationObserverMicrotaskQueued||(v._mutationObserverMicrotaskQueued=!0,Promise.resolve().then(function(){g()}))}function g(){var v,y,m,w,x=s.dom.window;x._mutationObserverMicrotaskQueued=!1;var C=l.set.clone(x._mutationObservers),S=l.set.clone(x._signalSlots);l.set.empty(x._signalSlots);var T=function(P){var O=l.list.clone(P._recordQueue);l.list.empty(P._recordQueue);for(var A=0;A"+y+"<\/script>"},v=function(){try{o=document.domain&&new ActiveXObject("htmlfile")}catch{}var y,m;v=o?function(x){x.write(p("")),x.close();var C=x.parentWindow.Object;return x=null,C}(o):((m=u("iframe")).style.display="none",f.appendChild(m),m.src="javascript:",(y=m.contentWindow.document).open(),y.write(p("document.F=Object")),y.close(),y.F);for(var w=c.length;w--;)delete v.prototype[c[w]];return v()};l[h]=!0,r.exports=Object.create||function(y,m){var w;return y!==null?(g.prototype=a(y),w=new g,g.prototype=null,w[h]=y):w=v(),m===void 0?w:s(w,m)}},function(r,n,i){var o=i(121),a=i(84);r.exports=Object.keys||function(s){return o(s,a)}},function(r,n,i){var o=i(15).f,a=i(14),s=i(5)("toStringTag");r.exports=function(c,l,f){c&&!a(c=f?c:c.prototype,s)&&o(c,s,{configurable:!0,value:l})}},function(r,n,i){var o=i(8),a=i(5),s=i(129),c=a("species");r.exports=function(l){return s>=51||!o(function(){var f=[];return(f.constructor={})[c]=function(){return{foo:1}},f[l](Boolean).foo!==1})}},function(r,n,i){var o=i(4),a=i(122).indexOf,s=i(48),c=i(28),l=[].indexOf,f=!!l&&1/[1].indexOf(1,-0)<0,u=s("indexOf"),d=c("indexOf",{ACCESSORS:!0,1:0});o({target:"Array",proto:!0,forced:f||!u||!d},{indexOf:function(h){return f?l.apply(this,arguments)||0:a(this,h,arguments.length>1?arguments[1]:void 0)}})},function(r,n,i){var o=i(16),a=i(15).f,s=Function.prototype,c=s.toString,l=/^\s*function ([^ (]*)/;o&&!("name"in s)&&a(s,"name",{configurable:!0,get:function(){try{return c.call(this).match(l)[1]}catch{return""}}})},function(r,n,i){var o=i(25),a=i(18),s=i(8),c=i(136),l=RegExp.prototype,f=l.toString,u=s(function(){return f.call({source:"a",flags:"b"})!="/a/b"}),d=f.name!="toString";(u||d)&&o(RegExp.prototype,"toString",function(){var h=a(this),g=String(h.source),p=h.flags;return"/"+g+"/"+String(p===void 0&&h instanceof RegExp&&!("flags"in l)?c.call(h):p)},{unsafe:!0})},function(r,n,i){i(31),i(32),i(33),i(19),i(138),i(20),i(66),i(22),i(23);var o,a=this&&this.__extends||(o=function(u,d){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(h,g){h.__proto__=g}||function(h,g){for(var p in g)g.hasOwnProperty(p)&&(h[p]=g[p])})(u,d)},function(u,d){function h(){this.constructor=u}o(u,d),u.prototype=d===null?Object.create(d):(h.prototype=d.prototype,new h)}),s=this&&this.__values||function(u){var d=typeof Symbol=="function"&&Symbol.iterator,h=d&&u[d],g=0;if(h)return h.call(u);if(u&&typeof u.length=="number")return{next:function(){return u&&g>=u.length&&(u=void 0),{value:u&&u[g++],done:!u}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var c=i(1),l=i(2),f=function(u){function d(h,g){var p=u.call(this,h)||this;return p._writerOptions=c.applyDefaults(g,{format:"object",wellFormed:!1,group:!1,verbose:!1}),p}return a(d,u),d.prototype.serialize=function(h){return this._currentList=[],this._currentIndex=0,this._listRegister=[this._currentList],this.serializeNode(h,this._writerOptions.wellFormed),this._process(this._currentList,this._writerOptions)},d.prototype._process=function(h,g){var p,v,y,m,w,x,C;if(h.length===0)return{};for(var S={},T=!1,_=0,E=0,b=0,D=0,I=0;I2)try{for(var C=s(h),S=C.next();!S.done;S=C.next()){var T=S.value;g[v+(m++).toString()]=T}}catch(_){w={error:_}}finally{try{S&&!S.done&&(x=C.return)&&x.call(C)}finally{if(w)throw w.error}}else g[y>1?v+(m++).toString():v]=h;return m},d.prototype.beginElement=function(h){var g,p,v=[];if(this._currentList.length===0)this._currentList.push(((g={})[h]=v,g));else{var y=this._currentList[this._currentList.length-1];this._isElementNode(y,h)?y[h].length!==0&&c.isArray(y[h][0])?y[h].push(v):y[h]=[y[h],v]:this._currentList.push(((p={})[h]=v,p))}this._currentIndex++,this._listRegister.length>this._currentIndex?this._listRegister[this._currentIndex]=v:this._listRegister.push(v),this._currentList=v},d.prototype.endElement=function(){this._currentList=this._listRegister[--this._currentIndex]},d.prototype.attribute=function(h,g){var p,v;if(this._currentList.length===0)this._currentList.push({"@":(p={},p[h]=g,p)});else{var y=this._currentList[this._currentList.length-1];this._isAttrNode(y)?y["@"][h]=g:this._currentList.push({"@":(v={},v[h]=g,v)})}},d.prototype.comment=function(h){if(this._currentList.length===0)this._currentList.push({"!":h});else{var g=this._currentList[this._currentList.length-1];this._isCommentNode(g)?c.isArray(g["!"])?g["!"].push(h):g["!"]=[g["!"],h]:this._currentList.push({"!":h})}},d.prototype.text=function(h){if(this._currentList.length===0)this._currentList.push({"#":h});else{var g=this._currentList[this._currentList.length-1];this._isTextNode(g)?c.isArray(g["#"])?g["#"].push(h):g["#"]=[g["#"],h]:this._currentList.push({"#":h})}},d.prototype.instruction=function(h,g){var p=g===""?h:h+" "+g;if(this._currentList.length===0)this._currentList.push({"?":p});else{var v=this._currentList[this._currentList.length-1];this._isInstructionNode(v)?c.isArray(v["?"])?v["?"].push(p):v["?"]=[v["?"],p]:this._currentList.push({"?":p})}},d.prototype.cdata=function(h){if(this._currentList.length===0)this._currentList.push({$:h});else{var g=this._currentList[this._currentList.length-1];this._isCDATANode(g)?c.isArray(g.$)?g.$.push(h):g.$=[g.$,h]:this._currentList.push({$:h})}},d.prototype._isAttrNode=function(h){return"@"in h},d.prototype._isTextNode=function(h){return"#"in h},d.prototype._isCommentNode=function(h){return"!"in h},d.prototype._isInstructionNode=function(h){return"?"in h},d.prototype._isCDATANode=function(h){return"$"in h},d.prototype._isElementNode=function(h,g){return g in h},d.prototype._getAttrKey=function(){return this._builderOptions.convert.att},d.prototype._getNodeKey=function(h){switch(h){case l.NodeType.Comment:return this._builderOptions.convert.comment;case l.NodeType.Text:return this._builderOptions.convert.text;case l.NodeType.ProcessingInstruction:return this._builderOptions.convert.ins;case l.NodeType.CData:return this._builderOptions.convert.cdata;default:throw new Error("Invalid node type.")}},d}(i(50).BaseWriter);n.ObjectWriter=f},function(r,n,i){var o=i(4),a=i(93);o({target:"RegExp",proto:!0,forced:/./.exec!==a},{exec:a})},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function a(){this._items={},this._nullItems={}}return a.prototype.set=function(s,c){s===null?this._nullItems[c]=!0:(this._items[s]||(this._items[s]={}),this._items[s][c]=!0)},a.prototype.has=function(s,c){return s===null?this._nullItems[c]===!0:!!this._items[s]&&this._items[s][c]===!0},a}();n.LocalNameSet=o},function(r,n,i){var o=this&&this.__read||function(f,u){var d=typeof Symbol=="function"&&f[Symbol.iterator];if(!d)return f;var h,g,p=d.call(f),v=[];try{for(;(u===void 0||u-- >0)&&!(h=p.next()).done;)v.push(h.value)}catch(y){g={error:y}}finally{try{h&&!h.done&&(d=p.return)&&d.call(p)}finally{if(g)throw g.error}}return v};Object.defineProperty(n,"__esModule",{value:!0});var a=i(9),s=i(3),c=i(0),l=function(){function f(){}return Object.defineProperty(f.prototype,"_eventListenerList",{get:function(){return this.__eventListenerList||(this.__eventListenerList=[])},enumerable:!0,configurable:!0}),Object.defineProperty(f.prototype,"_eventHandlerMap",{get:function(){return this.__eventHandlerMap||(this.__eventHandlerMap={})},enumerable:!0,configurable:!0}),f.prototype.addEventListener=function(u,d,h){h===void 0&&(h={passive:!1,once:!1,capture:!1});var g,p=o(c.eventTarget_flattenMore(h),3),v=p[0],y=p[1],m=p[2];d&&(g=s.Guard.isEventListener(d)?d:{handleEvent:d},c.eventTarget_addEventListener(this,{type:u,callback:g,capture:v,passive:y,once:m,removed:!1}))},f.prototype.removeEventListener=function(u,d,h){h===void 0&&(h={capture:!1});var g=c.eventTarget_flatten(h);if(d)for(var p=0;p=y.length&&(y=void 0),{value:y&&y[x++],done:!y}}};throw new TypeError(m?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(y,m){var w=typeof Symbol=="function"&&y[Symbol.iterator];if(!w)return y;var x,C,S=w.call(y),T=[];try{for(;(m===void 0||m-- >0)&&!(x=S.next()).done;)T.push(x.value)}catch(_){C={error:_}}finally{try{x&&!x.done&&(w=S.return)&&w.call(S)}finally{if(C)throw C.error}}return T},s=this&&this.__spread||function(){for(var y=[],m=0;m",amp:"&",quot:'"',apos:"'"},s}();n.BaseReader=a},function(r,n,i){var o=i(39);r.exports=o.DEFAULT=new o({include:[i(54)],explicit:[i(299),i(300),i(301)]})},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(185);n.XMLBuilderImpl=o.XMLBuilderImpl;var a=i(304);n.XMLBuilderCBImpl=a.XMLBuilderCBImpl;var s=i(183);n.builder=s.builder,n.create=s.create,n.fragment=s.fragment,n.convert=s.convert;var c=i(309);n.createCB=c.createCB,n.fragmentCB=c.fragmentCB},function(r,n){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch{typeof window=="object"&&(i=window)}r.exports=i},function(r,n,i){var o={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,s=a&&!o.call({1:2},1);n.f=s?function(c){var l=a(this,c);return!!l&&l.enumerable}:o},function(r,n,i){var o=i(11),a=i(21);r.exports=function(s,c){try{a(o,s,c)}catch{o[s]=c}return c}},function(r,n,i){var o=i(44),a=i(118);(r.exports=function(s,c){return a[s]||(a[s]=c!==void 0?c:{})})("versions",[]).push({version:"3.6.5",mode:o?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},function(r,n,i){var o=i(121),a=i(84).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(s){return o(s,a)}},function(r,n,i){var o=i(47),a=Math.max,s=Math.min;r.exports=function(c,l){var f=o(c);return f<0?a(f+l,0):s(f,l)}},function(r,n){r.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(r,n){n.f=Object.getOwnPropertySymbols},function(r,n,i){var o=i(8);r.exports=!!Object.getOwnPropertySymbols&&!o(function(){return!String(Symbol())})},function(r,n,i){var o=i(127);r.exports=function(a,s,c){if(o(a),s===void 0)return a;switch(c){case 0:return function(){return a.call(s)};case 1:return function(l){return a.call(s,l)};case 2:return function(l,f){return a.call(s,l,f)};case 3:return function(l,f,u){return a.call(s,l,f,u)}}return function(){return a.apply(s,arguments)}}},function(r,n,i){var o=i(4),a=i(195),s=i(132),c=i(133),l=i(62),f=i(21),u=i(25),d=i(5),h=i(44),g=i(49),p=i(131),v=p.IteratorPrototype,y=p.BUGGY_SAFARI_ITERATORS,m=d("iterator"),w=function(){return this};r.exports=function(x,C,S,T,_,E,b){a(S,C,T);var D,I,P,O=function(j){if(j===_&&N)return N;if(!y&&j in G)return G[j];switch(j){case"keys":case"values":case"entries":return function(){return new S(this,j)}}return function(){return new S(this)}},A=C+" Iterator",V=!1,G=x.prototype,R=G[m]||G["@@iterator"]||_&&G[_],N=!y&&R||O(_),F=C=="Array"&&G.entries||R;if(F&&(D=s(F.call(new x)),v!==Object.prototype&&D.next&&(h||s(D)===v||(c?c(D,v):typeof D[m]!="function"&&f(D,m,w)),l(D,A,!0,!0),h&&(g[A]=w))),_=="values"&&R&&R.name!=="values"&&(V=!0,N=function(){return R.call(this)}),h&&!b||G[m]===N||f(G,m,N),g[C]=N,_)if(I={values:O("values"),keys:E?N:O("keys"),entries:O("entries")},b)for(P in I)(y||V||!(P in G))&&u(G,P,I[P]);else o({target:C,proto:!0,forced:y||V},I);return I}},function(r,n,i){var o=i(4),a=i(13),s=i(59),c=i(83),l=i(26),f=i(24),u=i(134),d=i(5),h=i(63),g=i(28),p=h("slice"),v=g("slice",{ACCESSORS:!0,0:0,1:2}),y=d("species"),m=[].slice,w=Math.max;o({target:"Array",proto:!0,forced:!p||!v},{slice:function(x,C){var S,T,_,E=f(this),b=l(E.length),D=c(x,b),I=c(C===void 0?b:C,b);if(s(E)&&(typeof(S=E.constructor)!="function"||S!==Array&&!s(S.prototype)?a(S)&&(S=S[y])===null&&(S=void 0):S=void 0,S===Array||S===void 0))return m.call(E,D,I);for(T=new(S===void 0?Array:S)(w(I-D,0)),_=0;D0&&(!x.multiline||x.multiline&&p[x.lastIndex-1]!==` `)&&(T="(?: "+T+")",E=" "+E,_++),y=new RegExp("^(?:"+T+")",S)),g&&(y=new RegExp("^"+T+"$(?!\\s)",S)),d&&(v=x.lastIndex),m=l.call(C?y:x,E),C?m?(m.input=m.input.slice(_),m[0]=m[0].slice(_),m.index=x.lastIndex,x.lastIndex+=m[0].length):x.lastIndex=0:d&&m&&(x.lastIndex=x.global?m.index+m[0].length:v),g&&m&&m.length>1&&f.call(m[0],y,function(){for(w=1;w]*>)/g,y=/\$([$&'`]|\d\d?)/g;o("replace",2,function(m,w,x,C){var S=C.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,T=C.REPLACE_KEEPS_$0,_=S?"$":"$0";return[function(b,D){var I=f(this),P=b==null?void 0:b[m];return P!==void 0?P.call(b,I,D):w.call(String(I),b,D)},function(b,D){if(!S&&T||typeof D=="string"&&D.indexOf(_)===-1){var I=x(w,b,this,D);if(I.done)return I.value}var P=a(b),O=String(this),A=typeof D=="function";A||(D=String(D));var V=P.global;if(V){var G=P.unicode;P.lastIndex=0}for(var R=[];;){var N=d(P,O);if(N===null||(R.push(N),!V))break;String(N[0])===""&&(P.lastIndex=u(O,c(P.lastIndex),G))}for(var F,j="",te=0,ie=0;ie=te&&(j+=O.slice(te,ue)+B,te=ue+he.length)}return j+O.slice(te)}];function E(b,D,I,P,O,A){var V=I+b.length,G=P.length,R=y;return O!==void 0&&(O=s(O),R=v),w.call(A,R,function(N,F){var j;switch(F.charAt(0)){case"$":return"$";case"&":return b;case"`":return D.slice(0,I);case"'":return D.slice(V);case"<":j=O[F.slice(1,-1)];break;default:var te=+F;if(te===0)return N;if(te>G){var ie=p(te/10);return ie===0?N:ie<=G?P[ie-1]===void 0?F.charAt(1):P[ie-1]+F.charAt(1):N}j=P[te-1]}return j===void 0?"":j})}})},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function a(){this._items={},this._nullItems=[]}return a.prototype.copy=function(){var s=new a;for(var c in this._items)s._items[c]=this._items[c].slice(0);return s._nullItems=this._nullItems.slice(0),s},a.prototype.get=function(s,c){var l=c===null?this._nullItems:this._items[c]||null;if(l===null)return null;for(var f=null,u=0;u=D.length&&(D=void 0),{value:D&&D[O++],done:!D}}};throw new TypeError(I?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(D,I){var P=typeof Symbol=="function"&&D[Symbol.iterator];if(!P)return D;var O,A,V=P.call(D),G=[];try{for(;(I===void 0||I-- >0)&&!(O=V.next()).done;)G.push(O.value)}catch(R){A={error:R}}finally{try{O&&!O.done&&(P=V.return)&&P.call(V)}finally{if(A)throw A.error}}return G},s=this&&this.__spread||function(){for(var D=[],I=0;I=0;Se--)if((je=re[Se]).shadowAdjustedTarget!==null){ne=je;break}if(ne!==null)if(f.Guard.isNode(ne.shadowAdjustedTarget)&&f.Guard.isShadowRoot(g.tree_rootNode(ne.shadowAdjustedTarget,!0)))N=!0;else if(f.Guard.isNode(ne.relatedTarget)&&f.Guard.isShadowRoot(g.tree_rootNode(ne.relatedTarget,!0)))N=!0;else for(var Re=0;Re=0;Se--)(je=re[Se]).shadowAdjustedTarget!==null?D._eventPhase=l.EventPhase.AtTarget:D._eventPhase=l.EventPhase.Capturing,C(je,D,"capturing",O);for(Se=0;Se0&&(R=A[V-1]).shadowAdjustedTarget!==null)&&(I._target=R.shadowAdjustedTarget)}if(I._relatedTarget=D.relatedTarget,I._touchTargetList=D.touchTargetList,!I._stopPropagationFlag){I._currentTarget=D.invocationTarget;var N=I._currentTarget._eventListenerList,F=new(Array.bind.apply(Array,s([void 0],N)));if(!S(I,F,P,D,O)&&I._isTrusted){var j=I._type;j==="animationend"?I._type="webkitAnimationEnd":j==="animationiteration"?I._type="webkitAnimationIteration":j==="animationstart"?I._type="webkitAnimationStart":j==="transitionend"&&(I._type="webkitTransitionEnd"),S(I,F,P,D,O),I._type=j}}}function S(D,I,P,O,A){A===void 0&&(A={value:!1});for(var V=!1,G=0;G=x.length&&(x=void 0),{value:x&&x[T++],done:!x}}};throw new TypeError(C?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(x,C){var S=typeof Symbol=="function"&&x[Symbol.iterator];if(!S)return x;var T,_,E=S.call(x),b=[];try{for(;(C===void 0||C-- >0)&&!(T=E.next()).done;)b.push(T.value)}catch(D){_={error:D}}finally{try{T&&!T.done&&(S=E.return)&&S.call(E)}finally{if(_)throw _.error}}return b};Object.defineProperty(n,"__esModule",{value:!0});var l=i(6),f=i(2),u=i(9),d=i(34),h=i(3),g=i(1),p=i(7),v=i(152),y=i(0),m=i(12),w=function(x){function C(){var S=x.call(this)||this;return S._children=new Set,S._encoding={name:"UTF-8",labels:["unicode-1-1-utf-8","utf-8","utf8"]},S._contentType="application/xml",S._URL={scheme:"about",username:"",password:"",host:null,port:null,path:["blank"],query:null,fragment:null,_cannotBeABaseURLFlag:!0,_blobURLEntry:null},S._origin=null,S._type="xml",S._mode="no-quirks",S._documentElement=null,S._hasNamespaces=!1,S._nodeDocumentOverwrite=null,S}return a(C,x),Object.defineProperty(C.prototype,"_nodeDocument",{get:function(){return this._nodeDocumentOverwrite||this},set:function(S){this._nodeDocumentOverwrite=S},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"implementation",{get:function(){return this._implementation||(this._implementation=y.create_domImplementation(this))},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"URL",{get:function(){return v.urlSerializer(this._URL)},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"documentURI",{get:function(){return this.URL},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"origin",{get:function(){return"null"},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"compatMode",{get:function(){return this._mode==="quirks"?"BackCompat":"CSS1Compat"},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"characterSet",{get:function(){return this._encoding.name},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"charset",{get:function(){return this._encoding.name},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"inputEncoding",{get:function(){return this._encoding.name},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"contentType",{get:function(){return this._contentType},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"doctype",{get:function(){var S,T;try{for(var _=s(this._children),E=_.next();!E.done;E=_.next()){var b=E.value;if(h.Guard.isDocumentTypeNode(b))return b}}catch(D){S={error:D}}finally{try{E&&!E.done&&(T=_.return)&&T.call(_)}finally{if(S)throw S.error}}return null},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"documentElement",{get:function(){return this._documentElement},enumerable:!0,configurable:!0}),C.prototype.getElementsByTagName=function(S){return y.node_listOfElementsWithQualifiedName(S,this)},C.prototype.getElementsByTagNameNS=function(S,T){return y.node_listOfElementsWithNamespace(S,T,this)},C.prototype.getElementsByClassName=function(S){return y.node_listOfElementsWithClassNames(S,this)},C.prototype.createElement=function(S,T){if(!y.xml_isName(S))throw new u.InvalidCharacterError;this._type==="html"&&(S=S.toLowerCase());var _=null;T!==void 0&&(_=g.isString(T)?T:T.is);var E=this._type==="html"||this._contentType==="application/xhtml+xml"?p.namespace.HTML:null;return y.element_createAnElement(this,S,E,null,_,!0)},C.prototype.createElementNS=function(S,T,_){return y.document_internalCreateElementNS(this,S,T,_)},C.prototype.createDocumentFragment=function(){return y.create_documentFragment(this)},C.prototype.createTextNode=function(S){return y.create_text(this,S)},C.prototype.createCDATASection=function(S){if(this._type==="html")throw new u.NotSupportedError;if(S.indexOf("]]>")!==-1)throw new u.InvalidCharacterError;return y.create_cdataSection(this,S)},C.prototype.createComment=function(S){return y.create_comment(this,S)},C.prototype.createProcessingInstruction=function(S,T){if(!y.xml_isName(S))throw new u.InvalidCharacterError;if(T.indexOf("?>")!==-1)throw new u.InvalidCharacterError;return y.create_processingInstruction(this,S,T)},C.prototype.importNode=function(S,T){if(T===void 0&&(T=!1),h.Guard.isDocumentNode(S)||h.Guard.isShadowRoot(S))throw new u.NotSupportedError;return y.node_clone(S,this,T)},C.prototype.adoptNode=function(S){if(h.Guard.isDocumentNode(S))throw new u.NotSupportedError;if(h.Guard.isShadowRoot(S))throw new u.HierarchyRequestError;return y.document_adopt(S,this),S},C.prototype.createAttribute=function(S){if(!y.xml_isName(S))throw new u.InvalidCharacterError;return this._type==="html"&&(S=S.toLowerCase()),y.create_attr(this,S)},C.prototype.createAttributeNS=function(S,T){var _=c(y.namespace_validateAndExtract(S,T),3),E=_[0],b=_[1],D=_[2],I=y.create_attr(this,D);return I._namespace=E,I._namespacePrefix=b,I},C.prototype.createEvent=function(S){return y.event_createLegacyEvent(S)},C.prototype.createRange=function(){var S=y.create_range();return S._start=[this,0],S._end=[this,0],S},C.prototype.createNodeIterator=function(S,T,_){T===void 0&&(T=f.WhatToShow.All),_===void 0&&(_=null);var E=y.create_nodeIterator(S,S,!0);return E._whatToShow=T,E._iteratorCollection=y.create_nodeList(S),g.isFunction(_)?(E._filter=y.create_nodeFilter(),E._filter.acceptNode=_):E._filter=_,E},C.prototype.createTreeWalker=function(S,T,_){T===void 0&&(T=f.WhatToShow.All),_===void 0&&(_=null);var E=y.create_treeWalker(S,S);return E._whatToShow=T,g.isFunction(_)?(E._filter=y.create_nodeFilter(),E._filter.acceptNode=_):E._filter=_,E},C.prototype._getTheParent=function(S){return S._type==="load"?null:l.dom.window},C.prototype.getElementById=function(S){throw new Error("Mixin: NonElementParentNode not implemented.")},Object.defineProperty(C.prototype,"children",{get:function(){throw new Error("Mixin: ParentNode not implemented.")},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"firstElementChild",{get:function(){throw new Error("Mixin: ParentNode not implemented.")},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"lastElementChild",{get:function(){throw new Error("Mixin: ParentNode not implemented.")},enumerable:!0,configurable:!0}),Object.defineProperty(C.prototype,"childElementCount",{get:function(){throw new Error("Mixin: ParentNode not implemented.")},enumerable:!0,configurable:!0}),C.prototype.prepend=function(){for(var S=[],T=0;T=v.length&&(v=void 0),{value:v&&v[w++],done:!v}}};throw new TypeError(y?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(v,y){var m=typeof Symbol=="function"&&v[Symbol.iterator];if(!m)return v;var w,x,C=m.call(v),S=[];try{for(;(y===void 0||y-- >0)&&!(w=C.next()).done;)S.push(w.value)}catch(T){x={error:T}}finally{try{w&&!w.done&&(m=C.return)&&m.call(C)}finally{if(x)throw x.error}}return S};Object.defineProperty(n,"__esModule",{value:!0});var l=i(2),f=i(34),u=i(9),d=i(7),h=i(0),g=i(12),p=function(v){function y(){var m=v.call(this)||this;return m._children=new Set,m._namespace=null,m._namespacePrefix=null,m._localName="",m._customElementState="undefined",m._customElementDefinition=null,m._is=null,m._shadowRoot=null,m._attributeList=h.create_namedNodeMap(m),m._attributeChangeSteps=[],m._name="",m._assignedSlot=null,m}return a(y,v),Object.defineProperty(y.prototype,"namespaceURI",{get:function(){return this._namespace},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"prefix",{get:function(){return this._namespacePrefix},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"localName",{get:function(){return this._localName},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"tagName",{get:function(){return this._htmlUppercasedQualifiedName},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"id",{get:function(){return h.element_getAnAttributeValue(this,"id")},set:function(m){h.element_setAnAttributeValue(this,"id",m)},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"className",{get:function(){return h.element_getAnAttributeValue(this,"class")},set:function(m){h.element_setAnAttributeValue(this,"class",m)},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"classList",{get:function(){var m=h.element_getAnAttributeByName("class",this);return m===null&&(m=h.create_attr(this._nodeDocument,"class")),h.create_domTokenList(this,m)},enumerable:!0,configurable:!0}),Object.defineProperty(y.prototype,"slot",{get:function(){return h.element_getAnAttributeValue(this,"slot")},set:function(m){h.element_setAnAttributeValue(this,"slot",m)},enumerable:!0,configurable:!0}),y.prototype.hasAttributes=function(){return this._attributeList.length!==0},Object.defineProperty(y.prototype,"attributes",{get:function(){return this._attributeList},enumerable:!0,configurable:!0}),y.prototype.getAttributeNames=function(){var m,w,x=[];try{for(var C=s(this._attributeList),S=C.next();!S.done;S=C.next()){var T=S.value;x.push(T._qualifiedName)}}catch(_){m={error:_}}finally{try{S&&!S.done&&(w=C.return)&&w.call(C)}finally{if(m)throw m.error}}return x},y.prototype.getAttribute=function(m){var w=h.element_getAnAttributeByName(m,this);return w?w._value:null},y.prototype.getAttributeNS=function(m,w){var x=h.element_getAnAttributeByNamespaceAndLocalName(m,w,this);return x?x._value:null},y.prototype.setAttribute=function(m,w){if(!h.xml_isName(m))throw new u.InvalidCharacterError;this._namespace===d.namespace.HTML&&this._nodeDocument._type==="html"&&(m=m.toLowerCase());for(var x=null,C=0;C=h.length&&(h=void 0),{value:h&&h[v++],done:!h}}};throw new TypeError(g?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var c=i(2),l=i(71),f=i(0),u=i(12),d=function(h){function g(p){p===void 0&&(p="");var v=h.call(this,p)||this;return v._name="",v._assignedSlot=null,v}return a(g,h),Object.defineProperty(g.prototype,"wholeText",{get:function(){var p,v,y="";try{for(var m=s(f.text_contiguousTextNodes(this,!0)),w=m.next();!w.done;w=m.next())y+=w.value._data}catch(x){p={error:x}}finally{try{w&&!w.done&&(v=m.return)&&v.call(m)}finally{if(p)throw p.error}}return y},enumerable:!0,configurable:!0}),g.prototype.splitText=function(p){return f.text_split(this,p)},Object.defineProperty(g.prototype,"assignedSlot",{get:function(){throw new Error("Mixin: Slotable not implemented.")},enumerable:!0,configurable:!0}),g._create=function(p,v){v===void 0&&(v="");var y=new g(v);return y._nodeDocument=p,y},g}(l.CharacterDataImpl);n.TextImpl=d,u.idl_defineConst(d.prototype,"_nodeType",c.NodeType.Text)},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function a(){}return Object.defineProperty(a.prototype,"_startNode",{get:function(){return this._start[0]},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"_startOffset",{get:function(){return this._start[1]},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"_endNode",{get:function(){return this._end[0]},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"_endOffset",{get:function(){return this._end[1]},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"_collapsed",{get:function(){return this._start[0]===this._end[0]&&this._start[1]===this._end[1]},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"startContainer",{get:function(){return this._startNode},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"startOffset",{get:function(){return this._startOffset},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"endContainer",{get:function(){return this._endNode},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"endOffset",{get:function(){return this._endOffset},enumerable:!0,configurable:!0}),Object.defineProperty(a.prototype,"collapsed",{get:function(){return this._collapsed},enumerable:!0,configurable:!0}),a}();n.AbstractRangeImpl=o},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(2),a=function(){function s(c){this._activeFlag=!1,this._root=c,this._whatToShow=o.WhatToShow.All,this._filter=null}return Object.defineProperty(s.prototype,"root",{get:function(){return this._root},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"whatToShow",{get:function(){return this._whatToShow},enumerable:!0,configurable:!0}),Object.defineProperty(s.prototype,"filter",{get:function(){return this._filter},enumerable:!0,configurable:!0}),s}();n.TraverserImpl=a},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(2),a=i(0),s=i(12),c=function(){function l(f,u){this._target=null,this._relatedTarget=null,this._touchTargetList=[],this._path=[],this._currentTarget=null,this._eventPhase=o.EventPhase.None,this._stopPropagationFlag=!1,this._stopImmediatePropagationFlag=!1,this._canceledFlag=!1,this._inPassiveListenerFlag=!1,this._composedFlag=!1,this._initializedFlag=!1,this._dispatchFlag=!1,this._isTrusted=!1,this._bubbles=!1,this._cancelable=!1,this._type=f,u&&(this._bubbles=u.bubbles||!1,this._cancelable=u.cancelable||!1,this._composedFlag=u.composed||!1),this._initializedFlag=!0,this._timeStamp=new Date().getTime()}return Object.defineProperty(l.prototype,"type",{get:function(){return this._type},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"target",{get:function(){return this._target},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"srcElement",{get:function(){return this._target},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"currentTarget",{get:function(){return this._currentTarget},enumerable:!0,configurable:!0}),l.prototype.composedPath=function(){var f=[],u=this._path;if(u.length===0)return f;var d=this._currentTarget;if(d===null)throw new Error("Event currentTarget is null.");f.push(d);for(var h=0,g=0,p=u.length-1;p>=0;){if(u[p].rootOfClosedTree&&g++,u[p].invocationTarget===d){h=p;break}u[p].slotInClosedTree&&g--,p--}var v=g,y=g;for(p=h-1;p>=0;)u[p].rootOfClosedTree&&v++,v<=y&&f.unshift(u[p].invocationTarget),u[p].slotInClosedTree&&--v0)&&!(x=S.next()).done;)T.push(x.value)}catch(_){C={error:_}}finally{try{x&&!x.done&&(w=S.return)&&w.call(S)}finally{if(C)throw C.error}}return T},a=this&&this.__values||function(y){var m=typeof Symbol=="function"&&Symbol.iterator,w=m&&y[m],x=0;if(w)return w.call(y);if(y&&typeof y.length=="number")return{next:function(){return y&&x>=y.length&&(y=void 0),{value:y&&y[x++],done:!y}}};throw new TypeError(m?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var s=i(6),c=i(3),l=i(1),f=i(99),u=i(73),d=i(17),h=i(173),g=i(30),p=i(52),v=i(37);n.document_elementInterface=function(y,m){return f.ElementImpl},n.document_internalCreateElementNS=function(y,m,w,x){var C=o(h.namespace_validateAndExtract(m,w),3),S=C[0],T=C[1],_=C[2],E=null;return x!==void 0&&(E=l.isString(x)?x:x.is),p.element_createAnElement(y,_,S,T,E,!0)},n.document_adopt=function(y,m){var w,x;if(y._nodeDocument!==m||y._parent!==null){var C=y._nodeDocument;if(y._parent&&v.mutation_remove(y,y._parent),m!==C)for(var S=d.tree_getFirstDescendantNode(y,!0,!0);S!==null;){if(S._nodeDocument=m,c.Guard.isElementNode(S))try{for(var T=(w=void 0,a(S._attributeList._asArray())),_=T.next();!_.done;_=T.next())_.value._nodeDocument=m}catch(E){w={error:E}}finally{try{_&&!_.done&&(x=T.return)&&x.call(T)}finally{if(w)throw w.error}}s.dom.features.customElements&&c.Guard.isElementNode(S)&&S._customElementState==="custom"&&u.customElement_enqueueACustomElementCallbackReaction(S,"adoptedCallback",[C,m]),s.dom.features.steps&&g.dom_runAdoptingSteps(S,C),S=d.tree_getNextDescendantNode(y,S,!0,!0)}}}},function(r,n,i){var o=this&&this.__values||function(d){var h=typeof Symbol=="function"&&Symbol.iterator,g=h&&d[h],p=0;if(g)return g.call(d);if(d&&typeof d.length=="number")return{next:function(){return d&&p>=d.length&&(d=void 0),{value:d&&d[p++],done:!d}}};throw new TypeError(h?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var a=i(6),s=i(3),c=i(9),l=i(17),f=i(51),u=i(30);n.characterData_replaceData=function(d,h,g,p){var v,y,m=l.tree_nodeLength(d);if(h>m)throw new c.IndexSizeError("Offset exceeds character data length. Offset: "+h+", Length: "+m+", Node is "+d.nodeName+".");h+g>m&&(g=m-h),a.dom.features.mutationObservers&&f.observer_queueMutationRecord("characterData",d,null,null,d._data,[],[],null,null);var w=d._data.substring(0,h)+p+d._data.substring(h+g);d._data=w;try{for(var x=o(a.dom.rangeList),C=x.next();!C.done;C=x.next()){var S=C.value;S._start[0]===d&&S._start[1]>h&&S._start[1]<=h+g&&(S._start[1]=h),S._end[0]===d&&S._end[1]>h&&S._end[1]<=h+g&&(S._end[1]=h),S._start[0]===d&&S._start[1]>h+g&&(S._start[1]+=p.length-g),S._end[0]===d&&S._end[1]>h+g&&(S._end[1]+=p.length-g)}}catch(T){v={error:T}}finally{try{C&&!C.done&&(y=x.return)&&y.call(x)}finally{if(v)throw v.error}}a.dom.features.steps&&s.Guard.isTextNode(d)&&d._parent!==null&&u.dom_runChildTextContentChangeSteps(d._parent)},n.characterData_substringData=function(d,h,g){var p=l.tree_nodeLength(d);if(h>p)throw new c.IndexSizeError("Offset exceeds character data length. Offset: "+h+", Length: "+p+", Node is "+d.nodeName+".");return h+g>p?d._data.substr(h):d._data.substr(h,g)}},function(r,n,i){var o=this&&this.__read||function(u,d){var h=typeof Symbol=="function"&&u[Symbol.iterator];if(!h)return u;var g,p,v=h.call(u),y=[];try{for(;(d===void 0||d-- >0)&&!(g=v.next()).done;)y.push(g.value)}catch(m){p={error:m}}finally{try{g&&!g.done&&(h=v.return)&&h.call(v)}finally{if(p)throw p.error}}return y},a=this&&this.__spread||function(){for(var u=[],d=0;d=u.length&&(u=void 0),{value:u&&u[g++],done:!u}}};throw new TypeError(d?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(n,"__esModule",{value:!0});var c=i(7);function l(u){var d=c.string.splitAStringOnASCIIWhitespace(u);return new Set(d)}function f(u){return a(u).join(" ")}n.orderedSet_parse=l,n.orderedSet_serialize=f,n.orderedSet_sanitize=function(u){return f(l(u))},n.orderedSet_contains=function(u,d,h){var g,p,v,y;try{for(var m=s(d),w=m.next();!w.done;w=m.next()){var x=w.value,C=!1;try{for(var S=(v=void 0,s(u)),T=S.next();!T.done;T=S.next()){var _=T.value;if(h){if(_===x){C=!0;break}}else if(_.toUpperCase()===x.toUpperCase()){C=!0;break}}}catch(E){v={error:E}}finally{try{T&&!T.done&&(y=S.return)&&y.call(S)}finally{if(v)throw v.error}}if(!C)return!1}}catch(E){g={error:E}}finally{try{w&&!w.done&&(p=m.return)&&p.call(m)}finally{if(g)throw g.error}}return!0}},function(r,n,i){i(179),Object.defineProperty(n,"__esModule",{value:!0});var o=i(262),a=i(110),s=i(1);a.dom.setFeatures(!1),n.createDocument=function(){var c=new o.DOMImplementation().createDocument(null,"root",null);return c.documentElement&&c.removeChild(c.documentElement),c},n.sanitizeInput=function(c,l){if(c==null)return c;if(l===void 0)return c+"";var f="";c+="";for(var u=0;u=32&&d<=55295||d>=57344&&d<=65533)f+=c.charAt(u);else if(d>=55296&&d<=56319&&u=56320&&h<=57343?(d=1024*(d-55296)+h-56320+65536,f+=String.fromCodePoint(d),u++):f+=s.isString(l)?l:l(c.charAt(u),u,c)}else f+=s.isString(l)?l:l(c.charAt(u),u,c)}return f}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(1),a=i(153);n.AbortController=a.AbortControllerImpl;var s=i(154);n.AbortSignal=s.AbortSignalImpl;var c=i(102);n.AbstractRange=c.AbstractRangeImpl;var l=i(157);n.Attr=l.AttrImpl;var f=i(158);n.CDATASection=f.CDATASectionImpl;var u=i(71);n.CharacterData=u.CharacterDataImpl;var d=i(263),h=i(159);n.Comment=h.CommentImpl;var g=i(171);n.CustomEvent=g.CustomEventImpl;var p=i(100);n.DocumentFragment=p.DocumentFragmentImpl;var v=i(98);n.Document=v.DocumentImpl;var y=i(264),m=i(155);n.DocumentType=m.DocumentTypeImpl;var w=i(6);n.dom=w.dom;var x=i(148);n.DOMImplementation=x.DOMImplementationImpl;var C=i(170);n.DOMTokenList=C.DOMTokenListImpl;var S=i(99);n.Element=S.ElementImpl;var T=i(104);n.Event=T.EventImpl;var _=i(70);n.EventTarget=_.EventTargetImpl;var E=i(161);n.HTMLCollection=E.HTMLCollectionImpl;var b=i(265);n.MutationObserver=b.MutationObserverImpl;var D=i(169);n.MutationRecord=D.MutationRecordImpl;var I=i(164);n.NamedNodeMap=I.NamedNodeMapImpl;var P=i(168);n.NodeFilter=P.NodeFilterImpl;var O=i(34);n.Node=O.NodeImpl;var A=i(166);n.NodeIterator=A.NodeIteratorImpl;var V=i(162);n.NodeList=V.NodeListImpl;var G=i(163);n.NodeListStatic=G.NodeListStaticImpl;var R=i(266),N=i(267),F=i(268),j=i(160);n.ProcessingInstruction=j.ProcessingInstructionImpl;var te=i(165);n.Range=te.RangeImpl;var ie=i(156);n.ShadowRoot=ie.ShadowRootImpl;var he=i(269),ue=i(270);n.StaticRange=ue.StaticRangeImpl;var ve=i(101);n.Text=ve.TextImpl;var Me=i(103);n.Traverser=Me.TraverserImpl;var Ue=i(167);n.TreeWalker=Ue.TreeWalkerImpl;var be=i(149);n.Window=be.WindowImpl;var B=i(151);n.XMLDocument=B.XMLDocumentImpl,o.applyMixin(S.ElementImpl,d.ChildNodeImpl),o.applyMixin(u.CharacterDataImpl,d.ChildNodeImpl),o.applyMixin(m.DocumentTypeImpl,d.ChildNodeImpl),o.applyMixin(v.DocumentImpl,y.DocumentOrShadowRootImpl),o.applyMixin(ie.ShadowRootImpl,y.DocumentOrShadowRootImpl),o.applyMixin(S.ElementImpl,R.NonDocumentTypeChildNodeImpl),o.applyMixin(u.CharacterDataImpl,R.NonDocumentTypeChildNodeImpl),o.applyMixin(v.DocumentImpl,N.NonElementParentNodeImpl),o.applyMixin(p.DocumentFragmentImpl,N.NonElementParentNodeImpl),o.applyMixin(v.DocumentImpl,F.ParentNodeImpl),o.applyMixin(p.DocumentFragmentImpl,F.ParentNodeImpl),o.applyMixin(S.ElementImpl,F.ParentNodeImpl),o.applyMixin(ve.TextImpl,he.SlotableImpl),o.applyMixin(S.ElementImpl,he.SlotableImpl)},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0}),function(o){o[o.EOF=0]="EOF",o[o.Declaration=1]="Declaration",o[o.DocType=2]="DocType",o[o.Element=3]="Element",o[o.Text=4]="Text",o[o.CDATA=5]="CDATA",o[o.PI=6]="PI",o[o.Comment=7]="Comment",o[o.ClosingTag=8]="ClosingTag"}(n.TokenType||(n.TokenType={}))},function(r,n,i){i(64),i(20),i(66);var o,a=this&&this.__extends||(o=function(l,f){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,d){u.__proto__=d}||function(u,d){for(var h in d)d.hasOwnProperty(h)&&(u[h]=d[h])})(l,f)},function(l,f){function u(){this.constructor=l}o(l,f),l.prototype=f===null?Object.create(f):(u.prototype=f.prototype,new u)});Object.defineProperty(n,"__esModule",{value:!0});var s=i(1),c=function(l){function f(){return l!==null&&l.apply(this,arguments)||this}return a(f,l),f.prototype._parse=function(u,d){var h=this,g=this._builderOptions,p=null;return s.isFunction(d)?p=this.parse(u,d.apply(this)):s.isArray(d)||s.isSet(d)?s.forEachArray(d,function(v){return p=h.parse(u,v)},this):s.isMap(d)||s.isObject(d)?s.forEachObject(d,function(v,y){if(s.isFunction(y)&&(y=y.apply(h)),g.ignoreConverters||v.indexOf(g.convert.att)!==0)if(g.ignoreConverters||v.indexOf(g.convert.text)!==0)if(g.ignoreConverters||v.indexOf(g.convert.cdata)!==0)if(g.ignoreConverters||v.indexOf(g.convert.comment)!==0)if(g.ignoreConverters||v.indexOf(g.convert.ins)!==0){if(!((s.isArray(y)||s.isSet(y))&&s.isEmpty(y))){if((s.isMap(y)||s.isObject(y))&&s.isEmpty(y))p=h.element(u,void 0,h.sanitize(v))||p;else if(g.keepNullNodes||y!=null)if(s.isArray(y)||s.isSet(y))s.forEachArray(y,function(S){var T={};T[v]=S,p=h.parse(u,T)},h);else if(s.isMap(y)||s.isObject(y))(m=h.element(u,void 0,h.sanitize(v)))&&(p=m,h.parse(m,y));else if(y!=null&&y!==""){var m;(m=h.element(u,void 0,h.sanitize(v)))&&(p=m,h.text(m,h._decodeText(h.sanitize(y))))}else p=h.element(u,void 0,h.sanitize(v))||p}}else if(s.isString(y)){var w=y.indexOf(" "),x=w===-1?y:y.substr(0,w),C=w===-1?"":y.substr(w+1);p=h.instruction(u,h.sanitize(x),h.sanitize(C))||p}else s.isArray(y)||s.isSet(y)?s.forEachArray(y,function(S){var T=S.indexOf(" "),_=T===-1?S:S.substr(0,T),E=T===-1?"":S.substr(T+1);p=h.instruction(u,h.sanitize(_),h.sanitize(E))||p},h):s.forEachObject(y,function(S,T){return p=h.instruction(u,h.sanitize(S),h.sanitize(T))||p},h);else s.isArray(y)||s.isSet(y)?s.forEachArray(y,function(S){return p=h.comment(u,h.sanitize(S))||p},h):p=h.comment(u,h.sanitize(y))||p;else s.isArray(y)||s.isSet(y)?s.forEachArray(y,function(S){return p=h.cdata(u,h.sanitize(S))||p},h):p=h.cdata(u,h.sanitize(y))||p;else p=s.isMap(y)||s.isObject(y)?h.parse(u,y):h.text(u,h._decodeText(h.sanitize(y)))||p;else if(v===g.convert.att){if(s.isArray(y)||s.isSet(y))throw new Error("Invalid attribute: "+y.toString()+". "+u._debugInfo());s.forEachObject(y,function(S,T){p=h.attribute(u,void 0,h.sanitize(S),h._decodeAttributeValue(h.sanitize(T)))||p})}else p=h.attribute(u,void 0,h.sanitize(v.substr(g.convert.att.length)),h._decodeAttributeValue(h.sanitize(y)))||p},this):(g.keepNullNodes||d!=null)&&(p=this.text(u,this._decodeText(this.sanitize(d)))||p),p||u},f}(i(75).BaseReader);n.ObjectReader=c},function(r,n,i){var o=i(39);r.exports=new o({explicit:[i(286),i(287),i(288)]})},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=function(a){this.level=0,this._builderOptions=a,this._writerOptions=a};n.BaseCBWriter=o},function(r,n,i){var o=i(16),a=i(8),s=i(116);r.exports=!o&&!a(function(){return Object.defineProperty(s("div"),"a",{get:function(){return 7}}).a!=7})},function(r,n,i){var o=i(11),a=i(13),s=o.document,c=a(s)&&a(s.createElement);r.exports=function(l){return c?s.createElement(l):{}}},function(r,n,i){var o=i(118),a=Function.toString;typeof o.inspectSource!="function"&&(o.inspectSource=function(s){return a.call(s)}),r.exports=o.inspectSource},function(r,n,i){var o=i(11),a=i(80),s=o["__core-js_shared__"]||a("__core-js_shared__",{});r.exports=s},function(r,n,i){var o=i(14),a=i(187),s=i(55),c=i(15);r.exports=function(l,f){for(var u=a(f),d=c.f,h=s.f,g=0;gh;)o(d,u=f[h++])&&(~s(g,u)||g.push(u));return g}},function(r,n,i){var o=i(24),a=i(26),s=i(83),c=function(l){return function(f,u,d){var h,g=o(f),p=a(g.length),v=s(d,p);if(l&&u!=u){for(;p>v;)if((h=g[v++])!=h)return!0}else for(;p>v;v++)if((l||v in g)&&g[v]===u)return l||v||0;return!l&&-1}};r.exports={includes:c(!0),indexOf:c(!1)}},function(r,n,i){var o=i(8),a=/#|\.prototype\./,s=function(d,h){var g=l[c(d)];return g==u||g!=f&&(typeof h=="function"?o(h):!!h)},c=s.normalize=function(d){return String(d).replace(a,".").toLowerCase()},l=s.data={},f=s.NATIVE="N",u=s.POLYFILL="P";r.exports=s},function(r,n,i){var o=i(86);r.exports=o&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},function(r,n,i){var o=i(5);n.f=o},function(r,n,i){var o=i(120),a=i(14),s=i(125),c=i(15).f;r.exports=function(l){var f=o.Symbol||(o.Symbol={});a(f,l)||c(f,l,{value:s.f(l)})}},function(r,n){r.exports=function(i){if(typeof i!="function")throw TypeError(String(i)+" is not a function");return i}},function(r,n,i){var o=i(13),a=i(59),s=i(5)("species");r.exports=function(c,l){var f;return a(c)&&(typeof(f=c.constructor)!="function"||f!==Array&&!a(f.prototype)?o(f)&&(f=f[s])===null&&(f=void 0):f=void 0),new(f===void 0?Array:f)(l===0?0:l)}},function(r,n,i){var o,a,s=i(11),c=i(193),l=s.process,f=l&&l.versions,u=f&&f.v8;u?a=(o=u.split("."))[0]+o[1]:c&&(!(o=c.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=c.match(/Chrome\/(\d+)/))&&(a=o[1]),r.exports=a&&+a},function(r,n,i){var o=i(5),a=i(60),s=i(15),c=o("unscopables"),l=Array.prototype;l[c]==null&&s.f(l,c,{configurable:!0,value:a(null)}),r.exports=function(f){l[c][f]=!0}},function(r,n,i){var o,a,s,c=i(132),l=i(21),f=i(14),u=i(5),d=i(44),h=u("iterator"),g=!1;[].keys&&("next"in(s=[].keys())?(a=c(c(s)))!==Object.prototype&&(o=a):g=!0),o==null&&(o={}),d||f(o,h)||l(o,h,function(){return this}),r.exports={IteratorPrototype:o,BUGGY_SAFARI_ITERATORS:g}},function(r,n,i){var o=i(14),a=i(27),s=i(57),c=i(196),l=s("IE_PROTO"),f=Object.prototype;r.exports=c?Object.getPrototypeOf:function(u){return u=a(u),o(u,l)?u[l]:typeof u.constructor=="function"&&u instanceof u.constructor?u.constructor.prototype:u instanceof Object?f:null}},function(r,n,i){var o=i(18),a=i(197);r.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var s,c=!1,l={};try{(s=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(l,[]),c=l instanceof Array}catch{}return function(f,u){return o(f),a(u),c?s.call(f,u):f.__proto__=u,f}}():void 0)},function(r,n,i){var o=i(56),a=i(15),s=i(40);r.exports=function(c,l,f){var u=o(l);u in c?a.f(c,u,s(0,f)):c[u]=f}},function(r,n,i){var o=i(90),a=i(42),s=i(5)("toStringTag"),c=a(function(){return arguments}())=="Arguments";r.exports=o?a:function(l){var f,u,d;return l===void 0?"Undefined":l===null?"Null":typeof(u=function(h,g){try{return h[g]}catch{}}(f=Object(l),s))=="string"?u:c?a(f):(d=a(f))=="Object"&&typeof f.callee=="function"?"Arguments":d}},function(r,n,i){var o=i(18);r.exports=function(){var a=o(this),s="";return a.global&&(s+="g"),a.ignoreCase&&(s+="i"),a.multiline&&(s+="m"),a.dotAll&&(s+="s"),a.unicode&&(s+="u"),a.sticky&&(s+="y"),s}},function(r,n,i){var o=i(47),a=i(35),s=function(c){return function(l,f){var u,d,h=String(a(l)),g=o(f),p=h.length;return g<0||g>=p?c?"":void 0:(u=h.charCodeAt(g))<55296||u>56319||g+1===p||(d=h.charCodeAt(g+1))<56320||d>57343?c?h.charAt(g):u:c?h.slice(g,g+2):d-56320+(u-55296<<10)+65536}};r.exports={codeAt:s(!1),charAt:s(!0)}},function(r,n,i){var o=i(4),a=i(27),s=i(61);o({target:"Object",stat:!0,forced:i(8)(function(){s(1)})},{keys:function(c){return s(a(c))}})},function(r,n,i){var o=i(4),a=i(11),s=i(123),c=i(25),l=i(140),f=i(141),u=i(142),d=i(13),h=i(8),g=i(208),p=i(62),v=i(209);r.exports=function(y,m,w){var x=y.indexOf("Map")!==-1,C=y.indexOf("Weak")!==-1,S=x?"set":"add",T=a[y],_=T&&T.prototype,E=T,b={},D=function(G){var R=_[G];c(_,G,G=="add"?function(N){return R.call(this,N===0?0:N),this}:G=="delete"?function(N){return!(C&&!d(N))&&R.call(this,N===0?0:N)}:G=="get"?function(N){return C&&!d(N)?void 0:R.call(this,N===0?0:N)}:G=="has"?function(N){return!(C&&!d(N))&&R.call(this,N===0?0:N)}:function(N,F){return R.call(this,N===0?0:N,F),this})};if(s(y,typeof T!="function"||!(C||_.forEach&&!h(function(){new T().entries().next()}))))E=w.getConstructor(m,y,x,S),l.REQUIRED=!0;else if(s(y,!0)){var I=new E,P=I[S](C?{}:-0,1)!=I,O=h(function(){I.has(1)}),A=g(function(G){new T(G)}),V=!C&&h(function(){for(var G=new T,R=5;R--;)G[S](R,R);return!G.has(-0)});A||((E=m(function(G,R){u(G,E,y);var N=v(new T,G,E);return R!=null&&f(R,N[S],N,x),N})).prototype=_,_.constructor=E),(O||V)&&(D("delete"),D("has"),x&&D("get")),(V||P)&&D(S),C&&_.clear&&delete _.clear}return b[y]=E,o({global:!0,forced:E!=T},b),p(E,y),C||w.setStrong(E,y,x),E}},function(r,n,i){var o=i(45),a=i(13),s=i(14),c=i(15).f,l=i(58),f=i(204),u=l("meta"),d=0,h=Object.isExtensible||function(){return!0},g=function(v){c(v,u,{value:{objectID:"O"+ ++d,weakData:{}}})},p=r.exports={REQUIRED:!1,fastKey:function(v,y){if(!a(v))return typeof v=="symbol"?v:(typeof v=="string"?"S":"P")+v;if(!s(v,u)){if(!h(v))return"F";if(!y)return"E";g(v)}return v[u].objectID},getWeakData:function(v,y){if(!s(v,u)){if(!h(v))return!0;if(!y)return!1;g(v)}return v[u].weakData},onFreeze:function(v){return f&&p.REQUIRED&&h(v)&&!s(v,u)&&g(v),v}};o[u]=!0},function(r,n,i){var o=i(18),a=i(205),s=i(26),c=i(87),l=i(206),f=i(207),u=function(d,h){this.stopped=d,this.result=h};(r.exports=function(d,h,g,p,v){var y,m,w,x,C,S,T,_=c(h,g,p?2:1);if(v)y=d;else{if(typeof(m=l(d))!="function")throw TypeError("Target is not iterable");if(a(m)){for(w=0,x=s(d.length);x>w;w++)if((C=p?_(o(T=d[w])[0],T[1]):_(d[w]))&&C instanceof u)return C;return new u(!1)}y=m.call(d)}for(S=y.next;!(T=S.call(y)).done;)if(typeof(C=f(y,_,T.value,p))=="object"&&C&&C instanceof u)return C;return new u(!1)}).stop=function(d){return new u(!0,d)}},function(r,n){r.exports=function(i,o,a){if(!(i instanceof o))throw TypeError("Incorrect "+(a?a+" ":"")+"invocation");return i}},function(r,n,i){var o=i(15).f,a=i(60),s=i(210),c=i(87),l=i(142),f=i(141),u=i(88),d=i(211),h=i(16),g=i(140).fastKey,p=i(43),v=p.set,y=p.getterFor;r.exports={getConstructor:function(m,w,x,C){var S=m(function(b,D){l(b,S,w),v(b,{type:w,index:a(null),first:void 0,last:void 0,size:0}),h||(b.size=0),D!=null&&f(D,b[C],b,x)}),T=y(w),_=function(b,D,I){var P,O,A=T(b),V=E(b,D);return V?V.value=I:(A.last=V={index:O=g(D,!0),key:D,value:I,previous:P=A.last,next:void 0,removed:!1},A.first||(A.first=V),P&&(P.next=V),h?A.size++:b.size++,O!=="F"&&(A.index[O]=V)),b},E=function(b,D){var I,P=T(b),O=g(D);if(O!=="F")return P.index[O];for(I=P.first;I;I=I.next)if(I.key==D)return I};return s(S.prototype,{clear:function(){for(var b=T(this),D=b.index,I=b.first;I;)I.removed=!0,I.previous&&(I.previous=I.previous.next=void 0),delete D[I.index],I=I.next;b.first=b.last=void 0,h?b.size=0:this.size=0},delete:function(b){var D=T(this),I=E(this,b);if(I){var P=I.next,O=I.previous;delete D.index[I.index],I.removed=!0,O&&(O.next=P),P&&(P.previous=O),D.first==I&&(D.first=P),D.last==I&&(D.last=O),h?D.size--:this.size--}return!!I},forEach:function(b){for(var D,I=T(this),P=c(b,arguments.length>1?arguments[1]:void 0,3);D=D?D.next:I.first;)for(P(D.value,D.key,this);D&&D.removed;)D=D.previous},has:function(b){return!!E(this,b)}}),s(S.prototype,x?{get:function(b){var D=E(this,b);return D&&D.value},set:function(b,D){return _(this,b===0?0:b,D)}}:{add:function(b){return _(this,b=b===0?0:b,b)}}),h&&o(S.prototype,"size",{get:function(){return T(this).size}}),S},setStrong:function(m,w,x){var C=w+" Iterator",S=y(w),T=y(C);u(m,w,function(_,E){v(this,{type:C,target:_,state:S(_),kind:E,last:void 0})},function(){for(var _=T(this),E=_.kind,b=_.last;b&&b.removed;)b=b.previous;return _.target&&(_.last=b=b?b.next:_.state.first)?E=="keys"?{value:b.key,done:!1}:E=="values"?{value:b.value,done:!1}:{value:[b.key,b.value],done:!1}:(_.target=void 0,{value:void 0,done:!0})},x?"entries":"values",!x,!0),d(w)}}},function(r,n,i){var o,a=i(4),s=i(55).f,c=i(26),l=i(222),f=i(35),u=i(224),d=i(44),h="".endsWith,g=Math.min,p=u("endsWith");a({target:"String",proto:!0,forced:!!(d||p||(o=s(String.prototype,"endsWith"),!o||o.writable))&&!p},{endsWith:function(v){var y=String(f(this));l(v);var m=arguments.length>1?arguments[1]:void 0,w=c(y.length),x=m===void 0?w:g(c(m),w),C=String(v);return h?h.call(y,C,x):y.slice(x-C.length,x)===C}})},function(r,n,i){(function(o){/*! @@ -3450,8 +3450,8 @@ Input: `+this.err.str)},c.prototype[Symbol.iterator]=function(){return this._ind `+O.slice(N,G),N=G+1),F=j;return te+=` `,O.length-N>A&&F>N?te+=O.slice(N,F)+` `+O.slice(F+1):te+=O.slice(N),te.slice(1)}function b(O,A,V){var G,R,N,F,j,te;for(N=0,F=(R=V?O.explicitTypes:O.implicitTypes).length;N tag resolver accepts not "'+te+'" style');G=j.represent[te](A,te)}O.dump=G}return!0}return!1}function D(O,A,V,G,R,N){O.tag=null,O.dump=V,b(O,V,!1)||b(O,V,!0);var F=l.call(O.dump);G&&(G=O.flowLevel<0||O.flowLevel>A);var j,te,ie=F==="[object Object]"||F==="[object Array]";if(ie&&(te=(j=O.duplicates.indexOf(V))!==-1),(O.tag!==null&&O.tag!=="?"||te||O.indent!==2&&A>0)&&(R=!1),te&&O.usedDuplicates[j])O.dump="*ref_"+j;else{if(ie&&te&&!O.usedDuplicates[j]&&(O.usedDuplicates[j]=!0),F==="[object Object]")G&&Object.keys(O.dump).length!==0?(function(ue,ve,Me,Ue){var be,B,M,$,W,Y,ne="",re=ue.tag,Se=Object.keys(Me);if(ue.sortKeys===!0)Se.sort();else if(typeof ue.sortKeys=="function")Se.sort(ue.sortKeys);else if(ue.sortKeys)throw new a("sortKeys must be a boolean or a function");for(be=0,B=Se.length;be1024)&&(ue.dump&&ue.dump.charCodeAt(0)===10?Y+="?":Y+="? "),Y+=ue.dump,W&&(Y+=v(ue,ve)),D(ue,ve+1,$,!0,W)&&(ue.dump&&ue.dump.charCodeAt(0)===10?Y+=":":Y+=": ",ne+=Y+=ue.dump));ue.tag=re,ue.dump=ne||"{}"}(O,A,O.dump,R),te&&(O.dump="&ref_"+j+O.dump)):(function(ue,ve,Me){var Ue,be,B,M,$,W="",Y=ue.tag,ne=Object.keys(Me);for(Ue=0,be=ne.length;Ue1024&&($+="? "),$+=ue.dump+(ue.condenseFlow?'"':"")+":"+(ue.condenseFlow?"":" "),D(ue,ve,M,!1,!1)&&(W+=$+=ue.dump));ue.tag=Y,ue.dump="{"+W+"}"}(O,A,O.dump),te&&(O.dump="&ref_"+j+" "+O.dump));else if(F==="[object Array]"){var he=O.noArrayIndent&&A>0?A-1:A;G&&O.dump.length!==0?(function(ue,ve,Me,Ue){var be,B,M="",$=ue.tag;for(be=0,B=Me.length;be "+O.dump)}return!0}function I(O,A){var V,G,R=[],N=[];for(function F(j,te,ie){var he,ue,ve;if(j!==null&&typeof j=="object")if((ue=te.indexOf(j))!==-1)ie.indexOf(ue)===-1&&ie.push(ue);else if(te.push(j),Array.isArray(j))for(ue=0,ve=j.length;ue=C.length&&(C=void 0),{value:C&&C[_++],done:!C}}};throw new TypeError(S?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(C,S){var T=typeof Symbol=="function"&&C[Symbol.iterator];if(!T)return C;var _,E,b=T.call(C),D=[];try{for(;(S===void 0||S-- >0)&&!(_=b.next()).done;)D.push(_.value)}catch(I){E={error:I}}finally{try{_&&!_.done&&(T=b.return)&&T.call(b)}finally{if(E)throw E.error}}return D};Object.defineProperty(n,"__esModule",{value:!0});var l=i(91),f=i(1),u=i(183),d=i(0),h=i(7),g=i(95),p=i(69),v=i(3),y=i(305),m=i(306),w=i(307),x=function(C){function S(T,_){_===void 0&&(_=!1);var E=C.call(this)||this;return E._hasDeclaration=!1,E._docTypeName="",E._hasDocumentElement=!1,E._currentElementSerialized=!1,E._openTags=[],E._ended=!1,E._fragment=_,E._options=f.applyDefaults(T||{},l.DefaultXMLBuilderCBOptions),E._builderOptions={defaultNamespace:E._options.defaultNamespace,namespaceAlias:E._options.namespaceAlias},E._options.format==="json"?E._writer=new m.JSONCBWriter(E._options):E._options.format==="yaml"?E._writer=new w.YAMLCBWriter(E._options):E._writer=new y.XMLCBWriter(E._options),E._options.data!==void 0&&E.on("data",E._options.data),E._options.end!==void 0&&E.on("end",E._options.end),E._options.error!==void 0&&E.on("error",E._options.error),E._prefixMap=new g.NamespacePrefixMap,E._prefixMap.set("xml",h.namespace.XML),E._prefixIndex={value:1},E._push(E._writer.frontMatter()),E}return a(S,C),S.prototype.ele=function(T,_,E){var b,D;if(f.isObject(T)||f.isString(T)&&(/^\s*/g,">");return this._push(this._writer.text(E)),this},S.prototype.ins=function(T,_){var E;_===void 0&&(_=""),this._serializeOpenTag(!0);try{E=u.fragment(this._builderOptions).ins(T,_).first().node}catch(b){return this.emit("error",b),this}return this._options.wellFormed&&(E.target.indexOf(":")!==-1||/^xml$/i.test(E.target))?(this.emit("error",new Error("Processing instruction target contains invalid characters (well-formed required).")),this):this._options.wellFormed&&!d.xml_isLegalChar(E.data)?(this.emit("error",Error("Processing instruction data contains invalid characters (well-formed required).")),this):(this._push(this._writer.instruction(E.target,E.data)),this)},S.prototype.dat=function(T){var _;this._serializeOpenTag(!0);try{_=u.fragment(this._builderOptions).dat(T).first().node}catch(E){return this.emit("error",E),this}return this._push(this._writer.cdata(_.data)),this},S.prototype.dec=function(T){return T===void 0&&(T={version:"1.0"}),this._fragment?(this.emit("error",Error("Cannot insert an XML declaration into a document fragment.")),this):this._hasDeclaration?(this.emit("error",Error("XML declaration is already inserted.")),this):(this._push(this._writer.declaration(T.version||"1.0",T.encoding,T.standalone)),this._hasDeclaration=!0,this)},S.prototype.dtd=function(T){if(this._fragment)return this.emit("error",Error("Cannot insert a DocType declaration into a document fragment.")),this;if(this._docTypeName!=="")return this.emit("error",new Error("DocType declaration is already inserted.")),this;if(this._hasDocumentElement)return this.emit("error",new Error("Cannot insert DocType declaration after document element.")),this;var _;try{_=u.create().dtd(T).first().node}catch(E){return this.emit("error",E),this}return this._options.wellFormed&&!d.xml_isPubidChar(_.publicId)?(this.emit("error",new Error("DocType public identifier does not match PubidChar construct (well-formed required).")),this):this._options.wellFormed&&(!d.xml_isLegalChar(_.systemId)||_.systemId.indexOf('"')!==-1&&_.systemId.indexOf("'")!==-1)?(this.emit("error",new Error("DocType system identifier contains invalid characters (well-formed required).")),this):(this._docTypeName=T.name,this._push(this._writer.docType(T.name,_.publicId,_.systemId)),this)},S.prototype.import=function(T){var _,E,b=u.fragment().set(this._options);try{b.import(T)}catch(O){return this.emit("error",O),this}try{for(var D=s(b.node.childNodes),I=D.next();!I.done;I=D.next()){var P=I.value;this._fromNode(P)}}catch(O){_={error:O}}finally{try{I&&!I.done&&(E=D.return)&&E.call(D)}finally{if(_)throw _.error}}return this},S.prototype.up=function(){return this._serializeOpenTag(!1),this._serializeCloseTag(),this},S.prototype.end=function(){for(this._serializeOpenTag(!1);this._openTags.length>0;)this._serializeCloseTag();return this._push(null),this},S.prototype._serializeOpenTag=function(T){if(!this._currentElementSerialized&&this._currentElement!==void 0){var _=this._currentElement.node;if(!this._options.wellFormed||_.localName.indexOf(":")===-1&&d.xml_isName(_.localName)){var E="",b=!1,D=this._prefixMap.copy(),I={},P=this._recordNamespaceInformation(_,D,I),O=this._openTags.length===0?null:this._openTags[this._openTags.length-1][1],A=_.namespaceURI;if(A===null&&(A=O),O===A)P!==null&&(b=!0),E=A===h.namespace.XML?"xml:"+_.localName:_.localName,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E));else{var V=_.prefix,G=null;if(V===null&&A===P||(G=D.get(V,A)),V==="xmlns"){if(this._options.wellFormed)return void this.emit("error",new Error("An element cannot have the 'xmlns' prefix (well-formed required)."));G=V}G!==null?(E=G+":"+_.localName,P!==null&&P!==h.namespace.XML&&(O=P||null),this._writer.beginElement(E),this._push(this._writer.openTagBegin(E))):V!==null?(V in I&&(V=this._generatePrefix(A,D,this._prefixIndex)),D.set(V,A),E+=V+":"+_.localName,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)),this._push(this._writer.attribute("xmlns:"+V,this._serializeAttributeValue(A,this._options.wellFormed))),P!==null&&(O=P||null)):P===null||P!==null&&P!==A?(b=!0,E+=_.localName,O=A,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)),this._push(this._writer.attribute("xmlns",this._serializeAttributeValue(A,this._options.wellFormed)))):(E+=_.localName,O=A,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)))}this._serializeAttributes(_,D,this._prefixIndex,I,b,this._options.wellFormed);var R=A===h.namespace.HTML;R&&!T&&S._VoidElementNames.has(_.localName)?(this._push(this._writer.openTagEnd(E,!0,!0)),this._writer.endElement(E)):R||T?this._push(this._writer.openTagEnd(E,!1,!1)):(this._push(this._writer.openTagEnd(E,!0,!1)),this._writer.endElement(E)),this._currentElementSerialized=!0,this._openTags.push([E,O,this._prefixMap,T]),this._isPrefixMapModified(this._prefixMap,D)&&(this._prefixMap=D),this._writer.level++}else this.emit("error",new Error("Node local name contains invalid characters (well-formed required)."))}},S.prototype._serializeCloseTag=function(){this._writer.level--;var T=this._openTags.pop();if(T!==void 0){var _=c(T,4),E=_[0],b=(_[1],_[2]),D=_[3];this._prefixMap=b,D&&(this._push(this._writer.closeTag(E)),this._writer.endElement(E))}else this.emit("error",new Error("Last element is undefined."))},S.prototype._push=function(T){T===null?(this._ended=!0,this.emit("end")):this._ended?this.emit("error",new Error("Cannot push to ended stream.")):T.length!==0&&(this._writer.hasData=!0,this.emit("data",T,this._writer.level))},S.prototype._fromNode=function(T){var _,E,b,D;if(v.Guard.isElementNode(T)){var I=T.prefix?T.prefix+":"+T.localName:T.localName;T.namespaceURI!==null?this.ele(T.namespaceURI,I):this.ele(I);try{for(var P=s(T.attributes),O=P.next();!O.done;O=P.next()){var A=O.value,V=A.prefix?A.prefix+":"+A.localName:A.localName;A.namespaceURI!==null?this.att(A.namespaceURI,V,A.value):this.att(V,A.value)}}catch(F){_={error:F}}finally{try{O&&!O.done&&(E=P.return)&&E.call(P)}finally{if(_)throw _.error}}try{for(var G=s(T.childNodes),R=G.next();!R.done;R=G.next()){var N=R.value;this._fromNode(N)}}catch(F){b={error:F}}finally{try{R&&!R.done&&(D=G.return)&&D.call(G)}finally{if(b)throw b.error}}this.up()}else v.Guard.isExclusiveTextNode(T)&&T.data?this.txt(T.data):v.Guard.isCommentNode(T)?this.com(T.data):v.Guard.isCDATASectionNode(T)?this.dat(T.data):v.Guard.isProcessingInstructionNode(T)&&this.ins(T.target,T.data)},S.prototype._serializeAttributes=function(T,_,E,b,D,I){var P,O,A=I?new p.LocalNameSet:void 0;try{for(var V=s(T.attributes),G=V.next();!G.done;G=V.next()){var R=G.value;if(I||D||R.namespaceURI!==null){if(I&&A&&A.has(R.namespaceURI,R.localName))return void this.emit("error",new Error("Element contains duplicate attributes (well-formed required)."));I&&A&&A.set(R.namespaceURI,R.localName);var N=R.namespaceURI,F=null;if(N!==null)if(F=_.get(R.prefix,N),N===h.namespace.XMLNS){if(R.value===h.namespace.XML||R.prefix===null&&D||R.prefix!==null&&(!(R.localName in b)||b[R.localName]!==R.value)&&_.has(R.localName,R.value))continue;if(I&&R.value===h.namespace.XMLNS)return void this.emit("error",new Error("XMLNS namespace is reserved (well-formed required)."));if(I&&R.value==="")return void this.emit("error",new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."));R.prefix==="xmlns"&&(F="xmlns")}else F===null&&(F=R.prefix===null||_.hasPrefix(R.prefix)&&!_.has(R.prefix,N)?this._generatePrefix(N,_,E):R.prefix,this._push(this._writer.attribute("xmlns:"+F,this._serializeAttributeValue(N,this._options.wellFormed))));if(I&&(R.localName.indexOf(":")!==-1||!d.xml_isName(R.localName)||R.localName==="xmlns"&&N===null))return void this.emit("error",new Error("Attribute local name contains invalid characters (well-formed required)."));this._push(this._writer.attribute((F!==null?F+":":"")+R.localName,this._serializeAttributeValue(R.value,this._options.wellFormed)))}else this._push(this._writer.attribute(R.localName,this._serializeAttributeValue(R.value,this._options.wellFormed)))}}catch(j){P={error:j}}finally{try{G&&!G.done&&(O=V.return)&&O.call(V)}finally{if(P)throw P.error}}},S.prototype._serializeAttributeValue=function(T,_){return _&&T!==null&&!d.xml_isLegalChar(T)?(this.emit("error",new Error("Invalid characters in attribute value.")),""):T===null?"":T.replace(/(?!&(lt|gt|amp|apos|quot);)&/g,"&").replace(//g,">").replace(/"/g,""")},S.prototype._recordNamespaceInformation=function(T,_,E){var b,D,I=null;try{for(var P=s(T.attributes),O=P.next();!O.done;O=P.next()){var A=O.value,V=A.namespaceURI,G=A.prefix;if(V===h.namespace.XMLNS){if(G===null){I=A.value;continue}var R=A.localName,N=A.value;if(N===h.namespace.XML||(N===""&&(N=null),_.has(R,N)))continue;_.set(R,N),E[R]=N||""}}}catch(F){b={error:F}}finally{try{O&&!O.done&&(D=P.return)&&D.call(P)}finally{if(b)throw b.error}}return I},S.prototype._generatePrefix=function(T,_,E){var b="ns"+E.value;return E.value++,_.set(b,T),b},S.prototype._isPrefixMapModified=function(T,_){var E=T._items,b=_._items,D=T._nullItems,I=_._nullItems;for(var P in b){var O=E[P];if(O===void 0)return!0;var A=b[P];if(O.length!==A.length)return!0;for(var V=0;V':u?"':d?"':""},l.prototype.comment=function(f){return this._beginLine()+""},l.prototype.text=function(f){return this._beginLine()+f},l.prototype.instruction=function(f,u){return u?this._beginLine()+"":this._beginLine()+""},l.prototype.cdata=function(f){return this._beginLine()+""},l.prototype.openTagBegin=function(f){return this._lineLength+=1+f.length,this._beginLine()+"<"+f},l.prototype.openTagEnd=function(f,u,d){return d?" />":u?this._writerOptions.allowEmptyTags?">":this._writerOptions.spaceBeforeSlash?" />":"/>":">"},l.prototype.closeTag=function(f){return this._beginLine()+""},l.prototype.attribute=function(f,u){var d=f+'="'+u+'"';return this._writerOptions.prettyPrint&&this._writerOptions.width>0&&this._lineLength+1+d.length>this._writerOptions.width?(d=this._beginLine()+this._indent(1)+d,this._lineLength=d.length,d):(this._lineLength+=1+d.length," "+d)},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){},l.prototype._beginLine=function(){if(this._writerOptions.prettyPrint){var f=(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level);return this._lineLength=f.length,f}return""},l.prototype._indent=function(f){return f<=0?"":this._writerOptions.indent.repeat(f)},l}(i(114).BaseCBWriter);n.XMLCBWriter=s},function(r,n,i){i(74);var o,a=this&&this.__extends||(o=function(c,l){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,u){f.__proto__=u}||function(f,u){for(var d in u)u.hasOwnProperty(d)&&(f[d]=u[d])})(c,l)},function(c,l){function f(){this.constructor=c}o(c,l),c.prototype=l===null?Object.create(l):(f.prototype=l.prototype,new f)});Object.defineProperty(n,"__esModule",{value:!0});var s=function(c){function l(f){var u=c.call(this,f)||this;return u._hasChildren=[],u._additionalLevel=0,u}return a(l,c),l.prototype.frontMatter=function(){return""},l.prototype.declaration=function(f,u,d){return""},l.prototype.docType=function(f,u,d){return""},l.prototype.comment=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.comment)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.text=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.text)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.instruction=function(f,u){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.ins)+this._sep()+this._val(u?f+" "+u:f)+this._sep()+"}"},l.prototype.cdata=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.cdata)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.attribute=function(f,u){return this._comma()+this._beginLine(1)+"{"+this._sep()+this._key(this._builderOptions.convert.att+f)+this._sep()+this._val(u)+this._sep()+"}"},l.prototype.openTagBegin=function(f){var u=this._comma()+this._beginLine()+"{"+this._sep()+this._key(f)+this._sep()+"{";return this._additionalLevel++,this.hasData=!0,u+=this._beginLine()+this._key(this._builderOptions.convert.text)+this._sep()+"[",this._hasChildren.push(!1),u},l.prototype.openTagEnd=function(f,u,d){if(u){var h=this._sep()+"]";return this._additionalLevel--,h+=this._beginLine()+"}"+this._sep()+"}"}return""},l.prototype.closeTag=function(f){var u=this._beginLine()+"]";return this._additionalLevel--,u+=this._beginLine()+"}"+this._sep()+"}"},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){this._hasChildren.pop()},l.prototype._beginLine=function(f){return f===void 0&&(f=0),this._writerOptions.prettyPrint?(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level+f):""},l.prototype._indent=function(f){return f+this._additionalLevel<=0?"":this._writerOptions.indent.repeat(f+this._additionalLevel)},l.prototype._comma=function(){var f=this._hasChildren[this._hasChildren.length-1]?",":"";return this._hasChildren.length>0&&(this._hasChildren[this._hasChildren.length-1]=!0),f},l.prototype._sep=function(){return this._writerOptions.prettyPrint?" ":""},l.prototype._key=function(f){return'"'+f+'":'},l.prototype._val=function(f){return JSON.stringify(f)},l}(i(114).BaseCBWriter);n.JSONCBWriter=s},function(r,n,i){i(74);var o,a=this&&this.__extends||(o=function(c,l){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,u){f.__proto__=u}||function(f,u){for(var d in u)u.hasOwnProperty(d)&&(f[d]=u[d])})(c,l)},function(c,l){function f(){this.constructor=c}o(c,l),c.prototype=l===null?Object.create(l):(f.prototype=l.prototype,new f)});Object.defineProperty(n,"__esModule",{value:!0});var s=function(c){function l(f){var u=c.call(this,f)||this;if(u._rootWritten=!1,u._additionalLevel=0,f.indent.length<2)throw new Error("YAML indententation string must be at least two characters long.");if(f.offset<0)throw new Error("YAML offset should be zero or a positive number.");return u}return a(l,c),l.prototype.frontMatter=function(){return this._beginLine()+"---"},l.prototype.declaration=function(f,u,d){return""},l.prototype.docType=function(f,u,d){return""},l.prototype.comment=function(f){return this._beginLine()+this._key(this._builderOptions.convert.comment)+" "+this._val(f)},l.prototype.text=function(f){return this._beginLine()+this._key(this._builderOptions.convert.text)+" "+this._val(f)},l.prototype.instruction=function(f,u){return this._beginLine()+this._key(this._builderOptions.convert.ins)+" "+this._val(u?f+" "+u:f)},l.prototype.cdata=function(f){return this._beginLine()+this._key(this._builderOptions.convert.cdata)+" "+this._val(f)},l.prototype.attribute=function(f,u){this._additionalLevel++;var d=this._beginLine()+this._key(this._builderOptions.convert.att+f)+" "+this._val(u);return this._additionalLevel--,d},l.prototype.openTagBegin=function(f){var u=this._beginLine()+this._key(f);return this._rootWritten||(this._rootWritten=!0),this.hasData=!0,this._additionalLevel++,u+=this._beginLine(!0)+this._key(this._builderOptions.convert.text)},l.prototype.openTagEnd=function(f,u,d){return u?" "+this._val(""):""},l.prototype.closeTag=function(f){return this._additionalLevel--,""},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){},l.prototype._beginLine=function(f){return f===void 0&&(f=!1),(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level,f)},l.prototype._indent=function(f,u){if(f+this._additionalLevel<=0)return"";var d=this._writerOptions.indent.repeat(f+this._additionalLevel);return!u&&this._rootWritten?d.substr(0,d.length-2)+"-"+d.substr(-1,1):d},l.prototype._key=function(f){return'"'+f+'":'},l.prototype._val=function(f){return JSON.stringify(f)},l}(i(114).BaseCBWriter);n.YAMLCBWriter=s},function(r,n,i){var o,a=typeof Reflect=="object"?Reflect:null,s=a&&typeof a.apply=="function"?a.apply:function(w,x,C){return Function.prototype.apply.call(w,x,C)};o=a&&typeof a.ownKeys=="function"?a.ownKeys:Object.getOwnPropertySymbols?function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:function(w){return Object.getOwnPropertyNames(w)};var c=Number.isNaN||function(w){return w!=w};function l(){l.init.call(this)}r.exports=l,l.EventEmitter=l,l.prototype._events=void 0,l.prototype._eventsCount=0,l.prototype._maxListeners=void 0;var f=10;function u(w){if(typeof w!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof w)}function d(w){return w._maxListeners===void 0?l.defaultMaxListeners:w._maxListeners}function h(w,x,C,S){var T,_,E,b;if(u(C),(_=w._events)===void 0?(_=w._events=Object.create(null),w._eventsCount=0):(_.newListener!==void 0&&(w.emit("newListener",x,C.listener?C.listener:C),_=w._events),E=_[x]),E===void 0)E=_[x]=C,++w._eventsCount;else if(typeof E=="function"?E=_[x]=S?[C,E]:[E,C]:S?E.unshift(C):E.push(C),(T=d(w))>0&&E.length>T&&!E.warned){E.warned=!0;var D=new Error("Possible EventEmitter memory leak detected. "+E.length+" "+String(x)+" listeners added. Use emitter.setMaxListeners() to increase limit");D.name="MaxListenersExceededWarning",D.emitter=w,D.type=x,D.count=E.length,b=D,console&&console.warn&&console.warn(b)}return w}function g(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(w,x,C){var S={fired:!1,wrapFn:void 0,target:w,type:x,listener:C},T=g.bind(S);return T.listener=C,S.wrapFn=T,T}function v(w,x,C){var S=w._events;if(S===void 0)return[];var T=S[x];return T===void 0?[]:typeof T=="function"?C?[T.listener||T]:[T]:C?function(_){for(var E=new Array(_.length),b=0;b0&&(_=x[0]),_ instanceof Error)throw _;var E=new Error("Unhandled error."+(_?" ("+_.message+")":""));throw E.context=_,E}var b=T[w];if(b===void 0)return!1;if(typeof b=="function")s(b,this,x);else{var D=b.length,I=m(b,D);for(C=0;C=0;_--)if(C[_]===x||C[_].listener===x){E=C[_].listener,T=_;break}if(T<0)return this;T===0?C.shift():function(b,D){for(;D+1=0;S--)this.removeListener(w,x[S]);return this},l.prototype.listeners=function(w){return v(this,w,!0)},l.prototype.rawListeners=function(w){return v(this,w,!1)},l.listenerCount=function(w,x){return typeof w.listenerCount=="function"?w.listenerCount(x):y.call(w,x)},l.prototype.listenerCount=y,l.prototype.eventNames=function(){return this._eventsCount>0?o(this._events):[]}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(77);n.createCB=function(a){return new o.XMLBuilderCBImpl(a)},n.fragmentCB=function(a){return new o.XMLBuilderCBImpl(a,!0)}}])})})(Jk);var $le=Jk.exports,Ga=Uint8Array,rd=Uint16Array,Zk=Uint32Array,Qk=new Ga([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),eV=new Ga([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),jle=new Ga([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),tV=function(t,e){for(var r=new rd(31),n=0;n<31;++n)r[n]=e+=1<>>1|(Vr&21845)<<1;mu=(mu&52428)>>>2|(mu&13107)<<2,mu=(mu&61680)>>>4|(mu&3855)<<4,OS[Vr]=((mu&65280)>>>8|(mu&255)<<8)>>>1}var Cp=function(t,e,r){for(var n=t.length,i=0,o=new rd(e);i>>c]=l}else for(s=new rd(n),i=0;i>>15-t[i]);return s},hm=new Ga(288);for(var Vr=0;Vr<144;++Vr)hm[Vr]=8;for(var Vr=144;Vr<256;++Vr)hm[Vr]=9;for(var Vr=256;Vr<280;++Vr)hm[Vr]=7;for(var Vr=280;Vr<288;++Vr)hm[Vr]=8;var iV=new Ga(32);for(var Vr=0;Vr<32;++Vr)iV[Vr]=5;var Xle=Cp(hm,9,1),Yle=Cp(iV,5,1),a3=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},zs=function(t,e,r){var n=e/8|0;return(t[n]|t[n+1]<<8)>>(e&7)&r},s3=function(t,e){var r=e/8|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(e&7)},Jle=function(t){return(t+7)/8|0},Zle=function(t,e,r){(r==null||r>t.length)&&(r=t.length);var n=new(t.BYTES_PER_ELEMENT==2?rd:t.BYTES_PER_ELEMENT==4?Zk:Ga)(r-e);return n.set(t.subarray(e,r)),n},Qle=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Js=function(t,e,r){var n=new Error(e||Qle[t]);if(n.code=t,Error.captureStackTrace&&Error.captureStackTrace(n,Js),!r)throw n;return n},sE=function(t,e,r){var n=t.length;if(!n||r&&r.f&&!r.l)return e||new Ga(0);var i=!e||r,o=!r||r.i;r||(r={}),e||(e=new Ga(n*3));var a=function(ve){var Me=e.length;if(ve>Me){var Ue=new Ga(Math.max(Me*2,ve));Ue.set(e),e=Ue}},s=r.f||0,c=r.p||0,l=r.b||0,f=r.l,u=r.d,d=r.m,h=r.n,g=n*8;do{if(!f){s=zs(t,c,1);var p=zs(t,c+1,3);if(c+=3,p)if(p==1)f=Xle,u=Yle,d=9,h=5;else if(p==2){var w=zs(t,c,31)+257,x=zs(t,c+10,15)+4,C=w+zs(t,c+5,31)+1;c+=14;for(var S=new Ga(C),T=new Ga(19),_=0;_>>4;if(v<16)S[_++]=v;else{var P=0,O=0;for(v==16?(O=3+zs(t,c,3),c+=2,P=S[_-1]):v==17?(O=3+zs(t,c,7),c+=3):v==18&&(O=11+zs(t,c,127),c+=7);O--;)S[_++]=P}}var A=S.subarray(0,w),V=S.subarray(w);d=a3(A),h=a3(V),f=Cp(A,d,1),u=Cp(V,h,1)}else Js(1);else{var v=Jle(c)+4,y=t[v-4]|t[v-3]<<8,m=v+y;if(m>n){o&&Js(0);break}i&&a(l+y),e.set(t.subarray(v,m),l),r.b=l+=y,r.p=c=m*8,r.f=s;continue}if(c>g){o&&Js(0);break}}i&&a(l+131072);for(var G=(1<>>4;if(c+=P&15,c>g){o&&Js(0);break}if(P||Js(2),F<256)e[l++]=F;else if(F==256){N=c,f=null;break}else{var j=F-254;if(F>264){var _=F-257,te=Qk[_];j=zs(t,c,(1<>>4;ie||Js(3),c+=ie&15;var V=qle[he];if(he>3){var te=eV[he];V+=s3(t,c)&(1<g){o&&Js(0);break}i&&a(l+131072);for(var ue=l+j;l>3&1)+(e>>4&1);n>0;n-=!t[r++]);return r+(e&2)},nue=function(t){var e=t.length;return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0},rue=function(t){((t[0]&15)!=8||t[0]>>>4>7||(t[0]<<8|t[1])%31)&&Js(6,"invalid zlib data"),t[1]&32&&Js(6,"invalid zlib data: preset dictionaries not supported")};function iue(t,e){return sE(t,e)}function oue(t,e){return sE(t.subarray(tue(t),-8),new Ga(nue(t)))}function aue(t,e){return sE((rue(t),t.subarray(2,-4)),e)}function sue(t,e){return t[0]==31&&t[1]==139&&t[2]==8?oue(t):(t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31?iue(t,e):aue(t,e)}var cue=typeof TextDecoder<"u"&&new TextDecoder,lue=0;try{cue.decode(eue,{stream:!0}),lue=1}catch{}const Fa=[];Fa[45]=62;Fa[95]=63;const T0="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(let t=0;t>16&255,n[f++]=l>>8&255,n[f++]=l&255}switch(a){case 3:for(;!Bc(t[c]);)c++;for(l=Fa[t.charCodeAt(c++)]<<10;!Bc(t[c]);)c++;for(l|=Fa[t.charCodeAt(c++)]<<4;!Bc(t[c]);)c++;l|=Fa[t.charCodeAt(c++)]>>2,n[f++]=l>>8&255,n[f++]=l&255;break;case 2:for(;!Bc(t[c]);)c++;for(l=Fa[t.charCodeAt(c++)]<<2;!Bc(t[c]);)c++;l|=Fa[t.charCodeAt(c++)]>>4,n[f++]=l&255;break;case 1:throw new Error("BASE64: remain 1 should not happen")}return f}function due(t){const e=uue(t),r=e[e.length-1].end+1,n=(4-r%4)%4,i=(r+n)*3/4-n,o=new ArrayBuffer(i),a=new Uint8Array(o);let s=0;for(let c=0;c>18]+T0[n>>12&63]+T0[n>>6&63]+T0[n&63]}function hue(t){const e=new Uint8Array(t),r=t.byteLength%3,n=t.byteLength-r,i=Array(n/3);for(let o=0;o0){const o=f9(e[n],e[n+1]||0,e[n+2]||0);r===1?i.push(`${o.substr(0,2)}==`):r===2&&i.push(`${o.substr(0,3)}=`)}return i.join("")}var cE={toArrayBuffer:due,fromArrayBuffer:hue};function gue(t,e){e.classHierarchy.push("vtkStringArray"),t.getComponent=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.values[r*e.numberOfComponents+n]},t.setComponent=(r,n,i)=>{i!==e.values[r*e.numberOfComponents+n]&&(e.values[r*e.numberOfComponents+n]=i,t.modified())},t.getData=()=>e.values,t.getTuple=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];const i=e.numberOfComponents||1;n.length&&(n.length=i);const o=r*i;for(let a=0;a0&&arguments[0]!==void 0?arguments[0]:1)*e.numberOfComponents},t.getNumberOfComponents=()=>e.numberOfComponents,t.getNumberOfValues=()=>e.values.length,t.getNumberOfTuples=()=>e.values.length/e.numberOfComponents,t.getDataType=()=>e.dataType,t.newClone=()=>aV({name:e.name,numberOfComponents:e.numberOfComponents,empty:!0}),t.getName=()=>(e.name||t.setName(`vtkStringArray${t.getMTime()}`),e.name),t.setData=(r,n)=>{e.values=r,e.size=r.length,n&&(e.numberOfComponents=n),e.size%e.numberOfComponents!==0&&(e.numberOfComponents=1),t.modified()}}const pue={name:"",numberOfComponents:1,size:0,dataType:"string"};function oV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,pue,r),!e.empty&&!e.values&&!e.size)throw new TypeError("Cannot create vtkStringArray object without: size > 0, values");e.values?Array.isArray(e.values)&&(e.values=[...e.values]):e.values=[],e.values&&(e.size=e.values.length),J.obj(t,e),J.set(t,e,["name"]),gue(t,e)}const aV=J.newInstance(oV,"vtkStringArray");var mue={newInstance:aV,extend:oV};function vue(t,e){return[...t.getElementsByTagName(e)]}function d9(t,e){return vue(t,e)[0]}function yue(t){return $le.create(t)}function wue(t){const e=/^\s*\s*_/m,r=/\n\s*<\/AppendedData>/m;return y1.extractBinary(t,e,r)}const Uu={Int8:Int8Array,UInt8:Uint8Array,Int16:Int16Array,UInt16:Uint16Array,Int32:Int32Array,UInt32:Uint32Array,Int64:Int32Array,UInt64:Uint32Array,Float32:Float32Array,Float64:Float64Array},w1={Int8:1,UInt8:1,Int16:2,UInt16:2,Int32:4,UInt32:4,Int64:8,UInt64:8,Float32:4,Float64:8};function MS(t){const e=t.length-1;return t.filter((r,n)=>n0&&(o===0?a=n*i:a=(n-1)*i+o);const s=new ArrayBuffer(a),c={offset:0,uint8:new Uint8Array(s)};let l=Cue(r);for(;l{d.trim().length&&(f[u++]=Number(d))})}else if(c==="binary"){const u=new Uint8Array(cE.toArrayBuffer(e.firstChild.nodeValue.trim()));if(r==="vtkZLibDataCompressor"){const d=lE(u,i);f=new Uu[a](d.buffer),/^U?Int64$/.test(a)&&(f=MS(f))}else f=new Uu[a](u.buffer,w1[i]),a.indexOf("Int64")!==-1&&(f=MS(f))}else if(c==="appended"){const u=Number(e.getAttribute("offset"));f=PS(new Uint8Array(o,u),a,i)}else console.error("Format not supported",c);return{name:s,values:f,numberOfComponents:l}}function c3(t){return new TextDecoder().decode(t).split("\0").slice(0,-1)}function Tue(t,e,r,n,i){const o=t.getAttribute("Name"),a=t.getAttribute("format"),s=Number(t.getAttribute("NumberOfComponents")||"1"),l=Number(t.getAttribute("NumberOfTuples")||"1")*s,f=[];if(a==="ascii"){const u=t.firstChild.nodeValue.trim().split(/\s+/);let d=0;const h=[];for(;f.length{const p=g-h;u[d++]=p;for(let v=0;v{const d=e.getAttribute(u);d&&(c[d]=r[`set${u}`])});const l=e.getElementsByTagName("DataArray"),f=l.length;for(let u=0;uBt.newInstance(x1(Number(s.getAttribute("NumberOfTuples")),s,e,r,n,i))),a=[...t.getElementsByTagName("Array")].filter(s=>s.getAttribute("type")==="String").map(s=>mue.newInstance(Tue(s,e,r,n,i)));return[...o,...a]}function Due(t,e){e.classHierarchy.push("vtkXMLReader"),e.dataAccessHelper||(e.dataAccessHelper=dm.get("http"));function r(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.dataAccessHelper.fetchBinary(n,i)}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};e.url=n;const o=n.split("/");return o.pop(),e.baseURL=o.join("/"),t.loadData(i)},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r(e.url,n).then(t.parseAsArrayBuffer)},t.parseAsArrayBuffer=n=>{if(!n)return!1;if(n!==e.rawDataBuffer)t.modified();else return!0;const{text:i,binaryBuffer:o}=wue(n);e.rawDataBuffer=n,e.binaryBuffer=o;const s=yue(i).root(),c=s.node,l=c.getAttribute("type"),f=c.getAttribute("compressor"),u=c.getAttribute("byte_order"),d=c.getAttribute("header_type")||"UInt32";if(f&&f!=="vtkZLibDataCompressor")return console.error("Invalid compressor",f),!1;if(u&&u!=="LittleEndian")return console.error("Only LittleEndian encoding is supported"),!1;if(l!==e.dataType)return console.error("Invalid data type",l,"expecting",e.dataType),!1;if(d9(c,"AppendedData")){const p=d9(c,"AppendedData"),v=p.getAttribute("encoding"),y=s.filter(T=>{const{node:_}=T;return _.nodeType===Node.ELEMENT_NODE&&_.getAttribute("format")==="appended"&&_.hasAttribute("offset")},!1,!0).map(T=>({node:T.node,offset:Number(T.node.getAttribute("offset"))}));y.sort((T,_)=>T.offset-_.offset);let m=e.binaryBuffer;v==="base64"&&(m=p.textContent.trim().substr(1));const w=[];for(let T=0;TT+_.length,0),C=new ArrayBuffer(x),S=new Uint8Array(C);for(let T=0,_=0;T{t.parseAsArrayBuffer(e.rawDataBuffer)}}const Iue={};function Oue(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Iue,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper"]),J.algo(t,e,0,1),Due(t,e)}var C1={extend:Oue,processDataArray:x1,processFieldData:Eue,processCells:_ue};function Mue(t,e,r,n,i,o,a){const s=Number(r.getAttribute(`NumberOf${e}`));if(s>0){const c=r.getElementsByTagName(e)[0].getElementsByTagName("DataArray")[0],{values:l,numberOfComponents:f}=C1.processDataArray(s,c,n,i,o,a);t[`get${e}`]().setData(l,f)}return s}function Pue(t,e,r,n,i,o,a){const s=Number(r.getAttribute(`NumberOf${e}`));if(s>0){const c=C1.processCells(s,r.getElementsByTagName(e)[0],n,i,o,a);t[`get${e}`]().setData(c)}return s}function Rue(t,e){e.classHierarchy.push("vtkXMLPolyDataReader"),t.parseXML=(r,n,i,o,a)=>{const c=r.getElementsByTagName(e.dataType)[0].getElementsByTagName("Piece"),l=c.length;for(let f=0;f{g+=Pue(u,p,d,i,o,a,e.binaryBuffer)}),C1.processFieldData(h,d.getElementsByTagName("PointData")[0],u.getPointData(),i,o,a,e.binaryBuffer),C1.processFieldData(g,d.getElementsByTagName("CellData")[0],u.getCellData(),i,o,a,e.binaryBuffer),e.output[f]=u}}}const Lue={dataType:"PolyData"};function sV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Lue,r),C1.extend(t,e,r),Rue(t,e)}const Aue=J.newInstance(sV,"vtkXMLPolyDataReader");var cV={newInstance:Aue,extend:sV};const wn={};function l3(t,e,r,n,i){for(let o=0;oNumber(o));let r=e[0]-1;r=r<0?r+1+wn.v.length/3:r;let n=e[1]?e[1]-1:r;n=n<0?n+1+wn.vt.length/2:n;let i=e[2]?e[2]-1:r;return i=i<0?i+1+wn.vn.length/3:i,[r,n,i]}function Vue(t){if(t[0]==="#")return;const e=t.split(/[ \t]+/);if(e[0]===wn.splitOn)e.shift(),wn.pieces.push(e.join(" ").trim()),wn.f.push([]),wn.size++;else if(e[0]==="v")wn.v.push(Number(e[1])),wn.v.push(Number(e[2])),wn.v.push(Number(e[3]));else if(e[0]==="vt")wn.vt.push(Number(e[1])),wn.vt.push(Number(e[2]));else if(e[0]==="vn")wn.vn.push(Number(e[1])),wn.vn.push(Number(e[2])),wn.vn.push(Number(e[3]));else if(e[0]==="f"){wn.size===0&&wn.size++;const r=wn.f[wn.size-1];e.shift();const n=e.filter(o=>o.length>0&&o!=="\r"),i=n.length;r.push(i);for(let o=0;o1?a+m:w;for(let C=1;C1&&arguments[1]!==void 0?arguments[1]:{};return e.dataAccessHelper.fetchText(t,n,i)}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(n.indexOf(".obj")===-1&&!i.fullpath)e.baseURL=n,e.url=`${n}/index.obj`;else{e.url=n;const o=n.split("/");o.pop(),e.baseURL=o.join("/")}return t.loadData(i)},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r(e.url,n).then(i=>t.isDeleted()?!1:t.parseAsText(i))},t.parseAsText=n=>(n&&(n!==e.parseData&&t.modified(),e.parseData=n,e.numberOfOutputs=0,Nue(e.splitMode),n.split(` -`).forEach(Vue),Fue(e)),!0),t.requestData=(n,i)=>{t.parseAsText(e.parseData)},t.isBusy=()=>!!e.requestCount,t.getNumberOfOutputPorts=()=>e.numberOfOutputs}const Wue={numberOfOutputs:1,requestCount:0,splitMode:null,trackDuplicates:!1};function lV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Wue,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper","splitMode","trackDuplicates"]),J.algo(t,e,0,1),J.event(t,e,"busy"),Gue(t,e)}const zue=J.newInstance(lV,"vtkOBJReader");var $ue={newInstance:zue,extend:lV,...Bue};function jue(t,e){e.classHierarchy.push("vtkPolyDataNormals"),t.vtkPolyDataNormalsExecute=(r,n,i)=>{if(!i)return null;const o=new Float32Array(i.length),a=new Float32Array(3*r);let s=0,c=0;const l=n.length,f=[0,0,0],u=[0,0,0];for(let d=0;d{if(!t.getNumberOfInputPorts())return;const o=r[0];if(!o)return;const a=Br.newInstance();a.setPoints(o.getPoints()),a.setVerts(o.getVerts()),a.setLines(o.getLines()),a.setPolys(o.getPolys()),a.setStrips(o.getStrips()),a.getPointData().passData(o.getPointData()),a.getCellData().passData(o.getCellData()),a.getFieldData().passData(o.getFieldData());const[s,c]=t.vtkPolyDataNormalsExecute(o.getNumberOfPolys(),o.getPolys().getData(),o.getPoints().getData());if(e.computePointNormals){const l=Bt.newInstance({numberOfComponents:3,name:"Normals",values:c});a.getPointData().setNormals(l)}if(e.computeCellNormals){const l=Bt.newInstance({numberOfComponents:3,name:"Normals",values:s});a.getCellData().setNormals(l)}n[0]=a}}function Hue(t){return{computeCellNormals:!1,computePointNormals:!0,...t}}function uV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Hue(r)),J.obj(t,e),J.algo(t,e,1,1),J.setGet(t,e,["computeCellNormals","computePointNormals"]),jue(t,e)}const Kue=J.newInstance(uV,"vtkPolyDataNormals");var que={newInstance:Kue,extend:uV};class Xue{constructor(e){this._color=[255,255,255],this._actors=[],this.id=e.id,this._color=e.color??this._color,this._format=e.format;const r=new TextDecoder,n=que.newInstance(),i=o=>{const a=dc.newInstance();a.setMapper(o);const s=Fd.newInstance();return s.setColor(this._color[0]/255,this._color[1]/255,this._color[2]/255),a.setProperty(s),a};if(this._format===za.PLY){const o=wa.newInstance(),a=Vle.newInstance();a.parseAsArrayBuffer(e.arrayBuffer),o.setInputConnection(a.getOutputPort()),this._actors.push(i(o))}else if(this._format===za.STL){const o=wa.newInstance(),a=zle.newInstance();a.parseAsArrayBuffer(e.arrayBuffer),n.setInputConnection(a.getOutputPort()),o.setInputConnection(n.getOutputPort()),this._actors.push(i(o))}else if(this._format===za.OBJ){const o=$ue.newInstance({splitMode:e.materialUrl?"usemtl":null});o.parseAsText(r.decode(e.arrayBuffer));const a=o.getNumberOfOutputPorts();for(let s=0;s{if(r.reset(),r.isEmpty)this._children.delete(e);else throw new Error("Child is not empty and cannot be removed")}),this._unregisterAllEvents()}_addEventListener(e,r,n){let i=this._eventListeners.get(e);i||(i=new Map,this._eventListeners.set(e,i));const a=(n==null?void 0:n.capture)??!1?Ks.Capture:Ks.Bubble,s=i.get(r)??Ks.None;if(s&a){console.warn("A listener is already registered for this phase");return}i.set(r,s|a),this._target.addEventListener(e,r,n)}_removeEventListener(e,r,n){const o=(n==null?void 0:n.capture)??!1?Ks.Capture:Ks.Bubble,a=this._eventListeners.get(e);if(!a)return;(r?[r]:Array.from(a.keys())).forEach(c=>{const l=a.get(c)??Ks.None;if(!!!(l&o))return;this._target.removeEventListener(e,c,n);const u=l^o;u===Ks.None?a.delete(c):a.set(c,u)}),a.size||this._eventListeners.delete(e)}_unregisterAllListeners(e,r){Array.from(r.entries()).forEach(([n,i])=>{const o=Ks.Capture;for(let a=o;i;a<<=1){if(!(i&a))continue;const s=a===Ks.Capture;this.removeEventListener(e,n,{capture:s}),i^=a}})}_unregisterAllEvents(){Array.from(this._eventListeners.entries()).forEach(([e,r])=>{this._unregisterAllListeners(e,r)})}}class fV{constructor(){this._targetsEventListeners=new Map}addEventListener(e,r,n,i){let o=this._targetsEventListeners.get(e);o||(o=new xw(e),this._targetsEventListeners.set(e,o)),o.addEventListener(r,n,i)}removeEventListener(e,r,n,i){const o=this._targetsEventListeners.get(e);o&&(o.removeEventListener(r,n,i),o.isEmpty&&this._targetsEventListeners.delete(e))}reset(){Array.from(this._targetsEventListeners.entries()).forEach(([e,r])=>{r.reset(),this._targetsEventListeners.delete(e)})}}const Yue=Object.freeze(Object.defineProperty({__proto__:null,MultiTargetEventListenerManager:fV,TargetEventListeners:xw},Symbol.toStringTag,{value:"Module"}));function Jue(t,e){const r=t.getSize();for(let n=0;n0?r:efe)>>>0).join(typeof e=="string"?e:tfe)}function nfe(t,e,r){let n=t[e];n instanceof Array||(n=[0],Object.defineProperty(t,e,{value:n}));for(let i=!0,o=0;i&&o{const r=Ur(t);h9[r]=e},get:(t,e)=>{if(t==="calibratedPixelSpacing"){const r=Ur(e);return h9[r]}}};function Qg(t,e,r=1e-5){return Math.abs(t[0]+e[0])=e[0]||t[1]<0||t[1]>=e[1]||t[2]<0||t[2]>=e[2])}function ife(t,e){let r;e?r=[jr(e)]:r=Bo();const n=[];return r.forEach(i=>{const o=t.getActors(),a=i.getVolumeViewports();for(const s of a){const c=s.getActors();if(c.length!==o.length)continue;o.every(({uid:f})=>c.find(u=>f===u.uid))&&n.push(s)}}),n}const hV=t=>t.preScale.scaled&&t.preScale.scalingParameters.suvbw;function gV(t,e,r=void 0,n="_thumbnails",i={displayArea:{imageArea:[1,1]}}){if(!t||!(t instanceof HTMLCanvasElement))throw new Error("canvas element is required");const o=!e.imageId,a=!o&&e,s=o&&e,l=`renderGPUViewport-${a.imageId||s.volumeId}`,f=document.createElement("div"),u=window.devicePixelRatio||1;i.displayArea||(i.displayArea={imageArea:[1,1]});const d=t.width,h=t.height;f.style.width=`${d/u+Z0}px`,f.style.height=`${h/u+Z0}px`,f.style.visibility="hidden",f.style.position="absolute",document.body.appendChild(f);const g=l.split(":").join("-");f.setAttribute("viewport-id-for-remove",g);const p=Hc(f),v=jr(n)||new iE(n);let y=v.getViewport(l);if(!y){const m={viewportId:l,type:o?vr.ORTHOGRAPHIC:vr.STACK,element:f,defaultOptions:{...i,suppressEvents:!0}};v.enableElement(m),y=v.getViewport(l)}return new Promise(m=>{let w=!1,{viewReference:x}=i;const C=S=>{if(w)return;if(x){const O=x;x=null,y.setViewReference(O),y.render();return}t.getContext("2d").drawImage(p,0,0,p.width,p.height,0,0,t.width,t.height);const _=y.canvasToWorld([0,0]),E=y.canvasToWorld([p.width/u,0]),b=y.canvasToWorld([0,p.height/u]),D=Mn([0,0,0],y.canvasToWorld([1/u,0]),_),I=Mn([0,0,0],y.canvasToWorld([0,1/u]),_),P=1;w=!0,f.removeEventListener(rt.IMAGE_RENDERED,C),setTimeout(()=>{v.disableElement(l),document.querySelectorAll(`[viewport-id-for-remove="${g}"]`).forEach(A=>{A.remove()})},0),m({origin:_,bottomLeft:b,topRight:E,thicknessMm:P,rightVector:D,downVector:I})};f.addEventListener(rt.IMAGE_RENDERED,C),o?y.setVolumes([s],!1,!0):y.renderImageObject(e),y.resetCamera(),r==="PT"&&!hV(a)&&y.setProperties({voiRange:{lower:a.minPixelValue,upper:a.maxPixelValue}}),y.render()})}function pV(t,e,r,n,i){if(e.volumeId)throw new Error("Unsupported volume rendering for CPU");const a=e,s=Vk(t,a,r),c={canvas:t,viewport:s,image:a,renderingTools:{}};c.transform=v1(c);const l=!0;return new Promise((f,u)=>{Ak(c,l),f(null)})}function ofe(t){const{canvas:e,imageId:r,viewReference:n,requestType:i=pn.Thumbnail,priority:o=-5,renderingEngineId:a="_thumbnails",useCPURendering:s=!1,thumbnail:c=!1,imageAspect:l=!1,viewportOptions:f}=t,u=n==null?void 0:n.volumeId,d=u&&!r,h=n&&f?{...f,viewReference:n}:f,g=s?pV:gV;return new Promise((p,v)=>{function y(C,S){var b;const{modality:T}=wt("generalSeriesModule",S)||{},_=!d&&C,E=d&&C;_&&(_.isPreScaled=_.isPreScaled||((b=_.preScale)==null?void 0:b.scaled)),c&&(e.height=256,e.width=256),l&&_&&(e.width=_&&e.height*_.width/_.height),e.style.width=`${e.width/devicePixelRatio}px`,e.style.height=`${e.height/devicePixelRatio}px`,E&&s&&v(new Error("CPU rendering of volume not supported")),g(e,C,T,a,h).then(p)}function m(C,S){console.error(C,S),v(C)}function w(C,S,T){return _s(C,T).then(_=>{y.call(this,_,C)},_=>{m.call(this,_,C)})}const x={useRGBA:!!s,requestType:i};if(u){const C=$e.getVolume(u);C||v(new Error(`Volume id ${u} not found in cache`));const S=C.imageIds[0];y(C,S)}else Bi.addRequest(w.bind(null,r,null,x),i,{imageId:r},o)})}const g9={HISTORY_UNDO:"CORNERSTONE_TOOLS_HISTORY_UNDO",HISTORY_REDO:"CORNERSTONE_TOOLS_HISTORY_REDO"};class mV{constructor(e="Tools",r=50){this.position=-1,this.redoAvailable=0,this.undoAvailable=0,this.ring=new Array,this.label=e,this._size=r}get size(){return this._size}set size(e){this.ring=new Array(e),this._size=e,this.position=-1,this.redoAvailable=0,this.undoAvailable=0}undo(e=1){for(;e>0&&this.undoAvailable>0;){const r=this.ring[this.position];r.restoreMemo(!0),r.id&&et.dispatchEvent(new CustomEvent(g9.HISTORY_UNDO,{detail:{isUndo:!0,id:r.id,operationType:r.operationType||"annotation",memo:r}})),e--,this.redoAvailable++,this.undoAvailable--,this.position=(this.position-1+this.size)%this.size}}undoIf(e){return this.undoAvailable>0&&e(this.ring[this.position])?(this.undo(),!0):!1}redo(e=1){for(;e>0&&this.redoAvailable>0;){const r=(this.position+1)%this.size,n=this.ring[r];n.restoreMemo(!1),n.id&&et.dispatchEvent(new CustomEvent(g9.HISTORY_REDO,{detail:{isUndo:!1,id:n.id,operationType:n.operationType||"annotation",memo:n}})),e--,this.position=r,this.undoAvailable++,this.redoAvailable--}}push(e){var n;if(!e)return;const r=e.restoreMemo?e:(n=e.createMemo)==null?void 0:n.call(e);if(r)return this.redoAvailable=0,this.undoAvailable{n.getViewports().forEach(o=>{o.hasImageURI(t)&&r.push(o)})}),r}function dE(t,e){const r=afe(t,e);return r?r.index:null}function afe(t,e){const r=e.getImageIds(),n=e.getCurrentImageIdIndex();if(r.length===0)return null;const i=c=>{const l=sfe(c);if(!l)return null;const f=nl(l.planeNormal,l.imagePositionPatient);return m1(f,t)},o={distance:i(r[n])??1/0,index:n},a=r.slice(n+1);for(let c=0;c=0;c--){const l=s[c],f=i(l);if(!(f===null||f===o.distance))if(f{const[r,n]=t,i=`${r}_${n}`;Lf[i]||(Lf[i]={}),Lf[i]=e},get:(t,e,r)=>{if(t!=="spatialRegistrationModule")return;const n=`${e}_${r}`;if(Lf[n])return Lf[n];const i=`${r}_${e}`;if(Lf[i])return $r(ba(),Lf[i])}};Wh(S1.get.bind(S1));const cfe=.05;function wV(t,e){const r=t.getSliceIndex(),n=e.getSliceIndex(),i=wt("imagePlaneModule",r.toString()),o=wt("imagePlaneModule",n.toString());if(!i||!o){console.log("Viewport spatial registration requires image plane module");return}const{imageOrientationPatient:a}=o;if(!i.imageOrientationPatient.every((d,h)=>Math.abs(d-a[h])0||t[0]0||t[1]0||t[2]{r.getViewports().forEach(({element:i})=>{t.push(_e(i))})}),t}function ufe(t){const e=_e(t);if(!e)return;const{viewport:r}=e;if(!(r instanceof lr))throw new Error(`An image can only be fetched for a stack viewport and not for a viewport of type: ${r.type}`);return r.getCornerstoneImage()}function Cf(t){if(t.length<=1)return!1;const e=t[0],{modality:r,seriesInstanceUID:n}=wt("generalSeriesModule",e),{imageOrientationPatient:i,pixelSpacing:o,frameOfReferenceUID:a,columns:s,rows:c,usingDefaultValues:l}=wt("imagePlaneModule",e);if(l)return!1;const f={modality:r,imageOrientationPatient:i,pixelSpacing:o,columns:s,rows:c,seriesInstanceUID:n};let u=!0;for(let d=0;dffe.has(r)):!1}async function dfe({viewport:t,options:e={}}){const r=t.getRenderingEngine();let n=e.volumeId||`${Pn()}`;n.split(":").length===0&&(n=`${pk()}:${n}`);const{id:i,element:o}=t,a=e.viewportId||i,s=t.getImageIds(),c=t.getViewPresentation(),l=t.getViewReference();r.enableElement({viewportId:a,type:vr.ORTHOGRAPHIC,element:o,defaultOptions:{background:e.background,orientation:e.orientation}}),(await p1(n,{imageIds:s})).load();const u=r.getViewport(a);await Fk(r,[{volumeId:n}],[a]);const d=()=>{u.render(),o.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,d)};return(()=>{o.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,d)})(),u.setViewPresentation(c),u.setViewReference(l),u.render(),u}async function hfe({viewport:t,options:e}){const r=t,{id:n,element:i}=r,o=t.getRenderingEngine(),{background:a}=e,s=e.viewportId||n,c=$e.getVolume(r.getVolumeId());if(!(c instanceof Ud))throw new Error("Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.");const l={viewportId:s,type:vr.STACK,element:i,defaultOptions:{background:a}},f=r.getViewReference();o.enableElement(l);const u=o.getViewport(s);return await u.setStack(c.imageIds),u.setViewReference(f),u.render(),u}function un(t,e=2){if(Array.isArray(t))return t.map(i=>un(i,e)).join(", ");if(t==null||t==="")return"NaN";t=Number(t);const r=Math.abs(t);if(r<1e-4)return`${t}`;const n=r>=100?e-2:r>=10?e-1:r>=1?e:r>=.1?e+1:r>=.01?e+2:r>=.001?e+3:e+4;return t.toFixed(n)}function Bu(t){return Math.round(t/qa)*qa}function SV(t,e,r){const n=t.length===e*r*4,i=t.length===e*r*3;if(n||i){const o=new Float32Array(e*r);let a=0,s=0;const c=n?4:3;for(let l=0;l=r.length?(p9(r),r):(p9(r),r.slice(0,e))}function p9(t){for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}}function u3(t){const e=t.toString(16);return e.length==1?"0"+e:e}function pfe(t,e,r){return"#"+u3(t)+u3(e)+u3(r)}function mfe(t){const e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}const vfe=Object.freeze(Object.defineProperty({__proto__:null,hexToRgb:mfe,rgbToHex:pfe},Symbol.toStringTag,{value:"Module"}));function TV(t,e){if(t===e)return!0;if(t==null||e==null)return!1;try{return JSON.stringify(t)===JSON.stringify(e)}catch(r){return console.debug("Error in JSON.stringify during deep comparison:",r),t===e}}function yfe(t,e,r){if(!r)throw new Error("getVolume is required, use the utilities export instead ");if(t.modality)return t.modality;if(t.setVolumes)return e=e??t.getVolumeId(),!e||!r?void 0:r(e).metadata.Modality;throw new Error("Invalid viewport type")}const wfe=(t,e)=>t.reduce((r,n)=>((r[n[e]]=r[n[e]]||[]).push(n),r),{});function xfe(t){const e=t.map(a=>{const{imagePositionPatient:s}=wt("imagePlaneModule",a)||{};return{imageId:a,imagePositionPatient:s}});if(!e.every(a=>a.imagePositionPatient))return null;const r=wfe(e,"imagePositionPatient"),n=Object.keys(r),i=r[n[0]].length;return i===1||!n.every(a=>r[a].length===i)?null:r}function Cfe(t,e){const r={};let n=[];const i=Object.keys(t);for(let o=0;oDg(i,r[0]),i=>Dg(i,r[1]),i=>Dg(i,r[2]),i=>Dg(i,r[3]),i=>Dg(i,r[4]),Sfe,Tfe,_fe,bfe];for(let i=0;ic-l).map(c=>o[c].map(l=>l.imageId)),splittingTag:r[i]}}return{imageIdGroups:[t],splittingTag:null}}function Dfe(t){const{imageIdGroups:e,splittingTag:r}=pE(t);return{isDynamicVolume:e.length>1,timePoints:e,splittingTag:r}}function Ife(t,e){const r=t.length,{rescaleSlope:n,rescaleIntercept:i,suvbw:o}=e;if(e.modality==="PT"&&typeof o=="number")for(let a=0;at.getImageIds().length-1||a+i<0){const s={imageIdIndex:a,direction:i};ut(et,rt.STACK_SCROLL_OUT_OF_BOUNDS,s)}t.scroll(i,e.debounceLoading,e.loop)}}function Ofe(t,e,r,n=!1){const i=n,{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:s}=ud(t,e,i);if(!s)return;const{sliceRange:c,spacingInNormalDirection:l,camera:f}=s,{focalPoint:u,viewPlaneNormal:d,position:h}=f,{newFocalPoint:g,newPosition:p}=X0(u,h,c,d,l,r);t.setCamera({focalPoint:g,position:p}),t.render();const v=a+r,y={volumeId:e,viewport:t,delta:r,desiredStepIndex:v,currentStepIndex:a,numScrollSteps:o,currentImageId:t.getCurrentImageId()};(v>o||v<0)&&t.getCurrentImageId()?ut(et,rt.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS,y):ut(et,rt.VOLUME_VIEWPORT_SCROLL,y)}async function ds(t,e={}){const{imageIndex:r,debounceLoading:n,volumeId:i}=e,o=_e(t);if(!o)throw new Error("Element has been disabled");const{viewport:a}=o,{imageIndex:s,numberOfSlices:c}=Mfe(a,n),f=Pfe(c,r)-s;sc(a,{delta:f,debounceLoading:n,volumeId:i})}function Mfe(t,e){return t instanceof lr?{numberOfSlices:t.getImageIds().length,imageIndex:e?t.getTargetImageIdIndex():t.getCurrentImageIdIndex()}:{numberOfSlices:t.getNumberOfSlices(),imageIndex:t.getSliceIndex()}}function Pfe(t,e){const r=t-1;return jy(e,0,r)}function mE(t,e,r={}){const n=$e.getVolume(t);if(!n)throw new Error(`Referenced volume with id ${t} does not exist.`);const{metadata:i,spacing:o,direction:a,dimensions:s}=n,{minX:c,maxX:l,minY:f,maxY:u,minZ:d,maxZ:h}=e,g=[Math.min(c,l),Math.min(f,u),Math.min(d,h)],p=Sh(n.imageData,g),v=[Math.abs(l-c)+1,Math.abs(u-f)+1,Math.abs(h-d)+1],{targetBuffer:y}=r,m={metadata:i,dimensions:v,spacing:o,origin:p,direction:a,targetBuffer:y,scalarData:(y==null?void 0:y.type)==="Float32Array"?new Float32Array(v[0]*v[1]*v[2]):void 0},w=lm(Pn(),m),x=w.voxelManager.getCompleteScalarDataArray(),C=v[0]*v[1],S=s[0]*s[1],T=n.voxelManager.getCompleteScalarDataArray();for(let _=0;_=a)){for(let m=d-n;m<=d+n;m++)if(!(m<0||m>=o))for(let w=u-n;w<=u+n;w++){if(w<0||w>=i)continue;const x=y*s+m*i+w,C=t[x];c+=C,l+=C*C,f++}}if(f===0){const y=h*s+d*i+u;return y>=0&&yc/n),type:Qs.ERMF,isProjection:a}:(console.warn("EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing."),{PixelSpacing:r,type:Qs.PROJECTION,isProjection:a}):{PixelSpacing:e,type:Qs.UNKNOWN,isProjection:a}}function Afe(t){const{SequenceOfUltrasoundRegions:e}=t,r=Array.isArray(e);if(r&&e.length>1){console.warn("Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.");return}const{PhysicalDeltaX:n,PhysicalDeltaY:i}=r?e[0]:e;return{PixelSpacing:[n*10,i*10]}}function Nfe(t){const{PixelSpacing:e,SOPClassUID:r,SequenceOfUltrasoundRegions:n}=t;return n?Afe(t):Rfe.has(r)?Lfe(t):{PixelSpacing:e,type:Qs.NOT_APPLICABLE,isProjection:!1}}const EV=(t,e)=>yfe(t,e,$e.getVolume),Rn=Object.freeze(Object.defineProperty({__proto__:null,FrameRange:Q0,HistoryMemo:fE,PointsManager:M2,ProgressiveIterator:Fy,RLEVoxelMap:s0,VoxelManager:hc,actorIsA:_a,applyPreset:Sk,autoLoad:TS,buildMetadata:Dk,calculateNeighborhoodStats:_V,calculateSpacingBetweenImageIds:ik,calculateViewportsSpatialRegistration:wV,calibratedPixelSpacingMetadataProvider:rfe,clamp:IS,clip:jy,color:vfe,colormap:Iie,convertStackToVolumeViewport:dfe,convertToGrayscale:SV,convertVolumeToStackViewport:hfe,createLinearRGBTransferFunction:Ik,createSigmoidRGBTransferFunction:G4,createSubVolume:mE,decimate:sk,deepClone:vs,deepEqual:TV,deepMerge:Ui,eventListener:Yue,fnv1aHash:gN,generateVolumePropsFromImageIds:am,genericMetadataProvider:Fu,getBufferConfiguration:E4,getClosestImageId:Zl,getClosestStackImageIndexForPoint:dE,getCurrentVolumeViewportSlice:hE,getDynamicVolumeInfo:Dfe,getImageDataMetadata:vw,getImageLegacy:ufe,getImageSliceDataForVolumeViewport:By,getMinMax:uE,getPixelSpacingInformation:Nfe,getRandomSampleFromArray:gE,getRuntimeId:dV,getScalingParameters:ok,getSliceRange:pw,getSpacingInNormalDirection:xf,getTargetVolumeAndSpacingInNormalDir:jh,getViewportImageCornersInWorld:$y,getViewportImageIds:gfe,getViewportModality:EV,getViewportsWithImageURI:zy,getViewportsWithVolumeId:sm,getVoiFromSigmoidRGBTransferFunction:Ck,getVolumeActorCorners:xN,getVolumeDirectionVectors:Cw,getVolumeId:yl,getVolumeSliceRangeInfo:xk,getVolumeViewportScrollInfo:ud,getVolumeViewportsContainingSameVolumes:ife,hasFloatScalingParameters:K4,hasNaNValues:_S,imageIdToURI:Ur,imageRetrieveMetadataProvider:h1,imageToWorldCoords:yV,indexWithinDimensions:hr,invertRgbTransferFunction:wp,isEqual:Zt,isEqualAbs:Eie,isEqualNegative:EN,isImageActor:tc,isNumber:Ar,isOpposite:Qg,isPTPrescaledWithSUV:hV,isValidVolume:Cf,isVideoTransferSyntax:CV,jumpToSlice:ds,loadImageToCanvas:ofe,logger:oie,makeVolumeMetadata:rk,planar:Xse,pointInShapeCallback:z4,renderToCanvasCPU:pV,renderToCanvasGPU:gV,roundNumber:un,roundToPrecision:Bu,scaleArray:Ife,scaleRgbTransferFunction:Jue,scroll:sc,snapFocalPointToSlice:X0,sortImageIdsAndGetSpacing:H4,spatialRegistrationMetadataProvider:S1,splitImageIdsBy4DTags:pE,transferFunctionUtils:Mie,transformIndexToWorld:Sh,transformWorldToIndex:zr,transformWorldToIndexContinuous:I2,triggerEvent:ut,updateVTKImageDataWithCornerstoneImage:yw,uuidv4:Pn,windowLevel:Oie,worldToImageCoords:RS},Symbol.toStringTag,{value:"Module"}));class bV extends lk{constructor(e,r){super(e,r),this._dimensionGroupNumber=1,this._loadedDimensionGroups=new Set,this._getImageIdRequests=(o,a)=>this.getImageIdsRequests(o,a),this.getImageLoadRequests=o=>{const a=this.getImageIdsToLoad();return this._getImageIdRequests(a,o)};const{imageIdGroups:n,splittingTag:i}=e;this._splittingTag=i,this._imageIdGroups=n,this.numDimensionGroups=this._imageIdGroups.length,this.numTimePoints=this.numDimensionGroups}_getImageIdsToLoad(){const e=this._imageIdGroups,r=this._dimensionGroupNumber-1,n=[...e[r]];let i=r-1,o=r+1;for(;i>=0||o=0&&n.push(...e[i--]),othis.numDimensionGroups?this.dimensionGroupNumber=1:this.dimensionGroupNumber=r}getCurrentDimensionGroupImageIds(){return this._imageIdGroups[this._dimensionGroupNumber-1]}getCurrentTimePointImageIds(){return console.warn("Warning: getCurrentTimePointImageIds is deprecated. Please use getCurrentDimensionGroupImageIds instead."),this.getCurrentDimensionGroupImageIds()}flatImageIdIndexToTimePointIndex(e){return console.warn("Warning: flatImageIdIndexToTimePointIndex is deprecated. Please use flatImageIdIndexToDimensionGroupNumber instead."),this.flatImageIdIndexToDimensionGroupNumber(e)-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}isTimePointLoaded(e){return console.warn("Warning: isTimePointLoaded is deprecated. Please use isDimensionGroupLoaded instead. Note that timePointIndex is zero-based while dimensionGroupNumber starts at 1."),this.isDimensionGroupLoaded(e+1)}isDimensionGroupLoaded(e){return this._loadedDimensionGroups.has(e)}markDimensionGroupAsLoaded(e){this._loadedDimensionGroups.add(e),ut(et,rt.DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED,{volumeId:this.volumeId,dimensionGroupNumber:e}),ut(et,rt.DYNAMIC_VOLUME_TIME_POINT_LOADED,{volumeId:this.volumeId,timePointIndex:e-1})}checkTimePointCompletion(e){console.warn("Warning: checkTimePointCompletion is deprecated. Please use checkDimensionGroupCompletion instead."),this.checkDimensionGroupCompletion(e)}checkDimensionGroupCompletion(e){const r=this.flatImageIdIndexToDimensionGroupNumber(e);this._imageIdGroups[r-1].every(o=>{const a=this.getImageIdIndex(o);return this.cachedFrames[a]===ya.FULL_RESOLUTION})&&!this.isDimensionGroupLoaded(r)&&this.markDimensionGroupAsLoaded(r)}}const Kh=new D4("imageRetrievalPool");Kh.setMaxSimultaneousRequests(pn.Interaction,200);Kh.setMaxSimultaneousRequests(pn.Thumbnail,200);Kh.setMaxSimultaneousRequests(pn.Prefetch,200);Kh.grabDelay=0;const m9=Symbol("DefaultSettings"),v9=Symbol("RuntimeSettings"),y9=Symbol("ObjectSettingsMap"),El=Symbol("Dictionary");class Cr{constructor(e){const r=Object.create(e instanceof Cr&&El in e?e[El]:null);Object.seal(Object.defineProperty(this,El,{value:r}))}set(e,r){return Hy(this[El],e,r,null)}get(e){return Ffe(this[El],e)}unset(e){return kfe(this[El],e+"")}forEach(e){w9(this[El],e)}extend(){return new Cr(this)}import(e){DV(e)&&Object.keys(e).forEach(r=>{Hy(this[El],r,e[r],null)})}dump(){const e={};return w9(this[El],(r,n)=>{typeof n<"u"&&IV(e,r,n)}),e}static assert(e){return e instanceof Cr?e:Cr.getRuntimeSettings()}static getDefaultSettings(e=null){let r=Cr[m9];if(r instanceof Cr||(r=new Cr,Cr[m9]=r),e){const n={};return r.forEach(i=>{if(i.startsWith(e)){const o=i.split(`${e}.`)[1];n[o]=r.get(i)}}),n}return r}static getRuntimeSettings(){let e=Cr[v9];return e instanceof Cr||(e=new Cr(Cr.getDefaultSettings()),Cr[v9]=e),e}static getObjectSettings(e,r){let n=null;if(e instanceof Cr)n=e;else if(typeof e=="object"&&e!==null){let i=Cr[y9];i instanceof WeakMap||(i=new WeakMap,Cr[y9]=i),n=i.get(e),n instanceof Cr||(n=new Cr(Cr.assert(Cr.getObjectSettings(r))),i.set(e,n))}return n}static extendRuntimeSettings(){return Cr.getRuntimeSettings().extend()}}function kfe(t,e){if(e.endsWith(".")){let r=0;const n=e,i=n.slice(0,-1),o=i.length===0;for(const a in t)Object.prototype.hasOwnProperty.call(t,a)&&(o||a.startsWith(n)||a===i)&&(delete t[a],++r);return r>0}return delete t[e]}function w9(t,e){for(const r in t)e(r,t[r])}function Vfe(t,e,r,n){let i;if(n.has(r))return Hy(t,e,null,n);n.add(r),i=0;for(const o in r)if(Object.prototype.hasOwnProperty.call(r,o)){const a=o.length===0?e:`${e}.${o}`;Hy(t,a,r[o],n)||++i}return n.delete(r),i===0}function Hy(t,e,r,n){return Ufe(e)?DV(r)?Vfe(t,e,r,n instanceof WeakSet?n:new WeakSet):(t[e]=r,!0):!1}function Ffe(t,e){return t[e]}function Ufe(t){let e,r,n;if(typeof t!="string"||(e=t.length-1)<0)return!1;for(n=-1;(r=t.indexOf(".",n+1))>=0;){if(r-n<2||r===e)return!1;n=r}return!0}function DV(t){if(typeof t=="object"&&t!==null){const e=Object.getPrototypeOf(t);if(e===Object.prototype||e===null)return!0}return!1}function IV(t,e,r){const n=e.indexOf(".");if(n>=0){const i=e.slice(0,n);let o=t[i];if(typeof o!="object"||o===null){const a=o;o={},typeof a<"u"&&(o[""]=a),t[i]=o}IV(o,e.slice(n+1,e.length),r)}else t[e]=r}Cr.getDefaultSettings().set("useCursors",!0);function L2(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function Bfe(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function OV(t){let e,r,n;t.length!==2?(e=L2,r=(s,c)=>L2(t(s),c),n=(s,c)=>t(s)-c):(e=t===L2||t===Bfe?t:Gfe,r=t,n=t);function i(s,c,l=0,f=s.length){if(l>>1;r(s[u],c)<0?l=u+1:f=u}while(l>>1;r(s[u],c)<=0?l=u+1:f=u}while(ll&&n(s[u-1],c)>-n(s[u],c)?u-1:u}return{left:i,center:a,right:o}}function Gfe(){return 0}function Wfe(t){return t===null?NaN:+t}const zfe=OV(L2),$fe=zfe.right;OV(Wfe).center;const jfe=Math.sqrt(50),Hfe=Math.sqrt(10),Kfe=Math.sqrt(2);function Ky(t,e,r){const n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),o=n/Math.pow(10,i),a=o>=jfe?10:o>=Hfe?5:o>=Kfe?2:1;let s,c,l;return i<0?(l=Math.pow(10,-i)/a,s=Math.round(t*l),c=Math.round(e*l),s/le&&--c,l=-l):(l=Math.pow(10,i)*a,s=Math.round(t/l),c=Math.round(e/l),s*le&&--c),c0))return[];if(t===e)return[t];const n=e=i))return[];const s=o-i+1,c=new Array(s);if(n)if(a<0)for(let l=0;ln||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function Jfe(t){if(!(o=t.length))return[];for(var e=-1,r=Yfe(t,Zfe),n=new Array(r);++e>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Cv(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Cv(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=tde.exec(t))?new xa(e[1],e[2],e[3],1):(e=nde.exec(t))?new xa(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=rde.exec(t))?Cv(e[1],e[2],e[3],e[4]):(e=ide.exec(t))?Cv(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=ode.exec(t))?D9(e[1],e[2]/100,e[3]/100,1):(e=ade.exec(t))?D9(e[1],e[2]/100,e[3]/100,e[4]):C9.hasOwnProperty(t)?_9(C9[t]):t==="transparent"?new xa(NaN,NaN,NaN,0):null}function _9(t){return new xa(t>>16&255,t>>8&255,t&255,1)}function Cv(t,e,r,n){return n<=0&&(t=e=r=NaN),new xa(t,e,r,n)}function lde(t){return t instanceof gm||(t=E1(t)),t?(t=t.rgb(),new xa(t.r,t.g,t.b,t.opacity)):new xa}function AS(t,e,r,n){return arguments.length===1?lde(t):new xa(t,e,r,n??1)}function xa(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}vE(xa,AS,MV(gm,{brighter(t){return t=t==null?qy:Math.pow(qy,t),new xa(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?T1:Math.pow(T1,t),new xa(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new xa(fd(this.r),fd(this.g),fd(this.b),Xy(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:E9,formatHex:E9,formatHex8:ude,formatRgb:b9,toString:b9}));function E9(){return`#${id(this.r)}${id(this.g)}${id(this.b)}`}function ude(){return`#${id(this.r)}${id(this.g)}${id(this.b)}${id((isNaN(this.opacity)?1:this.opacity)*255)}`}function b9(){const t=Xy(this.opacity);return`${t===1?"rgb(":"rgba("}${fd(this.r)}, ${fd(this.g)}, ${fd(this.b)}${t===1?")":`, ${t})`}`}function Xy(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function fd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function id(t){return t=fd(t),(t<16?"0":"")+t.toString(16)}function D9(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new nc(t,e,r,n)}function PV(t){if(t instanceof nc)return new nc(t.h,t.s,t.l,t.opacity);if(t instanceof gm||(t=E1(t)),!t)return new nc;if(t instanceof nc)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),o=Math.max(e,r,n),a=NaN,s=o-i,c=(o+i)/2;return s?(e===o?a=(r-n)/s+(r0&&c<1?0:a,new nc(a,s,c,t.opacity)}function fde(t,e,r,n){return arguments.length===1?PV(t):new nc(t,e,r,n??1)}function nc(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}vE(nc,fde,MV(gm,{brighter(t){return t=t==null?qy:Math.pow(qy,t),new nc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?T1:Math.pow(T1,t),new nc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new xa(f3(t>=240?t-240:t+120,i,n),f3(t,i,n),f3(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new nc(I9(this.h),Sv(this.s),Sv(this.l),Xy(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Xy(this.opacity);return`${t===1?"hsl(":"hsla("}${I9(this.h)}, ${Sv(this.s)*100}%, ${Sv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function I9(t){return t=(t||0)%360,t<0?t+360:t}function Sv(t){return Math.max(0,Math.min(1,t||0))}function f3(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}function dde(t,e,r,n,i){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*r+(1+3*t+3*o-3*a)*n+a*i)/6}function d3(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],o=t[n+1],a=n>0?t[n-1]:2*i-o,s=n()=>t;function hde(t,e){return function(r){return t+r*e}}function gde(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function pde(t){return(t=+t)==1?RV:function(e,r){return r-e?gde(e,r,t):yE(isNaN(e)?r:e)}}function RV(t,e){var r=e-t;return r?hde(t,r):yE(isNaN(t)?e:t)}const O9=function t(e){var r=pde(e);function n(i,o){var a=r((i=AS(i)).r,(o=AS(o)).r),s=r(i.g,o.g),c=r(i.b,o.b),l=RV(i.opacity,o.opacity);return function(f){return i.r=a(f),i.g=s(f),i.b=c(f),i.opacity=l(f),i+""}}return n.gamma=t,n}(1);function mde(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(o){for(i=0;ir&&(o=e.slice(r,o),s[a]?s[a]+=o:s[++a]=o),(n=n[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,c.push({i:a,x:Yy(n,i)})),r=h3.lastIndex;return re&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function Ide(t,e,r){var n=t[0],i=t[1],o=e[0],a=e[1];return i2?Ode:Ide,c=l=null,u}function u(d){return d==null||isNaN(d=+d)?o:(c||(c=s(t.map(n),e,r)))(n(a(d)))}return u.invert=function(d){return a(i((l||(l=s(e,t.map(n),Yy)))(d)))},u.domain=function(d){return arguments.length?(t=Array.from(d,bde),f()):t.slice()},u.range=function(d){return arguments.length?(e=Array.from(d),f()):e.slice()},u.rangeRound=function(d){return e=Array.from(d),r=_de,f()},u.clamp=function(d){return arguments.length?(a=d?!0:_0,f()):a!==_0},u.interpolate=function(d){return arguments.length?(r=d,f()):r},u.unknown=function(d){return arguments.length?(o=d,u):o},function(d,h){return n=d,i=h,f()}}function Rde(){return Pde()(_0,_0)}function Lde(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Jy(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Eh(t){return t=Jy(Math.abs(t)),t?t[1]:NaN}function Ade(t,e){return function(r,n){for(var i=r.length,o=[],a=0,s=t[0],c=0;i>0&&s>0&&(c+s+1>n&&(s=Math.max(1,n-c)),o.push(r.substring(i-=s,i+s)),!((c+=s+1)>n));)s=t[a=(a+1)%t.length];return o.reverse().join(e)}}function Nde(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var kde=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Zy(t){if(!(e=kde.exec(t)))throw new Error("invalid format: "+t);var e;return new xE({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Zy.prototype=xE.prototype;function xE(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}xE.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Vde(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var LV;function Fde(t,e){var r=Jy(t,e);if(!r)return t+"";var n=r[0],i=r[1],o=i-(LV=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=n.length;return o===a?n:o>a?n+new Array(o-a+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+Jy(t,Math.max(0,e+o-1))[0]}function P9(t,e){var r=Jy(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const R9={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Lde,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>P9(t*100,e),r:P9,s:Fde,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function L9(t){return t}var A9=Array.prototype.map,N9=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Ude(t){var e=t.grouping===void 0||t.thousands===void 0?L9:Ade(A9.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",o=t.numerals===void 0?L9:Nde(A9.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",s=t.minus===void 0?"−":t.minus+"",c=t.nan===void 0?"NaN":t.nan+"";function l(u){u=Zy(u);var d=u.fill,h=u.align,g=u.sign,p=u.symbol,v=u.zero,y=u.width,m=u.comma,w=u.precision,x=u.trim,C=u.type;C==="n"?(m=!0,C="g"):R9[C]||(w===void 0&&(w=12),x=!0,C="g"),(v||d==="0"&&h==="=")&&(v=!0,d="0",h="=");var S=p==="$"?r:p==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",T=p==="$"?n:/[%p]/.test(C)?a:"",_=R9[C],E=/[defgprs%]/.test(C);w=w===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function b(D){var I=S,P=T,O,A,V;if(C==="c")P=_(D)+P,D="";else{D=+D;var G=D<0||1/D<0;if(D=isNaN(D)?c:_(Math.abs(D),w),x&&(D=Vde(D)),G&&+D==0&&g!=="+"&&(G=!1),I=(G?g==="("?g:s:g==="-"||g==="("?"":g)+I,P=(C==="s"?N9[8+LV/3]:"")+P+(G&&g==="("?")":""),E){for(O=-1,A=D.length;++OV||V>57){P=(V===46?i+D.slice(O+1):D.slice(O))+P,D=D.slice(0,O);break}}}m&&!v&&(D=e(D,1/0));var R=I.length+D.length+P.length,N=R>1)+I+D+P+N.slice(R);break;default:D=N+I+D+P;break}return o(D)}return b.toString=function(){return u+""},b}function f(u,d){var h=l((u=Zy(u),u.type="f",u)),g=Math.max(-8,Math.min(8,Math.floor(Eh(d)/3)))*3,p=Math.pow(10,-g),v=N9[8+g/3];return function(y){return h(p*y)+v}}return{format:l,formatPrefix:f}}var Tv,AV,NV;Bde({thousands:",",grouping:[3],currency:["$",""]});function Bde(t){return Tv=Ude(t),AV=Tv.format,NV=Tv.formatPrefix,Tv}function Gde(t){return Math.max(0,-Eh(Math.abs(t)))}function Wde(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Eh(e)/3)))*3-Eh(Math.abs(t)))}function zde(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Eh(e)-Eh(t))+1}function $de(t,e,r,n){var i=Xfe(t,e,r),o;switch(n=Zy(n??",f"),n.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(o=Wde(i,a))&&(n.precision=o),NV(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=zde(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=Gde(i))&&(n.precision=o-(n.type==="%")*2);break}}return AV(n)}function jde(t){var e=t.domain;return t.ticks=function(r){var n=e();return qfe(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return $de(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,o=n.length-1,a=n[i],s=n[o],c,l,f=10;for(s0;){if(l=LS(a,s,r),l===c)return n[i]=a,n[o]=s,e(n);if(l>0)a=Math.floor(a/l)*l,s=Math.ceil(s/l)*l;else if(l<0)a=Math.ceil(a*l)/l,s=Math.floor(s*l)/l;else break;c=l}return t},t}function CE(){var t=Rde();return t.copy=function(){return Mde(t,CE())},Qfe.apply(t,arguments),jde(t)}function Hde(t,e){e.classHierarchy.push("vtkTexture"),t.imageLoaded=()=>{e.image.removeEventListener("load",t.imageLoaded),e.imageLoaded=!0,t.modified()},t.setJsImageData=r=>{e.jsImageData!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.image=null,e.canvas=null),e.jsImageData=r,e.imageLoaded=!0,t.modified())},t.setCanvas=r=>{e.canvas!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.image=null,e.jsImageData=null),e.canvas=r,t.modified())},t.setImage=r=>{e.image!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.canvas=null,e.jsImageData=null),e.image=r,e.imageLoaded=!1,r.complete?t.imageLoaded():r.addEventListener("load",t.imageLoaded),t.modified())},t.getDimensionality=()=>{let r=0,n=0,i=1;if(t.getInputData()){const a=t.getInputData();r=a.getDimensions()[0],n=a.getDimensions()[1],i=a.getDimensions()[2]}return e.jsImageData&&(r=e.jsImageData.width,n=e.jsImageData.height),e.canvas&&(r=e.canvas.width,n=e.canvas.height),e.image&&(r=e.image.width,n=e.image.height),(r>1)+(n>1)+(i>1)},t.getInputAsJsImageData=()=>{if(!e.imageLoaded||t.getInputData())return null;if(e.jsImageData)return e.jsImageData();if(e.canvas)return e.canvas.getContext("2d").getImageData(0,0,e.canvas.width,e.canvas.height);if(e.image){const r=document.createElement("canvas");r.width=e.image.width,r.height=e.image.height;const n=r.getContext("2d");return n.translate(0,r.height),n.scale(1,-1),n.drawImage(e.image,0,0,e.image.width,e.image.height),n.getImageData(0,0,r.width,r.height)}return null}}const Kde=(t,e,r,n)=>{const i=[1,2,1],o=4,a=i,s=o,c=t.length/(e*r);let l=e,f=r,u=t;const d=[u];for(let h=0;hc&&(_+=p),E<-c&&(_-=p),y[_]?S+=y[_]*a[T]:C-=a[T],x+=1}u[m+w]=S/C}y=[...u];for(let m=0;m2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,qde,r),J.obj(t,e),J.algo(t,e,6,0),J.get(t,e,["canvas","image","jsImageData","imageLoaded","resizable"]),J.setGet(t,e,["repeat","edgeClamp","interpolate","mipLevel"]),Hde(t,e)}const Xde=J.newInstance(kV,"vtkTexture"),Yde={generateMipmaps:Kde};var Bd={newInstance:Xde,extend:kV,...Yde};const Jde=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],k9=[[8,7,11,3],[9,1,10,5],[4,9,0,8],[2,11,6,10],[0,3,2,1],[4,5,6,7]],_v=[[0,1],[1,3],[2,3],[0,2],[4,5],[5,7],[6,7],[4,6],[0,4],[1,5],[3,7],[2,6]],V9=[0,1,0,1,0,1,0,1,2,2,2,2],Gr=[[1,2],[1,2],[0,2],[0,2],[0,1],[0,1]],vn=new Float64Array(3),Ev=new Float64Array(3),ar=new Float64Array(3),Yf=new Float64Array(3),Af=new Float64Array(3),bv=new Float64Array(3),g3=new Float64Array(16);function p3(t,e){t.strokeStyle=e.strokeColor,t.lineWidth=e.strokeSize,t.fillStyle=e.fontColor,t.font=`${e.fontStyle} ${e.fontSize}px ${e.fontFamily}`}function VV(t){const e=[],r=[];for(let n=0;n<3;n++){const i=CE().domain([t[n*2],t[n*2+1]]);e[n]=i.ticks(5);const o=i.tickFormat(5);r[n]=e[n].map(o)}return{ticks:e,tickStrings:r}}function Zde(t,e){e.classHierarchy.push("vtkCubeAxesActorHelper"),t.setRenderable=r=>{e.renderable!==r&&(e.renderable=r,e.tmActor.addTexture(e.renderable.getTmTexture()),e.tmActor.setProperty(r.getProperty()),e.tmActor.setParentProp(r),t.modified())},t.createPolyDataForOneLabel=(r,n,i,o,a,s,c)=>{const l=e.renderable.get_tmAtlas().get(r);if(!l)return;const f=e.renderable.getTextPolyData().getPoints().getData(),u=e.lastSize;vn[0]=f[n*3],vn[1]=f[n*3+1],vn[2]=f[n*3+2],Yt(ar,vn,i),ar[0]+=.1,Yt(Ev,ar,o),qn(Af,Ev,vn),ar[0]-=.1,ar[1]+=.1,Yt(Ev,ar,o),qn(bv,Ev,vn);for(let g=0;g<3;g++)Af[g]/=.5*.1*u[0],bv[g]/=.5*.1*u[1];let d=c.ptIdx,h=c.cellIdx;vn[0]=f[n*3],vn[1]=f[n*3+1],vn[2]=f[n*3+2],a[0]<-.5?Ir(ar,Af,a[0]*s-l.width):a[0]>.5?Ir(ar,Af,a[0]*s):Ir(ar,Af,a[0]*s-l.width/2),ri(vn,vn,ar),Ir(ar,bv,a[1]*s-l.height/2),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[0],c.tcoords[d*2+1]=l.tcoords[1],d++,Ir(ar,Af,l.width),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[2],c.tcoords[d*2+1]=l.tcoords[3],d++,Ir(ar,bv,l.height),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[4],c.tcoords[d*2+1]=l.tcoords[5],d++,Ir(ar,Af,l.width),qn(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[6],c.tcoords[d*2+1]=l.tcoords[7],d++,c.polys[h*4]=3,c.polys[h*4+1]=d-4,c.polys[h*4+2]=d-3,c.polys[h*4+3]=d-2,h++,c.polys[h*4]=3,c.polys[h*4+1]=d-4,c.polys[h*4+2]=d-2,c.polys[h*4+3]=d-1,c.ptIdx+=4,c.cellIdx+=2},t.updateTexturePolyData=()=>{const r=e.camera.getCompositeProjectionMatrix(e.lastAspectRatio,-1,1);En(r,r);const n=e.renderable.getTextValues().length,i=n*4,o=n*2,a=new Float64Array(i*3),s=new Uint16Array(o*4),c=new Float32Array(i*2);$r(g3,r);const l={ptIdx:0,cellIdx:0,polys:s,points:a,tcoords:c};let f=0,u=0,d=0;const h=e.renderable.getTextPolyData().getPoints().getData(),g=e.renderable.getTextValues();for(;f{(e.lastSize[0]!==r[0]||e.lastSize[1]!==r[1])&&(e.lastSize[0]=r[0],e.lastSize[1]=r[1],e.lastAspectRatio=r[0]/r[1],e.forceUpdate=!0),e.camera=n,t.updateTexturePolyData()}}const Qde=J.newInstance(function(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{renderable:null};Object.assign(e,{},r),J.obj(t,e),e.tmPolyData=Br.newInstance(),e.tmMapper=wa.newInstance(),e.tmMapper.setInputData(e.tmPolyData),e.tmActor=dc.newInstance({parentProp:t}),e.tmActor.setMapper(e.tmMapper),J.setGet(t,e,["renderable"]),J.get(t,e,["lastSize","lastAspectRatio","axisTextStyle","tickTextStyle","tmActor","ticks"]),e.forceUpdate=!1,e.lastRedrawTime={},J.obj(e.lastRedrawTime,{mtime:0}),e.lastRebuildTime={},J.obj(e.lastRebuildTime,{mtime:0}),e.lastSize=[-1,-1],e.lastTickBounds=[],Zde(t,e)},"vtkCubeAxesActorHelper");function e0e(t,e){e.classHierarchy.push("vtkCubeAxesActor"),t.setCamera=n=>{e.camera!==n&&(e.cameraModifiedSub&&(e.cameraModifiedSub.unsubscribe(),e.cameraModifiedSub=null),e.camera=n,n&&(e.cameraModifiedSub=n.onModified(t.update)),t.update(),t.modified())},t.computeFacesToDraw=()=>{const n=e.camera.getViewMatrix();En(n,n);let i=!1;const o=ir.getDiagonalLength(e.dataBounds),a=Math.sin(e.faceVisibilityAngle*Math.PI/180);for(let s=0;s<6;s++){let c=!1;const l=Math.floor(s/2),f=(l+1)%3,u=(l+2)%3;e.dataBounds[f*2]!==e.dataBounds[f*2+1]&&e.dataBounds[u*2]!==e.dataBounds[u*2+1]&&(vn[l]=e.dataBounds[s]-.1*o*Jde[s][l],vn[f]=.5*(e.dataBounds[f*2]+e.dataBounds[f*2+1]),vn[u]=.5*(e.dataBounds[u*2]+e.dataBounds[u*2+1]),Yt(ar,vn,n),vn[l]=e.dataBounds[s],Yt(Yf,vn,n),qn(ar,Yf,ar),Qn(ar,ar),c=ar[2]>a,e.camera.getParallelProjection()||(Qn(Yf,Yf),c=kt(Yf,ar)>a)),c!==e.lastFacesToDraw[s]&&(e.lastFacesToDraw[s]=c,i=!0)}return i},t.updatePolyData=(n,i,o)=>{let a=0,s=0;a+=8;let c=0;for(let h=0;h<12;h++)i[h]>0&&c++;if(s+=c,e.gridLines)for(let h=0;h<6;h++)n[h]&&(a+=o[Gr[h][0]].length*2+o[Gr[h][1]].length*2,s+=o[Gr[h][0]].length+o[Gr[h][1]].length);const l=new Float64Array(a*3),f=new Uint32Array(s*3);let u=0,d=0;for(let h=0;h<2;h++)for(let g=0;g<2;g++)for(let p=0;p<2;p++)l[u*3]=e.dataBounds[p],l[u*3+1]=e.dataBounds[2+g],l[u*3+2]=e.dataBounds[4+h],u++;for(let h=0;h<12;h++)i[h]>0&&(f[d*3]=2,f[d*3+1]=_v[h][0],f[d*3+2]=_v[h][1],d++);if(e.gridLines){for(let h=0;h<6;h++)if(n[h]){const g=Math.floor(h/2);let p=o[Gr[h][0]];for(let v=0;v{let s=0;for(let h=0;h<12;h++)i[h]===1&&(s+=2,s+=o[V9[h]].length);const c=e.polyData.getPoints().getData(),l=new Float64Array(s*3);let f=0,u=0,d=0;for(let h=0;h<6;h++)if(n[h])for(let g=0;g<4;g++){const p=k9[h][g];if(i[p]===1){const v=V9[p],y=_v[p][0]*3,m=_v[p][1]*3;l[f*3]=.5*(c[y]+c[m]),l[f*3+1]=.5*(c[y+1]+c[m+1]),l[f*3+2]=.5*(c[y+2]+c[m+2]),f++;const w=Math.floor(h/2);l[f*3+w]=e.dataBounds[h],l[f*3+Gr[h][0]]=.5*(e.dataBounds[Gr[h][0]*2]+e.dataBounds[Gr[h][0]*2+1]),l[f*3+Gr[h][1]]=.5*(e.dataBounds[Gr[h][1]*2]+e.dataBounds[Gr[h][1]*2+1]),f++,e.textValues[u]=e.axisLabels[v],u++;const x=(v+1)%3,C=(v+2)%3,S=o[v],T=a[v];e.tickCounts[d]=S.length;for(let _=0;_{if(!e.camera)return;const n=t.computeFacesToDraw(),i=e.lastFacesToDraw;let o=!1;for(let a=0;a<6;a++)e.dataBounds[a]!==e.lastTickBounds[a]&&(o=!0,e.lastTickBounds[a]=e.dataBounds[a]);if(n||o||e.forceUpdate){const a=new Array(12).fill(0);for(let c=0;c<6;c++)if(i[c])for(let l=0;l<4;l++)a[k9[c][l]]++;const s=e.generateTicks(e.dataBounds);t.updatePolyData(i,a,s.ticks),t.updateTextData(i,a,s.ticks,s.tickStrings),(o||e.forceUpdate)&&t.updateTextureAtlas(s.tickStrings)}e.forceUpdate=!1},t.updateTextureAtlas=n=>{e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e._tmAtlas.clear();let i=0,o=1;for(let a=0;a<3;a++){if(!e._tmAtlas.has(e.axisLabels[a])){p3(e.tmContext,e.axisTextStyle);const s=e.tmContext.measureText(e.axisLabels[a]),c={height:s.actualBoundingBoxAscent+2,startingHeight:o,width:s.width+2,textStyle:e.axisTextStyle};e._tmAtlas.set(e.axisLabels[a],c),o+=c.height,i{a.tcoords=[0,(o-a.startingHeight-a.height)/o,a.width/i,(o-a.startingHeight-a.height)/o,a.width/i,(o-a.startingHeight)/o,0,(o-a.startingHeight)/o]}),e.tmCanvas.width=i,e.tmCanvas.height=o,e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e.tmContext.clearRect(0,0,i,o),e._tmAtlas.forEach((a,s)=>{p3(e.tmContext,a.textStyle),e.tmContext.fillText(s,1,a.startingHeight+a.height-1)}),e.tmTexture.setCanvas(e.tmCanvas),e.tmTexture.modified()},t.onModified(()=>{e.forceUpdate=!0,t.update()}),t.setTickTextStyle=n=>{e.tickTextStyle={...e.tickTextStyle,...n},t.modified()},t.setAxisTextStyle=n=>{e.axisTextStyle={...e.axisTextStyle,...n},t.modified()},t.get_tmAtlas=()=>e._tmAtlas,t.getBounds=()=>(t.update(),ir.setBounds(e.bounds,e.gridActor.getBounds()),ir.scaleAboutCenter(e.bounds,e.boundsScaleFactor,e.boundsScaleFactor,e.boundsScaleFactor),e.bounds);const r=J.chain(t.setProperty,e.gridActor.setProperty);t.setProperty=n=>r(n)[0]}function t0e(t,e,r){return{boundsScaleFactor:1.3,camera:null,dataBounds:[...ir.INIT_BOUNDS],faceVisibilityAngle:8,gridLines:!0,axisLabels:null,axisTitlePixelOffset:35,tickLabelPixelOffset:12,generateTicks:VV,...r,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif",...r==null?void 0:r.axisTextStyle},tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif",...r==null?void 0:r.tickTextStyle}}}function FV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};dc.extend(t,e,t0e(t,e,r)),e.lastFacesToDraw=[!1,!1,!1,!1,!1,!1],e.axisLabels=["X-Axis","Y-Axis","Z-Axis"],e.tickCounts=[],e.textValues=[],e.lastTickBounds=[],e.tmCanvas=document.createElement("canvas"),e.tmContext=e.tmCanvas.getContext("2d"),e._tmAtlas=new Map,e.tmTexture=Bd.newInstance({resizable:!0}),e.tmTexture.setInterpolate(!1),t.getProperty().setDiffuse(0),t.getProperty().setAmbient(1),e.gridMapper=wa.newInstance(),e.polyData=Br.newInstance(),e.gridMapper.setInputData(e.polyData),e.gridActor=dc.newInstance(),e.gridActor.setMapper(e.gridMapper),e.gridActor.setProperty(t.getProperty()),e.gridActor.setParentProp(t),e.textPolyData=Br.newInstance(),J.setGet(t,e,["axisTitlePixelOffset","boundsScaleFactor","faceVisibilityAngle","gridLines","tickLabelPixelOffset","generateTicks"]),J.setGetArray(t,e,["dataBounds"],6),J.setGetArray(t,e,["axisLabels"],3),J.get(t,e,["axisTextStyle","tickTextStyle","camera","tmTexture","textValues","textPolyData","tickCounts","gridActor"]),e0e(t,e)}const n0e=J.newInstance(FV,"vtkCubeAxesActor");var UV={newInstance:n0e,extend:FV,newCubeAxesActorHelper:Qde,defaultGenerateTicks:VV};function r0e(t,e){e.classHierarchy.push("vtkOpenGLCubeAxesActor"),t.buildPass=r=>{r&&(e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.CubeAxesActorHelper.getRenderable()||e.CubeAxesActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.CubeAxesActorHelper.getTmActor()),t.addMissingNode(e.renderable.getGridActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,o=e._openGLRenderer.getTiledSizeAndOrigin();e.CubeAxesActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e._openGLRenderWindow.getRenderable())}}}const i0e={};function o0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,i0e,r),fr.extend(t,e,r),e.CubeAxesActorHelper=UV.newCubeAxesActorHelper(),r0e(t,e)}const a0e=$n(o0e,"vtkOpenGLCubeAxesActor");Mi("vtkCubeAxesActor",a0e);const{ColorMode:s0e,ScalarMode:Nf,GetArray:m3}=ow;function c0e(t,e){e.classHierarchy.push("vtkMapper2D"),t.createDefaultLookupTable=()=>{e.lookupTable=Dy.newInstance()},t.getColorModeAsString=()=>J.enumToString(s0e,e.colorMode),t.setColorModeToDefault=()=>t.setColorMode(0),t.setColorModeToMapScalars=()=>t.setColorMode(1),t.setColorModeToDirectScalars=()=>t.setColorMode(2),t.getScalarModeAsString=()=>J.enumToString(Nf,e.scalarMode),t.setScalarModeToDefault=()=>t.setScalarMode(0),t.setScalarModeToUsePointData=()=>t.setScalarMode(1),t.setScalarModeToUseCellData=()=>t.setScalarMode(2),t.setScalarModeToUsePointFieldData=()=>t.setScalarMode(3),t.setScalarModeToUseCellFieldData=()=>t.setScalarMode(4),t.setScalarModeToUseFieldData=()=>t.setScalarMode(5),t.getAbstractScalars=(r,n,i,o,a)=>{if(!r||!e.scalarVisibility)return{scalars:null,cellFLag:!1};let s=null,c=!1;if(n===Nf.DEFAULT)s=r.getPointData().getScalars(),s||(s=r.getCellData().getScalars(),c=!0);else if(n===Nf.USE_POINT_DATA)s=r.getPointData().getScalars();else if(n===Nf.USE_CELL_DATA)s=r.getCellData().getScalars(),c=!0;else if(n===Nf.USE_POINT_FIELD_DATA){const l=r.getPointData();i===m3.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}else if(n===Nf.USE_CELL_FIELD_DATA){const l=r.getCellData();c=!0,i===m3.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}else if(n===Nf.USE_FIELD_DATA){const l=r.getFieldData();i===m3.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}return{scalars:s,cellFlag:c}},t.getLookupTable=()=>(e.lookupTable||t.createDefaultLookupTable(),e.lookupTable),t.getMTime=()=>{let r=e.mtime;if(e.lookupTable!==null){const n=e.lookupTable.getMTime();r=n>r?n:r}return r},t.mapScalars=(r,n)=>{const i=t.getAbstractScalars(r,e.scalarMode,e.arrayAccessMode,e.arrayId,e.colorByArrayName).scalars;if(!i){e.colorMapColors=null;return}const o=`${t.getMTime()}${i.getMTime()}${n}`;if(e.colorBuildString===o)return;e.useLookupTableScalarRange||t.getLookupTable().setRange(e.scalarRange[0],e.scalarRange[1]);const a=t.getLookupTable();a&&(a.build(),e.colorMapColors=a.mapScalars(i,e.colorMode,e.fieldDataTupleId)),e.colorBuildString=`${t.getMTime()}${i.getMTime()}${n}`},t.getPrimitiveCount=()=>{const r=t.getInputData();return{points:r.getPoints().getNumberOfValues()/3,verts:r.getVerts().getNumberOfValues()-r.getVerts().getNumberOfCells(),lines:r.getLines().getNumberOfValues()-2*r.getLines().getNumberOfCells(),triangles:r.getPolys().getNumberOfValues()-3*r.getPolys().getNumberOfCells()}}}const l0e={static:!1,lookupTable:null,scalarVisibility:!1,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,transformCoordinate:null,viewSpecificProperties:null,customShaderAttributes:[]};function u0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,l0e,r),SL.extend(t,e,r),J.get(t,e,["colorMapColors"]),J.setGet(t,e,["arrayAccessMode","colorByArrayName","colorMode","lookupTable","renderTime","scalarMode","scalarVisibility","static","transformCoordinate","useLookupTableScalarRange","viewSpecificProperties","customShaderAttributes"]),J.setGetArray(t,e,["scalarRange"],2),e.viewSpecificProperties||(e.viewSpecificProperties={}),c0e(t,e)}J.newInstance(u0e,"vtkMapper2D");var f0e={},d0e=`//VTK::System::Dec +`:""}r.exports.dump=P,r.exports.safeDump=function(O,A){return P(O,o.extend({schema:c},A))}},function(r,n,i){i(31),i(32),i(33),i(64),i(19),i(65),i(20),i(68),i(92),i(144),i(22),i(94),i(23);var o,a=this&&this.__extends||(o=function(C,S){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(T,_){T.__proto__=_}||function(T,_){for(var E in _)_.hasOwnProperty(E)&&(T[E]=_[E])})(C,S)},function(C,S){function T(){this.constructor=C}o(C,S),C.prototype=S===null?Object.create(S):(T.prototype=S.prototype,new T)}),s=this&&this.__values||function(C){var S=typeof Symbol=="function"&&Symbol.iterator,T=S&&C[S],_=0;if(T)return T.call(C);if(C&&typeof C.length=="number")return{next:function(){return C&&_>=C.length&&(C=void 0),{value:C&&C[_++],done:!C}}};throw new TypeError(S?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(C,S){var T=typeof Symbol=="function"&&C[Symbol.iterator];if(!T)return C;var _,E,b=T.call(C),D=[];try{for(;(S===void 0||S-- >0)&&!(_=b.next()).done;)D.push(_.value)}catch(I){E={error:I}}finally{try{_&&!_.done&&(T=b.return)&&T.call(b)}finally{if(E)throw E.error}}return D};Object.defineProperty(n,"__esModule",{value:!0});var l=i(91),f=i(1),u=i(183),d=i(0),h=i(7),g=i(95),p=i(69),v=i(3),y=i(305),m=i(306),w=i(307),x=function(C){function S(T,_){_===void 0&&(_=!1);var E=C.call(this)||this;return E._hasDeclaration=!1,E._docTypeName="",E._hasDocumentElement=!1,E._currentElementSerialized=!1,E._openTags=[],E._ended=!1,E._fragment=_,E._options=f.applyDefaults(T||{},l.DefaultXMLBuilderCBOptions),E._builderOptions={defaultNamespace:E._options.defaultNamespace,namespaceAlias:E._options.namespaceAlias},E._options.format==="json"?E._writer=new m.JSONCBWriter(E._options):E._options.format==="yaml"?E._writer=new w.YAMLCBWriter(E._options):E._writer=new y.XMLCBWriter(E._options),E._options.data!==void 0&&E.on("data",E._options.data),E._options.end!==void 0&&E.on("end",E._options.end),E._options.error!==void 0&&E.on("error",E._options.error),E._prefixMap=new g.NamespacePrefixMap,E._prefixMap.set("xml",h.namespace.XML),E._prefixIndex={value:1},E._push(E._writer.frontMatter()),E}return a(S,C),S.prototype.ele=function(T,_,E){var b,D;if(f.isObject(T)||f.isString(T)&&(/^\s*/g,">");return this._push(this._writer.text(E)),this},S.prototype.ins=function(T,_){var E;_===void 0&&(_=""),this._serializeOpenTag(!0);try{E=u.fragment(this._builderOptions).ins(T,_).first().node}catch(b){return this.emit("error",b),this}return this._options.wellFormed&&(E.target.indexOf(":")!==-1||/^xml$/i.test(E.target))?(this.emit("error",new Error("Processing instruction target contains invalid characters (well-formed required).")),this):this._options.wellFormed&&!d.xml_isLegalChar(E.data)?(this.emit("error",Error("Processing instruction data contains invalid characters (well-formed required).")),this):(this._push(this._writer.instruction(E.target,E.data)),this)},S.prototype.dat=function(T){var _;this._serializeOpenTag(!0);try{_=u.fragment(this._builderOptions).dat(T).first().node}catch(E){return this.emit("error",E),this}return this._push(this._writer.cdata(_.data)),this},S.prototype.dec=function(T){return T===void 0&&(T={version:"1.0"}),this._fragment?(this.emit("error",Error("Cannot insert an XML declaration into a document fragment.")),this):this._hasDeclaration?(this.emit("error",Error("XML declaration is already inserted.")),this):(this._push(this._writer.declaration(T.version||"1.0",T.encoding,T.standalone)),this._hasDeclaration=!0,this)},S.prototype.dtd=function(T){if(this._fragment)return this.emit("error",Error("Cannot insert a DocType declaration into a document fragment.")),this;if(this._docTypeName!=="")return this.emit("error",new Error("DocType declaration is already inserted.")),this;if(this._hasDocumentElement)return this.emit("error",new Error("Cannot insert DocType declaration after document element.")),this;var _;try{_=u.create().dtd(T).first().node}catch(E){return this.emit("error",E),this}return this._options.wellFormed&&!d.xml_isPubidChar(_.publicId)?(this.emit("error",new Error("DocType public identifier does not match PubidChar construct (well-formed required).")),this):this._options.wellFormed&&(!d.xml_isLegalChar(_.systemId)||_.systemId.indexOf('"')!==-1&&_.systemId.indexOf("'")!==-1)?(this.emit("error",new Error("DocType system identifier contains invalid characters (well-formed required).")),this):(this._docTypeName=T.name,this._push(this._writer.docType(T.name,_.publicId,_.systemId)),this)},S.prototype.import=function(T){var _,E,b=u.fragment().set(this._options);try{b.import(T)}catch(O){return this.emit("error",O),this}try{for(var D=s(b.node.childNodes),I=D.next();!I.done;I=D.next()){var P=I.value;this._fromNode(P)}}catch(O){_={error:O}}finally{try{I&&!I.done&&(E=D.return)&&E.call(D)}finally{if(_)throw _.error}}return this},S.prototype.up=function(){return this._serializeOpenTag(!1),this._serializeCloseTag(),this},S.prototype.end=function(){for(this._serializeOpenTag(!1);this._openTags.length>0;)this._serializeCloseTag();return this._push(null),this},S.prototype._serializeOpenTag=function(T){if(!this._currentElementSerialized&&this._currentElement!==void 0){var _=this._currentElement.node;if(!this._options.wellFormed||_.localName.indexOf(":")===-1&&d.xml_isName(_.localName)){var E="",b=!1,D=this._prefixMap.copy(),I={},P=this._recordNamespaceInformation(_,D,I),O=this._openTags.length===0?null:this._openTags[this._openTags.length-1][1],A=_.namespaceURI;if(A===null&&(A=O),O===A)P!==null&&(b=!0),E=A===h.namespace.XML?"xml:"+_.localName:_.localName,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E));else{var V=_.prefix,G=null;if(V===null&&A===P||(G=D.get(V,A)),V==="xmlns"){if(this._options.wellFormed)return void this.emit("error",new Error("An element cannot have the 'xmlns' prefix (well-formed required)."));G=V}G!==null?(E=G+":"+_.localName,P!==null&&P!==h.namespace.XML&&(O=P||null),this._writer.beginElement(E),this._push(this._writer.openTagBegin(E))):V!==null?(V in I&&(V=this._generatePrefix(A,D,this._prefixIndex)),D.set(V,A),E+=V+":"+_.localName,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)),this._push(this._writer.attribute("xmlns:"+V,this._serializeAttributeValue(A,this._options.wellFormed))),P!==null&&(O=P||null)):P===null||P!==null&&P!==A?(b=!0,E+=_.localName,O=A,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)),this._push(this._writer.attribute("xmlns",this._serializeAttributeValue(A,this._options.wellFormed)))):(E+=_.localName,O=A,this._writer.beginElement(E),this._push(this._writer.openTagBegin(E)))}this._serializeAttributes(_,D,this._prefixIndex,I,b,this._options.wellFormed);var R=A===h.namespace.HTML;R&&!T&&S._VoidElementNames.has(_.localName)?(this._push(this._writer.openTagEnd(E,!0,!0)),this._writer.endElement(E)):R||T?this._push(this._writer.openTagEnd(E,!1,!1)):(this._push(this._writer.openTagEnd(E,!0,!1)),this._writer.endElement(E)),this._currentElementSerialized=!0,this._openTags.push([E,O,this._prefixMap,T]),this._isPrefixMapModified(this._prefixMap,D)&&(this._prefixMap=D),this._writer.level++}else this.emit("error",new Error("Node local name contains invalid characters (well-formed required)."))}},S.prototype._serializeCloseTag=function(){this._writer.level--;var T=this._openTags.pop();if(T!==void 0){var _=c(T,4),E=_[0],b=(_[1],_[2]),D=_[3];this._prefixMap=b,D&&(this._push(this._writer.closeTag(E)),this._writer.endElement(E))}else this.emit("error",new Error("Last element is undefined."))},S.prototype._push=function(T){T===null?(this._ended=!0,this.emit("end")):this._ended?this.emit("error",new Error("Cannot push to ended stream.")):T.length!==0&&(this._writer.hasData=!0,this.emit("data",T,this._writer.level))},S.prototype._fromNode=function(T){var _,E,b,D;if(v.Guard.isElementNode(T)){var I=T.prefix?T.prefix+":"+T.localName:T.localName;T.namespaceURI!==null?this.ele(T.namespaceURI,I):this.ele(I);try{for(var P=s(T.attributes),O=P.next();!O.done;O=P.next()){var A=O.value,V=A.prefix?A.prefix+":"+A.localName:A.localName;A.namespaceURI!==null?this.att(A.namespaceURI,V,A.value):this.att(V,A.value)}}catch(F){_={error:F}}finally{try{O&&!O.done&&(E=P.return)&&E.call(P)}finally{if(_)throw _.error}}try{for(var G=s(T.childNodes),R=G.next();!R.done;R=G.next()){var N=R.value;this._fromNode(N)}}catch(F){b={error:F}}finally{try{R&&!R.done&&(D=G.return)&&D.call(G)}finally{if(b)throw b.error}}this.up()}else v.Guard.isExclusiveTextNode(T)&&T.data?this.txt(T.data):v.Guard.isCommentNode(T)?this.com(T.data):v.Guard.isCDATASectionNode(T)?this.dat(T.data):v.Guard.isProcessingInstructionNode(T)&&this.ins(T.target,T.data)},S.prototype._serializeAttributes=function(T,_,E,b,D,I){var P,O,A=I?new p.LocalNameSet:void 0;try{for(var V=s(T.attributes),G=V.next();!G.done;G=V.next()){var R=G.value;if(I||D||R.namespaceURI!==null){if(I&&A&&A.has(R.namespaceURI,R.localName))return void this.emit("error",new Error("Element contains duplicate attributes (well-formed required)."));I&&A&&A.set(R.namespaceURI,R.localName);var N=R.namespaceURI,F=null;if(N!==null)if(F=_.get(R.prefix,N),N===h.namespace.XMLNS){if(R.value===h.namespace.XML||R.prefix===null&&D||R.prefix!==null&&(!(R.localName in b)||b[R.localName]!==R.value)&&_.has(R.localName,R.value))continue;if(I&&R.value===h.namespace.XMLNS)return void this.emit("error",new Error("XMLNS namespace is reserved (well-formed required)."));if(I&&R.value==="")return void this.emit("error",new Error("Namespace prefix declarations cannot be used to undeclare a namespace (well-formed required)."));R.prefix==="xmlns"&&(F="xmlns")}else F===null&&(F=R.prefix===null||_.hasPrefix(R.prefix)&&!_.has(R.prefix,N)?this._generatePrefix(N,_,E):R.prefix,this._push(this._writer.attribute("xmlns:"+F,this._serializeAttributeValue(N,this._options.wellFormed))));if(I&&(R.localName.indexOf(":")!==-1||!d.xml_isName(R.localName)||R.localName==="xmlns"&&N===null))return void this.emit("error",new Error("Attribute local name contains invalid characters (well-formed required)."));this._push(this._writer.attribute((F!==null?F+":":"")+R.localName,this._serializeAttributeValue(R.value,this._options.wellFormed)))}else this._push(this._writer.attribute(R.localName,this._serializeAttributeValue(R.value,this._options.wellFormed)))}}catch(j){P={error:j}}finally{try{G&&!G.done&&(O=V.return)&&O.call(V)}finally{if(P)throw P.error}}},S.prototype._serializeAttributeValue=function(T,_){return _&&T!==null&&!d.xml_isLegalChar(T)?(this.emit("error",new Error("Invalid characters in attribute value.")),""):T===null?"":T.replace(/(?!&(lt|gt|amp|apos|quot);)&/g,"&").replace(//g,">").replace(/"/g,""")},S.prototype._recordNamespaceInformation=function(T,_,E){var b,D,I=null;try{for(var P=s(T.attributes),O=P.next();!O.done;O=P.next()){var A=O.value,V=A.namespaceURI,G=A.prefix;if(V===h.namespace.XMLNS){if(G===null){I=A.value;continue}var R=A.localName,N=A.value;if(N===h.namespace.XML||(N===""&&(N=null),_.has(R,N)))continue;_.set(R,N),E[R]=N||""}}}catch(F){b={error:F}}finally{try{O&&!O.done&&(D=P.return)&&D.call(P)}finally{if(b)throw b.error}}return I},S.prototype._generatePrefix=function(T,_,E){var b="ns"+E.value;return E.value++,_.set(b,T),b},S.prototype._isPrefixMapModified=function(T,_){var E=T._items,b=_._items,D=T._nullItems,I=_._nullItems;for(var P in b){var O=E[P];if(O===void 0)return!0;var A=b[P];if(O.length!==A.length)return!0;for(var V=0;V':u?"':d?"':""},l.prototype.comment=function(f){return this._beginLine()+""},l.prototype.text=function(f){return this._beginLine()+f},l.prototype.instruction=function(f,u){return u?this._beginLine()+"":this._beginLine()+""},l.prototype.cdata=function(f){return this._beginLine()+""},l.prototype.openTagBegin=function(f){return this._lineLength+=1+f.length,this._beginLine()+"<"+f},l.prototype.openTagEnd=function(f,u,d){return d?" />":u?this._writerOptions.allowEmptyTags?">":this._writerOptions.spaceBeforeSlash?" />":"/>":">"},l.prototype.closeTag=function(f){return this._beginLine()+""},l.prototype.attribute=function(f,u){var d=f+'="'+u+'"';return this._writerOptions.prettyPrint&&this._writerOptions.width>0&&this._lineLength+1+d.length>this._writerOptions.width?(d=this._beginLine()+this._indent(1)+d,this._lineLength=d.length,d):(this._lineLength+=1+d.length," "+d)},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){},l.prototype._beginLine=function(){if(this._writerOptions.prettyPrint){var f=(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level);return this._lineLength=f.length,f}return""},l.prototype._indent=function(f){return f<=0?"":this._writerOptions.indent.repeat(f)},l}(i(114).BaseCBWriter);n.XMLCBWriter=s},function(r,n,i){i(74);var o,a=this&&this.__extends||(o=function(c,l){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,u){f.__proto__=u}||function(f,u){for(var d in u)u.hasOwnProperty(d)&&(f[d]=u[d])})(c,l)},function(c,l){function f(){this.constructor=c}o(c,l),c.prototype=l===null?Object.create(l):(f.prototype=l.prototype,new f)});Object.defineProperty(n,"__esModule",{value:!0});var s=function(c){function l(f){var u=c.call(this,f)||this;return u._hasChildren=[],u._additionalLevel=0,u}return a(l,c),l.prototype.frontMatter=function(){return""},l.prototype.declaration=function(f,u,d){return""},l.prototype.docType=function(f,u,d){return""},l.prototype.comment=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.comment)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.text=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.text)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.instruction=function(f,u){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.ins)+this._sep()+this._val(u?f+" "+u:f)+this._sep()+"}"},l.prototype.cdata=function(f){return this._comma()+this._beginLine()+"{"+this._sep()+this._key(this._builderOptions.convert.cdata)+this._sep()+this._val(f)+this._sep()+"}"},l.prototype.attribute=function(f,u){return this._comma()+this._beginLine(1)+"{"+this._sep()+this._key(this._builderOptions.convert.att+f)+this._sep()+this._val(u)+this._sep()+"}"},l.prototype.openTagBegin=function(f){var u=this._comma()+this._beginLine()+"{"+this._sep()+this._key(f)+this._sep()+"{";return this._additionalLevel++,this.hasData=!0,u+=this._beginLine()+this._key(this._builderOptions.convert.text)+this._sep()+"[",this._hasChildren.push(!1),u},l.prototype.openTagEnd=function(f,u,d){if(u){var h=this._sep()+"]";return this._additionalLevel--,h+=this._beginLine()+"}"+this._sep()+"}"}return""},l.prototype.closeTag=function(f){var u=this._beginLine()+"]";return this._additionalLevel--,u+=this._beginLine()+"}"+this._sep()+"}"},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){this._hasChildren.pop()},l.prototype._beginLine=function(f){return f===void 0&&(f=0),this._writerOptions.prettyPrint?(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level+f):""},l.prototype._indent=function(f){return f+this._additionalLevel<=0?"":this._writerOptions.indent.repeat(f+this._additionalLevel)},l.prototype._comma=function(){var f=this._hasChildren[this._hasChildren.length-1]?",":"";return this._hasChildren.length>0&&(this._hasChildren[this._hasChildren.length-1]=!0),f},l.prototype._sep=function(){return this._writerOptions.prettyPrint?" ":""},l.prototype._key=function(f){return'"'+f+'":'},l.prototype._val=function(f){return JSON.stringify(f)},l}(i(114).BaseCBWriter);n.JSONCBWriter=s},function(r,n,i){i(74);var o,a=this&&this.__extends||(o=function(c,l){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,u){f.__proto__=u}||function(f,u){for(var d in u)u.hasOwnProperty(d)&&(f[d]=u[d])})(c,l)},function(c,l){function f(){this.constructor=c}o(c,l),c.prototype=l===null?Object.create(l):(f.prototype=l.prototype,new f)});Object.defineProperty(n,"__esModule",{value:!0});var s=function(c){function l(f){var u=c.call(this,f)||this;if(u._rootWritten=!1,u._additionalLevel=0,f.indent.length<2)throw new Error("YAML indententation string must be at least two characters long.");if(f.offset<0)throw new Error("YAML offset should be zero or a positive number.");return u}return a(l,c),l.prototype.frontMatter=function(){return this._beginLine()+"---"},l.prototype.declaration=function(f,u,d){return""},l.prototype.docType=function(f,u,d){return""},l.prototype.comment=function(f){return this._beginLine()+this._key(this._builderOptions.convert.comment)+" "+this._val(f)},l.prototype.text=function(f){return this._beginLine()+this._key(this._builderOptions.convert.text)+" "+this._val(f)},l.prototype.instruction=function(f,u){return this._beginLine()+this._key(this._builderOptions.convert.ins)+" "+this._val(u?f+" "+u:f)},l.prototype.cdata=function(f){return this._beginLine()+this._key(this._builderOptions.convert.cdata)+" "+this._val(f)},l.prototype.attribute=function(f,u){this._additionalLevel++;var d=this._beginLine()+this._key(this._builderOptions.convert.att+f)+" "+this._val(u);return this._additionalLevel--,d},l.prototype.openTagBegin=function(f){var u=this._beginLine()+this._key(f);return this._rootWritten||(this._rootWritten=!0),this.hasData=!0,this._additionalLevel++,u+=this._beginLine(!0)+this._key(this._builderOptions.convert.text)},l.prototype.openTagEnd=function(f,u,d){return u?" "+this._val(""):""},l.prototype.closeTag=function(f){return this._additionalLevel--,""},l.prototype.beginElement=function(f){},l.prototype.endElement=function(f){},l.prototype._beginLine=function(f){return f===void 0&&(f=!1),(this.hasData?this._writerOptions.newline:"")+this._indent(this._writerOptions.offset+this.level,f)},l.prototype._indent=function(f,u){if(f+this._additionalLevel<=0)return"";var d=this._writerOptions.indent.repeat(f+this._additionalLevel);return!u&&this._rootWritten?d.substr(0,d.length-2)+"-"+d.substr(-1,1):d},l.prototype._key=function(f){return'"'+f+'":'},l.prototype._val=function(f){return JSON.stringify(f)},l}(i(114).BaseCBWriter);n.YAMLCBWriter=s},function(r,n,i){var o,a=typeof Reflect=="object"?Reflect:null,s=a&&typeof a.apply=="function"?a.apply:function(w,x,C){return Function.prototype.apply.call(w,x,C)};o=a&&typeof a.ownKeys=="function"?a.ownKeys:Object.getOwnPropertySymbols?function(w){return Object.getOwnPropertyNames(w).concat(Object.getOwnPropertySymbols(w))}:function(w){return Object.getOwnPropertyNames(w)};var c=Number.isNaN||function(w){return w!=w};function l(){l.init.call(this)}r.exports=l,l.EventEmitter=l,l.prototype._events=void 0,l.prototype._eventsCount=0,l.prototype._maxListeners=void 0;var f=10;function u(w){if(typeof w!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof w)}function d(w){return w._maxListeners===void 0?l.defaultMaxListeners:w._maxListeners}function h(w,x,C,S){var T,_,E,b;if(u(C),(_=w._events)===void 0?(_=w._events=Object.create(null),w._eventsCount=0):(_.newListener!==void 0&&(w.emit("newListener",x,C.listener?C.listener:C),_=w._events),E=_[x]),E===void 0)E=_[x]=C,++w._eventsCount;else if(typeof E=="function"?E=_[x]=S?[C,E]:[E,C]:S?E.unshift(C):E.push(C),(T=d(w))>0&&E.length>T&&!E.warned){E.warned=!0;var D=new Error("Possible EventEmitter memory leak detected. "+E.length+" "+String(x)+" listeners added. Use emitter.setMaxListeners() to increase limit");D.name="MaxListenersExceededWarning",D.emitter=w,D.type=x,D.count=E.length,b=D,console&&console.warn&&console.warn(b)}return w}function g(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(w,x,C){var S={fired:!1,wrapFn:void 0,target:w,type:x,listener:C},T=g.bind(S);return T.listener=C,S.wrapFn=T,T}function v(w,x,C){var S=w._events;if(S===void 0)return[];var T=S[x];return T===void 0?[]:typeof T=="function"?C?[T.listener||T]:[T]:C?function(_){for(var E=new Array(_.length),b=0;b0&&(_=x[0]),_ instanceof Error)throw _;var E=new Error("Unhandled error."+(_?" ("+_.message+")":""));throw E.context=_,E}var b=T[w];if(b===void 0)return!1;if(typeof b=="function")s(b,this,x);else{var D=b.length,I=m(b,D);for(C=0;C=0;_--)if(C[_]===x||C[_].listener===x){E=C[_].listener,T=_;break}if(T<0)return this;T===0?C.shift():function(b,D){for(;D+1=0;S--)this.removeListener(w,x[S]);return this},l.prototype.listeners=function(w){return v(this,w,!0)},l.prototype.rawListeners=function(w){return v(this,w,!1)},l.listenerCount=function(w,x){return typeof w.listenerCount=="function"?w.listenerCount(x):y.call(w,x)},l.prototype.listenerCount=y,l.prototype.eventNames=function(){return this._eventsCount>0?o(this._events):[]}},function(r,n,i){Object.defineProperty(n,"__esModule",{value:!0});var o=i(77);n.createCB=function(a){return new o.XMLBuilderCBImpl(a)},n.fragmentCB=function(a){return new o.XMLBuilderCBImpl(a,!0)}}])})})(Jk);var $le=Jk.exports,Ga=Uint8Array,rd=Uint16Array,Zk=Uint32Array,Qk=new Ga([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),eV=new Ga([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),jle=new Ga([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),tV=function(t,e){for(var r=new rd(31),n=0;n<31;++n)r[n]=e+=1<>>1|(Vr&21845)<<1;mu=(mu&52428)>>>2|(mu&13107)<<2,mu=(mu&61680)>>>4|(mu&3855)<<4,OS[Vr]=((mu&65280)>>>8|(mu&255)<<8)>>>1}var Cp=function(t,e,r){for(var n=t.length,i=0,o=new rd(e);i>>c]=l}else for(s=new rd(n),i=0;i>>15-t[i]);return s},hm=new Ga(288);for(var Vr=0;Vr<144;++Vr)hm[Vr]=8;for(var Vr=144;Vr<256;++Vr)hm[Vr]=9;for(var Vr=256;Vr<280;++Vr)hm[Vr]=7;for(var Vr=280;Vr<288;++Vr)hm[Vr]=8;var iV=new Ga(32);for(var Vr=0;Vr<32;++Vr)iV[Vr]=5;var Xle=Cp(hm,9,1),Yle=Cp(iV,5,1),aC=function(t){for(var e=t[0],r=1;re&&(e=t[r]);return e},zs=function(t,e,r){var n=e/8|0;return(t[n]|t[n+1]<<8)>>(e&7)&r},sC=function(t,e){var r=e/8|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(e&7)},Jle=function(t){return(t+7)/8|0},Zle=function(t,e,r){(r==null||r>t.length)&&(r=t.length);var n=new(t.BYTES_PER_ELEMENT==2?rd:t.BYTES_PER_ELEMENT==4?Zk:Ga)(r-e);return n.set(t.subarray(e,r)),n},Qle=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Js=function(t,e,r){var n=new Error(e||Qle[t]);if(n.code=t,Error.captureStackTrace&&Error.captureStackTrace(n,Js),!r)throw n;return n},sE=function(t,e,r){var n=t.length;if(!n||r&&r.f&&!r.l)return e||new Ga(0);var i=!e||r,o=!r||r.i;r||(r={}),e||(e=new Ga(n*3));var a=function(ve){var Me=e.length;if(ve>Me){var Ue=new Ga(Math.max(Me*2,ve));Ue.set(e),e=Ue}},s=r.f||0,c=r.p||0,l=r.b||0,f=r.l,u=r.d,d=r.m,h=r.n,g=n*8;do{if(!f){s=zs(t,c,1);var p=zs(t,c+1,3);if(c+=3,p)if(p==1)f=Xle,u=Yle,d=9,h=5;else if(p==2){var w=zs(t,c,31)+257,x=zs(t,c+10,15)+4,C=w+zs(t,c+5,31)+1;c+=14;for(var S=new Ga(C),T=new Ga(19),_=0;_>>4;if(v<16)S[_++]=v;else{var P=0,O=0;for(v==16?(O=3+zs(t,c,3),c+=2,P=S[_-1]):v==17?(O=3+zs(t,c,7),c+=3):v==18&&(O=11+zs(t,c,127),c+=7);O--;)S[_++]=P}}var A=S.subarray(0,w),V=S.subarray(w);d=aC(A),h=aC(V),f=Cp(A,d,1),u=Cp(V,h,1)}else Js(1);else{var v=Jle(c)+4,y=t[v-4]|t[v-3]<<8,m=v+y;if(m>n){o&&Js(0);break}i&&a(l+y),e.set(t.subarray(v,m),l),r.b=l+=y,r.p=c=m*8,r.f=s;continue}if(c>g){o&&Js(0);break}}i&&a(l+131072);for(var G=(1<>>4;if(c+=P&15,c>g){o&&Js(0);break}if(P||Js(2),F<256)e[l++]=F;else if(F==256){N=c,f=null;break}else{var j=F-254;if(F>264){var _=F-257,te=Qk[_];j=zs(t,c,(1<>>4;ie||Js(3),c+=ie&15;var V=qle[he];if(he>3){var te=eV[he];V+=sC(t,c)&(1<g){o&&Js(0);break}i&&a(l+131072);for(var ue=l+j;l>3&1)+(e>>4&1);n>0;n-=!t[r++]);return r+(e&2)},nue=function(t){var e=t.length;return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0},rue=function(t){((t[0]&15)!=8||t[0]>>>4>7||(t[0]<<8|t[1])%31)&&Js(6,"invalid zlib data"),t[1]&32&&Js(6,"invalid zlib data: preset dictionaries not supported")};function iue(t,e){return sE(t,e)}function oue(t,e){return sE(t.subarray(tue(t),-8),new Ga(nue(t)))}function aue(t,e){return sE((rue(t),t.subarray(2,-4)),e)}function sue(t,e){return t[0]==31&&t[1]==139&&t[2]==8?oue(t):(t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31?iue(t,e):aue(t,e)}var cue=typeof TextDecoder<"u"&&new TextDecoder,lue=0;try{cue.decode(eue,{stream:!0}),lue=1}catch{}const Fa=[];Fa[45]=62;Fa[95]=63;const T0="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(let t=0;t>16&255,n[f++]=l>>8&255,n[f++]=l&255}switch(a){case 3:for(;!Bc(t[c]);)c++;for(l=Fa[t.charCodeAt(c++)]<<10;!Bc(t[c]);)c++;for(l|=Fa[t.charCodeAt(c++)]<<4;!Bc(t[c]);)c++;l|=Fa[t.charCodeAt(c++)]>>2,n[f++]=l>>8&255,n[f++]=l&255;break;case 2:for(;!Bc(t[c]);)c++;for(l=Fa[t.charCodeAt(c++)]<<2;!Bc(t[c]);)c++;l|=Fa[t.charCodeAt(c++)]>>4,n[f++]=l&255;break;case 1:throw new Error("BASE64: remain 1 should not happen")}return f}function due(t){const e=uue(t),r=e[e.length-1].end+1,n=(4-r%4)%4,i=(r+n)*3/4-n,o=new ArrayBuffer(i),a=new Uint8Array(o);let s=0;for(let c=0;c>18]+T0[n>>12&63]+T0[n>>6&63]+T0[n&63]}function hue(t){const e=new Uint8Array(t),r=t.byteLength%3,n=t.byteLength-r,i=Array(n/3);for(let o=0;o0){const o=f9(e[n],e[n+1]||0,e[n+2]||0);r===1?i.push(`${o.substr(0,2)}==`):r===2&&i.push(`${o.substr(0,3)}=`)}return i.join("")}var cE={toArrayBuffer:due,fromArrayBuffer:hue};function gue(t,e){e.classHierarchy.push("vtkStringArray"),t.getComponent=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return e.values[r*e.numberOfComponents+n]},t.setComponent=(r,n,i)=>{i!==e.values[r*e.numberOfComponents+n]&&(e.values[r*e.numberOfComponents+n]=i,t.modified())},t.getData=()=>e.values,t.getTuple=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];const i=e.numberOfComponents||1;n.length&&(n.length=i);const o=r*i;for(let a=0;a0&&arguments[0]!==void 0?arguments[0]:1)*e.numberOfComponents},t.getNumberOfComponents=()=>e.numberOfComponents,t.getNumberOfValues=()=>e.values.length,t.getNumberOfTuples=()=>e.values.length/e.numberOfComponents,t.getDataType=()=>e.dataType,t.newClone=()=>aV({name:e.name,numberOfComponents:e.numberOfComponents,empty:!0}),t.getName=()=>(e.name||t.setName(`vtkStringArray${t.getMTime()}`),e.name),t.setData=(r,n)=>{e.values=r,e.size=r.length,n&&(e.numberOfComponents=n),e.size%e.numberOfComponents!==0&&(e.numberOfComponents=1),t.modified()}}const pue={name:"",numberOfComponents:1,size:0,dataType:"string"};function oV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(Object.assign(e,pue,r),!e.empty&&!e.values&&!e.size)throw new TypeError("Cannot create vtkStringArray object without: size > 0, values");e.values?Array.isArray(e.values)&&(e.values=[...e.values]):e.values=[],e.values&&(e.size=e.values.length),J.obj(t,e),J.set(t,e,["name"]),gue(t,e)}const aV=J.newInstance(oV,"vtkStringArray");var mue={newInstance:aV,extend:oV};function vue(t,e){return[...t.getElementsByTagName(e)]}function d9(t,e){return vue(t,e)[0]}function yue(t){return $le.create(t)}function wue(t){const e=/^\s*\s*_/m,r=/\n\s*<\/AppendedData>/m;return y1.extractBinary(t,e,r)}const Uu={Int8:Int8Array,UInt8:Uint8Array,Int16:Int16Array,UInt16:Uint16Array,Int32:Int32Array,UInt32:Uint32Array,Int64:Int32Array,UInt64:Uint32Array,Float32:Float32Array,Float64:Float64Array},w1={Int8:1,UInt8:1,Int16:2,UInt16:2,Int32:4,UInt32:4,Int64:8,UInt64:8,Float32:4,Float64:8};function MS(t){const e=t.length-1;return t.filter((r,n)=>n0&&(o===0?a=n*i:a=(n-1)*i+o);const s=new ArrayBuffer(a),c={offset:0,uint8:new Uint8Array(s)};let l=Cue(r);for(;l{d.trim().length&&(f[u++]=Number(d))})}else if(c==="binary"){const u=new Uint8Array(cE.toArrayBuffer(e.firstChild.nodeValue.trim()));if(r==="vtkZLibDataCompressor"){const d=lE(u,i);f=new Uu[a](d.buffer),/^U?Int64$/.test(a)&&(f=MS(f))}else f=new Uu[a](u.buffer,w1[i]),a.indexOf("Int64")!==-1&&(f=MS(f))}else if(c==="appended"){const u=Number(e.getAttribute("offset"));f=PS(new Uint8Array(o,u),a,i)}else console.error("Format not supported",c);return{name:s,values:f,numberOfComponents:l}}function cC(t){return new TextDecoder().decode(t).split("\0").slice(0,-1)}function Tue(t,e,r,n,i){const o=t.getAttribute("Name"),a=t.getAttribute("format"),s=Number(t.getAttribute("NumberOfComponents")||"1"),l=Number(t.getAttribute("NumberOfTuples")||"1")*s,f=[];if(a==="ascii"){const u=t.firstChild.nodeValue.trim().split(/\s+/);let d=0;const h=[];for(;f.length{const p=g-h;u[d++]=p;for(let v=0;v{const d=e.getAttribute(u);d&&(c[d]=r[`set${u}`])});const l=e.getElementsByTagName("DataArray"),f=l.length;for(let u=0;uBt.newInstance(x1(Number(s.getAttribute("NumberOfTuples")),s,e,r,n,i))),a=[...t.getElementsByTagName("Array")].filter(s=>s.getAttribute("type")==="String").map(s=>mue.newInstance(Tue(s,e,r,n,i)));return[...o,...a]}function Due(t,e){e.classHierarchy.push("vtkXMLReader"),e.dataAccessHelper||(e.dataAccessHelper=dm.get("http"));function r(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return e.dataAccessHelper.fetchBinary(n,i)}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};e.url=n;const o=n.split("/");return o.pop(),e.baseURL=o.join("/"),t.loadData(i)},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r(e.url,n).then(t.parseAsArrayBuffer)},t.parseAsArrayBuffer=n=>{if(!n)return!1;if(n!==e.rawDataBuffer)t.modified();else return!0;const{text:i,binaryBuffer:o}=wue(n);e.rawDataBuffer=n,e.binaryBuffer=o;const s=yue(i).root(),c=s.node,l=c.getAttribute("type"),f=c.getAttribute("compressor"),u=c.getAttribute("byte_order"),d=c.getAttribute("header_type")||"UInt32";if(f&&f!=="vtkZLibDataCompressor")return console.error("Invalid compressor",f),!1;if(u&&u!=="LittleEndian")return console.error("Only LittleEndian encoding is supported"),!1;if(l!==e.dataType)return console.error("Invalid data type",l,"expecting",e.dataType),!1;if(d9(c,"AppendedData")){const p=d9(c,"AppendedData"),v=p.getAttribute("encoding"),y=s.filter(T=>{const{node:_}=T;return _.nodeType===Node.ELEMENT_NODE&&_.getAttribute("format")==="appended"&&_.hasAttribute("offset")},!1,!0).map(T=>({node:T.node,offset:Number(T.node.getAttribute("offset"))}));y.sort((T,_)=>T.offset-_.offset);let m=e.binaryBuffer;v==="base64"&&(m=p.textContent.trim().substr(1));const w=[];for(let T=0;TT+_.length,0),C=new ArrayBuffer(x),S=new Uint8Array(C);for(let T=0,_=0;T{t.parseAsArrayBuffer(e.rawDataBuffer)}}const Iue={};function Oue(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Iue,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper"]),J.algo(t,e,0,1),Due(t,e)}var C1={extend:Oue,processDataArray:x1,processFieldData:Eue,processCells:_ue};function Mue(t,e,r,n,i,o,a){const s=Number(r.getAttribute(`NumberOf${e}`));if(s>0){const c=r.getElementsByTagName(e)[0].getElementsByTagName("DataArray")[0],{values:l,numberOfComponents:f}=C1.processDataArray(s,c,n,i,o,a);t[`get${e}`]().setData(l,f)}return s}function Pue(t,e,r,n,i,o,a){const s=Number(r.getAttribute(`NumberOf${e}`));if(s>0){const c=C1.processCells(s,r.getElementsByTagName(e)[0],n,i,o,a);t[`get${e}`]().setData(c)}return s}function Rue(t,e){e.classHierarchy.push("vtkXMLPolyDataReader"),t.parseXML=(r,n,i,o,a)=>{const c=r.getElementsByTagName(e.dataType)[0].getElementsByTagName("Piece"),l=c.length;for(let f=0;f{g+=Pue(u,p,d,i,o,a,e.binaryBuffer)}),C1.processFieldData(h,d.getElementsByTagName("PointData")[0],u.getPointData(),i,o,a,e.binaryBuffer),C1.processFieldData(g,d.getElementsByTagName("CellData")[0],u.getCellData(),i,o,a,e.binaryBuffer),e.output[f]=u}}}const Lue={dataType:"PolyData"};function sV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Lue,r),C1.extend(t,e,r),Rue(t,e)}const Aue=J.newInstance(sV,"vtkXMLPolyDataReader");var cV={newInstance:Aue,extend:sV};const wn={};function lC(t,e,r,n,i){for(let o=0;oNumber(o));let r=e[0]-1;r=r<0?r+1+wn.v.length/3:r;let n=e[1]?e[1]-1:r;n=n<0?n+1+wn.vt.length/2:n;let i=e[2]?e[2]-1:r;return i=i<0?i+1+wn.vn.length/3:i,[r,n,i]}function Vue(t){if(t[0]==="#")return;const e=t.split(/[ \t]+/);if(e[0]===wn.splitOn)e.shift(),wn.pieces.push(e.join(" ").trim()),wn.f.push([]),wn.size++;else if(e[0]==="v")wn.v.push(Number(e[1])),wn.v.push(Number(e[2])),wn.v.push(Number(e[3]));else if(e[0]==="vt")wn.vt.push(Number(e[1])),wn.vt.push(Number(e[2]));else if(e[0]==="vn")wn.vn.push(Number(e[1])),wn.vn.push(Number(e[2])),wn.vn.push(Number(e[3]));else if(e[0]==="f"){wn.size===0&&wn.size++;const r=wn.f[wn.size-1];e.shift();const n=e.filter(o=>o.length>0&&o!=="\r"),i=n.length;r.push(i);for(let o=0;o1?a+m:w;for(let C=1;C1&&arguments[1]!==void 0?arguments[1]:{};return e.dataAccessHelper.fetchText(t,n,i)}t.setUrl=function(n){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(n.indexOf(".obj")===-1&&!i.fullpath)e.baseURL=n,e.url=`${n}/index.obj`;else{e.url=n;const o=n.split("/");o.pop(),e.baseURL=o.join("/")}return t.loadData(i)},t.loadData=function(){let n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return r(e.url,n).then(i=>t.isDeleted()?!1:t.parseAsText(i))},t.parseAsText=n=>(n&&(n!==e.parseData&&t.modified(),e.parseData=n,e.numberOfOutputs=0,Nue(e.splitMode),n.split(` +`).forEach(Vue),Fue(e)),!0),t.requestData=(n,i)=>{t.parseAsText(e.parseData)},t.isBusy=()=>!!e.requestCount,t.getNumberOfOutputPorts=()=>e.numberOfOutputs}const Wue={numberOfOutputs:1,requestCount:0,splitMode:null,trackDuplicates:!1};function lV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Wue,r),J.obj(t,e),J.get(t,e,["url","baseURL"]),J.setGet(t,e,["dataAccessHelper","splitMode","trackDuplicates"]),J.algo(t,e,0,1),J.event(t,e,"busy"),Gue(t,e)}const zue=J.newInstance(lV,"vtkOBJReader");var $ue={newInstance:zue,extend:lV,...Bue};function jue(t,e){e.classHierarchy.push("vtkPolyDataNormals"),t.vtkPolyDataNormalsExecute=(r,n,i)=>{if(!i)return null;const o=new Float32Array(i.length),a=new Float32Array(3*r);let s=0,c=0;const l=n.length,f=[0,0,0],u=[0,0,0];for(let d=0;d{if(!t.getNumberOfInputPorts())return;const o=r[0];if(!o)return;const a=Br.newInstance();a.setPoints(o.getPoints()),a.setVerts(o.getVerts()),a.setLines(o.getLines()),a.setPolys(o.getPolys()),a.setStrips(o.getStrips()),a.getPointData().passData(o.getPointData()),a.getCellData().passData(o.getCellData()),a.getFieldData().passData(o.getFieldData());const[s,c]=t.vtkPolyDataNormalsExecute(o.getNumberOfPolys(),o.getPolys().getData(),o.getPoints().getData());if(e.computePointNormals){const l=Bt.newInstance({numberOfComponents:3,name:"Normals",values:c});a.getPointData().setNormals(l)}if(e.computeCellNormals){const l=Bt.newInstance({numberOfComponents:3,name:"Normals",values:s});a.getCellData().setNormals(l)}n[0]=a}}function Hue(t){return{computeCellNormals:!1,computePointNormals:!0,...t}}function uV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Hue(r)),J.obj(t,e),J.algo(t,e,1,1),J.setGet(t,e,["computeCellNormals","computePointNormals"]),jue(t,e)}const Kue=J.newInstance(uV,"vtkPolyDataNormals");var que={newInstance:Kue,extend:uV};class Xue{constructor(e){this._color=[255,255,255],this._actors=[],this.id=e.id,this._color=e.color??this._color,this._format=e.format;const r=new TextDecoder,n=que.newInstance(),i=o=>{const a=dc.newInstance();a.setMapper(o);const s=Fd.newInstance();return s.setColor(this._color[0]/255,this._color[1]/255,this._color[2]/255),a.setProperty(s),a};if(this._format===za.PLY){const o=wa.newInstance(),a=Vle.newInstance();a.parseAsArrayBuffer(e.arrayBuffer),o.setInputConnection(a.getOutputPort()),this._actors.push(i(o))}else if(this._format===za.STL){const o=wa.newInstance(),a=zle.newInstance();a.parseAsArrayBuffer(e.arrayBuffer),n.setInputConnection(a.getOutputPort()),o.setInputConnection(n.getOutputPort()),this._actors.push(i(o))}else if(this._format===za.OBJ){const o=$ue.newInstance({splitMode:e.materialUrl?"usemtl":null});o.parseAsText(r.decode(e.arrayBuffer));const a=o.getNumberOfOutputPorts();for(let s=0;s{if(r.reset(),r.isEmpty)this._children.delete(e);else throw new Error("Child is not empty and cannot be removed")}),this._unregisterAllEvents()}_addEventListener(e,r,n){let i=this._eventListeners.get(e);i||(i=new Map,this._eventListeners.set(e,i));const a=(n==null?void 0:n.capture)??!1?Ks.Capture:Ks.Bubble,s=i.get(r)??Ks.None;if(s&a){console.warn("A listener is already registered for this phase");return}i.set(r,s|a),this._target.addEventListener(e,r,n)}_removeEventListener(e,r,n){const o=(n==null?void 0:n.capture)??!1?Ks.Capture:Ks.Bubble,a=this._eventListeners.get(e);if(!a)return;(r?[r]:Array.from(a.keys())).forEach(c=>{const l=a.get(c)??Ks.None;if(!!!(l&o))return;this._target.removeEventListener(e,c,n);const u=l^o;u===Ks.None?a.delete(c):a.set(c,u)}),a.size||this._eventListeners.delete(e)}_unregisterAllListeners(e,r){Array.from(r.entries()).forEach(([n,i])=>{const o=Ks.Capture;for(let a=o;i;a<<=1){if(!(i&a))continue;const s=a===Ks.Capture;this.removeEventListener(e,n,{capture:s}),i^=a}})}_unregisterAllEvents(){Array.from(this._eventListeners.entries()).forEach(([e,r])=>{this._unregisterAllListeners(e,r)})}}class fV{constructor(){this._targetsEventListeners=new Map}addEventListener(e,r,n,i){let o=this._targetsEventListeners.get(e);o||(o=new xw(e),this._targetsEventListeners.set(e,o)),o.addEventListener(r,n,i)}removeEventListener(e,r,n,i){const o=this._targetsEventListeners.get(e);o&&(o.removeEventListener(r,n,i),o.isEmpty&&this._targetsEventListeners.delete(e))}reset(){Array.from(this._targetsEventListeners.entries()).forEach(([e,r])=>{r.reset(),this._targetsEventListeners.delete(e)})}}const Yue=Object.freeze(Object.defineProperty({__proto__:null,MultiTargetEventListenerManager:fV,TargetEventListeners:xw},Symbol.toStringTag,{value:"Module"}));function Jue(t,e){const r=t.getSize();for(let n=0;n0?r:efe)>>>0).join(typeof e=="string"?e:tfe)}function nfe(t,e,r){let n=t[e];n instanceof Array||(n=[0],Object.defineProperty(t,e,{value:n}));for(let i=!0,o=0;i&&o{const r=Ur(t);h9[r]=e},get:(t,e)=>{if(t==="calibratedPixelSpacing"){const r=Ur(e);return h9[r]}}};function Qg(t,e,r=1e-5){return Math.abs(t[0]+e[0])=e[0]||t[1]<0||t[1]>=e[1]||t[2]<0||t[2]>=e[2])}function ife(t,e){let r;e?r=[jr(e)]:r=Bo();const n=[];return r.forEach(i=>{const o=t.getActors(),a=i.getVolumeViewports();for(const s of a){const c=s.getActors();if(c.length!==o.length)continue;o.every(({uid:f})=>c.find(u=>f===u.uid))&&n.push(s)}}),n}const hV=t=>t.preScale.scaled&&t.preScale.scalingParameters.suvbw;function gV(t,e,r=void 0,n="_thumbnails",i={displayArea:{imageArea:[1,1]}}){if(!t||!(t instanceof HTMLCanvasElement))throw new Error("canvas element is required");const o=!e.imageId,a=!o&&e,s=o&&e,l=`renderGPUViewport-${a.imageId||s.volumeId}`,f=document.createElement("div"),u=window.devicePixelRatio||1;i.displayArea||(i.displayArea={imageArea:[1,1]});const d=t.width,h=t.height;f.style.width=`${d/u+Z0}px`,f.style.height=`${h/u+Z0}px`,f.style.visibility="hidden",f.style.position="absolute",document.body.appendChild(f);const g=l.split(":").join("-");f.setAttribute("viewport-id-for-remove",g);const p=Hc(f),v=jr(n)||new iE(n);let y=v.getViewport(l);if(!y){const m={viewportId:l,type:o?vr.ORTHOGRAPHIC:vr.STACK,element:f,defaultOptions:{...i,suppressEvents:!0}};v.enableElement(m),y=v.getViewport(l)}return new Promise(m=>{let w=!1,{viewReference:x}=i;const C=S=>{if(w)return;if(x){const O=x;x=null,y.setViewReference(O),y.render();return}t.getContext("2d").drawImage(p,0,0,p.width,p.height,0,0,t.width,t.height);const _=y.canvasToWorld([0,0]),E=y.canvasToWorld([p.width/u,0]),b=y.canvasToWorld([0,p.height/u]),D=Mn([0,0,0],y.canvasToWorld([1/u,0]),_),I=Mn([0,0,0],y.canvasToWorld([0,1/u]),_),P=1;w=!0,f.removeEventListener(rt.IMAGE_RENDERED,C),setTimeout(()=>{v.disableElement(l),document.querySelectorAll(`[viewport-id-for-remove="${g}"]`).forEach(A=>{A.remove()})},0),m({origin:_,bottomLeft:b,topRight:E,thicknessMm:P,rightVector:D,downVector:I})};f.addEventListener(rt.IMAGE_RENDERED,C),o?y.setVolumes([s],!1,!0):y.renderImageObject(e),y.resetCamera(),r==="PT"&&!hV(a)&&y.setProperties({voiRange:{lower:a.minPixelValue,upper:a.maxPixelValue}}),y.render()})}function pV(t,e,r,n,i){if(e.volumeId)throw new Error("Unsupported volume rendering for CPU");const a=e,s=Vk(t,a,r),c={canvas:t,viewport:s,image:a,renderingTools:{}};c.transform=v1(c);const l=!0;return new Promise((f,u)=>{Ak(c,l),f(null)})}function ofe(t){const{canvas:e,imageId:r,viewReference:n,requestType:i=pn.Thumbnail,priority:o=-5,renderingEngineId:a="_thumbnails",useCPURendering:s=!1,thumbnail:c=!1,imageAspect:l=!1,viewportOptions:f}=t,u=n==null?void 0:n.volumeId,d=u&&!r,h=n&&f?{...f,viewReference:n}:f,g=s?pV:gV;return new Promise((p,v)=>{function y(C,S){var b;const{modality:T}=wt("generalSeriesModule",S)||{},_=!d&&C,E=d&&C;_&&(_.isPreScaled=_.isPreScaled||((b=_.preScale)==null?void 0:b.scaled)),c&&(e.height=256,e.width=256),l&&_&&(e.width=_&&e.height*_.width/_.height),e.style.width=`${e.width/devicePixelRatio}px`,e.style.height=`${e.height/devicePixelRatio}px`,E&&s&&v(new Error("CPU rendering of volume not supported")),g(e,C,T,a,h).then(p)}function m(C,S){console.error(C,S),v(C)}function w(C,S,T){return _s(C,T).then(_=>{y.call(this,_,C)},_=>{m.call(this,_,C)})}const x={useRGBA:!!s,requestType:i};if(u){const C=$e.getVolume(u);C||v(new Error(`Volume id ${u} not found in cache`));const S=C.imageIds[0];y(C,S)}else Bi.addRequest(w.bind(null,r,null,x),i,{imageId:r},o)})}const g9={HISTORY_UNDO:"CORNERSTONE_TOOLS_HISTORY_UNDO",HISTORY_REDO:"CORNERSTONE_TOOLS_HISTORY_REDO"};class mV{constructor(e="Tools",r=50){this.position=-1,this.redoAvailable=0,this.undoAvailable=0,this.ring=new Array,this.label=e,this._size=r}get size(){return this._size}set size(e){this.ring=new Array(e),this._size=e,this.position=-1,this.redoAvailable=0,this.undoAvailable=0}undo(e=1){for(;e>0&&this.undoAvailable>0;){const r=this.ring[this.position];r.restoreMemo(!0),r.id&&et.dispatchEvent(new CustomEvent(g9.HISTORY_UNDO,{detail:{isUndo:!0,id:r.id,operationType:r.operationType||"annotation",memo:r}})),e--,this.redoAvailable++,this.undoAvailable--,this.position=(this.position-1+this.size)%this.size}}undoIf(e){return this.undoAvailable>0&&e(this.ring[this.position])?(this.undo(),!0):!1}redo(e=1){for(;e>0&&this.redoAvailable>0;){const r=(this.position+1)%this.size,n=this.ring[r];n.restoreMemo(!1),n.id&&et.dispatchEvent(new CustomEvent(g9.HISTORY_REDO,{detail:{isUndo:!1,id:n.id,operationType:n.operationType||"annotation",memo:n}})),e--,this.position=r,this.undoAvailable++,this.redoAvailable--}}push(e){var n;if(!e)return;const r=e.restoreMemo?e:(n=e.createMemo)==null?void 0:n.call(e);if(r)return this.redoAvailable=0,this.undoAvailable{n.getViewports().forEach(o=>{o.hasImageURI(t)&&r.push(o)})}),r}function dE(t,e){const r=afe(t,e);return r?r.index:null}function afe(t,e){const r=e.getImageIds(),n=e.getCurrentImageIdIndex();if(r.length===0)return null;const i=c=>{const l=sfe(c);if(!l)return null;const f=nl(l.planeNormal,l.imagePositionPatient);return m1(f,t)},o={distance:i(r[n])??1/0,index:n},a=r.slice(n+1);for(let c=0;c=0;c--){const l=s[c],f=i(l);if(!(f===null||f===o.distance))if(f{const[r,n]=t,i=`${r}_${n}`;Lf[i]||(Lf[i]={}),Lf[i]=e},get:(t,e,r)=>{if(t!=="spatialRegistrationModule")return;const n=`${e}_${r}`;if(Lf[n])return Lf[n];const i=`${r}_${e}`;if(Lf[i])return $r(ba(),Lf[i])}};Wh(S1.get.bind(S1));const cfe=.05;function wV(t,e){const r=t.getSliceIndex(),n=e.getSliceIndex(),i=wt("imagePlaneModule",r.toString()),o=wt("imagePlaneModule",n.toString());if(!i||!o){console.log("Viewport spatial registration requires image plane module");return}const{imageOrientationPatient:a}=o;if(!i.imageOrientationPatient.every((d,h)=>Math.abs(d-a[h])0||t[0]0||t[1]0||t[2]{r.getViewports().forEach(({element:i})=>{t.push(_e(i))})}),t}function ufe(t){const e=_e(t);if(!e)return;const{viewport:r}=e;if(!(r instanceof lr))throw new Error(`An image can only be fetched for a stack viewport and not for a viewport of type: ${r.type}`);return r.getCornerstoneImage()}function Cf(t){if(t.length<=1)return!1;const e=t[0],{modality:r,seriesInstanceUID:n}=wt("generalSeriesModule",e),{imageOrientationPatient:i,pixelSpacing:o,frameOfReferenceUID:a,columns:s,rows:c,usingDefaultValues:l}=wt("imagePlaneModule",e);if(l)return!1;const f={modality:r,imageOrientationPatient:i,pixelSpacing:o,columns:s,rows:c,seriesInstanceUID:n};let u=!0;for(let d=0;dffe.has(r)):!1}async function dfe({viewport:t,options:e={}}){const r=t.getRenderingEngine();let n=e.volumeId||`${Pn()}`;n.split(":").length===0&&(n=`${pk()}:${n}`);const{id:i,element:o}=t,a=e.viewportId||i,s=t.getImageIds(),c=t.getViewPresentation(),l=t.getViewReference();r.enableElement({viewportId:a,type:vr.ORTHOGRAPHIC,element:o,defaultOptions:{background:e.background,orientation:e.orientation}}),(await p1(n,{imageIds:s})).load();const u=r.getViewport(a);await Fk(r,[{volumeId:n}],[a]);const d=()=>{u.render(),o.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,d)};return(()=>{o.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,d)})(),u.setViewPresentation(c),u.setViewReference(l),u.render(),u}async function hfe({viewport:t,options:e}){const r=t,{id:n,element:i}=r,o=t.getRenderingEngine(),{background:a}=e,s=e.viewportId||n,c=$e.getVolume(r.getVolumeId());if(!(c instanceof Ud))throw new Error("Currently, you cannot decache a volume that is not an ImageVolume. So, unfortunately, volumes such as nifti (which are basic Volume, without imageIds) cannot be decached.");const l={viewportId:s,type:vr.STACK,element:i,defaultOptions:{background:a}},f=r.getViewReference();o.enableElement(l);const u=o.getViewport(s);return await u.setStack(c.imageIds),u.setViewReference(f),u.render(),u}function un(t,e=2){if(Array.isArray(t))return t.map(i=>un(i,e)).join(", ");if(t==null||t==="")return"NaN";t=Number(t);const r=Math.abs(t);if(r<1e-4)return`${t}`;const n=r>=100?e-2:r>=10?e-1:r>=1?e:r>=.1?e+1:r>=.01?e+2:r>=.001?e+3:e+4;return t.toFixed(n)}function Bu(t){return Math.round(t/qa)*qa}function SV(t,e,r){const n=t.length===e*r*4,i=t.length===e*r*3;if(n||i){const o=new Float32Array(e*r);let a=0,s=0;const c=n?4:3;for(let l=0;l=r.length?(p9(r),r):(p9(r),r.slice(0,e))}function p9(t){for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}}function uC(t){const e=t.toString(16);return e.length==1?"0"+e:e}function pfe(t,e,r){return"#"+uC(t)+uC(e)+uC(r)}function mfe(t){const e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e?{r:parseInt(e[1],16),g:parseInt(e[2],16),b:parseInt(e[3],16)}:null}const vfe=Object.freeze(Object.defineProperty({__proto__:null,hexToRgb:mfe,rgbToHex:pfe},Symbol.toStringTag,{value:"Module"}));function TV(t,e){if(t===e)return!0;if(t==null||e==null)return!1;try{return JSON.stringify(t)===JSON.stringify(e)}catch(r){return console.debug("Error in JSON.stringify during deep comparison:",r),t===e}}function yfe(t,e,r){if(!r)throw new Error("getVolume is required, use the utilities export instead ");if(t.modality)return t.modality;if(t.setVolumes)return e=e??t.getVolumeId(),!e||!r?void 0:r(e).metadata.Modality;throw new Error("Invalid viewport type")}const wfe=(t,e)=>t.reduce((r,n)=>((r[n[e]]=r[n[e]]||[]).push(n),r),{});function xfe(t){const e=t.map(a=>{const{imagePositionPatient:s}=wt("imagePlaneModule",a)||{};return{imageId:a,imagePositionPatient:s}});if(!e.every(a=>a.imagePositionPatient))return null;const r=wfe(e,"imagePositionPatient"),n=Object.keys(r),i=r[n[0]].length;return i===1||!n.every(a=>r[a].length===i)?null:r}function Cfe(t,e){const r={};let n=[];const i=Object.keys(t);for(let o=0;oDg(i,r[0]),i=>Dg(i,r[1]),i=>Dg(i,r[2]),i=>Dg(i,r[3]),i=>Dg(i,r[4]),Sfe,Tfe,_fe,bfe];for(let i=0;ic-l).map(c=>o[c].map(l=>l.imageId)),splittingTag:r[i]}}return{imageIdGroups:[t],splittingTag:null}}function Dfe(t){const{imageIdGroups:e,splittingTag:r}=pE(t);return{isDynamicVolume:e.length>1,timePoints:e,splittingTag:r}}function Ife(t,e){const r=t.length,{rescaleSlope:n,rescaleIntercept:i,suvbw:o}=e;if(e.modality==="PT"&&typeof o=="number")for(let a=0;at.getImageIds().length-1||a+i<0){const s={imageIdIndex:a,direction:i};ut(et,rt.STACK_SCROLL_OUT_OF_BOUNDS,s)}t.scroll(i,e.debounceLoading,e.loop)}}function Ofe(t,e,r,n=!1){const i=n,{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:s}=ud(t,e,i);if(!s)return;const{sliceRange:c,spacingInNormalDirection:l,camera:f}=s,{focalPoint:u,viewPlaneNormal:d,position:h}=f,{newFocalPoint:g,newPosition:p}=X0(u,h,c,d,l,r);t.setCamera({focalPoint:g,position:p}),t.render();const v=a+r,y={volumeId:e,viewport:t,delta:r,desiredStepIndex:v,currentStepIndex:a,numScrollSteps:o,currentImageId:t.getCurrentImageId()};(v>o||v<0)&&t.getCurrentImageId()?ut(et,rt.VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS,y):ut(et,rt.VOLUME_VIEWPORT_SCROLL,y)}async function ds(t,e={}){const{imageIndex:r,debounceLoading:n,volumeId:i}=e,o=_e(t);if(!o)throw new Error("Element has been disabled");const{viewport:a}=o,{imageIndex:s,numberOfSlices:c}=Mfe(a,n),f=Pfe(c,r)-s;sc(a,{delta:f,debounceLoading:n,volumeId:i})}function Mfe(t,e){return t instanceof lr?{numberOfSlices:t.getImageIds().length,imageIndex:e?t.getTargetImageIdIndex():t.getCurrentImageIdIndex()}:{numberOfSlices:t.getNumberOfSlices(),imageIndex:t.getSliceIndex()}}function Pfe(t,e){const r=t-1;return jy(e,0,r)}function mE(t,e,r={}){const n=$e.getVolume(t);if(!n)throw new Error(`Referenced volume with id ${t} does not exist.`);const{metadata:i,spacing:o,direction:a,dimensions:s}=n,{minX:c,maxX:l,minY:f,maxY:u,minZ:d,maxZ:h}=e,g=[Math.min(c,l),Math.min(f,u),Math.min(d,h)],p=Sh(n.imageData,g),v=[Math.abs(l-c)+1,Math.abs(u-f)+1,Math.abs(h-d)+1],{targetBuffer:y}=r,m={metadata:i,dimensions:v,spacing:o,origin:p,direction:a,targetBuffer:y,scalarData:(y==null?void 0:y.type)==="Float32Array"?new Float32Array(v[0]*v[1]*v[2]):void 0},w=lm(Pn(),m),x=w.voxelManager.getCompleteScalarDataArray(),C=v[0]*v[1],S=s[0]*s[1],T=n.voxelManager.getCompleteScalarDataArray();for(let _=0;_=a)){for(let m=d-n;m<=d+n;m++)if(!(m<0||m>=o))for(let w=u-n;w<=u+n;w++){if(w<0||w>=i)continue;const x=y*s+m*i+w,C=t[x];c+=C,l+=C*C,f++}}if(f===0){const y=h*s+d*i+u;return y>=0&&yc/n),type:Qs.ERMF,isProjection:a}:(console.warn("EstimatedRadiographicMagnificationFactor was not present. Unable to correct ImagerPixelSpacing."),{PixelSpacing:r,type:Qs.PROJECTION,isProjection:a}):{PixelSpacing:e,type:Qs.UNKNOWN,isProjection:a}}function Afe(t){const{SequenceOfUltrasoundRegions:e}=t,r=Array.isArray(e);if(r&&e.length>1){console.warn("Sequence of Ultrasound Regions > one entry. This is not yet implemented, all measurements will be shown in pixels.");return}const{PhysicalDeltaX:n,PhysicalDeltaY:i}=r?e[0]:e;return{PixelSpacing:[n*10,i*10]}}function Nfe(t){const{PixelSpacing:e,SOPClassUID:r,SequenceOfUltrasoundRegions:n}=t;return n?Afe(t):Rfe.has(r)?Lfe(t):{PixelSpacing:e,type:Qs.NOT_APPLICABLE,isProjection:!1}}const EV=(t,e)=>yfe(t,e,$e.getVolume),Rn=Object.freeze(Object.defineProperty({__proto__:null,FrameRange:Q0,HistoryMemo:fE,PointsManager:M2,ProgressiveIterator:Fy,RLEVoxelMap:s0,VoxelManager:hc,actorIsA:_a,applyPreset:Sk,autoLoad:TS,buildMetadata:Dk,calculateNeighborhoodStats:_V,calculateSpacingBetweenImageIds:ik,calculateViewportsSpatialRegistration:wV,calibratedPixelSpacingMetadataProvider:rfe,clamp:IS,clip:jy,color:vfe,colormap:Iie,convertStackToVolumeViewport:dfe,convertToGrayscale:SV,convertVolumeToStackViewport:hfe,createLinearRGBTransferFunction:Ik,createSigmoidRGBTransferFunction:G4,createSubVolume:mE,decimate:sk,deepClone:vs,deepEqual:TV,deepMerge:Ui,eventListener:Yue,fnv1aHash:gN,generateVolumePropsFromImageIds:am,genericMetadataProvider:Fu,getBufferConfiguration:E4,getClosestImageId:Zl,getClosestStackImageIndexForPoint:dE,getCurrentVolumeViewportSlice:hE,getDynamicVolumeInfo:Dfe,getImageDataMetadata:vw,getImageLegacy:ufe,getImageSliceDataForVolumeViewport:By,getMinMax:uE,getPixelSpacingInformation:Nfe,getRandomSampleFromArray:gE,getRuntimeId:dV,getScalingParameters:ok,getSliceRange:pw,getSpacingInNormalDirection:xf,getTargetVolumeAndSpacingInNormalDir:jh,getViewportImageCornersInWorld:$y,getViewportImageIds:gfe,getViewportModality:EV,getViewportsWithImageURI:zy,getViewportsWithVolumeId:sm,getVoiFromSigmoidRGBTransferFunction:Ck,getVolumeActorCorners:xN,getVolumeDirectionVectors:Cw,getVolumeId:yl,getVolumeSliceRangeInfo:xk,getVolumeViewportScrollInfo:ud,getVolumeViewportsContainingSameVolumes:ife,hasFloatScalingParameters:K4,hasNaNValues:_S,imageIdToURI:Ur,imageRetrieveMetadataProvider:h1,imageToWorldCoords:yV,indexWithinDimensions:hr,invertRgbTransferFunction:wp,isEqual:Zt,isEqualAbs:Eie,isEqualNegative:EN,isImageActor:tc,isNumber:Ar,isOpposite:Qg,isPTPrescaledWithSUV:hV,isValidVolume:Cf,isVideoTransferSyntax:CV,jumpToSlice:ds,loadImageToCanvas:ofe,logger:oie,makeVolumeMetadata:rk,planar:Xse,pointInShapeCallback:z4,renderToCanvasCPU:pV,renderToCanvasGPU:gV,roundNumber:un,roundToPrecision:Bu,scaleArray:Ife,scaleRgbTransferFunction:Jue,scroll:sc,snapFocalPointToSlice:X0,sortImageIdsAndGetSpacing:H4,spatialRegistrationMetadataProvider:S1,splitImageIdsBy4DTags:pE,transferFunctionUtils:Mie,transformIndexToWorld:Sh,transformWorldToIndex:zr,transformWorldToIndexContinuous:I2,triggerEvent:ut,updateVTKImageDataWithCornerstoneImage:yw,uuidv4:Pn,windowLevel:Oie,worldToImageCoords:RS},Symbol.toStringTag,{value:"Module"}));class bV extends lk{constructor(e,r){super(e,r),this._dimensionGroupNumber=1,this._loadedDimensionGroups=new Set,this._getImageIdRequests=(o,a)=>this.getImageIdsRequests(o,a),this.getImageLoadRequests=o=>{const a=this.getImageIdsToLoad();return this._getImageIdRequests(a,o)};const{imageIdGroups:n,splittingTag:i}=e;this._splittingTag=i,this._imageIdGroups=n,this.numDimensionGroups=this._imageIdGroups.length,this.numTimePoints=this.numDimensionGroups}_getImageIdsToLoad(){const e=this._imageIdGroups,r=this._dimensionGroupNumber-1,n=[...e[r]];let i=r-1,o=r+1;for(;i>=0||o=0&&n.push(...e[i--]),othis.numDimensionGroups?this.dimensionGroupNumber=1:this.dimensionGroupNumber=r}getCurrentDimensionGroupImageIds(){return this._imageIdGroups[this._dimensionGroupNumber-1]}getCurrentTimePointImageIds(){return console.warn("Warning: getCurrentTimePointImageIds is deprecated. Please use getCurrentDimensionGroupImageIds instead."),this.getCurrentDimensionGroupImageIds()}flatImageIdIndexToTimePointIndex(e){return console.warn("Warning: flatImageIdIndexToTimePointIndex is deprecated. Please use flatImageIdIndexToDimensionGroupNumber instead."),this.flatImageIdIndexToDimensionGroupNumber(e)-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}isTimePointLoaded(e){return console.warn("Warning: isTimePointLoaded is deprecated. Please use isDimensionGroupLoaded instead. Note that timePointIndex is zero-based while dimensionGroupNumber starts at 1."),this.isDimensionGroupLoaded(e+1)}isDimensionGroupLoaded(e){return this._loadedDimensionGroups.has(e)}markDimensionGroupAsLoaded(e){this._loadedDimensionGroups.add(e),ut(et,rt.DYNAMIC_VOLUME_DIMENSION_GROUP_LOADED,{volumeId:this.volumeId,dimensionGroupNumber:e}),ut(et,rt.DYNAMIC_VOLUME_TIME_POINT_LOADED,{volumeId:this.volumeId,timePointIndex:e-1})}checkTimePointCompletion(e){console.warn("Warning: checkTimePointCompletion is deprecated. Please use checkDimensionGroupCompletion instead."),this.checkDimensionGroupCompletion(e)}checkDimensionGroupCompletion(e){const r=this.flatImageIdIndexToDimensionGroupNumber(e);this._imageIdGroups[r-1].every(o=>{const a=this.getImageIdIndex(o);return this.cachedFrames[a]===ya.FULL_RESOLUTION})&&!this.isDimensionGroupLoaded(r)&&this.markDimensionGroupAsLoaded(r)}}const Kh=new D4("imageRetrievalPool");Kh.setMaxSimultaneousRequests(pn.Interaction,200);Kh.setMaxSimultaneousRequests(pn.Thumbnail,200);Kh.setMaxSimultaneousRequests(pn.Prefetch,200);Kh.grabDelay=0;const m9=Symbol("DefaultSettings"),v9=Symbol("RuntimeSettings"),y9=Symbol("ObjectSettingsMap"),El=Symbol("Dictionary");class Cr{constructor(e){const r=Object.create(e instanceof Cr&&El in e?e[El]:null);Object.seal(Object.defineProperty(this,El,{value:r}))}set(e,r){return Hy(this[El],e,r,null)}get(e){return Ffe(this[El],e)}unset(e){return kfe(this[El],e+"")}forEach(e){w9(this[El],e)}extend(){return new Cr(this)}import(e){DV(e)&&Object.keys(e).forEach(r=>{Hy(this[El],r,e[r],null)})}dump(){const e={};return w9(this[El],(r,n)=>{typeof n<"u"&&IV(e,r,n)}),e}static assert(e){return e instanceof Cr?e:Cr.getRuntimeSettings()}static getDefaultSettings(e=null){let r=Cr[m9];if(r instanceof Cr||(r=new Cr,Cr[m9]=r),e){const n={};return r.forEach(i=>{if(i.startsWith(e)){const o=i.split(`${e}.`)[1];n[o]=r.get(i)}}),n}return r}static getRuntimeSettings(){let e=Cr[v9];return e instanceof Cr||(e=new Cr(Cr.getDefaultSettings()),Cr[v9]=e),e}static getObjectSettings(e,r){let n=null;if(e instanceof Cr)n=e;else if(typeof e=="object"&&e!==null){let i=Cr[y9];i instanceof WeakMap||(i=new WeakMap,Cr[y9]=i),n=i.get(e),n instanceof Cr||(n=new Cr(Cr.assert(Cr.getObjectSettings(r))),i.set(e,n))}return n}static extendRuntimeSettings(){return Cr.getRuntimeSettings().extend()}}function kfe(t,e){if(e.endsWith(".")){let r=0;const n=e,i=n.slice(0,-1),o=i.length===0;for(const a in t)Object.prototype.hasOwnProperty.call(t,a)&&(o||a.startsWith(n)||a===i)&&(delete t[a],++r);return r>0}return delete t[e]}function w9(t,e){for(const r in t)e(r,t[r])}function Vfe(t,e,r,n){let i;if(n.has(r))return Hy(t,e,null,n);n.add(r),i=0;for(const o in r)if(Object.prototype.hasOwnProperty.call(r,o)){const a=o.length===0?e:`${e}.${o}`;Hy(t,a,r[o],n)||++i}return n.delete(r),i===0}function Hy(t,e,r,n){return Ufe(e)?DV(r)?Vfe(t,e,r,n instanceof WeakSet?n:new WeakSet):(t[e]=r,!0):!1}function Ffe(t,e){return t[e]}function Ufe(t){let e,r,n;if(typeof t!="string"||(e=t.length-1)<0)return!1;for(n=-1;(r=t.indexOf(".",n+1))>=0;){if(r-n<2||r===e)return!1;n=r}return!0}function DV(t){if(typeof t=="object"&&t!==null){const e=Object.getPrototypeOf(t);if(e===Object.prototype||e===null)return!0}return!1}function IV(t,e,r){const n=e.indexOf(".");if(n>=0){const i=e.slice(0,n);let o=t[i];if(typeof o!="object"||o===null){const a=o;o={},typeof a<"u"&&(o[""]=a),t[i]=o}IV(o,e.slice(n+1,e.length),r)}else t[e]=r}Cr.getDefaultSettings().set("useCursors",!0);function L2(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function Bfe(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function OV(t){let e,r,n;t.length!==2?(e=L2,r=(s,c)=>L2(t(s),c),n=(s,c)=>t(s)-c):(e=t===L2||t===Bfe?t:Gfe,r=t,n=t);function i(s,c,l=0,f=s.length){if(l>>1;r(s[u],c)<0?l=u+1:f=u}while(l>>1;r(s[u],c)<=0?l=u+1:f=u}while(ll&&n(s[u-1],c)>-n(s[u],c)?u-1:u}return{left:i,center:a,right:o}}function Gfe(){return 0}function Wfe(t){return t===null?NaN:+t}const zfe=OV(L2),$fe=zfe.right;OV(Wfe).center;const jfe=Math.sqrt(50),Hfe=Math.sqrt(10),Kfe=Math.sqrt(2);function Ky(t,e,r){const n=(e-t)/Math.max(0,r),i=Math.floor(Math.log10(n)),o=n/Math.pow(10,i),a=o>=jfe?10:o>=Hfe?5:o>=Kfe?2:1;let s,c,l;return i<0?(l=Math.pow(10,-i)/a,s=Math.round(t*l),c=Math.round(e*l),s/le&&--c,l=-l):(l=Math.pow(10,i)*a,s=Math.round(t/l),c=Math.round(e/l),s*le&&--c),c0))return[];if(t===e)return[t];const n=e=i))return[];const s=o-i+1,c=new Array(s);if(n)if(a<0)for(let l=0;ln||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function Jfe(t){if(!(o=t.length))return[];for(var e=-1,r=Yfe(t,Zfe),n=new Array(r);++e>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Cv(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Cv(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=tde.exec(t))?new xa(e[1],e[2],e[3],1):(e=nde.exec(t))?new xa(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=rde.exec(t))?Cv(e[1],e[2],e[3],e[4]):(e=ide.exec(t))?Cv(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=ode.exec(t))?D9(e[1],e[2]/100,e[3]/100,1):(e=ade.exec(t))?D9(e[1],e[2]/100,e[3]/100,e[4]):C9.hasOwnProperty(t)?_9(C9[t]):t==="transparent"?new xa(NaN,NaN,NaN,0):null}function _9(t){return new xa(t>>16&255,t>>8&255,t&255,1)}function Cv(t,e,r,n){return n<=0&&(t=e=r=NaN),new xa(t,e,r,n)}function lde(t){return t instanceof gm||(t=E1(t)),t?(t=t.rgb(),new xa(t.r,t.g,t.b,t.opacity)):new xa}function AS(t,e,r,n){return arguments.length===1?lde(t):new xa(t,e,r,n??1)}function xa(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}vE(xa,AS,MV(gm,{brighter(t){return t=t==null?qy:Math.pow(qy,t),new xa(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?T1:Math.pow(T1,t),new xa(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new xa(fd(this.r),fd(this.g),fd(this.b),Xy(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:E9,formatHex:E9,formatHex8:ude,formatRgb:b9,toString:b9}));function E9(){return`#${id(this.r)}${id(this.g)}${id(this.b)}`}function ude(){return`#${id(this.r)}${id(this.g)}${id(this.b)}${id((isNaN(this.opacity)?1:this.opacity)*255)}`}function b9(){const t=Xy(this.opacity);return`${t===1?"rgb(":"rgba("}${fd(this.r)}, ${fd(this.g)}, ${fd(this.b)}${t===1?")":`, ${t})`}`}function Xy(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function fd(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function id(t){return t=fd(t),(t<16?"0":"")+t.toString(16)}function D9(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new nc(t,e,r,n)}function PV(t){if(t instanceof nc)return new nc(t.h,t.s,t.l,t.opacity);if(t instanceof gm||(t=E1(t)),!t)return new nc;if(t instanceof nc)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),o=Math.max(e,r,n),a=NaN,s=o-i,c=(o+i)/2;return s?(e===o?a=(r-n)/s+(r0&&c<1?0:a,new nc(a,s,c,t.opacity)}function fde(t,e,r,n){return arguments.length===1?PV(t):new nc(t,e,r,n??1)}function nc(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}vE(nc,fde,MV(gm,{brighter(t){return t=t==null?qy:Math.pow(qy,t),new nc(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?T1:Math.pow(T1,t),new nc(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new xa(fC(t>=240?t-240:t+120,i,n),fC(t,i,n),fC(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new nc(I9(this.h),Sv(this.s),Sv(this.l),Xy(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Xy(this.opacity);return`${t===1?"hsl(":"hsla("}${I9(this.h)}, ${Sv(this.s)*100}%, ${Sv(this.l)*100}%${t===1?")":`, ${t})`}`}}));function I9(t){return t=(t||0)%360,t<0?t+360:t}function Sv(t){return Math.max(0,Math.min(1,t||0))}function fC(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}function dde(t,e,r,n,i){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*r+(1+3*t+3*o-3*a)*n+a*i)/6}function dC(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],o=t[n+1],a=n>0?t[n-1]:2*i-o,s=n()=>t;function hde(t,e){return function(r){return t+r*e}}function gde(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function pde(t){return(t=+t)==1?RV:function(e,r){return r-e?gde(e,r,t):yE(isNaN(e)?r:e)}}function RV(t,e){var r=e-t;return r?hde(t,r):yE(isNaN(t)?e:t)}const O9=function t(e){var r=pde(e);function n(i,o){var a=r((i=AS(i)).r,(o=AS(o)).r),s=r(i.g,o.g),c=r(i.b,o.b),l=RV(i.opacity,o.opacity);return function(f){return i.r=a(f),i.g=s(f),i.b=c(f),i.opacity=l(f),i+""}}return n.gamma=t,n}(1);function mde(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(o){for(i=0;ir&&(o=e.slice(r,o),s[a]?s[a]+=o:s[++a]=o),(n=n[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,c.push({i:a,x:Yy(n,i)})),r=hC.lastIndex;return re&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function Ide(t,e,r){var n=t[0],i=t[1],o=e[0],a=e[1];return i2?Ode:Ide,c=l=null,u}function u(d){return d==null||isNaN(d=+d)?o:(c||(c=s(t.map(n),e,r)))(n(a(d)))}return u.invert=function(d){return a(i((l||(l=s(e,t.map(n),Yy)))(d)))},u.domain=function(d){return arguments.length?(t=Array.from(d,bde),f()):t.slice()},u.range=function(d){return arguments.length?(e=Array.from(d),f()):e.slice()},u.rangeRound=function(d){return e=Array.from(d),r=_de,f()},u.clamp=function(d){return arguments.length?(a=d?!0:_0,f()):a!==_0},u.interpolate=function(d){return arguments.length?(r=d,f()):r},u.unknown=function(d){return arguments.length?(o=d,u):o},function(d,h){return n=d,i=h,f()}}function Rde(){return Pde()(_0,_0)}function Lde(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Jy(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Eh(t){return t=Jy(Math.abs(t)),t?t[1]:NaN}function Ade(t,e){return function(r,n){for(var i=r.length,o=[],a=0,s=t[0],c=0;i>0&&s>0&&(c+s+1>n&&(s=Math.max(1,n-c)),o.push(r.substring(i-=s,i+s)),!((c+=s+1)>n));)s=t[a=(a+1)%t.length];return o.reverse().join(e)}}function Nde(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var kde=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Zy(t){if(!(e=kde.exec(t)))throw new Error("invalid format: "+t);var e;return new xE({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Zy.prototype=xE.prototype;function xE(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}xE.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Vde(t){e:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var LV;function Fde(t,e){var r=Jy(t,e);if(!r)return t+"";var n=r[0],i=r[1],o=i-(LV=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=n.length;return o===a?n:o>a?n+new Array(o-a+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+Jy(t,Math.max(0,e+o-1))[0]}function P9(t,e){var r=Jy(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const R9={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:Lde,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>P9(t*100,e),r:P9,s:Fde,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function L9(t){return t}var A9=Array.prototype.map,N9=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Ude(t){var e=t.grouping===void 0||t.thousands===void 0?L9:Ade(A9.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",o=t.numerals===void 0?L9:Nde(A9.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",s=t.minus===void 0?"−":t.minus+"",c=t.nan===void 0?"NaN":t.nan+"";function l(u){u=Zy(u);var d=u.fill,h=u.align,g=u.sign,p=u.symbol,v=u.zero,y=u.width,m=u.comma,w=u.precision,x=u.trim,C=u.type;C==="n"?(m=!0,C="g"):R9[C]||(w===void 0&&(w=12),x=!0,C="g"),(v||d==="0"&&h==="=")&&(v=!0,d="0",h="=");var S=p==="$"?r:p==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",T=p==="$"?n:/[%p]/.test(C)?a:"",_=R9[C],E=/[defgprs%]/.test(C);w=w===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function b(D){var I=S,P=T,O,A,V;if(C==="c")P=_(D)+P,D="";else{D=+D;var G=D<0||1/D<0;if(D=isNaN(D)?c:_(Math.abs(D),w),x&&(D=Vde(D)),G&&+D==0&&g!=="+"&&(G=!1),I=(G?g==="("?g:s:g==="-"||g==="("?"":g)+I,P=(C==="s"?N9[8+LV/3]:"")+P+(G&&g==="("?")":""),E){for(O=-1,A=D.length;++OV||V>57){P=(V===46?i+D.slice(O+1):D.slice(O))+P,D=D.slice(0,O);break}}}m&&!v&&(D=e(D,1/0));var R=I.length+D.length+P.length,N=R>1)+I+D+P+N.slice(R);break;default:D=N+I+D+P;break}return o(D)}return b.toString=function(){return u+""},b}function f(u,d){var h=l((u=Zy(u),u.type="f",u)),g=Math.max(-8,Math.min(8,Math.floor(Eh(d)/3)))*3,p=Math.pow(10,-g),v=N9[8+g/3];return function(y){return h(p*y)+v}}return{format:l,formatPrefix:f}}var Tv,AV,NV;Bde({thousands:",",grouping:[3],currency:["$",""]});function Bde(t){return Tv=Ude(t),AV=Tv.format,NV=Tv.formatPrefix,Tv}function Gde(t){return Math.max(0,-Eh(Math.abs(t)))}function Wde(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Eh(e)/3)))*3-Eh(Math.abs(t)))}function zde(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Eh(e)-Eh(t))+1}function $de(t,e,r,n){var i=Xfe(t,e,r),o;switch(n=Zy(n??",f"),n.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(o=Wde(i,a))&&(n.precision=o),NV(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=zde(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=Gde(i))&&(n.precision=o-(n.type==="%")*2);break}}return AV(n)}function jde(t){var e=t.domain;return t.ticks=function(r){var n=e();return qfe(n[0],n[n.length-1],r??10)},t.tickFormat=function(r,n){var i=e();return $de(i[0],i[i.length-1],r??10,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,o=n.length-1,a=n[i],s=n[o],c,l,f=10;for(s0;){if(l=LS(a,s,r),l===c)return n[i]=a,n[o]=s,e(n);if(l>0)a=Math.floor(a/l)*l,s=Math.ceil(s/l)*l;else if(l<0)a=Math.ceil(a*l)/l,s=Math.floor(s*l)/l;else break;c=l}return t},t}function CE(){var t=Rde();return t.copy=function(){return Mde(t,CE())},Qfe.apply(t,arguments),jde(t)}function Hde(t,e){e.classHierarchy.push("vtkTexture"),t.imageLoaded=()=>{e.image.removeEventListener("load",t.imageLoaded),e.imageLoaded=!0,t.modified()},t.setJsImageData=r=>{e.jsImageData!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.image=null,e.canvas=null),e.jsImageData=r,e.imageLoaded=!0,t.modified())},t.setCanvas=r=>{e.canvas!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.image=null,e.jsImageData=null),e.canvas=r,t.modified())},t.setImage=r=>{e.image!==r&&(r!==null&&(t.setInputData(null),t.setInputConnection(null),e.canvas=null,e.jsImageData=null),e.image=r,e.imageLoaded=!1,r.complete?t.imageLoaded():r.addEventListener("load",t.imageLoaded),t.modified())},t.getDimensionality=()=>{let r=0,n=0,i=1;if(t.getInputData()){const a=t.getInputData();r=a.getDimensions()[0],n=a.getDimensions()[1],i=a.getDimensions()[2]}return e.jsImageData&&(r=e.jsImageData.width,n=e.jsImageData.height),e.canvas&&(r=e.canvas.width,n=e.canvas.height),e.image&&(r=e.image.width,n=e.image.height),(r>1)+(n>1)+(i>1)},t.getInputAsJsImageData=()=>{if(!e.imageLoaded||t.getInputData())return null;if(e.jsImageData)return e.jsImageData();if(e.canvas)return e.canvas.getContext("2d").getImageData(0,0,e.canvas.width,e.canvas.height);if(e.image){const r=document.createElement("canvas");r.width=e.image.width,r.height=e.image.height;const n=r.getContext("2d");return n.translate(0,r.height),n.scale(1,-1),n.drawImage(e.image,0,0,e.image.width,e.image.height),n.getImageData(0,0,r.width,r.height)}return null}}const Kde=(t,e,r,n)=>{const i=[1,2,1],o=4,a=i,s=o,c=t.length/(e*r);let l=e,f=r,u=t;const d=[u];for(let h=0;hc&&(_+=p),E<-c&&(_-=p),y[_]?S+=y[_]*a[T]:C-=a[T],x+=1}u[m+w]=S/C}y=[...u];for(let m=0;m2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,qde,r),J.obj(t,e),J.algo(t,e,6,0),J.get(t,e,["canvas","image","jsImageData","imageLoaded","resizable"]),J.setGet(t,e,["repeat","edgeClamp","interpolate","mipLevel"]),Hde(t,e)}const Xde=J.newInstance(kV,"vtkTexture"),Yde={generateMipmaps:Kde};var Bd={newInstance:Xde,extend:kV,...Yde};const Jde=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],k9=[[8,7,11,3],[9,1,10,5],[4,9,0,8],[2,11,6,10],[0,3,2,1],[4,5,6,7]],_v=[[0,1],[1,3],[2,3],[0,2],[4,5],[5,7],[6,7],[4,6],[0,4],[1,5],[3,7],[2,6]],V9=[0,1,0,1,0,1,0,1,2,2,2,2],Gr=[[1,2],[1,2],[0,2],[0,2],[0,1],[0,1]],vn=new Float64Array(3),Ev=new Float64Array(3),ar=new Float64Array(3),Yf=new Float64Array(3),Af=new Float64Array(3),bv=new Float64Array(3),gC=new Float64Array(16);function pC(t,e){t.strokeStyle=e.strokeColor,t.lineWidth=e.strokeSize,t.fillStyle=e.fontColor,t.font=`${e.fontStyle} ${e.fontSize}px ${e.fontFamily}`}function VV(t){const e=[],r=[];for(let n=0;n<3;n++){const i=CE().domain([t[n*2],t[n*2+1]]);e[n]=i.ticks(5);const o=i.tickFormat(5);r[n]=e[n].map(o)}return{ticks:e,tickStrings:r}}function Zde(t,e){e.classHierarchy.push("vtkCubeAxesActorHelper"),t.setRenderable=r=>{e.renderable!==r&&(e.renderable=r,e.tmActor.addTexture(e.renderable.getTmTexture()),e.tmActor.setProperty(r.getProperty()),e.tmActor.setParentProp(r),t.modified())},t.createPolyDataForOneLabel=(r,n,i,o,a,s,c)=>{const l=e.renderable.get_tmAtlas().get(r);if(!l)return;const f=e.renderable.getTextPolyData().getPoints().getData(),u=e.lastSize;vn[0]=f[n*3],vn[1]=f[n*3+1],vn[2]=f[n*3+2],Yt(ar,vn,i),ar[0]+=.1,Yt(Ev,ar,o),qn(Af,Ev,vn),ar[0]-=.1,ar[1]+=.1,Yt(Ev,ar,o),qn(bv,Ev,vn);for(let g=0;g<3;g++)Af[g]/=.5*.1*u[0],bv[g]/=.5*.1*u[1];let d=c.ptIdx,h=c.cellIdx;vn[0]=f[n*3],vn[1]=f[n*3+1],vn[2]=f[n*3+2],a[0]<-.5?Ir(ar,Af,a[0]*s-l.width):a[0]>.5?Ir(ar,Af,a[0]*s):Ir(ar,Af,a[0]*s-l.width/2),ri(vn,vn,ar),Ir(ar,bv,a[1]*s-l.height/2),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[0],c.tcoords[d*2+1]=l.tcoords[1],d++,Ir(ar,Af,l.width),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[2],c.tcoords[d*2+1]=l.tcoords[3],d++,Ir(ar,bv,l.height),ri(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[4],c.tcoords[d*2+1]=l.tcoords[5],d++,Ir(ar,Af,l.width),qn(vn,vn,ar),c.points[d*3]=vn[0],c.points[d*3+1]=vn[1],c.points[d*3+2]=vn[2],c.tcoords[d*2]=l.tcoords[6],c.tcoords[d*2+1]=l.tcoords[7],d++,c.polys[h*4]=3,c.polys[h*4+1]=d-4,c.polys[h*4+2]=d-3,c.polys[h*4+3]=d-2,h++,c.polys[h*4]=3,c.polys[h*4+1]=d-4,c.polys[h*4+2]=d-2,c.polys[h*4+3]=d-1,c.ptIdx+=4,c.cellIdx+=2},t.updateTexturePolyData=()=>{const r=e.camera.getCompositeProjectionMatrix(e.lastAspectRatio,-1,1);En(r,r);const n=e.renderable.getTextValues().length,i=n*4,o=n*2,a=new Float64Array(i*3),s=new Uint16Array(o*4),c=new Float32Array(i*2);$r(gC,r);const l={ptIdx:0,cellIdx:0,polys:s,points:a,tcoords:c};let f=0,u=0,d=0;const h=e.renderable.getTextPolyData().getPoints().getData(),g=e.renderable.getTextValues();for(;f{(e.lastSize[0]!==r[0]||e.lastSize[1]!==r[1])&&(e.lastSize[0]=r[0],e.lastSize[1]=r[1],e.lastAspectRatio=r[0]/r[1],e.forceUpdate=!0),e.camera=n,t.updateTexturePolyData()}}const Qde=J.newInstance(function(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{renderable:null};Object.assign(e,{},r),J.obj(t,e),e.tmPolyData=Br.newInstance(),e.tmMapper=wa.newInstance(),e.tmMapper.setInputData(e.tmPolyData),e.tmActor=dc.newInstance({parentProp:t}),e.tmActor.setMapper(e.tmMapper),J.setGet(t,e,["renderable"]),J.get(t,e,["lastSize","lastAspectRatio","axisTextStyle","tickTextStyle","tmActor","ticks"]),e.forceUpdate=!1,e.lastRedrawTime={},J.obj(e.lastRedrawTime,{mtime:0}),e.lastRebuildTime={},J.obj(e.lastRebuildTime,{mtime:0}),e.lastSize=[-1,-1],e.lastTickBounds=[],Zde(t,e)},"vtkCubeAxesActorHelper");function e0e(t,e){e.classHierarchy.push("vtkCubeAxesActor"),t.setCamera=n=>{e.camera!==n&&(e.cameraModifiedSub&&(e.cameraModifiedSub.unsubscribe(),e.cameraModifiedSub=null),e.camera=n,n&&(e.cameraModifiedSub=n.onModified(t.update)),t.update(),t.modified())},t.computeFacesToDraw=()=>{const n=e.camera.getViewMatrix();En(n,n);let i=!1;const o=ir.getDiagonalLength(e.dataBounds),a=Math.sin(e.faceVisibilityAngle*Math.PI/180);for(let s=0;s<6;s++){let c=!1;const l=Math.floor(s/2),f=(l+1)%3,u=(l+2)%3;e.dataBounds[f*2]!==e.dataBounds[f*2+1]&&e.dataBounds[u*2]!==e.dataBounds[u*2+1]&&(vn[l]=e.dataBounds[s]-.1*o*Jde[s][l],vn[f]=.5*(e.dataBounds[f*2]+e.dataBounds[f*2+1]),vn[u]=.5*(e.dataBounds[u*2]+e.dataBounds[u*2+1]),Yt(ar,vn,n),vn[l]=e.dataBounds[s],Yt(Yf,vn,n),qn(ar,Yf,ar),Qn(ar,ar),c=ar[2]>a,e.camera.getParallelProjection()||(Qn(Yf,Yf),c=kt(Yf,ar)>a)),c!==e.lastFacesToDraw[s]&&(e.lastFacesToDraw[s]=c,i=!0)}return i},t.updatePolyData=(n,i,o)=>{let a=0,s=0;a+=8;let c=0;for(let h=0;h<12;h++)i[h]>0&&c++;if(s+=c,e.gridLines)for(let h=0;h<6;h++)n[h]&&(a+=o[Gr[h][0]].length*2+o[Gr[h][1]].length*2,s+=o[Gr[h][0]].length+o[Gr[h][1]].length);const l=new Float64Array(a*3),f=new Uint32Array(s*3);let u=0,d=0;for(let h=0;h<2;h++)for(let g=0;g<2;g++)for(let p=0;p<2;p++)l[u*3]=e.dataBounds[p],l[u*3+1]=e.dataBounds[2+g],l[u*3+2]=e.dataBounds[4+h],u++;for(let h=0;h<12;h++)i[h]>0&&(f[d*3]=2,f[d*3+1]=_v[h][0],f[d*3+2]=_v[h][1],d++);if(e.gridLines){for(let h=0;h<6;h++)if(n[h]){const g=Math.floor(h/2);let p=o[Gr[h][0]];for(let v=0;v{let s=0;for(let h=0;h<12;h++)i[h]===1&&(s+=2,s+=o[V9[h]].length);const c=e.polyData.getPoints().getData(),l=new Float64Array(s*3);let f=0,u=0,d=0;for(let h=0;h<6;h++)if(n[h])for(let g=0;g<4;g++){const p=k9[h][g];if(i[p]===1){const v=V9[p],y=_v[p][0]*3,m=_v[p][1]*3;l[f*3]=.5*(c[y]+c[m]),l[f*3+1]=.5*(c[y+1]+c[m+1]),l[f*3+2]=.5*(c[y+2]+c[m+2]),f++;const w=Math.floor(h/2);l[f*3+w]=e.dataBounds[h],l[f*3+Gr[h][0]]=.5*(e.dataBounds[Gr[h][0]*2]+e.dataBounds[Gr[h][0]*2+1]),l[f*3+Gr[h][1]]=.5*(e.dataBounds[Gr[h][1]*2]+e.dataBounds[Gr[h][1]*2+1]),f++,e.textValues[u]=e.axisLabels[v],u++;const x=(v+1)%3,C=(v+2)%3,S=o[v],T=a[v];e.tickCounts[d]=S.length;for(let _=0;_{if(!e.camera)return;const n=t.computeFacesToDraw(),i=e.lastFacesToDraw;let o=!1;for(let a=0;a<6;a++)e.dataBounds[a]!==e.lastTickBounds[a]&&(o=!0,e.lastTickBounds[a]=e.dataBounds[a]);if(n||o||e.forceUpdate){const a=new Array(12).fill(0);for(let c=0;c<6;c++)if(i[c])for(let l=0;l<4;l++)a[k9[c][l]]++;const s=e.generateTicks(e.dataBounds);t.updatePolyData(i,a,s.ticks),t.updateTextData(i,a,s.ticks,s.tickStrings),(o||e.forceUpdate)&&t.updateTextureAtlas(s.tickStrings)}e.forceUpdate=!1},t.updateTextureAtlas=n=>{e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e._tmAtlas.clear();let i=0,o=1;for(let a=0;a<3;a++){if(!e._tmAtlas.has(e.axisLabels[a])){pC(e.tmContext,e.axisTextStyle);const s=e.tmContext.measureText(e.axisLabels[a]),c={height:s.actualBoundingBoxAscent+2,startingHeight:o,width:s.width+2,textStyle:e.axisTextStyle};e._tmAtlas.set(e.axisLabels[a],c),o+=c.height,i{a.tcoords=[0,(o-a.startingHeight-a.height)/o,a.width/i,(o-a.startingHeight-a.height)/o,a.width/i,(o-a.startingHeight)/o,0,(o-a.startingHeight)/o]}),e.tmCanvas.width=i,e.tmCanvas.height=o,e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e.tmContext.clearRect(0,0,i,o),e._tmAtlas.forEach((a,s)=>{pC(e.tmContext,a.textStyle),e.tmContext.fillText(s,1,a.startingHeight+a.height-1)}),e.tmTexture.setCanvas(e.tmCanvas),e.tmTexture.modified()},t.onModified(()=>{e.forceUpdate=!0,t.update()}),t.setTickTextStyle=n=>{e.tickTextStyle={...e.tickTextStyle,...n},t.modified()},t.setAxisTextStyle=n=>{e.axisTextStyle={...e.axisTextStyle,...n},t.modified()},t.get_tmAtlas=()=>e._tmAtlas,t.getBounds=()=>(t.update(),ir.setBounds(e.bounds,e.gridActor.getBounds()),ir.scaleAboutCenter(e.bounds,e.boundsScaleFactor,e.boundsScaleFactor,e.boundsScaleFactor),e.bounds);const r=J.chain(t.setProperty,e.gridActor.setProperty);t.setProperty=n=>r(n)[0]}function t0e(t,e,r){return{boundsScaleFactor:1.3,camera:null,dataBounds:[...ir.INIT_BOUNDS],faceVisibilityAngle:8,gridLines:!0,axisLabels:null,axisTitlePixelOffset:35,tickLabelPixelOffset:12,generateTicks:VV,...r,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif",...r==null?void 0:r.axisTextStyle},tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif",...r==null?void 0:r.tickTextStyle}}}function FV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};dc.extend(t,e,t0e(t,e,r)),e.lastFacesToDraw=[!1,!1,!1,!1,!1,!1],e.axisLabels=["X-Axis","Y-Axis","Z-Axis"],e.tickCounts=[],e.textValues=[],e.lastTickBounds=[],e.tmCanvas=document.createElement("canvas"),e.tmContext=e.tmCanvas.getContext("2d"),e._tmAtlas=new Map,e.tmTexture=Bd.newInstance({resizable:!0}),e.tmTexture.setInterpolate(!1),t.getProperty().setDiffuse(0),t.getProperty().setAmbient(1),e.gridMapper=wa.newInstance(),e.polyData=Br.newInstance(),e.gridMapper.setInputData(e.polyData),e.gridActor=dc.newInstance(),e.gridActor.setMapper(e.gridMapper),e.gridActor.setProperty(t.getProperty()),e.gridActor.setParentProp(t),e.textPolyData=Br.newInstance(),J.setGet(t,e,["axisTitlePixelOffset","boundsScaleFactor","faceVisibilityAngle","gridLines","tickLabelPixelOffset","generateTicks"]),J.setGetArray(t,e,["dataBounds"],6),J.setGetArray(t,e,["axisLabels"],3),J.get(t,e,["axisTextStyle","tickTextStyle","camera","tmTexture","textValues","textPolyData","tickCounts","gridActor"]),e0e(t,e)}const n0e=J.newInstance(FV,"vtkCubeAxesActor");var UV={newInstance:n0e,extend:FV,newCubeAxesActorHelper:Qde,defaultGenerateTicks:VV};function r0e(t,e){e.classHierarchy.push("vtkOpenGLCubeAxesActor"),t.buildPass=r=>{r&&(e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.CubeAxesActorHelper.getRenderable()||e.CubeAxesActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.CubeAxesActorHelper.getTmActor()),t.addMissingNode(e.renderable.getGridActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,o=e._openGLRenderer.getTiledSizeAndOrigin();e.CubeAxesActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e._openGLRenderWindow.getRenderable())}}}const i0e={};function o0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,i0e,r),fr.extend(t,e,r),e.CubeAxesActorHelper=UV.newCubeAxesActorHelper(),r0e(t,e)}const a0e=$n(o0e,"vtkOpenGLCubeAxesActor");Mi("vtkCubeAxesActor",a0e);const{ColorMode:s0e,ScalarMode:Nf,GetArray:mC}=ow;function c0e(t,e){e.classHierarchy.push("vtkMapper2D"),t.createDefaultLookupTable=()=>{e.lookupTable=Dy.newInstance()},t.getColorModeAsString=()=>J.enumToString(s0e,e.colorMode),t.setColorModeToDefault=()=>t.setColorMode(0),t.setColorModeToMapScalars=()=>t.setColorMode(1),t.setColorModeToDirectScalars=()=>t.setColorMode(2),t.getScalarModeAsString=()=>J.enumToString(Nf,e.scalarMode),t.setScalarModeToDefault=()=>t.setScalarMode(0),t.setScalarModeToUsePointData=()=>t.setScalarMode(1),t.setScalarModeToUseCellData=()=>t.setScalarMode(2),t.setScalarModeToUsePointFieldData=()=>t.setScalarMode(3),t.setScalarModeToUseCellFieldData=()=>t.setScalarMode(4),t.setScalarModeToUseFieldData=()=>t.setScalarMode(5),t.getAbstractScalars=(r,n,i,o,a)=>{if(!r||!e.scalarVisibility)return{scalars:null,cellFLag:!1};let s=null,c=!1;if(n===Nf.DEFAULT)s=r.getPointData().getScalars(),s||(s=r.getCellData().getScalars(),c=!0);else if(n===Nf.USE_POINT_DATA)s=r.getPointData().getScalars();else if(n===Nf.USE_CELL_DATA)s=r.getCellData().getScalars(),c=!0;else if(n===Nf.USE_POINT_FIELD_DATA){const l=r.getPointData();i===mC.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}else if(n===Nf.USE_CELL_FIELD_DATA){const l=r.getCellData();c=!0,i===mC.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}else if(n===Nf.USE_FIELD_DATA){const l=r.getFieldData();i===mC.BY_ID?s=l.getArrayByIndex(o):s=l.getArrayByName(a)}return{scalars:s,cellFlag:c}},t.getLookupTable=()=>(e.lookupTable||t.createDefaultLookupTable(),e.lookupTable),t.getMTime=()=>{let r=e.mtime;if(e.lookupTable!==null){const n=e.lookupTable.getMTime();r=n>r?n:r}return r},t.mapScalars=(r,n)=>{const i=t.getAbstractScalars(r,e.scalarMode,e.arrayAccessMode,e.arrayId,e.colorByArrayName).scalars;if(!i){e.colorMapColors=null;return}const o=`${t.getMTime()}${i.getMTime()}${n}`;if(e.colorBuildString===o)return;e.useLookupTableScalarRange||t.getLookupTable().setRange(e.scalarRange[0],e.scalarRange[1]);const a=t.getLookupTable();a&&(a.build(),e.colorMapColors=a.mapScalars(i,e.colorMode,e.fieldDataTupleId)),e.colorBuildString=`${t.getMTime()}${i.getMTime()}${n}`},t.getPrimitiveCount=()=>{const r=t.getInputData();return{points:r.getPoints().getNumberOfValues()/3,verts:r.getVerts().getNumberOfValues()-r.getVerts().getNumberOfCells(),lines:r.getLines().getNumberOfValues()-2*r.getLines().getNumberOfCells(),triangles:r.getPolys().getNumberOfValues()-3*r.getPolys().getNumberOfCells()}}}const l0e={static:!1,lookupTable:null,scalarVisibility:!1,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,transformCoordinate:null,viewSpecificProperties:null,customShaderAttributes:[]};function u0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,l0e,r),SL.extend(t,e,r),J.get(t,e,["colorMapColors"]),J.setGet(t,e,["arrayAccessMode","colorByArrayName","colorMode","lookupTable","renderTime","scalarMode","scalarVisibility","static","transformCoordinate","useLookupTableScalarRange","viewSpecificProperties","customShaderAttributes"]),J.setGetArray(t,e,["scalarRange"],2),e.viewSpecificProperties||(e.viewSpecificProperties={}),c0e(t,e)}J.newInstance(u0e,"vtkMapper2D");var f0e={},d0e=`//VTK::System::Dec /*========================================================================= @@ -3560,7 +3560,7 @@ void main() `;const BV={BACKGROUND:0,FOREGROUND:1};var GV={DisplayLocation:BV};const{primTypes:Xs}=ml,{ScalarMode:Dv}=f0e,{vtkErrorMacro:Iv}=_o,g0e={type:"StartEvent"},p0e={type:"EndEvent"};function m0e(t,e){e.classHierarchy.push("vtkOpenGLPolyDataMapper2D"),t.buildPass=n=>{n&&(e.openGLActor2D=t.getFirstAncestorOfType("vtkOpenGLActor2D"),e._openGLRenderer=e.openGLActor2D.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getLastAncestorOfType("vtkOpenGLRenderWindow"),e.openGLCamera=e._openGLRenderer.getViewNodeFor(e._openGLRenderer.getRenderable().getActiveCamera()))},t.overlayPass=n=>{n&&t.render()},t.getShaderTemplate=(n,i,o)=>{n.Vertex=h0e,n.Fragment=d0e,n.Geometry=""},t.render=()=>{const n=e._openGLRenderWindow.getContext();if(e.context!==n){e.context=n;for(let a=Xs.Start;a{if(t.invokeEvent(g0e),e.renderable.getStatic()||e.renderable.update(),e.currentInput=e.renderable.getInputData(),t.invokeEvent(p0e),!e.currentInput){Iv("No input!");return}!e.currentInput.getPoints||!e.currentInput.getPoints().getNumberOfValues()||(t.renderPieceStart(n,i),t.renderPieceDraw(n,i),t.renderPieceFinish(n,i))},t.renderPieceStart=(n,i)=>{if(e.primitiveIDOffset=0,e._openGLRenderer.getSelector())switch(e._openGLRenderer.getSelector().getCurrentPass()){default:e._openGLRenderer.getSelector().renderProp(i)}t.updateBufferObjects(n,i),e.lastBoundBO=null},t.getNeedToRebuildShaders=(n,i,o)=>n.getShaderSourceTime().getMTime(){t.getNeedToRebuildBufferObjects(n,i)&&t.buildBufferObjects(n,i)},t.getNeedToRebuildBufferObjects=(n,i)=>{const o=e.VBOBuildTime.getMTime();return!!(o{const o=e.currentInput;if(o===null)return;e.renderable.mapScalars(o,i.getProperty().getOpacity());const a=e.renderable.getColorMapColors();e.haveCellScalars=!1;const s=e.renderable.getScalarMode();e.renderable.getScalarVisibility()&&(s===Dv.USE_CELL_DATA||s===Dv.USE_CELL_FIELD_DATA||s===Dv.USE_FIELD_DATA||!o.getPointData().getScalars())&&s!==Dv.USE_POINT_FIELD_DATA&&a&&(e.haveCellScalars=!0);const c=i.getProperty().getRepresentation();let l=o.getPointData().getTCoords();e.openGLActor2D.getActiveTextures()||(l=null);const f=e.renderable.getTransformCoordinate(),d=n.getRenderWindow().getViews()[0].getViewportSize(n),h=`${o.getMTime()}A${c}B${o.getMTime()}C${a?a.getMTime():1}D${l?l.getMTime():1}E${f?n.getMTime():1}F${d}`;if(e.VBOBuildString!==h){let g=o.getPoints();if(f){const v=l1.newInstance(),y=g.getNumberOfPoints();v.setNumberOfPoints(y);const m=[];for(let w=0;wo.getPointData().getArrayByName(v))};p.cellOffset+=e.primitives[Xs.Points].getCABO().createVBO(o.getVerts(),"verts",c,p),p.cellOffset+=e.primitives[Xs.Lines].getCABO().createVBO(o.getLines(),"lines",c,p),p.cellOffset+=e.primitives[Xs.Tris].getCABO().createVBO(o.getPolys(),"polys",c,p),p.cellOffset+=e.primitives[Xs.TriStrips].getCABO().createVBO(o.getStrips(),"strips",c,p),e.VBOBuildTime.modified(),e.VBOBuildString=h}},t.renderPieceDraw=(n,i)=>{const o=i.getProperty().getRepresentation();e.context.depthMask(!0);for(let s=Xs.Start;s{e.lastBoundBO&&e.lastBoundBO.getVAO().release()},t.replaceShaderValues=(n,i,o)=>{t.replaceShaderColor(n,i,o),t.replaceShaderTCoord(n,i,o),t.replaceShaderPicking(n,i,o),t.replaceShaderPositionVC(n,i,o)},t.replaceShaderColor=(n,i,o)=>{let a=n.Vertex,s=n.Geometry,c=n.Fragment;e.haveCellScalars&&(c=ke.substitute(c,"//VTK::Color::Dec",["uniform samplerBuffer texture1;"]).result,c=ke.substitute(c,"//VTK::Color::Impl",["gl_FragData[0] = texelFetchBuffer(texture1, gl_PrimitiveID + PrimitiveIDOffset);"]).result),e.lastBoundBO.getCABO().getColorComponents()!==0?(a=ke.substitute(a,"//VTK::Color::Dec",["in vec4 diffuseColor;","out vec4 fcolorVSOutput;"]).result,a=ke.substitute(a,"//VTK::Color::Impl",["fcolorVSOutput = diffuseColor;"]).result,s=ke.substitute(s,"//VTK::Color::Dec",[`in vec4 fcolorVSOutput[]; `,"out vec4 fcolorGSOutput;"]).result,s=ke.substitute(s,"//VTK::Color::Impl",["fcolorGSOutput = fcolorVSOutput[i];"]).result,c=ke.substitute(c,"//VTK::Color::Dec",["in vec4 fcolorVSOutput;"]).result,c=ke.substitute(c,"//VTK::Color::Impl",["gl_FragData[0] = fcolorVSOutput;"]).result):(c=ke.substitute(c,"//VTK::Color::Dec",["uniform vec4 diffuseColor;"]).result,c=ke.substitute(c,"//VTK::Color::Impl",["gl_FragData[0] = diffuseColor;"]).result),n.Vertex=a,n.Geometry=s,n.Fragment=c},t.replaceShaderTCoord=(n,i,o)=>{if(e.lastBoundBO.getCABO().getTCoordOffset()){let a=n.Vertex,s=n.Geometry,c=n.Fragment;const l=e.lastBoundBO.getCABO().getTCoordComponents();l===1?(a=ke.substitute(a,"//VTK::TCoord::Dec",["in float tcoordMC;","out float tcoordVCVSOutput;"]).result,a=ke.substitute(a,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,s=ke.substitute(s,"//VTK::TCoord::Dec",[`in float tcoordVCVSOutput[]; `,"out float tcoordVCGSOutput;"]).result,s=ke.substitute(s,["//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,c=ke.substitute(c,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,c=ke.substitute(c,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, vec2(tcoordVCVSOutput,0));"]).result):l===2&&(a=ke.substitute(a,"//VTK::TCoord::Dec",["in vec2 tcoordMC;","out vec2 tcoordVCVSOutput;"]).result,a=ke.substitute(a,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,s=ke.substitute(s,"//VTK::TCoord::Dec",[`in vec2 tcoordVCVSOutput[]; -`,"out vec2 tcoordVCGSOutput;"]).result,s=ke.substitute(s,"//VTK::TCoord::Impl",["tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,c=ke.substitute(c,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,c=ke.substitute(c,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, tcoordVCVSOutput.st);"]).result),e.haveCellScalars&&(s=ke.substitute(s,"//VTK::PrimID::Impl",["gl_PrimitiveID = gl_PrimitiveIDIn;"]).result),n.Vertex=a,n.Geometry=s,n.Fragment=c}},t.replaceShaderPicking=(n,i,o)=>{let a=n.Fragment;a=ke.substitute(a,"//VTK::Picking::Dec",["uniform vec3 mapperIndex;","uniform int picking;"]).result,a=ke.substitute(a,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result,n.Fragment=a},t.replaceShaderPositionVC=(n,i,o)=>{e.lastBoundBO.replaceShaderPositionVC(n,i,o)},t.invokeShaderCallbacks=(n,i,o)=>{const a=e.renderable.getViewSpecificProperties().ShadersCallbacks;a&&a.forEach(s=>{s.callback(s.userData,n,i,o)})},t.setMapperShaderParameters=(n,i,o)=>{if(n.getProgram().isUniformUsed("PrimitiveIDOffset")&&n.getProgram().setUniformi("PrimitiveIDOffset",e.primitiveIDOffset),n.getProgram().isAttributeUsed("vertexWC")&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"vertexWC",n.getCABO().getVertexOffset(),n.getCABO().getStride(),e.context.FLOAT,3,!1)||Iv("Error setting vertexWC in shader VAO.")),n.getCABO().getElementCount()&&(e.VBOBuildTime.getMTime()>n.getAttributeUpdateTime().getMTime()||n.getShaderSourceTime().getMTime()>n.getAttributeUpdateTime().getMTime())){e.renderable.getCustomShaderAttributes().forEach((c,l)=>{n.getProgram().isAttributeUsed(`${c}MC`)&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),`${c}MC`,n.getCABO().getCustomData()[l].offset,n.getCABO().getStride(),e.context.FLOAT,n.getCABO().getCustomData()[l].components,!1)||Iv(`Error setting ${c}MC in shader VAO.`))}),n.getProgram().isAttributeUsed("tcoordMC")&&n.getCABO().getTCoordOffset()?n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"tcoordMC",n.getCABO().getTCoordOffset(),n.getCABO().getStride(),e.context.FLOAT,n.getCABO().getTCoordComponents(),!1)||Iv("Error setting tcoordMC in shader VAO."):n.getVAO().removeAttributeArray("tcoordMC"),e.internalColorTexture&&n.getProgram().isUniformUsed("texture1")&&n.getProgram().setUniformi("texture1",e.internalColorTexture.getTextureUnit());const a=e.openGLActor2D.getActiveTextures();if(a)for(let c=0;c{const a=e.renderable.getColorMapColors();if(!a||a.getNumberOfComponents()===0){const s=n.getProgram(),c=o.getProperty(),l=c.getOpacity(),f=c.getColor(),u=[f[0],f[1],f[2],l];s.setUniform4f("diffuseColor",u)}},t.setLightingShaderParameters=(n,i,o)=>{};function r(n,i,o){return i.identity(o),n.reduce((a,s,c)=>c===0?s?i.copy(a,s):i.identity(a):s?i.multiply(a,a,s):a,o)}t.setCameraShaderParameters=(n,i,o)=>{const a=n.getProgram(),c=n.getCABO().getCoordShiftAndScaleEnabled()?n.getCABO().getInverseShiftAndScaleMatrix():null,f=i.getRenderWindow().getViews()[0].getViewportSize(i),u=i.getViewport(),d=o.getActualPositionCoordinate().getComputedDoubleViewportValue(i),h=[0,0,1,1],g=[0,0,1,1];if(g[0]=u[0]>=h[0]?u[0]:h[0],g[1]=u[1]>=h[1]?u[1]:h[1],g[2]=u[2]<=h[2]?u[2]:h[2],g[3]=u[3]<=h[3]?u[3]:h[3],g[0]>=g[2]||g[1]>=g[3])return;f[0]=$g(f[0]*(g[2]-g[0])/(u[2]-u[0])),f[1]=$g(f[1]*(g[3]-g[1])/(u[3]-u[1]));const p=e._openGLRenderer.getParent().getSize(),v=$g(d[0]-(g[0]-u[0])*p[0]),y=$g(d[1]-(g[1]-u[1])*p[1]),m=-v;let w=-v+f[0];const x=-y;let C=-y+f[1];m===w&&(w=m+1),x===C&&(C=x+1);const S=Wt(new Float64Array(16));S[0]=2/(w-m),S[1*4+1]=2/(C-x),S[0*4+3]=-1*(w+m)/(w-m),S[1*4+3]=-1*(C+x)/(C-x),S[2*4+2]=0,S[2*4+3]=o.getProperty().getDisplayLocation()===BV.FOREGROUND?-1:1,S[3*4+3]=1,En(S,S),a.setUniformMatrix("WCVCMatrix",r([S,c],s1,e.tmpMat4))},t.getAllocatedGPUMemoryInBytes=()=>{let n=0;return e.primitives.forEach(i=>{n+=i.getAllocatedGPUMemoryInBytes()}),n}}const v0e={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null};function y0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,v0e,r),fr.extend(t,e,r),ll.implementReplaceShaderCoincidentOffset(t,e,r),ll.implementBuildShadersWithReplacements(t,e,r),e.primitives=[],e.primTypes=Xs,e.tmpMat4=Wt(new Float64Array(16));for(let n=Xs.Start;n{const n=r.getLastSize(),i=(n[0]/700)**.8,o=(n[1]/700)**.8,a=Math.min(i,o),s=r.getAxisTextStyle(),c=r.getTickTextStyle();Object.assign(s,e.axisTextStyle),Object.assign(c,e.tickTextStyle),s.fontSize=Math.max(24*a,12),r.getLastAspectRatio()>1?c.fontSize=Math.max(20*a,10):c.fontSize=Math.max(16*a,10);const l=r.updateTextureAtlas();r.setTopTitle(!1);const f=r.getBoxSizeByReference();if(r.getLastAspectRatio()>1)r.setTickLabelPixelOffset(.3*c.fontSize),l.titleWidth<=l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize?(r.setTopTitle(!0),r.setAxisTitlePixelOffset(.2*c.fontSize),f[0]=2*(l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize)/n[0],r.setBoxPosition([.98-f[0],-.92])):(r.setAxisTitlePixelOffset(.2*c.fontSize),f[0]=2*(l.titleHeight+r.getAxisTitlePixelOffset()+l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize)/n[0],r.setBoxPosition([.99-f[0],-.92])),f[1]=Math.max(1.2,Math.min(1.84/o,1.84));else{r.setAxisTitlePixelOffset(1.2*c.fontSize),r.setTickLabelPixelOffset(.1*c.fontSize);const u=2*(.8*c.fontSize+l.titleHeight+r.getAxisTitlePixelOffset())/n[1],d=2*l.tickWidth/n[0];f[0]=Math.min(1.9,Math.max(1.4,1.4*d*(r.getTicks().length+3))),f[1]=u,r.setBoxPosition([-.5*f[0],-.97])}r.recomputeBarSegments(l)}}function zV(t,e){return r=>{const n=r.getLastTickBounds(),i=CE().domain([n[0],n[1]]),o=i.ticks(5),a=i.tickFormat(5);r.setTicks(o),r.setTickStrings(o.map(a))}}function C0e(t,e){e.classHierarchy.push("vtkScalarBarActorHelper"),t.setRenderable=i=>{e.renderable!==i&&(e.renderable=i,e.barActor.setProperty(i.getProperty()),e.barActor.setParentProp(i),e.barActor.setCoordinateSystemToDisplay(),e.tmActor.setProperty(i.getProperty()),e.tmActor.setParentProp(i),e.tmActor.setCoordinateSystemToDisplay(),e.generateTicks=i.generateTicks,e.axisTextStyle={...i.getAxisTextStyle()},e.tickTextStyle={...i.getTickTextStyle()},t.modified())},t.updateAPISpecificData=(i,o,a)=>{(e.lastSize[0]!==i[0]||e.lastSize[1]!==i[1])&&(e.lastSize[0]=i[0],e.lastSize[1]=i[1],e.lastAspectRatio=i[0]/i[1],e.forceUpdate=!0);const s=e.renderable.getScalarsToColors();if(!(!s||!e.renderable.getVisibility())&&(e.barMapper.setLookupTable(s),e.camera=o,e.renderWindow=a,e.forceUpdate||Math.max(s.getMTime(),t.getMTime(),e.renderable.getMTime())>e.lastRebuildTime.getMTime())){const c=s.getMappingRange();if(e.lastTickBounds=[...c],e.renderable.getGenerateTicks()(t),e.renderable.getAutomated())e.renderable.getAutoLayout()(t);else{e.axisTextStyle={...e.renderable.getAxisTextStyle()},e.tickTextStyle={...e.renderable.getTickTextStyle()},e.barPosition=[...e.renderable.getBarPosition()],e.barSize=[...e.renderable.getBarSize()],e.boxPosition=[...e.renderable.getBoxPosition()],e.boxSize=[...e.renderable.getBoxSize()],e.axisTitlePixelOffset=e.renderable.getAxisTitlePixelOffset(),e.tickLabelPixelOffset=e.renderable.getTickLabelPixelOffset();const l=t.updateTextureAtlas();t.recomputeBarSegments(l)}t.updatePolyDataForLabels(),t.updatePolyDataForBarSegments(),e.lastRebuildTime.modified(),e.forceUpdate=!1}},t.updateTextureAtlas=()=>{e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left";const i={},o=new Map;let a=0,s=1;v3(e.tmContext,e.axisTextStyle);let c=e.tmContext.measureText(e.renderable.getAxisLabel()),l={height:c.actualBoundingBoxAscent+2,startingHeight:s,width:c.width+2,textStyle:e.axisTextStyle};o.set(e.renderable.getAxisLabel(),l),s+=l.height,a=l.width,i.titleWidth=l.width,i.titleHeight=l.height,i.tickWidth=0,i.tickHeight=0,v3(e.tmContext,e.tickTextStyle);const f=[...t.getTickStrings(),"NaN","Below","Above"];for(let u=0;u{u.tcoords=[0,(s-u.startingHeight-u.height)/s,u.width/a,(s-u.startingHeight-u.height)/s,u.width/a,(s-u.startingHeight)/s,0,(s-u.startingHeight)/s]}),e.tmCanvas.width=a,e.tmCanvas.height=s,e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e.tmContext.clearRect(0,0,a,s),o.forEach((u,d)=>{v3(e.tmContext,u.textStyle),e.tmContext.fillText(d,1,u.startingHeight+u.height-1)}),e.tmTexture.setCanvas(e.tmCanvas),e.tmTexture.modified(),e._tmAtlas=o,i},t.computeBarSize=i=>{e.vertical=e.boxSize[1]>e.boxSize[0];const o=2*i.tickHeight/e.lastSize[1],a=[1,1];if(e.vertical){const s=2*(i.tickWidth+e.tickLabelPixelOffset)/e.lastSize[0];if(e.topTitle){const c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0]-s,e.barSize[1]=e.boxSize[1]-c}else{const c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[0];e.barSize[0]=e.boxSize[0]-c-s,e.barSize[1]=e.boxSize[1]}e.barPosition[0]=e.boxPosition[0]+s,e.barPosition[1]=e.boxPosition[1],a[1]=o}else{const s=(2*i.tickWidth-8)/e.lastSize[0],c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0],e.barPosition[0]=e.boxPosition[0],e.barSize[1]=e.boxSize[1]-c,e.barPosition[1]=e.boxPosition[1],a[0]=s}return a},t.recomputeBarSegments=i=>{var d,h,g,p;const o=t.computeBarSize(i);e.barSegments=[];const a=[0,0],s=e.vertical?1:0,c=e.vertical?.01:.02;function l(v,y){e.barSegments.push({corners:[[...a],[a[0]+o[0],a[1]],[a[0]+o[0],a[1]+o[1]],[a[0],a[1]+o[1]]],scalars:y,title:v}),a[s]+=o[s]+c}e.renderable.getDrawNanAnnotation()&&e.renderable.getScalarsToColors().getNanColor()&&l("NaN",[NaN,NaN,NaN,NaN]),e.renderable.getDrawBelowRangeSwatch()&&((h=(d=e.renderable.getScalarsToColors()).getUseBelowRangeColor)!=null&&h.call(d))&&l("Below",[-.1,-.1,-.1,-.1]);const f=(p=(g=e.renderable.getScalarsToColors()).getUseAboveRangeColor)==null?void 0:p.call(g);a[s]+=c;const u=o[s];o[s]=f?1-2*c-o[s]-a[s]:1-c-a[s],l("ticks",e.vertical?[0,0,.995,.995]:[0,.995,.995,0]),e.renderable.getDrawAboveRangeSwatch()&&f&&(o[s]=u,a[s]+=c,l("Above",[1.1,1.1,1.1,1.1]))};const r=new Float64Array(3);t.createPolyDataForOneLabel=(i,o,a,s,c,l)=>{const f=e._tmAtlas.get(i);if(!f)return;let u=l.ptIdx,d=l.cellIdx;r[0]=(.5*o[0]+.5)*e.lastSize[0],r[1]=(.5*o[1]+.5)*e.lastSize[1],r[2]=o[2],r[0]+=c[0],r[1]+=c[1];const h=[],g=s==="vertical"?[1,0]:[0,1];s==="vertical"?(h[0]=f.width,h[1]=-f.height,a[0]==="middle"?r[1]-=f.width/2:a[0]==="right"&&(r[1]-=f.width),a[1]==="middle"?r[0]+=f.height/2:a[1]==="top"&&(r[0]+=f.height)):(h[0]=f.width,h[1]=f.height,a[0]==="middle"?r[0]-=f.width/2:a[0]==="right"&&(r[0]-=f.width),a[1]==="middle"?r[1]-=f.height/2:a[1]==="top"&&(r[1]-=f.height)),l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[0],l.tcoords[u*2+1]=f.tcoords[1],u++,r[g[0]]+=h[0],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[2],l.tcoords[u*2+1]=f.tcoords[3],u++,r[g[1]]+=h[1],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[4],l.tcoords[u*2+1]=f.tcoords[5],u++,r[g[0]]-=h[0],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[6],l.tcoords[u*2+1]=f.tcoords[7],u++,l.polys[d*4]=3,l.polys[d*4+1]=u-4,l.polys[d*4+2]=u-3,l.polys[d*4+3]=u-2,d++,l.polys[d*4]=3,l.polys[d*4+1]=u-4,l.polys[d*4+2]=u-2,l.polys[d*4+3]=u-1,l.ptIdx+=4,l.cellIdx+=2};const n=new Float64Array(3);t.updatePolyDataForLabels=()=>{const i=t.getTickStrings().length+e.barSegments.length,o=i*4,a=i*2,s=new Float64Array(o*3),c=new Uint16Array(a*4),l=new Float32Array(o*2),f={ptIdx:0,cellIdx:0,polys:c,points:s,tcoords:l},u=e.vertical?0:1,d=e.vertical?1:0;n[2]=-.99;const h=e.vertical?["right","middle"]:["middle","bottom"];let g=[0,1];const p=[0,0];e.vertical?(p[0]=-e.tickLabelPixelOffset,e.topTitle?(n[0]=e.boxPosition[0]+.5*e.boxSize[0],n[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)):(n[0]=e.barPosition[0]+e.barSize[0],n[1]=e.barPosition[1]+.5*e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","top"],"vertical",[e.axisTitlePixelOffset,0],f)),g=[-1,0]):(p[1]=e.tickLabelPixelOffset,n[0]=e.barPosition[0]+.5*e.barSize[0],n[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)),n[u]=e.barPosition[u]+(.5*g[u]+.5)*e.barSize[u],n[d]=e.barPosition[d]+e.barSize[d]*.5;let v=null;for(let S=0;S{var p,v;const i=e.renderable.getScalarsToColors();let o=0;e.renderable.getDrawNanAnnotation()&&i.getNanColor()&&(o+=1),e.renderable.getDrawBelowRangeSwatch()&&((p=i.getUseBelowRangeColor)!=null&&p.call(i))&&(o+=1),e.renderable.getDrawAboveRangeSwatch()&&((v=i.getUseAboveRangeColor)!=null&&v.call(i))&&(o+=1);const a=4*(1+o),s=a;let c=1;i.getVectorMode()===x0e.COMPONENT&&(c=i.getVectorComponent()+1);const l=new Float64Array(a*3),f=new Uint16Array(s*5),u=new Float32Array(a*c);let d=0,h=0;for(let y=0;y2&&arguments[2]!==void 0?arguments[2]:{renderable:null};Object.assign(e,{},r),J.obj(t,e),J.setGet(t,e,["axisTitlePixelOffset","tickLabelPixelOffset","renderable","topTitle","ticks","tickStrings"]),J.get(t,e,["lastSize","lastAspectRatio","lastTickBounds","axisTextStyle","tickTextStyle","barActor","tmActor"]),J.getArray(t,e,["boxPosition","boxSize"]),J.setArray(t,e,["boxPosition","boxSize"],2),e.forceUpdate=!1,e.lastRebuildTime={},J.obj(e.lastRebuildTime,{mtime:0}),e.lastSize=[-1,-1],e.tmCanvas=document.createElement("canvas"),e.tmContext=e.tmCanvas.getContext("2d"),e._tmAtlas=new Map,e.barMapper=wa.newInstance(),e.barMapper.setInterpolateScalarsBeforeMapping(!0),e.barMapper.setUseLookupTableScalarRange(!0),e.polyData=Br.newInstance(),e.barMapper.setInputData(e.polyData),e.barActor=dc.newInstance(),e.barActor.setMapper(e.barMapper),e.tmPolyData=Br.newInstance(),e.tmMapper=wa.newInstance(),e.tmMapper.setInputData(e.tmPolyData),e.tmTexture=Bd.newInstance({resizable:!0}),e.tmTexture.setInterpolate(!1),e.tmActor=dc.newInstance({parentProp:t}),e.tmActor.setMapper(e.tmMapper),e.tmActor.addTexture(e.tmTexture),e.barPosition=[0,0],e.barSize=[0,0],e.boxPosition=[.88,-.92],e.boxSize=[.1,1.1],e.lastTickBounds=[],C0e(t,e)},"vtkScalarBarActorHelper");function T0e(t,e){e.classHierarchy.push("vtkScalarBarActor"),t.setTickTextStyle=r=>{e.tickTextStyle={...e.tickTextStyle,...r},t.modified()},t.setAxisTextStyle=r=>{e.axisTextStyle={...e.axisTextStyle,...r},t.modified()},t.resetAutoLayoutToDefault=()=>{t.setAutoLayout(WV(t,e))},t.resetGenerateTicksToDefault=()=>{t.setGenerateTicks(zV())}}function _0e(t){return{automated:!0,autoLayout:null,axisLabel:"Scalar Value",barPosition:[0,0],barSize:[0,0],boxPosition:[.88,-.92],boxSize:[.1,1.1],scalarToColors:null,axisTitlePixelOffset:36,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif"},tickLabelPixelOffset:14,tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif"},generateTicks:null,drawNanAnnotation:!0,drawBelowRangeSwatch:!0,drawAboveRangeSwatch:!0,...t}}function $V(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,_0e(r)),e.autoLayout||(e.autoLayout=WV(t,e)),e.generateTicks||(e.generateTicks=zV()),dc.extend(t,e,r),t.getProperty().setDiffuse(0),t.getProperty().setAmbient(1),J.setGet(t,e,["automated","autoLayout","axisTitlePixelOffset","axisLabel","scalarsToColors","tickLabelPixelOffset","generateTicks","drawNanAnnotation","drawBelowRangeSwatch","drawAboveRangeSwatch"]),J.get(t,e,["axisTextStyle","tickTextStyle"]),J.getArray(t,e,["barPosition","barSize","boxPosition","boxSize"]),J.setArray(t,e,["barPosition","barSize","boxPosition","boxSize"],2),T0e(t,e)}const E0e=J.newInstance($V,"vtkScalarBarActor");var jV={newInstance:E0e,extend:$V,newScalarBarActorHelper:S0e};function b0e(t,e){e.classHierarchy.push("vtkOpenGLScalarBarActor"),t.buildPass=r=>{r&&(e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.scalarBarActorHelper.getRenderable()||e.scalarBarActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.scalarBarActorHelper.getBarActor()),t.addMissingNode(e.scalarBarActorHelper.getTmActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,o=e._openGLRenderer.getTiledSizeAndOrigin();e.scalarBarActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e._openGLRenderWindow.getRenderable())}}}const D0e={};function I0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,D0e,r),fr.extend(t,e,r),e.scalarBarActorHelper=jV.newScalarBarActorHelper(),b0e(t,e)}const O0e=$n(I0e,"vtkOpenGLScalarBarActor");Mi("vtkScalarBarActor",O0e);const{CoordinateSystem:F9}=nm;function M0e(t,e){e.classHierarchy.push("vtkWebGPUActor"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes())},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const n=e.renderable.getMatrix();e.bufferShift[0]=n[3],e.bufferShift[1]=n[7],e.bufferShift[2]=n[11];const i=r.getStabilizedCenterByReference();e.renderable.getCoordinateSystem()===F9.WORLD&&(e.bufferShift[0]-=i[0],e.bufferShift[1]-=i[1],e.bufferShift[2]-=i[2]),En(e.keyMatrices.bcwc,n),e.renderable.getIsIdentity()?Wt(e.keyMatrices.normalMatrix):(kr(e.keyMatrices.normalMatrix,e.keyMatrices.bcwc),e.keyMatrices.normalMatrix[3]=0,e.keyMatrices.normalMatrix[7]=0,e.keyMatrices.normalMatrix[11]=0,$r(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix),En(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix)),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),e.renderable.getCoordinateSystem()===F9.WORLD?dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-i[0],-i[1],-i[2]]):kr(e.keyMatrices.bcsc,e.keyMatrices.bcwc),e.keyMatricesTime.modified()}return e.keyMatrices}}const P0e={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};function R0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,P0e,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),e.bufferShift=[0,0,0,0],M0e(t,e)}const L0e=J.newInstance(R0e);Es("vtkActor",L0e);const{CoordinateSystem:U9}=nm;function A0e(t,e){e.classHierarchy.push("vtkWebGPUActor2D"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes())},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.bufferShift[0]=0,e.bufferShift[1]=0,e.bufferShift[2]=0;const n=r.getStabilizedCenterByReference();e.renderable.getCoordinateSystem()===U9.WORLD&&(e.bufferShift[0]-=n[0],e.bufferShift[1]-=n[1],e.bufferShift[2]-=n[2]),Wt(e.keyMatrices.bcwc),Wt(e.keyMatrices.normalMatrix),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),e.renderable.getCoordinateSystem()===U9.WORLD?dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-n[0],-n[1],-n[2]]):kr(e.keyMatrices.bcsc,e.keyMatrices.bcwc),e.keyMatricesTime.modified()}return e.keyMatrices}}const N0e={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};function k0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,N0e,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),e.bufferShift=[0,0,0,0],A0e(t,e)}const V0e=J.newInstance(k0e);Es("vtkActor2D",V0e);function F0e(t,e){e.classHierarchy.push("vtkWebGPUCubeAxesActor"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.CubeAxesActorHelper.getRenderable()||e.CubeAxesActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.CubeAxesActorHelper.getTmActor()),t.addMissingNode(e.renderable.getGridActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e.WebGPURenderer?e.WebGPURenderer.getRenderable().getActiveCamera():null,o=e.WebGPURenderer.getTiledSizeAndOrigin();e.CubeAxesActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e.WebGPURenderWindow.getRenderable())}}}const U0e={};function B0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,U0e,r),fr.extend(t,e,r),e.CubeAxesActorHelper=UV.newCubeAxesActorHelper(),F0e(t,e)}const G0e=$n(B0e,"vtkWebGPUCubeAxesActor");Es("vtkCubeAxesActor",G0e);const{DisplayLocation:VS}=GV;function W0e(t,e){e.classHierarchy.push("vtkProperty2D"),t.setDisplayLocationToBackground=()=>t.setDisplayLocation(VS.BACKGROUND),t.setDisplayLocationToForeground=()=>t.setDisplayLocation(VS.FOREGROUND),t.setRepresentationToWireframe=()=>t.setRepresentation(xo.WIREFRAME),t.setRepresentationToSurface=()=>t.setRepresentation(xo.SURFACE),t.setRepresentationToPoints=()=>t.setRepresentation(xo.POINTS),t.getRepresentationAsString=()=>J.enumToString(xo,e.representation)}const z0e={color:[1,1,1],opacity:1,pointSize:1,lineWidth:1,representation:xo.SURFACE,displayLocation:VS.FOREGROUND};function $0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,z0e,r),J.obj(t,e),J.setGet(t,e,["opacity","lineWidth","pointSize","displayLocation","representation"]),J.setGetArray(t,e,["color"],3),W0e(t,e)}J.newInstance($0e,"vtkProperty2D");var j0e={...GV};const{BufferUsage:co,PrimitiveTypes:Yo}=$h,{Representation:Ov}=Fd,{ScalarMode:Mv}=wa,{CoordinateSystem:H0e}=nm,{DisplayLocation:K0e}=j0e,q0e=` +`,"out vec2 tcoordVCGSOutput;"]).result,s=ke.substitute(s,"//VTK::TCoord::Impl",["tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,c=ke.substitute(c,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,c=ke.substitute(c,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, tcoordVCVSOutput.st);"]).result),e.haveCellScalars&&(s=ke.substitute(s,"//VTK::PrimID::Impl",["gl_PrimitiveID = gl_PrimitiveIDIn;"]).result),n.Vertex=a,n.Geometry=s,n.Fragment=c}},t.replaceShaderPicking=(n,i,o)=>{let a=n.Fragment;a=ke.substitute(a,"//VTK::Picking::Dec",["uniform vec3 mapperIndex;","uniform int picking;"]).result,a=ke.substitute(a,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result,n.Fragment=a},t.replaceShaderPositionVC=(n,i,o)=>{e.lastBoundBO.replaceShaderPositionVC(n,i,o)},t.invokeShaderCallbacks=(n,i,o)=>{const a=e.renderable.getViewSpecificProperties().ShadersCallbacks;a&&a.forEach(s=>{s.callback(s.userData,n,i,o)})},t.setMapperShaderParameters=(n,i,o)=>{if(n.getProgram().isUniformUsed("PrimitiveIDOffset")&&n.getProgram().setUniformi("PrimitiveIDOffset",e.primitiveIDOffset),n.getProgram().isAttributeUsed("vertexWC")&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"vertexWC",n.getCABO().getVertexOffset(),n.getCABO().getStride(),e.context.FLOAT,3,!1)||Iv("Error setting vertexWC in shader VAO.")),n.getCABO().getElementCount()&&(e.VBOBuildTime.getMTime()>n.getAttributeUpdateTime().getMTime()||n.getShaderSourceTime().getMTime()>n.getAttributeUpdateTime().getMTime())){e.renderable.getCustomShaderAttributes().forEach((c,l)=>{n.getProgram().isAttributeUsed(`${c}MC`)&&(n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),`${c}MC`,n.getCABO().getCustomData()[l].offset,n.getCABO().getStride(),e.context.FLOAT,n.getCABO().getCustomData()[l].components,!1)||Iv(`Error setting ${c}MC in shader VAO.`))}),n.getProgram().isAttributeUsed("tcoordMC")&&n.getCABO().getTCoordOffset()?n.getVAO().addAttributeArray(n.getProgram(),n.getCABO(),"tcoordMC",n.getCABO().getTCoordOffset(),n.getCABO().getStride(),e.context.FLOAT,n.getCABO().getTCoordComponents(),!1)||Iv("Error setting tcoordMC in shader VAO."):n.getVAO().removeAttributeArray("tcoordMC"),e.internalColorTexture&&n.getProgram().isUniformUsed("texture1")&&n.getProgram().setUniformi("texture1",e.internalColorTexture.getTextureUnit());const a=e.openGLActor2D.getActiveTextures();if(a)for(let c=0;c{const a=e.renderable.getColorMapColors();if(!a||a.getNumberOfComponents()===0){const s=n.getProgram(),c=o.getProperty(),l=c.getOpacity(),f=c.getColor(),u=[f[0],f[1],f[2],l];s.setUniform4f("diffuseColor",u)}},t.setLightingShaderParameters=(n,i,o)=>{};function r(n,i,o){return i.identity(o),n.reduce((a,s,c)=>c===0?s?i.copy(a,s):i.identity(a):s?i.multiply(a,a,s):a,o)}t.setCameraShaderParameters=(n,i,o)=>{const a=n.getProgram(),c=n.getCABO().getCoordShiftAndScaleEnabled()?n.getCABO().getInverseShiftAndScaleMatrix():null,f=i.getRenderWindow().getViews()[0].getViewportSize(i),u=i.getViewport(),d=o.getActualPositionCoordinate().getComputedDoubleViewportValue(i),h=[0,0,1,1],g=[0,0,1,1];if(g[0]=u[0]>=h[0]?u[0]:h[0],g[1]=u[1]>=h[1]?u[1]:h[1],g[2]=u[2]<=h[2]?u[2]:h[2],g[3]=u[3]<=h[3]?u[3]:h[3],g[0]>=g[2]||g[1]>=g[3])return;f[0]=$g(f[0]*(g[2]-g[0])/(u[2]-u[0])),f[1]=$g(f[1]*(g[3]-g[1])/(u[3]-u[1]));const p=e._openGLRenderer.getParent().getSize(),v=$g(d[0]-(g[0]-u[0])*p[0]),y=$g(d[1]-(g[1]-u[1])*p[1]),m=-v;let w=-v+f[0];const x=-y;let C=-y+f[1];m===w&&(w=m+1),x===C&&(C=x+1);const S=Wt(new Float64Array(16));S[0]=2/(w-m),S[1*4+1]=2/(C-x),S[0*4+3]=-1*(w+m)/(w-m),S[1*4+3]=-1*(C+x)/(C-x),S[2*4+2]=0,S[2*4+3]=o.getProperty().getDisplayLocation()===BV.FOREGROUND?-1:1,S[3*4+3]=1,En(S,S),a.setUniformMatrix("WCVCMatrix",r([S,c],s1,e.tmpMat4))},t.getAllocatedGPUMemoryInBytes=()=>{let n=0;return e.primitives.forEach(i=>{n+=i.getAllocatedGPUMemoryInBytes()}),n}}const v0e={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null};function y0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,v0e,r),fr.extend(t,e,r),ll.implementReplaceShaderCoincidentOffset(t,e,r),ll.implementBuildShadersWithReplacements(t,e,r),e.primitives=[],e.primTypes=Xs,e.tmpMat4=Wt(new Float64Array(16));for(let n=Xs.Start;n{const n=r.getLastSize(),i=(n[0]/700)**.8,o=(n[1]/700)**.8,a=Math.min(i,o),s=r.getAxisTextStyle(),c=r.getTickTextStyle();Object.assign(s,e.axisTextStyle),Object.assign(c,e.tickTextStyle),s.fontSize=Math.max(24*a,12),r.getLastAspectRatio()>1?c.fontSize=Math.max(20*a,10):c.fontSize=Math.max(16*a,10);const l=r.updateTextureAtlas();r.setTopTitle(!1);const f=r.getBoxSizeByReference();if(r.getLastAspectRatio()>1)r.setTickLabelPixelOffset(.3*c.fontSize),l.titleWidth<=l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize?(r.setTopTitle(!0),r.setAxisTitlePixelOffset(.2*c.fontSize),f[0]=2*(l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize)/n[0],r.setBoxPosition([.98-f[0],-.92])):(r.setAxisTitlePixelOffset(.2*c.fontSize),f[0]=2*(l.titleHeight+r.getAxisTitlePixelOffset()+l.tickWidth+r.getTickLabelPixelOffset()+.8*c.fontSize)/n[0],r.setBoxPosition([.99-f[0],-.92])),f[1]=Math.max(1.2,Math.min(1.84/o,1.84));else{r.setAxisTitlePixelOffset(1.2*c.fontSize),r.setTickLabelPixelOffset(.1*c.fontSize);const u=2*(.8*c.fontSize+l.titleHeight+r.getAxisTitlePixelOffset())/n[1],d=2*l.tickWidth/n[0];f[0]=Math.min(1.9,Math.max(1.4,1.4*d*(r.getTicks().length+3))),f[1]=u,r.setBoxPosition([-.5*f[0],-.97])}r.recomputeBarSegments(l)}}function zV(t,e){return r=>{const n=r.getLastTickBounds(),i=CE().domain([n[0],n[1]]),o=i.ticks(5),a=i.tickFormat(5);r.setTicks(o),r.setTickStrings(o.map(a))}}function C0e(t,e){e.classHierarchy.push("vtkScalarBarActorHelper"),t.setRenderable=i=>{e.renderable!==i&&(e.renderable=i,e.barActor.setProperty(i.getProperty()),e.barActor.setParentProp(i),e.barActor.setCoordinateSystemToDisplay(),e.tmActor.setProperty(i.getProperty()),e.tmActor.setParentProp(i),e.tmActor.setCoordinateSystemToDisplay(),e.generateTicks=i.generateTicks,e.axisTextStyle={...i.getAxisTextStyle()},e.tickTextStyle={...i.getTickTextStyle()},t.modified())},t.updateAPISpecificData=(i,o,a)=>{(e.lastSize[0]!==i[0]||e.lastSize[1]!==i[1])&&(e.lastSize[0]=i[0],e.lastSize[1]=i[1],e.lastAspectRatio=i[0]/i[1],e.forceUpdate=!0);const s=e.renderable.getScalarsToColors();if(!(!s||!e.renderable.getVisibility())&&(e.barMapper.setLookupTable(s),e.camera=o,e.renderWindow=a,e.forceUpdate||Math.max(s.getMTime(),t.getMTime(),e.renderable.getMTime())>e.lastRebuildTime.getMTime())){const c=s.getMappingRange();if(e.lastTickBounds=[...c],e.renderable.getGenerateTicks()(t),e.renderable.getAutomated())e.renderable.getAutoLayout()(t);else{e.axisTextStyle={...e.renderable.getAxisTextStyle()},e.tickTextStyle={...e.renderable.getTickTextStyle()},e.barPosition=[...e.renderable.getBarPosition()],e.barSize=[...e.renderable.getBarSize()],e.boxPosition=[...e.renderable.getBoxPosition()],e.boxSize=[...e.renderable.getBoxSize()],e.axisTitlePixelOffset=e.renderable.getAxisTitlePixelOffset(),e.tickLabelPixelOffset=e.renderable.getTickLabelPixelOffset();const l=t.updateTextureAtlas();t.recomputeBarSegments(l)}t.updatePolyDataForLabels(),t.updatePolyDataForBarSegments(),e.lastRebuildTime.modified(),e.forceUpdate=!1}},t.updateTextureAtlas=()=>{e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left";const i={},o=new Map;let a=0,s=1;vC(e.tmContext,e.axisTextStyle);let c=e.tmContext.measureText(e.renderable.getAxisLabel()),l={height:c.actualBoundingBoxAscent+2,startingHeight:s,width:c.width+2,textStyle:e.axisTextStyle};o.set(e.renderable.getAxisLabel(),l),s+=l.height,a=l.width,i.titleWidth=l.width,i.titleHeight=l.height,i.tickWidth=0,i.tickHeight=0,vC(e.tmContext,e.tickTextStyle);const f=[...t.getTickStrings(),"NaN","Below","Above"];for(let u=0;u{u.tcoords=[0,(s-u.startingHeight-u.height)/s,u.width/a,(s-u.startingHeight-u.height)/s,u.width/a,(s-u.startingHeight)/s,0,(s-u.startingHeight)/s]}),e.tmCanvas.width=a,e.tmCanvas.height=s,e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e.tmContext.clearRect(0,0,a,s),o.forEach((u,d)=>{vC(e.tmContext,u.textStyle),e.tmContext.fillText(d,1,u.startingHeight+u.height-1)}),e.tmTexture.setCanvas(e.tmCanvas),e.tmTexture.modified(),e._tmAtlas=o,i},t.computeBarSize=i=>{e.vertical=e.boxSize[1]>e.boxSize[0];const o=2*i.tickHeight/e.lastSize[1],a=[1,1];if(e.vertical){const s=2*(i.tickWidth+e.tickLabelPixelOffset)/e.lastSize[0];if(e.topTitle){const c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0]-s,e.barSize[1]=e.boxSize[1]-c}else{const c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[0];e.barSize[0]=e.boxSize[0]-c-s,e.barSize[1]=e.boxSize[1]}e.barPosition[0]=e.boxPosition[0]+s,e.barPosition[1]=e.boxPosition[1],a[1]=o}else{const s=(2*i.tickWidth-8)/e.lastSize[0],c=2*(i.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0],e.barPosition[0]=e.boxPosition[0],e.barSize[1]=e.boxSize[1]-c,e.barPosition[1]=e.boxPosition[1],a[0]=s}return a},t.recomputeBarSegments=i=>{var d,h,g,p;const o=t.computeBarSize(i);e.barSegments=[];const a=[0,0],s=e.vertical?1:0,c=e.vertical?.01:.02;function l(v,y){e.barSegments.push({corners:[[...a],[a[0]+o[0],a[1]],[a[0]+o[0],a[1]+o[1]],[a[0],a[1]+o[1]]],scalars:y,title:v}),a[s]+=o[s]+c}e.renderable.getDrawNanAnnotation()&&e.renderable.getScalarsToColors().getNanColor()&&l("NaN",[NaN,NaN,NaN,NaN]),e.renderable.getDrawBelowRangeSwatch()&&((h=(d=e.renderable.getScalarsToColors()).getUseBelowRangeColor)!=null&&h.call(d))&&l("Below",[-.1,-.1,-.1,-.1]);const f=(p=(g=e.renderable.getScalarsToColors()).getUseAboveRangeColor)==null?void 0:p.call(g);a[s]+=c;const u=o[s];o[s]=f?1-2*c-o[s]-a[s]:1-c-a[s],l("ticks",e.vertical?[0,0,.995,.995]:[0,.995,.995,0]),e.renderable.getDrawAboveRangeSwatch()&&f&&(o[s]=u,a[s]+=c,l("Above",[1.1,1.1,1.1,1.1]))};const r=new Float64Array(3);t.createPolyDataForOneLabel=(i,o,a,s,c,l)=>{const f=e._tmAtlas.get(i);if(!f)return;let u=l.ptIdx,d=l.cellIdx;r[0]=(.5*o[0]+.5)*e.lastSize[0],r[1]=(.5*o[1]+.5)*e.lastSize[1],r[2]=o[2],r[0]+=c[0],r[1]+=c[1];const h=[],g=s==="vertical"?[1,0]:[0,1];s==="vertical"?(h[0]=f.width,h[1]=-f.height,a[0]==="middle"?r[1]-=f.width/2:a[0]==="right"&&(r[1]-=f.width),a[1]==="middle"?r[0]+=f.height/2:a[1]==="top"&&(r[0]+=f.height)):(h[0]=f.width,h[1]=f.height,a[0]==="middle"?r[0]-=f.width/2:a[0]==="right"&&(r[0]-=f.width),a[1]==="middle"?r[1]-=f.height/2:a[1]==="top"&&(r[1]-=f.height)),l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[0],l.tcoords[u*2+1]=f.tcoords[1],u++,r[g[0]]+=h[0],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[2],l.tcoords[u*2+1]=f.tcoords[3],u++,r[g[1]]+=h[1],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[4],l.tcoords[u*2+1]=f.tcoords[5],u++,r[g[0]]-=h[0],l.points[u*3]=r[0],l.points[u*3+1]=r[1],l.points[u*3+2]=r[2],l.tcoords[u*2]=f.tcoords[6],l.tcoords[u*2+1]=f.tcoords[7],u++,l.polys[d*4]=3,l.polys[d*4+1]=u-4,l.polys[d*4+2]=u-3,l.polys[d*4+3]=u-2,d++,l.polys[d*4]=3,l.polys[d*4+1]=u-4,l.polys[d*4+2]=u-2,l.polys[d*4+3]=u-1,l.ptIdx+=4,l.cellIdx+=2};const n=new Float64Array(3);t.updatePolyDataForLabels=()=>{const i=t.getTickStrings().length+e.barSegments.length,o=i*4,a=i*2,s=new Float64Array(o*3),c=new Uint16Array(a*4),l=new Float32Array(o*2),f={ptIdx:0,cellIdx:0,polys:c,points:s,tcoords:l},u=e.vertical?0:1,d=e.vertical?1:0;n[2]=-.99;const h=e.vertical?["right","middle"]:["middle","bottom"];let g=[0,1];const p=[0,0];e.vertical?(p[0]=-e.tickLabelPixelOffset,e.topTitle?(n[0]=e.boxPosition[0]+.5*e.boxSize[0],n[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)):(n[0]=e.barPosition[0]+e.barSize[0],n[1]=e.barPosition[1]+.5*e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","top"],"vertical",[e.axisTitlePixelOffset,0],f)),g=[-1,0]):(p[1]=e.tickLabelPixelOffset,n[0]=e.barPosition[0]+.5*e.barSize[0],n[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),n,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)),n[u]=e.barPosition[u]+(.5*g[u]+.5)*e.barSize[u],n[d]=e.barPosition[d]+e.barSize[d]*.5;let v=null;for(let S=0;S{var p,v;const i=e.renderable.getScalarsToColors();let o=0;e.renderable.getDrawNanAnnotation()&&i.getNanColor()&&(o+=1),e.renderable.getDrawBelowRangeSwatch()&&((p=i.getUseBelowRangeColor)!=null&&p.call(i))&&(o+=1),e.renderable.getDrawAboveRangeSwatch()&&((v=i.getUseAboveRangeColor)!=null&&v.call(i))&&(o+=1);const a=4*(1+o),s=a;let c=1;i.getVectorMode()===x0e.COMPONENT&&(c=i.getVectorComponent()+1);const l=new Float64Array(a*3),f=new Uint16Array(s*5),u=new Float32Array(a*c);let d=0,h=0;for(let y=0;y2&&arguments[2]!==void 0?arguments[2]:{renderable:null};Object.assign(e,{},r),J.obj(t,e),J.setGet(t,e,["axisTitlePixelOffset","tickLabelPixelOffset","renderable","topTitle","ticks","tickStrings"]),J.get(t,e,["lastSize","lastAspectRatio","lastTickBounds","axisTextStyle","tickTextStyle","barActor","tmActor"]),J.getArray(t,e,["boxPosition","boxSize"]),J.setArray(t,e,["boxPosition","boxSize"],2),e.forceUpdate=!1,e.lastRebuildTime={},J.obj(e.lastRebuildTime,{mtime:0}),e.lastSize=[-1,-1],e.tmCanvas=document.createElement("canvas"),e.tmContext=e.tmCanvas.getContext("2d"),e._tmAtlas=new Map,e.barMapper=wa.newInstance(),e.barMapper.setInterpolateScalarsBeforeMapping(!0),e.barMapper.setUseLookupTableScalarRange(!0),e.polyData=Br.newInstance(),e.barMapper.setInputData(e.polyData),e.barActor=dc.newInstance(),e.barActor.setMapper(e.barMapper),e.tmPolyData=Br.newInstance(),e.tmMapper=wa.newInstance(),e.tmMapper.setInputData(e.tmPolyData),e.tmTexture=Bd.newInstance({resizable:!0}),e.tmTexture.setInterpolate(!1),e.tmActor=dc.newInstance({parentProp:t}),e.tmActor.setMapper(e.tmMapper),e.tmActor.addTexture(e.tmTexture),e.barPosition=[0,0],e.barSize=[0,0],e.boxPosition=[.88,-.92],e.boxSize=[.1,1.1],e.lastTickBounds=[],C0e(t,e)},"vtkScalarBarActorHelper");function T0e(t,e){e.classHierarchy.push("vtkScalarBarActor"),t.setTickTextStyle=r=>{e.tickTextStyle={...e.tickTextStyle,...r},t.modified()},t.setAxisTextStyle=r=>{e.axisTextStyle={...e.axisTextStyle,...r},t.modified()},t.resetAutoLayoutToDefault=()=>{t.setAutoLayout(WV(t,e))},t.resetGenerateTicksToDefault=()=>{t.setGenerateTicks(zV())}}function _0e(t){return{automated:!0,autoLayout:null,axisLabel:"Scalar Value",barPosition:[0,0],barSize:[0,0],boxPosition:[.88,-.92],boxSize:[.1,1.1],scalarToColors:null,axisTitlePixelOffset:36,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif"},tickLabelPixelOffset:14,tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif"},generateTicks:null,drawNanAnnotation:!0,drawBelowRangeSwatch:!0,drawAboveRangeSwatch:!0,...t}}function $V(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,_0e(r)),e.autoLayout||(e.autoLayout=WV(t,e)),e.generateTicks||(e.generateTicks=zV()),dc.extend(t,e,r),t.getProperty().setDiffuse(0),t.getProperty().setAmbient(1),J.setGet(t,e,["automated","autoLayout","axisTitlePixelOffset","axisLabel","scalarsToColors","tickLabelPixelOffset","generateTicks","drawNanAnnotation","drawBelowRangeSwatch","drawAboveRangeSwatch"]),J.get(t,e,["axisTextStyle","tickTextStyle"]),J.getArray(t,e,["barPosition","barSize","boxPosition","boxSize"]),J.setArray(t,e,["barPosition","barSize","boxPosition","boxSize"],2),T0e(t,e)}const E0e=J.newInstance($V,"vtkScalarBarActor");var jV={newInstance:E0e,extend:$V,newScalarBarActorHelper:S0e};function b0e(t,e){e.classHierarchy.push("vtkOpenGLScalarBarActor"),t.buildPass=r=>{r&&(e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.scalarBarActorHelper.getRenderable()||e.scalarBarActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.scalarBarActorHelper.getBarActor()),t.addMissingNode(e.scalarBarActorHelper.getTmActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,o=e._openGLRenderer.getTiledSizeAndOrigin();e.scalarBarActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e._openGLRenderWindow.getRenderable())}}}const D0e={};function I0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,D0e,r),fr.extend(t,e,r),e.scalarBarActorHelper=jV.newScalarBarActorHelper(),b0e(t,e)}const O0e=$n(I0e,"vtkOpenGLScalarBarActor");Mi("vtkScalarBarActor",O0e);const{CoordinateSystem:F9}=nm;function M0e(t,e){e.classHierarchy.push("vtkWebGPUActor"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes())},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.renderable.computeMatrix();const n=e.renderable.getMatrix();e.bufferShift[0]=n[3],e.bufferShift[1]=n[7],e.bufferShift[2]=n[11];const i=r.getStabilizedCenterByReference();e.renderable.getCoordinateSystem()===F9.WORLD&&(e.bufferShift[0]-=i[0],e.bufferShift[1]-=i[1],e.bufferShift[2]-=i[2]),En(e.keyMatrices.bcwc,n),e.renderable.getIsIdentity()?Wt(e.keyMatrices.normalMatrix):(kr(e.keyMatrices.normalMatrix,e.keyMatrices.bcwc),e.keyMatrices.normalMatrix[3]=0,e.keyMatrices.normalMatrix[7]=0,e.keyMatrices.normalMatrix[11]=0,$r(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix),En(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix)),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),e.renderable.getCoordinateSystem()===F9.WORLD?dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-i[0],-i[1],-i[2]]):kr(e.keyMatrices.bcsc,e.keyMatrices.bcwc),e.keyMatricesTime.modified()}return e.keyMatrices}}const P0e={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};function R0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,P0e,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),e.bufferShift=[0,0,0,0],M0e(t,e)}const L0e=J.newInstance(R0e);Es("vtkActor",L0e);const{CoordinateSystem:U9}=nm;function A0e(t,e){e.classHierarchy.push("vtkWebGPUActor2D"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getFirstAncestorOfType("vtkWebGPURenderWindow"),e.propID===void 0&&(e.propID=e.WebGPURenderWindow.getUniquePropID()),t.prepareNodes(),t.addMissingNode(e.renderable.getMapper()),t.removeUnusedNodes())},t.traverseOpaquePass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||!e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.traverseTranslucentPass=r=>{!e.renderable||!e.renderable.getNestedVisibility()||e.renderable.getIsOpaque()||e.WebGPURenderer.getSelector()&&!e.renderable.getNestedPickable()||(t.apply(r,!0),e.children[0]&&e.children[0].traverse(r),t.apply(r,!1))},t.queryPass=(r,n)=>{if(r){if(!e.renderable||!e.renderable.getVisibility())return;e.renderable.getIsOpaque()?n.incrementOpaqueActorCount():n.incrementTranslucentActorCount()}},t.getBufferShift=r=>(t.getKeyMatrices(r),e.bufferShift),t.getKeyMatrices=r=>{if(Math.max(e.renderable.getMTime(),r.getStabilizedTime())>e.keyMatricesTime.getMTime()){e.bufferShift[0]=0,e.bufferShift[1]=0,e.bufferShift[2]=0;const n=r.getStabilizedCenterByReference();e.renderable.getCoordinateSystem()===U9.WORLD&&(e.bufferShift[0]-=n[0],e.bufferShift[1]-=n[1],e.bufferShift[2]-=n[2]),Wt(e.keyMatrices.bcwc),Wt(e.keyMatrices.normalMatrix),dr(e.keyMatrices.bcwc,e.keyMatrices.bcwc,[-e.bufferShift[0],-e.bufferShift[1],-e.bufferShift[2]]),e.renderable.getCoordinateSystem()===U9.WORLD?dr(e.keyMatrices.bcsc,e.keyMatrices.bcwc,[-n[0],-n[1],-n[2]]):kr(e.keyMatrices.bcsc,e.keyMatrices.bcwc),e.keyMatricesTime.modified()}return e.keyMatrices}}const N0e={keyMatricesTime:null,keyMatrices:null,propID:void 0,bufferShift:void 0};function k0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,N0e,r),fr.extend(t,e,r),e.keyMatricesTime={},J.obj(e.keyMatricesTime,{mtime:0}),e.keyMatrices={normalMatrix:new Float64Array(16),bcwc:new Float64Array(16),bcsc:new Float64Array(16)},J.get(t,e,["propID","keyMatricesTime"]),e.bufferShift=[0,0,0,0],A0e(t,e)}const V0e=J.newInstance(k0e);Es("vtkActor2D",V0e);function F0e(t,e){e.classHierarchy.push("vtkWebGPUCubeAxesActor"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.CubeAxesActorHelper.getRenderable()||e.CubeAxesActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.CubeAxesActorHelper.getTmActor()),t.addMissingNode(e.renderable.getGridActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e.WebGPURenderer?e.WebGPURenderer.getRenderable().getActiveCamera():null,o=e.WebGPURenderer.getTiledSizeAndOrigin();e.CubeAxesActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e.WebGPURenderWindow.getRenderable())}}}const U0e={};function B0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,U0e,r),fr.extend(t,e,r),e.CubeAxesActorHelper=UV.newCubeAxesActorHelper(),F0e(t,e)}const G0e=$n(B0e,"vtkWebGPUCubeAxesActor");Es("vtkCubeAxesActor",G0e);const{DisplayLocation:VS}=GV;function W0e(t,e){e.classHierarchy.push("vtkProperty2D"),t.setDisplayLocationToBackground=()=>t.setDisplayLocation(VS.BACKGROUND),t.setDisplayLocationToForeground=()=>t.setDisplayLocation(VS.FOREGROUND),t.setRepresentationToWireframe=()=>t.setRepresentation(xo.WIREFRAME),t.setRepresentationToSurface=()=>t.setRepresentation(xo.SURFACE),t.setRepresentationToPoints=()=>t.setRepresentation(xo.POINTS),t.getRepresentationAsString=()=>J.enumToString(xo,e.representation)}const z0e={color:[1,1,1],opacity:1,pointSize:1,lineWidth:1,representation:xo.SURFACE,displayLocation:VS.FOREGROUND};function $0e(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,z0e,r),J.obj(t,e),J.setGet(t,e,["opacity","lineWidth","pointSize","displayLocation","representation"]),J.setGetArray(t,e,["color"],3),W0e(t,e)}J.newInstance($0e,"vtkProperty2D");var j0e={...GV};const{BufferUsage:co,PrimitiveTypes:Yo}=$h,{Representation:Ov}=Fd,{ScalarMode:Mv}=wa,{CoordinateSystem:H0e}=nm,{DisplayLocation:K0e}=j0e,q0e=` //VTK::Renderer::Dec //VTK::Color::Dec @@ -3874,7 +3874,7 @@ fn main( return output; } `;function B9(t){return t.indexOf("edge")>=0}function Y0e(t,e){e.classHierarchy.push("vtkWebGPUCellArrayMapper"),t.buildPass=r=>{r&&(e.is2D?(e.WebGPUActor=t.getFirstAncestorOfType("vtkWebGPUActor2D"),e.forceZValue=!0):(e.WebGPUActor=t.getFirstAncestorOfType("vtkWebGPUActor"),e.forceZValue=!1),e.coordinateSystem=e.WebGPUActor.getRenderable().getCoordinateSystem(),e.useRendererMatrix=e.coordinateSystem!==H0e.DISPLAY,e.WebGPURenderer=e.WebGPUActor.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.device=e.WebGPURenderWindow.getDevice())},t.translucentPass=r=>{r&&(t.prepareToDraw(e.WebGPURenderer.getRenderEncoder()),e.renderEncoder.registerDrawCallback(e.pipeline,t.draw))},t.opaquePass=r=>{r&&(t.prepareToDraw(e.WebGPURenderer.getRenderEncoder()),e.renderEncoder.registerDrawCallback(e.pipeline,t.draw))},t.updateUBO=()=>{var o;const n=e.WebGPUActor.getRenderable().getProperty(),i=e.UBO.getSendTime();if(t.getMTime()>i||n.getMTime()>i||e.renderable.getMTime()>i){const a=e.WebGPUActor.getKeyMatrices(e.WebGPURenderer);if(e.UBO.setArray("BCWCMatrix",a.bcwc),e.UBO.setArray("BCSCMatrix",a.bcsc),e.UBO.setArray("MCWCNormals",a.normalMatrix),e.is2D){e.UBO.setValue("ZValue",e.WebGPUActor.getRenderable().getProperty().getDisplayLocation()===K0e.FOREGROUND?1:0);const l=n.getColorByReference();e.UBO.setValue("AmbientIntensity",1),e.UBO.setArray("DiffuseColor",[l[0],l[1],l[2],1]),e.UBO.setValue("DiffuseIntensity",0),e.UBO.setValue("SpecularIntensity",0)}else{let l=n.getAmbientColorByReference();e.UBO.setValue("AmbientIntensity",n.getAmbient()),e.UBO.setArray("AmbientColor",[l[0],l[1],l[2],1]),e.UBO.setValue("DiffuseIntensity",n.getDiffuse()),l=n.getDiffuseColorByReference(),e.UBO.setArray("DiffuseColor",[l[0],l[1],l[2],1]),e.UBO.setValue("Roughness",n.getRoughness()),e.UBO.setValue("BaseIOR",n.getBaseIOR()),e.UBO.setValue("Metallic",n.getMetallic()),e.UBO.setValue("NormalStrength",n.getNormalStrength()),e.UBO.setValue("Emission",n.getEmission()),e.UBO.setValue("SpecularIntensity",n.getSpecular()),l=n.getSpecularColorByReference(),e.UBO.setArray("SpecularColor",[l[0],l[1],l[2],1])}const s=(o=n.getEdgeColorByReference)==null?void 0:o.call(n);s&&e.UBO.setArray("EdgeColor",[s[0],s[1],s[2],1]),e.UBO.setValue("LineWidth",n.getLineWidth()),e.UBO.setValue("Opacity",n.getOpacity()),e.UBO.setValue("PropID",e.WebGPUActor.getPropID());const c=e.WebGPURenderWindow.getDevice();e.UBO.sendIfNeeded(c)}},t.haveWideLines=()=>{const r=e.WebGPUActor.getRenderable(),n=r.getProperty().getRepresentation();return r.getProperty().getLineWidth()<=1||e.primitiveType===Yo.Verts?!1:e.primitiveType===Yo.Triangles||e.primitiveType===Yo.TriangleStrips?n===Ov.WIREFRAME:!0},t.replaceShaderPosition=(r,n,i)=>{const o=n.getShaderDescription("vertex");o.addBuiltinOutput("vec4","@builtin(position) Position"),o.hasOutput("vertexVC")||o.addOutput("vec4","vertexVC");let a=o.getCode();e.useRendererMatrix?(a=sr.substitute(a,"//VTK::Position::Impl",[" var pCoord: vec4 = rendererUBO.SCPCMatrix*mapperUBO.BCSCMatrix*vertexBC;"," output.vertexVC = rendererUBO.SCVCMatrix * mapperUBO.BCSCMatrix * vec4(vertexBC.xyz, 1.0);","//VTK::Position::Impl"]).result,e.forceZValue&&(a=sr.substitute(a,"//VTK::Position::Impl",["pCoord = vec4(pCoord.xyz/pCoord.w, 1.0);","pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)):(a=sr.substitute(a,"//VTK::Position::Impl",[" var pCoord: vec4 = mapperUBO.BCSCMatrix*vertexBC;"," pCoord.x = 2.0* pCoord.x / rendererUBO.viewportSize.x - 1.0;"," pCoord.y = 2.0* pCoord.y / rendererUBO.viewportSize.y - 1.0;"," pCoord.z = 0.5 - 0.5 * pCoord.z;","//VTK::Position::Impl"]).result,e.forceZValue&&(a=sr.substitute(a,"//VTK::Position::Impl",[" pCoord.z = mapperUBO.ZValue;","//VTK::Position::Impl"]).result)),t.haveWideLines()&&(o.addBuiltinInput("u32","@builtin(instance_index) instanceIndex"),a=sr.substitute(a,"//VTK::Position::Impl",[" var tmpPos: vec4 = pCoord;"," var numSteps: f32 = ceil(mapperUBO.LineWidth - 1.0);"," var offset: f32 = (mapperUBO.LineWidth - 1.0) * (f32(input.instanceIndex / 2u) - numSteps/2.0) / numSteps;"," var tmpPos2: vec3 = tmpPos.xyz / tmpPos.w;"," tmpPos2.x = tmpPos2.x + 2.0 * (f32(input.instanceIndex) % 2.0) * offset / rendererUBO.viewportSize.x;"," tmpPos2.y = tmpPos2.y + 2.0 * (f32(input.instanceIndex + 1u) % 2.0) * offset / rendererUBO.viewportSize.y;"," tmpPos2.z = min(1.0, tmpPos2.z + 0.00001);"," pCoord = vec4(tmpPos2.xyz * tmpPos.w, tmpPos.w);","//VTK::Position::Impl"]).result),a=sr.substitute(a,"//VTK::Position::Impl",[" output.Position = pCoord;"]).result,o.setCode(a)},e.shaderReplacements.set("replaceShaderPosition",t.replaceShaderPosition),t.replaceShaderNormal=(r,n,i)=>{const o=i.getBuffer("normalMC"),a=e.WebGPUActor.getRenderable();if(o){const s=n.getShaderDescription("vertex");s.hasOutput("normalVC")||s.addOutput("vec3","normalVC",o.getArrayInformation()[0].interpolation),s.hasOutput("tangentVC")||s.addOutput("vec3","tangentVC",o.getArrayInformation()[0].interpolation),s.hasOutput("bitangentVC")||s.addOutput("vec3","bitangentVC",o.getArrayInformation()[0].interpolation);let c=s.getCode();c=sr.substitute(c,"//VTK::Normal::Impl",[" output.normalVC = normalize((rendererUBO.WCVCNormals * mapperUBO.MCWCNormals * normalMC).xyz);"," var c1: vec3 = cross(output.normalVC, vec3(0, 0, 1));"," var c2: vec3 = cross(output.normalVC, vec3(0, 1, 0));"," var tangent: vec3 = mix(c1, c2, distance(c1, c2));"," output.tangentVC = normalize(tangent);"," output.bitangentVC = normalize(cross(output.normalVC, tangent));"]).result,s.setCode(c);const l=n.getShaderDescription("fragment");c=l.getCode(),a.getProperty().getNormalTexture()?c=sr.substitute(c,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," var tangent: vec3 = input.tangentVC;"," var bitangent: vec3 = input.bitangentVC;"," var TCVCMatrix: mat3x3 = mat3x3("," tangent.x, bitangent.x, normal.x,"," tangent.y, bitangent.y, normal.y,"," tangent.z, bitangent.z, normal.z,"," );"," var mappedNormal: vec3 = TCVCMatrix * (_normalMap.xyz * 2 - 1);"," normal = mix(normal, mappedNormal, mapperUBO.NormalStrength);"," normal = normalize(normal);"]).result:c=sr.substitute(c,"//VTK::Normal::Impl",[" var normal: vec3 = input.normalVC;"," if (!input.frontFacing) { normal = -normal; }"," normal = normalize(normal);"]).result,l.setCode(c)}},e.shaderReplacements.set("replaceShaderNormal",t.replaceShaderNormal),t.replaceShaderLight=(r,n,i)=>{var l;if(r.includes("sel"))return;const o=n.getShaderDescription("vertex");o.hasOutput("vertexVC")||o.addOutput("vec4","vertexVC");const a=e.WebGPURenderer.getRenderable(),s=n.getShaderDescription("fragment");let c=s.getCode();if(c.includes("var normal:")&&e.useRendererMatrix&&!B9(r)&&!e.is2D&&!r.includes("sel")){const f=[" var pi: f32 = 3.14159265359;"," var fragPos: vec3 = vec3(input.vertexVC.xyz);"," var V: vec3 = mix(normalize(-fragPos), vec3(0, 0, 1), f32(rendererUBO.cameraParallel)); // View Vector"," var baseColor: vec3 = _diffuseMap.rgb * diffuseColor.rgb;"," var roughness: f32 = max(0.000001, mapperUBO.Roughness * _roughnessMap.r);"," var metallic: f32 = mapperUBO.Metallic * _metallicMap.r;"," var alpha: f32 = roughness*roughness;"," var ior: f32 = mapperUBO.BaseIOR;"," var k: f32 = alpha*alpha / 2;"," var diffuse: vec3 = vec3(0.);"," var specular: vec3 = vec3(0.);"," var emission: vec3 = _emissionMap.rgb * mapperUBO.Emission;"," {"," var i: i32 = 0;"," loop {"," if !(i < rendererUBO.LightCount) { break; }"," switch (i32(rendererLightSSBO.values[i].LightData.x)) {"," // Point Light"," case 0 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var calculated: PBRData = calcPointLight(normal, V, fragPos, ior, roughness, metallic, pos, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Directional light"," case 1 {"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var calculated: PBRData = calcDirectionalLight(normal, V, ior, roughness, metallic, dir, color, baseColor); // diffuseColor.rgb needs to be fixed with a more dynamic diffuse color"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," // Spot Light"," case 2 {"," var color: vec3 = rendererLightSSBO.values[i].LightColor.rgb * rendererLightSSBO.values[i].LightColor.w;"," var pos: vec3 = (rendererLightSSBO.values[i].LightPos).xyz;"," var dir: vec3 = (rendererUBO.WCVCNormals * vec4(normalize(rendererLightSSBO.values[i].LightDir.xyz), 0.)).xyz;"," dir = normalize(dir);"," var cones: vec2 = vec2(rendererLightSSBO.values[i].LightData.y, rendererLightSSBO.values[i].LightData.z);"," var calculated: PBRData = calcSpotLight(normal, V, fragPos, ior, roughness, metallic, pos, dir, cones, color, baseColor);"," diffuse += max(vec3(0), calculated.diffuse);"," specular += max(vec3(0), calculated.specular);"," }"," default { continue; }"," }"," continuing { i++; }"," }"," }"," var fresnel: f32 = schlickFresnelIOR(V, normal, ior, k); // Fresnel"," fresnel = min(1.0, fresnel);"," // This could be controlled with its own variable (that isnt base color) for better artistic control"," var fresnelMetallic: vec3 = schlickFresnelRGB(V, normal, baseColor); // Fresnel for metal, takes color into account"," var kS: vec3 = mix(vec3(fresnel), fresnelMetallic, metallic);"," kS = min(vec3(1.0), kS);"," var kD: vec3 = (1.0 - kS) * (1.0 - metallic);"," var PBR: vec3 = mapperUBO.DiffuseIntensity*kD*diffuse + kS*specular;"," PBR += emission;"," computedColor = vec4(PBR, mapperUBO.Opacity);"];(l=a.getEnvironmentTexture())!=null&&l.getImageLoaded()&&f.push(" // To get diffuse IBL, the texture is sampled with normals in worldspace"," var diffuseIBLCoords: vec3 = (transpose(rendererUBO.WCVCNormals) * vec4(normal, 1.)).xyz;"," var diffuseCoords: vec2 = vecToRectCoord(diffuseIBLCoords);"," // To get specular IBL, the texture is sampled as the worldspace reflection between the normal and view vectors"," // Reflections are first calculated in viewspace, then converted to worldspace to sample the environment"," var VreflN: vec3 = normalize(reflect(-V, normal));"," var reflectionIBLCoords = (transpose(rendererUBO.WCVCNormals) * vec4(VreflN, 1.)).xyz;"," var specularCoords: vec2 = vecToRectCoord(reflectionIBLCoords);"," var diffuseIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, diffuseCoords, rendererUBO.MaxEnvironmentMipLevel);"," var level = roughness * rendererUBO.MaxEnvironmentMipLevel;"," var specularIBL = textureSampleLevel(EnvironmentTexture, EnvironmentTextureSampler, specularCoords, level);"," var specularIBLContribution: vec3 = specularIBL.rgb*rendererUBO.BackgroundSpecularStrength;"," computedColor += vec4(specularIBLContribution*kS, 0);"," var diffuseIBLContribution: vec3 = diffuseIBL.rgb*rendererUBO.BackgroundDiffuseStrength;"," diffuseIBLContribution *= baseColor * _ambientOcclusionMap.rgb;"," computedColor += vec4(diffuseIBLContribution*kD, 0);"),c=sr.substitute(c,"//VTK::Light::Impl",f).result,s.setCode(c)}else c=sr.substitute(c,"//VTK::Light::Impl",[" var diffuse: vec3 = diffuseColor.rgb;"," var specular: vec3 = mapperUBO.SpecularColor.rgb * mapperUBO.SpecularColor.a;"," computedColor = vec4(diffuse * _diffuseMap.rgb, mapperUBO.Opacity);"]).result,s.setCode(c)},e.shaderReplacements.set("replaceShaderLight",t.replaceShaderLight),t.replaceShaderColor=(r,n,i)=>{if(B9(r)){const l=n.getShaderDescription("fragment");let f=l.getCode();f=sr.substitute(f,"//VTK::Color::Impl",["ambientColor = mapperUBO.EdgeColor;","diffuseColor = mapperUBO.EdgeColor;"]).result,l.setCode(f);return}const o=i.getBuffer("colorVI");if(!o)return;const a=n.getShaderDescription("vertex");a.addOutput("vec4","color",o.getArrayInformation()[0].interpolation);let s=a.getCode();s=sr.substitute(s,"//VTK::Color::Impl",[" output.color = colorVI;"]).result,a.setCode(s);const c=n.getShaderDescription("fragment");s=c.getCode(),s=sr.substitute(s,"//VTK::Color::Impl",["ambientColor = input.color;","diffuseColor = input.color;","opacity = mapperUBO.Opacity * input.color.a;"]).result,c.setCode(s)},e.shaderReplacements.set("replaceShaderColor",t.replaceShaderColor),t.replaceShaderTCoord=(r,n,i)=>{var h,g,p,v,y,m,w,x,C,S,T,_,E,b,D,I,P,O,A,V;if(!i.hasAttribute("tcoord"))return;const o=n.getShaderDescription("vertex"),a=i.getBuffer("tcoord"),s=yo.getNumberOfComponentsFromBufferFormat(a.getArrayInformation()[0].format);let c=o.getCode();o.addOutput(`vec${s}`,"tcoordVS"),c=sr.substitute(c,"//VTK::TCoord::Impl",[" output.tcoordVS = tcoord;"]).result,o.setCode(c);const l=n.getShaderDescription("fragment");c=l.getCode();const f=e.WebGPUActor.getRenderable(),u=G=>G?G.getDimensionality()===s:!1,d=[];((p=(g=(h=f.getProperty()).getDiffuseTexture)==null?void 0:g.call(h))!=null&&p.getImageLoaded()||f.getTextures()[0]||e.colorTexture)&&(u((y=(v=f.getProperty()).getDiffuseTexture)==null?void 0:y.call(v))||u(f.getTextures()[0])||u(e.colorTexture))&&d.push("_diffuseMap = textureSample(DiffuseTexture, DiffuseTextureSampler, input.tcoordVS);"),(x=(w=(m=f.getProperty()).getRoughnessTexture)==null?void 0:w.call(m))!=null&&x.getImageLoaded()&&u(f.getProperty().getRoughnessTexture())&&d.push("_roughnessMap = textureSample(RoughnessTexture, RoughnessTextureSampler, input.tcoordVS);"),(T=(S=(C=f.getProperty()).getMetallicTexture)==null?void 0:S.call(C))!=null&&T.getImageLoaded()&&u(f.getProperty().getMetallicTexture())&&d.push("_metallicMap = textureSample(MetallicTexture, MetallicTextureSampler, input.tcoordVS);"),(b=(E=(_=f.getProperty()).getNormalTexture)==null?void 0:E.call(_))!=null&&b.getImageLoaded()&&u(f.getProperty().getNormalTexture())&&d.push("_normalMap = textureSample(NormalTexture, NormalTextureSampler, input.tcoordVS);"),(P=(I=(D=f.getProperty()).getAmbientOcclusionTexture)==null?void 0:I.call(D))!=null&&P.getImageLoaded()&&u(f.getProperty().getAmbientOcclusionTexture())&&d.push("_ambientOcclusionMap = textureSample(AmbientOcclusionTexture, AmbientOcclusionTextureSampler, input.tcoordVS);"),(V=(A=(O=f.getProperty()).getEmissionTexture)==null?void 0:A.call(O))!=null&&V.getImageLoaded()&&u(f.getProperty().getEmissionTexture())&&d.push("_emissionMap = textureSample(EmissionTexture, EmissionTextureSampler, input.tcoordVS);"),c=sr.substitute(c,"//VTK::TCoord::Impl",d).result,l.setCode(c)},e.shaderReplacements.set("replaceShaderTCoord",t.replaceShaderTCoord),t.replaceShaderSelect=(r,n,i)=>{if(r.includes("sel")){const o=n.getShaderDescription("fragment");let a=o.getCode();a=sr.substitute(a,"//VTK::Select::Impl",[" var compositeID: u32 = 0u;"]).result,o.setCode(a)}},e.shaderReplacements.set("replaceShaderSelect",t.replaceShaderSelect),t.getUsage=(r,n)=>r===Ov.POINTS||n===Yo.Points?co.Verts:n===Yo.Lines?co.Lines:r===Ov.WIREFRAME?n===Yo.Triangles?co.LinesFromTriangles:co.LinesFromStrips:n===Yo.Triangles?co.Triangles:n===Yo.TriangleStrips?co.Strips:n===Yo.TriangleEdges?co.LinesFromTriangles:co.LinesFromStrips,t.getHashFromUsage=r=>`pt${r}`,t.getTopologyFromUsage=r=>{switch(r){case co.Triangles:return"triangle-list";case co.Verts:return"point-list";case co.Lines:default:return"line-list"}},t.buildVertexInput=()=>{var p,v;const r=e.currentInput,n=e.cellArray,i=e.primitiveType;let a=e.WebGPUActor.getRenderable().getProperty().getRepresentation();const s=e.WebGPURenderWindow.getDevice();let c=!1;i===Yo.TriangleEdges&&(c=!0,a=Ov.WIREFRAME);const l=e.vertexInput,f=r.getPoints();let u;if(n){const y={hash:`R${a}P${i}${n.getMTime()}`,usage:co.Index,cells:n,numberOfPoints:f.getNumberOfPoints(),primitiveType:i,representation:a};u=s.getBufferManager().getBuffer(y),l.setIndexBuffer(u)}else l.setIndexBuffer(null);if(f){const y=e.WebGPUActor.getBufferShift(e.WebGPURenderer),m={hash:`${f.getMTime()}I${u.getMTime()}${y.join()}float32x4`,usage:co.PointArray,format:"float32x4",dataArray:f,indexBuffer:u,shift:y,packExtra:!0},w=s.getBufferManager().getBuffer(m);l.addBuffer(w,["vertexBC"])}else l.removeBufferIfPresent("vertexBC");const d=t.getUsage(a,i);if(e._usesCellNormals=!1,!e.is2D&&(d===co.Triangles||d===co.Strips)){const y=r.getPointData().getNormals(),m={format:"snorm8x4",indexBuffer:u,packExtra:!0,shift:0,scale:127};if(y){m.hash=`${y.getMTime()}I${u.getMTime()}snorm8x4`,m.dataArray=y,m.usage=co.PointArray;const w=s.getBufferManager().getBuffer(m);l.addBuffer(w,["normalMC"])}else if(i===Yo.Triangles){e._usesCellNormals=!0,m.hash=`PFN${f.getMTime()}I${u.getMTime()}snorm8x4`,m.dataArray=f,m.cells=n,m.usage=co.NormalsFromPoints;const w=s.getBufferManager().getBuffer(m);l.addBuffer(w,["normalMC"])}else l.removeBufferIfPresent("normalMC")}else l.removeBufferIfPresent("normalMC");let h=!1;if(e.renderable.getScalarVisibility()){const y=e.renderable.getColorMapColors();if(y&&!c){const m=e.renderable.getScalarMode();let w=!1;(m===Mv.USE_CELL_DATA||m===Mv.USE_CELL_FIELD_DATA||m===Mv.USE_FIELD_DATA||!r.getPointData().getScalars())&&m!==Mv.USE_POINT_FIELD_DATA&&y&&(w=!0);const x={usage:co.PointArray,format:"unorm8x4",hash:`${w}${y.getMTime()}I${u.getMTime()}unorm8x4`,dataArray:y,indexBuffer:u,cellData:w,cellOffset:0},C=s.getBufferManager().getBuffer(x);l.addBuffer(C,["colorVI"]),h=!0}}h||l.removeBufferIfPresent("colorVI");let g=null;if((v=(p=e.renderable).getInterpolateScalarsBeforeMapping)!=null&&v.call(p)&&e.renderable.getColorCoordinates()?g=e.renderable.getColorCoordinates():g=r.getPointData().getTCoords(),g&&!c){const y=s.getBufferManager().getBufferForPointArray(g,l.getIndexBuffer());l.addBuffer(y,["tcoord"])}else l.removeBufferIfPresent("tcoord")},t.updateTextures=()=>{var c,l,f,u,d,h,g,p,v,y,m,w,x,C,S;const r=[],n=[],i=(l=(c=e.renderable).getColorTextureMap)==null?void 0:l.call(c);i&&(e.colorTexture||(e.colorTexture=Bd.newInstance({label:"polyDataColor"})),e.colorTexture.setInputData(i),n.push(["Diffuse",e.colorTexture]));const o=e.WebGPUActor.getRenderable(),a=e.WebGPURenderer.getRenderable(),s=[];if((u=(f=o.getProperty()).getDiffuseTexture)!=null&&u.call(f)){const T=["Diffuse",o.getProperty().getDiffuseTexture()];s.push(T)}if(o.getTextures()[0]){const T=["Diffuse",o.getTextures()[0]];s.push(T)}if(e.colorTexture){const T=["Diffuse",e.colorTexture];s.push(T)}if((h=(d=o.getProperty()).getRoughnessTexture)!=null&&h.call(d)){const T=["Roughness",o.getProperty().getRoughnessTexture()];s.push(T)}if((p=(g=o.getProperty()).getMetallicTexture)!=null&&p.call(g)){const T=["Metallic",o.getProperty().getMetallicTexture()];s.push(T)}if((y=(v=o.getProperty()).getNormalTexture)!=null&&y.call(v)){const T=["Normal",o.getProperty().getNormalTexture()];s.push(T)}if((w=(m=o.getProperty()).getAmbientOcclusionTexture)!=null&&w.call(m)){const T=["AmbientOcclusion",o.getProperty().getAmbientOcclusionTexture()];s.push(T)}if((C=(x=o.getProperty()).getEmissionTexture)!=null&&C.call(x)){const T=["Emission",o.getProperty().getEmissionTexture()];s.push(T)}if((S=a.getEnvironmentTexture)!=null&&S.call(a)){const T=["Environment",a.getEnvironmentTexture()];s.push(T)}for(let T=0;T=0;T--)r[T]||(e.textures.splice(T,1),e.textureViews.splice(T,1))},t.computePipelineHash=()=>{let r=`pd${e.useRendererMatrix?"r":""}${e.forceZValue?"z":""}`;if(e.primitiveType===Yo.TriangleEdges||e.primitiveType===Yo.TriangleStripEdges)r+="edge";else{if(e.vertexInput.hasAttribute("normalMC")&&(r+="n"),e.vertexInput.hasAttribute("colorVI")&&(r+="c"),e.vertexInput.hasAttribute("tcoord")){const i=e.vertexInput.getBuffer("tcoord"),o=yo.getNumberOfComponentsFromBufferFormat(i.getArrayInformation()[0].format);r+=`t${o}`}e.textures.length&&(r+=`tx${e.textures.length}`)}e._usesCellNormals&&(r+="cn"),e.SSBO&&(r+="ssbo");const n=t.getHashFromUsage(e.usage);r+=n,r+=e.renderEncoder.getPipelineHash(),e.pipelineHash=r},t.updateBuffers=()=>{e.primitiveType!==Yo.TriangleEdges&&e.primitiveType!==Yo.TriangleStripEdges&&t.updateTextures();const r=e.WebGPUActor.getRenderable(),n=r.getProperty().getRepresentation();e.usage=t.getUsage(n,e.primitiveType),t.buildVertexInput();const i=e.vertexInput.getBuffer("vertexBC");if(t.setNumberOfVertices(i.getSizeInBytes()/i.getStrideInBytes()),t.setTopology(t.getTopologyFromUsage(e.usage)),t.updateUBO(),t.haveWideLines()){const o=r.getProperty();t.setNumberOfInstances(Math.ceil(o.getLineWidth()*2))}else t.setNumberOfInstances(1)}}const J0e={is2D:!1,cellArray:null,currentInput:null,cellOffset:0,primitiveType:0,colorTexture:null,renderEncoder:null,textures:null};function HV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,J0e,r),jN.extend(t,e,r),e.fragmentShaderTemplate=X0e,e.vertexShaderTemplate=q0e,e._tmpMat3=Ts(new Float64Array(9)),e._tmpMat4=Wt(new Float64Array(16)),e.UBO=Y0.newInstance({label:"mapperUBO"}),e.UBO.addEntry("BCWCMatrix","mat4x4"),e.UBO.addEntry("BCSCMatrix","mat4x4"),e.UBO.addEntry("MCWCNormals","mat4x4"),e.UBO.addEntry("AmbientColor","vec4"),e.UBO.addEntry("DiffuseColor","vec4"),e.UBO.addEntry("EdgeColor","vec4"),e.UBO.addEntry("SpecularColor","vec4"),e.UBO.addEntry("AmbientIntensity","f32"),e.UBO.addEntry("DiffuseIntensity","f32"),e.UBO.addEntry("Roughness","f32"),e.UBO.addEntry("Metallic","f32"),e.UBO.addEntry("Ambient","f32"),e.UBO.addEntry("Normal","f32"),e.UBO.addEntry("Emission","f32"),e.UBO.addEntry("NormalStrength","f32"),e.UBO.addEntry("BaseIOR","f32"),e.UBO.addEntry("SpecularIntensity","f32"),e.UBO.addEntry("LineWidth","f32"),e.UBO.addEntry("Opacity","f32"),e.UBO.addEntry("ZValue","f32"),e.UBO.addEntry("PropID","u32"),e.UBO.addEntry("ClipNear","f32"),e.UBO.addEntry("ClipFar","f32"),e.UBO.addEntry("Time","u32"),ci(t,e,["cellArray","currentInput","cellOffset","is2D","primitiveType","renderEncoder"]),e.textures=[],Y0e(t,e)}const Z0e=$n(HV,"vtkWebGPUCellArrayMapper");var KV={newInstance:Z0e,extend:HV};const{PrimitiveTypes:Pv}=$h;function Q0e(t,e){e.classHierarchy.push("vtkWebGPUPolyDataMapper"),t.createCellArrayMapper=()=>KV.newInstance(),t.buildPass=r=>{if(r){e.WebGPUActor=t.getFirstAncestorOfType("vtkWebGPUActor"),e.renderable.getStatic()||e.renderable.update();const n=e.renderable.getInputData();e.renderable.mapScalars(n,1),t.updateCellArrayMappers(n)}},t.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],i=[];let o=0;for(let a=Pv.Points;a<=Pv.Triangles;a++)if(n[a].getNumberOfValues()>0){e.primitives[a]||(e.primitives[a]=t.createCellArrayMapper());const s=e.primitives[a];s.setCellArray(n[a]),s.setCurrentInput(r),s.setCellOffset(o),s.setPrimitiveType(a),s.setRenderable(e.renderable),o+=n[a].getNumberOfCells(),i.push(s)}else e.primitives[a]=null;if(e.WebGPUActor.getRenderable().getProperty().getEdgeVisibility())for(let a=Pv.TriangleEdges;a<=Pv.TriangleStripEdges;a++)if(n[a-2].getNumberOfValues()>0){e.primitives[a]||(e.primitives[a]=t.createCellArrayMapper());const s=e.primitives[a];s.setCellArray(n[a-2]),s.setCurrentInput(r),s.setCellOffset(e.primitives[a-2].getCellOffset()),s.setPrimitiveType(a),s.setRenderable(e.renderable),i.push(s)}else e.primitives[a]=null;t.prepareNodes(),t.addMissingChildren(i),t.removeUnusedNodes()}}const ehe={primitives:null};function the(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ehe,r),fr.extend(t,e,r),e.primitives=[],Q0e(t,e)}const nhe=$n(the,"vtkWebGPUPolyDataMapper");Es("vtkMapper",nhe);const{PrimitiveTypes:G9}=$h;function rhe(t,e){e.classHierarchy.push("vtkWebGPUPolyDataMapper2D"),t.createCellArrayMapper=()=>KV.newInstance(),t.buildPass=r=>{if(r){e.WebGPUActor=t.getFirstAncestorOfType("vtkWebGPUActor2D"),e.renderable.getStatic()||e.renderable.update();const n=e.renderable.getInputData();e.renderable.mapScalars(n,1),t.updateCellArrayMappers(n)}},t.updateCellArrayMappers=r=>{const n=[r.getVerts(),r.getLines(),r.getPolys(),r.getStrips()],i=[];let o=0;for(let a=G9.Points;a<=G9.Triangles;a++)if(n[a].getNumberOfValues()>0){e.primitives[a]||(e.primitives[a]=t.createCellArrayMapper());const s=e.primitives[a];s.setCellArray(n[a]),s.setCurrentInput(r),s.setCellOffset(o),s.setPrimitiveType(a),s.setRenderable(e.renderable),s.setIs2D(!0),o+=n[a].getNumberOfCells(),i.push(s)}else e.primitives[a]=null;t.prepareNodes(),t.addMissingChildren(i),t.removeUnusedNodes()}}function ihe(t){return{primitives:[],...t}}function ohe(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,ihe(r)),fr.extend(t,e,r),e.primitives=[],rhe(t,e)}const ahe=$n(ohe,"vtkWebGPUPolyDataMapper2D");Es("vtkMapper2D",ahe);function she(t,e){e.classHierarchy.push("vtkWebGPUScalarBarActor"),t.buildPass=r=>{r&&(e.WebGPURenderer=t.getFirstAncestorOfType("vtkWebGPURenderer"),e.WebGPURenderWindow=e.WebGPURenderer.getParent(),e.scalarBarActorHelper.getRenderable()||e.scalarBarActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.scalarBarActorHelper.getBarActor()),t.addMissingNode(e.scalarBarActorHelper.getTmActor()),t.removeUnusedNodes())},t.opaquePass=(r,n)=>{if(r){const i=e.WebGPURenderer?e.WebGPURenderer.getRenderable().getActiveCamera():null,o=e.WebGPURenderer.getTiledSizeAndOrigin();e.scalarBarActorHelper.updateAPISpecificData([o.usize,o.vsize],i,e.WebGPURenderWindow.getRenderable())}}}const che={};function lhe(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,che,r),fr.extend(t,e,r),e.scalarBarActorHelper=jV.newScalarBarActorHelper(),she(t,e)}const uhe=$n(lhe,"vtkWebGPUScalarBarActor");Es("vtkScalarBarActor",uhe);function fhe(t,e){e.classHierarchy.push("vtkWebGPUTextureView"),t.create=(r,n)=>{e.texture=r,e.options=n,e.options.dimension=e.options.dimension||"2d",e.options.label=e.label,e.textureHandle=r.getHandle(),e.handle=e.textureHandle.createView(e.options),e.bindGroupLayoutEntry.texture.viewDimension=e.options.dimension;const i=yo.getDetailsFromTextureFormat(e.texture.getFormat());e.bindGroupLayoutEntry.texture.sampleType=i.sampleType},t.createFromTextureHandle=(r,n)=>{e.texture=null,e.options=n,e.options.dimension=e.options.dimension||"2d",e.options.label=e.label,e.textureHandle=r,e.handle=e.textureHandle.createView(e.options),e.bindGroupLayoutEntry.texture.viewDimension=e.options.dimension;const i=yo.getDetailsFromTextureFormat(n.format);e.bindGroupLayoutEntry.texture.sampleType=i.sampleType,e.bindGroupTime.modified()},t.getBindGroupEntry=()=>({resource:t.getHandle()}),t.getShaderCode=(r,n)=>{let i="f32";e.bindGroupLayoutEntry.texture.sampleType==="sint"?i="i32":e.bindGroupLayoutEntry.texture.sampleType==="uint"&&(i="u32");let o=`@binding(${r}) @group(${n}) var ${e.label}: texture_${e.options.dimension}<${i}>;`;return e.bindGroupLayoutEntry.texture.sampleType==="depth"&&(o=`@binding(${r}) @group(${n}) var ${e.label}: texture_depth_${e.options.dimension};`),o},t.addSampler=(r,n)=>{const i=ZN.newInstance({label:`${e.label}Sampler`});i.create(r,n),t.setSampler(i)},t.getBindGroupTime=()=>(e.texture&&e.texture.getHandle()!==e.textureHandle&&(e.textureHandle=e.texture.getHandle(),e.handle=e.textureHandle.createView(e.options),e.bindGroupTime.modified()),e.bindGroupTime),t.getHandle=()=>(e.texture&&e.texture.getHandle()!==e.textureHandle&&(e.textureHandle=e.texture.getHandle(),e.handle=e.textureHandle.createView(e.options),e.bindGroupTime.modified()),e.handle)}const dhe={texture:null,handle:null,sampler:null,label:null};function qV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,dhe,r),J.obj(t,e),e.bindGroupLayoutEntry={visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,texture:{sampleType:"float",viewDimension:"2d"}},e.bindGroupTime={},J.obj(e.bindGroupTime,{mtime:0}),J.get(t,e,["bindGroupTime","texture"]),J.setGet(t,e,["bindGroupLayoutEntry","label","sampler"]),fhe(t,e)}const hhe=J.newInstance(qV);var ghe={newInstance:hhe,extend:qV};const{BufferUsage:W9}=$h;function phe(t,e){e.classHierarchy.push("vtkWebGPUTexture"),t.create=(r,n)=>{e.device=r,e.width=n.width,e.height=n.height,e.depth=n.depth?n.depth:1;const i=e.depth===1?"2d":"3d";e.format=n.format?n.format:"rgba8unorm",e.mipLevel=n.mipLevel?n.mipLevel:0,e.usage=n.usage?n.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST,e.handle=e.device.getHandle().createTexture({size:[e.width,e.height,e.depth],format:e.format,usage:e.usage,label:e.label,dimension:i,mipLevelCount:e.mipLevel+1})},t.assignFromHandle=(r,n,i)=>{e.device=r,e.handle=n,e.width=i.width,e.height=i.height,e.depth=i.depth?i.depth:1,e.format=i.format?i.format:"rgba8unorm",e.usage=i.usage?i.usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST},t.writeImageData=r=>{let n=[];if(r.canvas){e.device.getHandle().queue.copyExternalImageToTexture({source:r.canvas,flipY:r.flip},{texture:e.handle,premultipliedAlpha:!0},[e.width,e.height,e.depth]),e.ready=!0;return}r.jsImageData&&!r.nativeArray&&(r.width=r.jsImageData.width,r.height=r.jsImageData.height,r.depth=1,r.format="rgba8unorm",r.flip=!0,r.nativeArray=r.jsImageData.data);const i=yo.getDetailsFromTextureFormat(e.format);let o=e.width*i.stride;const a=(c,l,f)=>{const u=c.length/(l*f)*c.BYTES_PER_ELEMENT,d=i.elementSize===2&&i.sampleType==="float";if(d||u%256){const h=c,g=u/h.BYTES_PER_ELEMENT,p=i.elementSize,v=256*Math.floor((g*p+255)/256),y=v/p,m=J.newTypedArray(d?"Uint16Array":h.constructor.name,y*l*f);for(let w=0;w{const r=yo.getDetailsFromTextureFormat(e.format);return r.elementSize===2&&r.sampleType==="float"?1:255},t.getNumberOfComponents=()=>yo.getDetailsFromTextureFormat(e.format).numComponents,t.getDimensionality=()=>{let r=0;return e.width>1&&r++,e.height>1&&r++,e.depth>1&&r++,r},t.resizeToMatch=r=>{(r.getWidth()!==e.width||r.getHeight()!==e.height||r.getDepth()!==e.depth)&&(e.width=r.getWidth(),e.height=r.getHeight(),e.depth=r.getDepth(),e.handle=e.device.getHandle().createTexture({size:[e.width,e.height,e.depth],format:e.format,usage:e.usage,label:e.label}))},t.resize=function(r,n){let i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1;(r!==e.width||n!==e.height||i!==e.depth)&&(e.width=r,e.height=n,e.depth=i,e.handle=e.device.getHandle().createTexture({size:[e.width,e.height,e.depth],format:e.format,usage:e.usage,label:e.label}))},t.createView=function(r){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.dimension||(n.dimension=e.depth===1?"2d":"3d");const i=ghe.newInstance({label:r});return i.create(t,n),i}}const mhe={device:null,handle:null,buffer:null,ready:!1,label:null};function vhe(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,mhe,r),J.obj(t,e),J.get(t,e,["handle","ready","width","height","depth","format","usage"]),J.setGet(t,e,["device","label"]),phe(t,e)}J.newInstance(vhe);function yhe(t){if(!t||t.data.length===0)throw new Error("Invalid contour set data, see publicContourSetData type for more info");if(!t.id)throw new Error("Invalid contour set data, each contour set must have an id");if(!t.data||!Array.isArray(t.data))throw new Error("Invalid contour set data, each contour set must have an array of contours");t.data.forEach(e=>{if(!e.points||!Array.isArray(e.points))throw new Error("Invalid contour set data, each contour must have an array of points");e.points.forEach(r=>{if(!r||!Array.isArray(r)||r.length!==3)throw new Error("Invalid contour set data, each point must be an array of length 3")})})}class z9{constructor(e){const{points:r,type:n}=e.data;this.id=e.id,this._points=r,this._type=n,this._color=e.color,this._segmentIndex=e.segmentIndex,this.sizeInBytes=this._getSizeInBytes()}_getSizeInBytes(){return this._points.length*3}get points(){return this._points}set points(e){this._points=e}get color(){return this._color}set color(e){this._color=e}get type(){return this._type}set type(e){this._type=e}get segmentIndex(){return this._segmentIndex}set segmentIndex(e){this._segmentIndex=e}get flatPointsArray(){return this._points.map(e=>[...e]).flat()}}class whe{constructor(e){this._color=[200,0,0],this.id=e.id,this._contours=[],this._color=e.color??this._color,this.frameOfReferenceUID=e.frameOfReferenceUID,this._segmentIndex=e.segmentIndex,this._createEachContour(e.data),this.sizeInBytes=this._getSizeInBytes()}_createEachContour(e){e.forEach(r=>{const{points:n,type:i,color:o}=r,a=new z9({id:`${this.id}-segment-${this._segmentIndex}`,data:{points:n,type:i,segmentIndex:this._segmentIndex,color:o??this._color},segmentIndex:this._segmentIndex,color:o??this._color});this._contours.push(a)}),this._updateContourSetCentroid()}_updateContourSetCentroid(){const e=this.totalNumberOfPoints,r=this.flatPointsArray,n=r.reduce((a,s)=>[a[0]+s[0],a[1]+s[1],a[2]+s[2]],[0,0,0]),i=[n[0]/e,n[1]/e,n[2]/e],o=r.reduce((a,s)=>{const c=this._getDistance(i,s),l=this._getDistance(i,a);return ce+r.sizeInBytes,0)}_getDistance(e,r){return Math.sqrt((e[0]-r[0])**2+(e[1]-r[1])**2+(e[2]-r[2])**2)}get centroid(){return this._centroid}get segmentIndex(){return this._segmentIndex}get color(){return this._color}set color(e){this._color=e,this._contours.forEach(r=>{r instanceof z9&&(r.color=e)})}get contours(){return this._contours}get flatPointsArray(){return this._contours.flatMap(e=>e.points)}get numberOfContours(){return this._contours.length}get totalNumberOfPoints(){return this._contours.reduce((e,r)=>e+r.points.length,0)}get numberOfPointsArray(){return this._contours.map(e=>e.points.length)}getPointsInContour(e){return this._contours[e].points}getNumberOfPointsInAContour(e){return this.getPointsInContour(e).length}}function xhe(t,e){yhe(e);const r=new whe({id:e.id,data:e.data,color:e.color,frameOfReferenceUID:e.frameOfReferenceUID,segmentIndex:e.segmentIndex??1});return{id:t,type:Qc.CONTOUR,data:r,sizeInBytes:r.sizeInBytes}}function Che(t){var e,r;if(!t.id)throw new Error("Surface must have an id");if(((e=t.points)==null?void 0:e.length)===0)throw new Error("Surface must have non-empty points array");if(((r=t.polys)==null?void 0:r.length)===0)throw new Error("Surface must have non-empty polys array");if(!t.frameOfReferenceUID)throw new Error("Surface must have a frameOfReferenceUID")}function She(t,e){Che(e);const r=new Wk({id:e.id,points:e.points,polys:e.polys,color:e.color,frameOfReferenceUID:e.frameOfReferenceUID,segmentIndex:e.segmentIndex??1});return{id:t,type:Qc.SURFACE,data:r,sizeInBytes:r.sizeInBytes}}function The(t){if(!t.id)throw new Error("Mesh must have an id");if(!t.arrayBuffer)throw new Error("Mesh must have an arrayBuffer");if(!(t.format in za))throw new Error(`Mesh format must be one of the following: ${Object.values(za).join(", ")}`)}function _he(t,e){e.classHierarchy.push("vtkMTLReader");function r(){e.requestCount--,e.requestCount===0&&t.invokeBusy(!1)}function n(o){if(o[0]==="#"||o.length===0)return;const a=o.split(/[ \t]+/).map(s=>s.trim()).filter(s=>s.length);if(a[0]==="newmtl")a.shift(),e.currentMaterial=a.join(" ").trim();else if(e.currentMaterial){if(a.length<2)return;if(e.materials[e.currentMaterial]||(e.materials[e.currentMaterial]={}),e.materials[e.currentMaterial][a[0]]=a.slice(1),a[0]==="map_Kd"){const s=new Image;s.onload=()=>setTimeout(r,0),s.src=[e.baseURL,a[1]].join("/"),e.materials[e.currentMaterial].image=s,e.requestCount++}}}e.dataAccessHelper||(e.dataAccessHelper=dm.get("http"));function i(o,a){return e.dataAccessHelper.fetchText(t,o,a)}t.setUrl=function(o){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(o.indexOf(".mtl")===-1&&!a.fullpath)e.baseURL=o,e.url=`${o}/index.mtl`;else{e.url=o;const s=o.split("/");s.pop(),e.baseURL=s.join("/")}return t.loadData(a)},t.loadData=o=>new Promise((a,s)=>{i(e.url,o).then(c=>{t.parseAsText(c),a()},c=>{s()})}),t.parseAsText=o=>{t.modified(),e.materials={},o.split(` -`).forEach(n)},t.isBusy=()=>!!e.requestCount,t.getMaterialNames=()=>Object.keys(e.materials),t.getMaterial=o=>e.materials[o],t.listImages=()=>Object.keys(e.materials).map(o=>e.materials[o].map_Kd).filter(o=>!!o).map(o=>o[0].trim()),t.setImageSrc=(o,a)=>new Promise((s,c)=>{const l=Object.keys(e.materials).find(u=>e.materials[u].map_Kd&&e.materials[u].map_Kd[0].trim()===o.trim()),f=e.materials[l];f&&f.image?(f.image.src=a,f.image.onload=()=>setTimeout(s,0)):s()}),t.applyMaterialToActor=(o,a)=>{const s=e.materials[o];if(s&&a){const c=[1,1,1],l={ambientColor:s.Ka?s.Ka.map(u=>Number(u)):c,specularColor:s.Ks?s.Ks.map(u=>Number(u)):c,diffuseColor:s.Kd?s.Kd.map(u=>Number(u)):c,opacity:s.d?Number(s.d):1,specularPower:s.Ns?Number(s.Ns):1},f=Number(s.illum||2);if(["ambient","diffuse","specular"].forEach((u,d)=>{l[u]=d<=f?1:0}),s.image){const u=Bd.newInstance({interpolate:e.interpolateTextures});u.setImage(s.image),a.addTexture(u)}a.getProperty().set(l)}}}const Ehe={numberOfOutputs:1,requestCount:0,materials:{},interpolateTextures:!0};function XV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ehe,r),yr(t,e),Go(t,e,["url","baseURL"]),ci(t,e,["dataAccessHelper","interpolateTextures","splitGroup"]),P_(t,e,"busy"),_he(t,e)}const bhe=$n(XV,"vtkMTLReader");var Dhe={newInstance:bhe,extend:XV};function YV(t,e){The(e);const r=new Xue({...e}),n={id:t,type:Qc.MESH,data:r,sizeInBytes:r.sizeInBytes};switch(e.format){case za.PLY:if(e.materialUrl){const i=new Image;return new Promise((o,a)=>{i.onload=()=>{try{const s=Bd.newInstance();s.setInterpolate(!0),s.setImage(i),r.defaultActor.addTexture(s),o(n)}catch(s){a(s)}},i.onerror=s=>a(s),i.src=e.materialUrl})}return Promise.resolve(n);case za.OBJ:if(e.materialUrl){const i=Dhe.newInstance();return i.setUrl(e.materialUrl).then(()=>{for(let o=0;o{throw new Error(`Failed to load material: ${o}`)})}return Promise.resolve(n);case za.STL:case za.VTP:return Promise.resolve(n);default:return Promise.reject(new Error(`Unsupported format: ${e.format}`))}}function Ihe({url:t,signal:e,onload:r,loaderOptions:n}){return new Promise((i,o)=>{const a=new XMLHttpRequest;a.open("GET",t,!0);const s={},c=n.beforeSend(a,s),l=Object.assign({},s,c);a.responseType="arraybuffer",Object.keys(l).forEach(function(h){l[h]!==null&&a.setRequestHeader(h,l[h])});const f=function(h){r&&typeof r=="function"&&r(),e&&e.removeEventListener("abort",u),i(a.response)},u=()=>{a.abort(),a.removeEventListener("load",f),o(new Error("Request aborted"))};a.addEventListener("load",f);const d=(h,g)=>{const p={url:t,loaded:h,total:g};ut(et,rt.GEOMETRY_LOAD_PROGRESS,{data:p})};a.onprogress=function(h){d(h.loaded,h.total)},e&&e.aborted?(a.abort(),o(new Error("Request aborted"))):e&&e.addEventListener("abort",u),a.send()})}function JV(t,e,r){return{promise:new Promise((i,o)=>{Ohe(t,e,r).then(i).catch(o)}),cancelFn:void 0,decache:()=>{}}}async function Ohe(t,e,r){const i=t.split(":").slice(1).join(":"),o=await Ihe({url:i,loaderOptions:r});if(!e||!("geometryData"in e))throw new Error("Mesh must have a geometryData");return YV(i,{...e.geometryData,arrayBuffer:o})}let Qy={beforeSend(t){}};function Mhe(t){Qy=Object.assign(Qy,t)}function Phe(){return Qy}const ZV={};let Sp;function QV(t,e){const r=t.indexOf(":"),n=t.substring(0,r);let i=ZV[n];if(i==null){if(Sp==null||typeof Sp!="function")throw new Error(`No geometry loader for scheme ${n} has been registered`);i=Sp}const o=i(t,e,Qy);return o.promise.then(function(a){ut(et,rt.GEOMETRY_LOADED,{geometry:a})},function(a){const s={geometryId:t,error:a};ut(et,rt.GEOMETRY_LOADED_FAILED,s)}),o}function Rhe(t,e){if(t===void 0)throw new Error("loadGeometry: parameter geometryId must not be undefined");let r=$e.getGeometryLoadObject(t);return r!==void 0||(r=QV(t,e)),r.promise}async function Lhe(t,e){if(t===void 0)throw new Error("createAndCacheGeometry: parameter geometryId must not be undefined");let r=$e.getGeometryLoadObject(t);return r!==void 0||(r=QV(t,e),await $e.putGeometryLoadObject(t,r)),r.promise}function Ahe(t,e){if(t===void 0)throw new Error("createAndCacheGeometry: parameter geometryId must not be undefined");let r=$e.getGeometry(t);if(r)return r;if(e.type===Qc.CONTOUR)r=xhe(t,e.geometryData);else if(e.type===Qc.SURFACE)r=She(t,e.geometryData);else if(e.type===Qc.MESH)YV(t,e.geometryData).then(n=>{r=n});else throw new Error(`Unknown geometry type: ${e.type}`);return $e.putGeometrySync(t,r),r}function eF(t,e){ZV[t]=e}function Nhe(t){const e=Sp;return Sp=t,e}eF("mesh",JV);const khe=Object.freeze(Object.defineProperty({__proto__:null,createAndCacheGeometry:Ahe,getOptions:Phe,loadAndCacheGeometry:Lhe,loadGeometry:Rhe,registerGeometryLoader:eF,registerUnknownGeometryLoader:Nhe,setOptions:Mhe},Symbol.toStringTag,{value:"Module"}));function Vhe(t,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a 4D streaming image volume");const{imageIds:r}=e,{splittingTag:n,imageIdGroups:i}=pE(r),o=Math.floor(i.length/2),a=am(i[o],t),{metadata:s,dimensions:c,spacing:l,direction:f,sizeInBytes:u,origin:d,numberOfComponents:h,dataType:g}=a,p=f.slice(6,9),v=i.map(x=>H4(x,p).sortedImageIds),y=v.flat(),m=hc.createScalarDynamicVolumeVoxelManager({dimensions:c,imageIdGroups:v,dimensionGroupNumber:1,numberOfComponents:h});let w=new bV({volumeId:t,metadata:s,dimensions:c,spacing:l,origin:d,direction:f,sizeInBytes:u,imageIds:y,imageIdGroups:v,splittingTag:n,voxelManager:m,numberOfComponents:h,dataType:g},{imageIds:y,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}});return{promise:Promise.resolve(w),decache:()=>{w.destroy(),w=null},cancel:()=>{w.cancelLoading()}}}const Fhe=Object.freeze(Object.defineProperty({__proto__:null,BaseVolumeViewport:Tr,CONSTANTS:wf,EPSILON:Z0,EVENTS:rt,Enums:Qa,ImageVolume:Ud,ProgressiveRetrieveImages:g1,RenderingEngine:iE,Settings:Cr,StackViewport:lr,StreamingDynamicImageVolume:bV,StreamingImageVolume:uk,Surface:Wk,VideoViewport:Th,Viewport:bd,VolumeViewport:ur,VolumeViewport3D:rE,WSIViewport:Wy,addImageSlicesToViewports:Bk,addVolumesToViewports:Uk,cache:$e,canRenderFloatTextures:fw,convertMapperToNotSharedMapper:vk,cornerstoneMeshLoader:JV,cornerstoneStreamingDynamicImageVolumeLoader:Vhe,cornerstoneStreamingImageVolumeLoader:fk,createCanvas:fm,createViewportElement:Rk,createVolumeActor:Uy,createVolumeMapper:mk,eventTarget:et,geometryLoader:khe,getConfiguration:dw,getEnabledElement:_e,getEnabledElementByIds:Oi,getEnabledElementByViewportId:Wn,getEnabledElements:xV,getOrCreateCanvas:Hc,getRenderingEngine:jr,getRenderingEngines:Bo,getShouldUseCPURendering:q0,getWebWorkerManager:vl,imageLoadPoolManager:Bi,imageLoader:bse,imageRetrievalPoolManager:Kh,init:AA,isCornerstoneInitialized:NA,metaData:R4,peerImport:kA,registerImageLoader:ld,requestPoolManager:Bi,resetInitialization:Bte,resetUseCPURendering:Ute,setCanvasCreator:Oce,setConfiguration:Gte,setPreferSizeOverAccuracy:Fte,setUseCPURendering:Vte,setVolumesForViewports:Fk,triggerEvent:ut,utilities:Rn,version:xle,volumeLoader:Vse},Symbol.toStringTag,{value:"Module"}));var fl;(function(t){t[t.Primary=1]="Primary",t[t.Secondary=2]="Secondary",t[t.Primary_And_Secondary=3]="Primary_And_Secondary",t[t.Auxiliary=4]="Auxiliary",t[t.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",t[t.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",t[t.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",t[t.Fourth_Button=8]="Fourth_Button",t[t.Fifth_Button=16]="Fifth_Button",t[t.Wheel=524288]="Wheel",t[t.Wheel_Primary=524289]="Wheel_Primary"})(fl||(fl={}));var Ki;(function(t){t[t.Shift=16]="Shift",t[t.Ctrl=17]="Ctrl",t[t.Alt=18]="Alt",t[t.Meta=91]="Meta",t[t.ShiftCtrl=1617]="ShiftCtrl",t[t.ShiftAlt=1618]="ShiftAlt",t[t.ShiftMeta=1691]="ShiftMeta",t[t.CtrlAlt=1718]="CtrlAlt",t[t.CtrlMeta=1791]="CtrlMeta",t[t.AltMeta=1891]="AltMeta"})(Ki||(Ki={}));var Fn;(function(t){t.Active="Active",t.Passive="Passive",t.Enabled="Enabled",t.Disabled="Disabled"})(Fn||(Fn={}));var rc;(function(t){t.Default="",t.Highlighted="Highlighted",t.Selected="Selected",t.Locked="Locked",t.AutoGenerated="AutoGenerated"})(rc||(rc={}));var k;(function(t){t.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",t.TOOLGROUP_VIEWPORT_ADDED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_ADDED",t.TOOLGROUP_VIEWPORT_REMOVED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_REMOVED",t.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",t.CROSSHAIR_TOOL_CENTER_CHANGED="CORNERSTONE_TOOLS_CROSSHAIR_TOOL_CENTER_CHANGED",t.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",t.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",t.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",t.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",t.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",t.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",t.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",t.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",t.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_CUT_MERGE_PROCESS_COMPLETED",t.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",t.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",t.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",t.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",t.SEGMENTATION_REPRESENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_ADDED",t.SEGMENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_ADDED",t.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",t.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",t.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",t.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",t.HISTORY_UNDO="CORNERSTONE_TOOLS_HISTORY_UNDO",t.HISTORY_REDO="CORNERSTONE_TOOLS_HISTORY_REDO",t.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",t.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",t.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",t.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",t.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",t.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",t.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",t.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",t.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",t.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",t.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",t.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",t.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",t.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",t.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",t.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",t.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE"})(k||(k={}));var Vt;(function(t){t.Labelmap="Labelmap",t.Contour="Contour",t.Surface="Surface"})(Vt||(Vt={}));var od;(function(t){t.UP="UP",t.DOWN="DOWN",t.LEFT="LEFT",t.RIGHT="RIGHT"})(od||(od={}));var Lt;(function(t){t.OnInteractionStart="onInteractionStart",t.OnInteractionEnd="onInteractionEnd",t.Preview="preview",t.RejectPreview="rejectPreview",t.AcceptPreview="acceptPreview",t.Fill="fill",t.Interpolate="interpolate",t.StrategyFunction="strategyFunction",t.CreateIsInThreshold="createIsInThreshold",t.Initialize="initialize",t.INTERNAL_setValue="setValue",t.AddPreview="addPreview",t.ComputeInnerCircleRadius="computeInnerCircleRadius",t.GetStatistics="getStatistics",t.EnsureImageVolumeFor3DManipulation="ensureImageVolumeFor3DManipulation",t.EnsureSegmentationVolumeFor3DManipulation="ensureSegmentationVolumeFor3DManipulation"})(Lt||(Lt={}));var Qt;(function(t){t.Interaction="Interaction",t.HandlesUpdated="HandlesUpdated",t.StatsUpdated="StatsUpdated",t.InitialSetup="InitialSetup",t.Completed="Completed",t.InterpolationUpdated="InterpolationUpdated",t.History="History",t.MetadataReferenceModified="MetadataReferenceModified",t.LabelChange="LabelChange"})(Qt||(Qt={}));var Xa;(function(t){t.POLYSEG_CONTOUR_TO_LABELMAP="Converting Contour to Labelmap",t.POLYSEG_SURFACE_TO_LABELMAP="Converting Surfaces to Labelmap",t.POLYSEG_CONTOUR_TO_SURFACE="Converting Contour to Surface",t.POLYSEG_LABELMAP_TO_SURFACE="Converting Labelmap to Surface",t.SURFACE_CLIPPING="Clipping Surfaces",t.COMPUTE_STATISTICS="Computing Statistics",t.INTERPOLATE_LABELMAP="Interpolating Labelmap",t.COMPUTE_LARGEST_BIDIRECTIONAL="Computing Largest Bidirectional",t.GENERATE_CONTOUR_SETS="Generating Contour Sets"})(Xa||(Xa={}));const tF=Object.freeze(Object.defineProperty({__proto__:null,AnnotationStyleStates:rc,ChangeTypes:Qt,Events:k,get KeyboardBindings(){return Ki},get MouseBindings(){return fl},SegmentationRepresentations:Vt,StrategyCallbacks:Lt,get Swipe(){return od},ToolModes:Fn,WorkerTypes:Xa},Symbol.toStringTag,{value:"Module"}));let Sw={};function Uhe(){Sw={}}const $9={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Sw,enabledElements:[],handleRadius:6};let Ye={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Sw,enabledElements:[],handleRadius:6};function Bhe(){Uhe(),Ye={...structuredClone({...$9,svgNodeCache:{}}),svgNodeCache:{...$9.svgNodeCache}}}var Ghe="Expected a function",nF="__lodash_hash_undefined__",Whe="[object Function]",zhe="[object GeneratorFunction]",$he="[object Symbol]",jhe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hhe=/^\w*$/,Khe=/^\./,qhe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Xhe=/[\\^$.*+?()[\]{}|]/g,Yhe=/\\(\\)?/g,Jhe=/^\[object .+?Constructor\]$/,Zhe=typeof Xi=="object"&&Xi&&Xi.Object===Object&&Xi,Qhe=typeof self=="object"&&self&&self.Object===Object&&self,SE=Zhe||Qhe||Function("return this")();function ege(t,e){return t==null?void 0:t[e]}function tge(t){var e=!1;if(t!=null&&typeof t.toString!="function")try{e=!!(t+"")}catch{}return e}var nge=Array.prototype,rge=Function.prototype,rF=Object.prototype,y3=SE["__core-js_shared__"],j9=function(){var t=/[^.]+$/.exec(y3&&y3.keys&&y3.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),iF=rge.toString,TE=rF.hasOwnProperty,oF=rF.toString,ige=RegExp("^"+iF.call(TE).replace(Xhe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),H9=SE.Symbol,oge=nge.splice,age=aF(SE,"Map"),b1=aF(Object,"create"),K9=H9?H9.prototype:void 0,q9=K9?K9.toString:void 0;function Dd(t){var e=-1,r=t?t.length:0;for(this.clear();++e-1}function mge(t,e){var r=this.__data__,n=Tw(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}qh.prototype.clear=dge;qh.prototype.delete=hge;qh.prototype.get=gge;qh.prototype.has=pge;qh.prototype.set=mge;function Gd(t){var e=-1,r=t?t.length:0;for(this.clear();++e=0&&n>=0&&(r>0||n>0)&&(i+=` ${r} ${n}`),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return`${e}-${dV(D1)}`}}const Bn={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:` +`).forEach(n)},t.isBusy=()=>!!e.requestCount,t.getMaterialNames=()=>Object.keys(e.materials),t.getMaterial=o=>e.materials[o],t.listImages=()=>Object.keys(e.materials).map(o=>e.materials[o].map_Kd).filter(o=>!!o).map(o=>o[0].trim()),t.setImageSrc=(o,a)=>new Promise((s,c)=>{const l=Object.keys(e.materials).find(u=>e.materials[u].map_Kd&&e.materials[u].map_Kd[0].trim()===o.trim()),f=e.materials[l];f&&f.image?(f.image.src=a,f.image.onload=()=>setTimeout(s,0)):s()}),t.applyMaterialToActor=(o,a)=>{const s=e.materials[o];if(s&&a){const c=[1,1,1],l={ambientColor:s.Ka?s.Ka.map(u=>Number(u)):c,specularColor:s.Ks?s.Ks.map(u=>Number(u)):c,diffuseColor:s.Kd?s.Kd.map(u=>Number(u)):c,opacity:s.d?Number(s.d):1,specularPower:s.Ns?Number(s.Ns):1},f=Number(s.illum||2);if(["ambient","diffuse","specular"].forEach((u,d)=>{l[u]=d<=f?1:0}),s.image){const u=Bd.newInstance({interpolate:e.interpolateTextures});u.setImage(s.image),a.addTexture(u)}a.getProperty().set(l)}}}const Ehe={numberOfOutputs:1,requestCount:0,materials:{},interpolateTextures:!0};function XV(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Ehe,r),yr(t,e),Go(t,e,["url","baseURL"]),ci(t,e,["dataAccessHelper","interpolateTextures","splitGroup"]),P_(t,e,"busy"),_he(t,e)}const bhe=$n(XV,"vtkMTLReader");var Dhe={newInstance:bhe,extend:XV};function YV(t,e){The(e);const r=new Xue({...e}),n={id:t,type:Qc.MESH,data:r,sizeInBytes:r.sizeInBytes};switch(e.format){case za.PLY:if(e.materialUrl){const i=new Image;return new Promise((o,a)=>{i.onload=()=>{try{const s=Bd.newInstance();s.setInterpolate(!0),s.setImage(i),r.defaultActor.addTexture(s),o(n)}catch(s){a(s)}},i.onerror=s=>a(s),i.src=e.materialUrl})}return Promise.resolve(n);case za.OBJ:if(e.materialUrl){const i=Dhe.newInstance();return i.setUrl(e.materialUrl).then(()=>{for(let o=0;o{throw new Error(`Failed to load material: ${o}`)})}return Promise.resolve(n);case za.STL:case za.VTP:return Promise.resolve(n);default:return Promise.reject(new Error(`Unsupported format: ${e.format}`))}}function Ihe({url:t,signal:e,onload:r,loaderOptions:n}){return new Promise((i,o)=>{const a=new XMLHttpRequest;a.open("GET",t,!0);const s={},c=n.beforeSend(a,s),l=Object.assign({},s,c);a.responseType="arraybuffer",Object.keys(l).forEach(function(h){l[h]!==null&&a.setRequestHeader(h,l[h])});const f=function(h){r&&typeof r=="function"&&r(),e&&e.removeEventListener("abort",u),i(a.response)},u=()=>{a.abort(),a.removeEventListener("load",f),o(new Error("Request aborted"))};a.addEventListener("load",f);const d=(h,g)=>{const p={url:t,loaded:h,total:g};ut(et,rt.GEOMETRY_LOAD_PROGRESS,{data:p})};a.onprogress=function(h){d(h.loaded,h.total)},e&&e.aborted?(a.abort(),o(new Error("Request aborted"))):e&&e.addEventListener("abort",u),a.send()})}function JV(t,e,r){return{promise:new Promise((i,o)=>{Ohe(t,e,r).then(i).catch(o)}),cancelFn:void 0,decache:()=>{}}}async function Ohe(t,e,r){const i=t.split(":").slice(1).join(":"),o=await Ihe({url:i,loaderOptions:r});if(!e||!("geometryData"in e))throw new Error("Mesh must have a geometryData");return YV(i,{...e.geometryData,arrayBuffer:o})}let Qy={beforeSend(t){}};function Mhe(t){Qy=Object.assign(Qy,t)}function Phe(){return Qy}const ZV={};let Sp;function QV(t,e){const r=t.indexOf(":"),n=t.substring(0,r);let i=ZV[n];if(i==null){if(Sp==null||typeof Sp!="function")throw new Error(`No geometry loader for scheme ${n} has been registered`);i=Sp}const o=i(t,e,Qy);return o.promise.then(function(a){ut(et,rt.GEOMETRY_LOADED,{geometry:a})},function(a){const s={geometryId:t,error:a};ut(et,rt.GEOMETRY_LOADED_FAILED,s)}),o}function Rhe(t,e){if(t===void 0)throw new Error("loadGeometry: parameter geometryId must not be undefined");let r=$e.getGeometryLoadObject(t);return r!==void 0||(r=QV(t,e)),r.promise}async function Lhe(t,e){if(t===void 0)throw new Error("createAndCacheGeometry: parameter geometryId must not be undefined");let r=$e.getGeometryLoadObject(t);return r!==void 0||(r=QV(t,e),await $e.putGeometryLoadObject(t,r)),r.promise}function Ahe(t,e){if(t===void 0)throw new Error("createAndCacheGeometry: parameter geometryId must not be undefined");let r=$e.getGeometry(t);if(r)return r;if(e.type===Qc.CONTOUR)r=xhe(t,e.geometryData);else if(e.type===Qc.SURFACE)r=She(t,e.geometryData);else if(e.type===Qc.MESH)YV(t,e.geometryData).then(n=>{r=n});else throw new Error(`Unknown geometry type: ${e.type}`);return $e.putGeometrySync(t,r),r}function eF(t,e){ZV[t]=e}function Nhe(t){const e=Sp;return Sp=t,e}eF("mesh",JV);const khe=Object.freeze(Object.defineProperty({__proto__:null,createAndCacheGeometry:Ahe,getOptions:Phe,loadAndCacheGeometry:Lhe,loadGeometry:Rhe,registerGeometryLoader:eF,registerUnknownGeometryLoader:Nhe,setOptions:Mhe},Symbol.toStringTag,{value:"Module"}));function Vhe(t,e){if(!e||!e.imageIds||!e.imageIds.length)throw new Error("ImageIds must be provided to create a 4D streaming image volume");const{imageIds:r}=e,{splittingTag:n,imageIdGroups:i}=pE(r),o=Math.floor(i.length/2),a=am(i[o],t),{metadata:s,dimensions:c,spacing:l,direction:f,sizeInBytes:u,origin:d,numberOfComponents:h,dataType:g}=a,p=f.slice(6,9),v=i.map(x=>H4(x,p).sortedImageIds),y=v.flat(),m=hc.createScalarDynamicVolumeVoxelManager({dimensions:c,imageIdGroups:v,dimensionGroupNumber:1,numberOfComponents:h});let w=new bV({volumeId:t,metadata:s,dimensions:c,spacing:l,origin:d,direction:f,sizeInBytes:u,imageIds:y,imageIdGroups:v,splittingTag:n,voxelManager:m,numberOfComponents:h,dataType:g},{imageIds:y,loadStatus:{loaded:!1,loading:!1,cancelled:!1,cachedFrames:[],callbacks:[]}});return{promise:Promise.resolve(w),decache:()=>{w.destroy(),w=null},cancel:()=>{w.cancelLoading()}}}const Fhe=Object.freeze(Object.defineProperty({__proto__:null,BaseVolumeViewport:Tr,CONSTANTS:wf,EPSILON:Z0,EVENTS:rt,Enums:Qa,ImageVolume:Ud,ProgressiveRetrieveImages:g1,RenderingEngine:iE,Settings:Cr,StackViewport:lr,StreamingDynamicImageVolume:bV,StreamingImageVolume:uk,Surface:Wk,VideoViewport:Th,Viewport:bd,VolumeViewport:ur,VolumeViewport3D:rE,WSIViewport:Wy,addImageSlicesToViewports:Bk,addVolumesToViewports:Uk,cache:$e,canRenderFloatTextures:fw,convertMapperToNotSharedMapper:vk,cornerstoneMeshLoader:JV,cornerstoneStreamingDynamicImageVolumeLoader:Vhe,cornerstoneStreamingImageVolumeLoader:fk,createCanvas:fm,createViewportElement:Rk,createVolumeActor:Uy,createVolumeMapper:mk,eventTarget:et,geometryLoader:khe,getConfiguration:dw,getEnabledElement:_e,getEnabledElementByIds:Oi,getEnabledElementByViewportId:Wn,getEnabledElements:xV,getOrCreateCanvas:Hc,getRenderingEngine:jr,getRenderingEngines:Bo,getShouldUseCPURendering:q0,getWebWorkerManager:vl,imageLoadPoolManager:Bi,imageLoader:bse,imageRetrievalPoolManager:Kh,init:AA,isCornerstoneInitialized:NA,metaData:R4,peerImport:kA,registerImageLoader:ld,requestPoolManager:Bi,resetInitialization:Bte,resetUseCPURendering:Ute,setCanvasCreator:Oce,setConfiguration:Gte,setPreferSizeOverAccuracy:Fte,setUseCPURendering:Vte,setVolumesForViewports:Fk,triggerEvent:ut,utilities:Rn,version:xle,volumeLoader:Vse},Symbol.toStringTag,{value:"Module"}));var fl;(function(t){t[t.Primary=1]="Primary",t[t.Secondary=2]="Secondary",t[t.Primary_And_Secondary=3]="Primary_And_Secondary",t[t.Auxiliary=4]="Auxiliary",t[t.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",t[t.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",t[t.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",t[t.Fourth_Button=8]="Fourth_Button",t[t.Fifth_Button=16]="Fifth_Button",t[t.Wheel=524288]="Wheel",t[t.Wheel_Primary=524289]="Wheel_Primary"})(fl||(fl={}));var Ki;(function(t){t[t.Shift=16]="Shift",t[t.Ctrl=17]="Ctrl",t[t.Alt=18]="Alt",t[t.Meta=91]="Meta",t[t.ShiftCtrl=1617]="ShiftCtrl",t[t.ShiftAlt=1618]="ShiftAlt",t[t.ShiftMeta=1691]="ShiftMeta",t[t.CtrlAlt=1718]="CtrlAlt",t[t.CtrlMeta=1791]="CtrlMeta",t[t.AltMeta=1891]="AltMeta"})(Ki||(Ki={}));var Fn;(function(t){t.Active="Active",t.Passive="Passive",t.Enabled="Enabled",t.Disabled="Disabled"})(Fn||(Fn={}));var rc;(function(t){t.Default="",t.Highlighted="Highlighted",t.Selected="Selected",t.Locked="Locked",t.AutoGenerated="AutoGenerated"})(rc||(rc={}));var k;(function(t){t.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",t.TOOLGROUP_VIEWPORT_ADDED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_ADDED",t.TOOLGROUP_VIEWPORT_REMOVED="CORNERSTONE_TOOLS_TOOLGROUP_VIEWPORT_REMOVED",t.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",t.CROSSHAIR_TOOL_CENTER_CHANGED="CORNERSTONE_TOOLS_CROSSHAIR_TOOL_CENTER_CHANGED",t.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",t.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",t.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",t.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",t.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",t.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",t.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",t.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",t.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_CUT_MERGE_PROCESS_COMPLETED",t.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",t.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",t.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",t.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",t.SEGMENTATION_REPRESENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_ADDED",t.SEGMENTATION_ADDED="CORNERSTONE_TOOLS_SEGMENTATION_ADDED",t.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",t.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",t.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",t.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",t.HISTORY_UNDO="CORNERSTONE_TOOLS_HISTORY_UNDO",t.HISTORY_REDO="CORNERSTONE_TOOLS_HISTORY_REDO",t.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",t.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",t.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",t.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",t.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",t.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",t.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",t.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",t.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",t.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",t.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",t.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",t.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",t.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",t.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",t.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",t.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE"})(k||(k={}));var Vt;(function(t){t.Labelmap="Labelmap",t.Contour="Contour",t.Surface="Surface"})(Vt||(Vt={}));var od;(function(t){t.UP="UP",t.DOWN="DOWN",t.LEFT="LEFT",t.RIGHT="RIGHT"})(od||(od={}));var Lt;(function(t){t.OnInteractionStart="onInteractionStart",t.OnInteractionEnd="onInteractionEnd",t.Preview="preview",t.RejectPreview="rejectPreview",t.AcceptPreview="acceptPreview",t.Fill="fill",t.Interpolate="interpolate",t.StrategyFunction="strategyFunction",t.CreateIsInThreshold="createIsInThreshold",t.Initialize="initialize",t.INTERNAL_setValue="setValue",t.AddPreview="addPreview",t.ComputeInnerCircleRadius="computeInnerCircleRadius",t.GetStatistics="getStatistics",t.EnsureImageVolumeFor3DManipulation="ensureImageVolumeFor3DManipulation",t.EnsureSegmentationVolumeFor3DManipulation="ensureSegmentationVolumeFor3DManipulation"})(Lt||(Lt={}));var Qt;(function(t){t.Interaction="Interaction",t.HandlesUpdated="HandlesUpdated",t.StatsUpdated="StatsUpdated",t.InitialSetup="InitialSetup",t.Completed="Completed",t.InterpolationUpdated="InterpolationUpdated",t.History="History",t.MetadataReferenceModified="MetadataReferenceModified",t.LabelChange="LabelChange"})(Qt||(Qt={}));var Xa;(function(t){t.POLYSEG_CONTOUR_TO_LABELMAP="Converting Contour to Labelmap",t.POLYSEG_SURFACE_TO_LABELMAP="Converting Surfaces to Labelmap",t.POLYSEG_CONTOUR_TO_SURFACE="Converting Contour to Surface",t.POLYSEG_LABELMAP_TO_SURFACE="Converting Labelmap to Surface",t.SURFACE_CLIPPING="Clipping Surfaces",t.COMPUTE_STATISTICS="Computing Statistics",t.INTERPOLATE_LABELMAP="Interpolating Labelmap",t.COMPUTE_LARGEST_BIDIRECTIONAL="Computing Largest Bidirectional",t.GENERATE_CONTOUR_SETS="Generating Contour Sets"})(Xa||(Xa={}));const tF=Object.freeze(Object.defineProperty({__proto__:null,AnnotationStyleStates:rc,ChangeTypes:Qt,Events:k,get KeyboardBindings(){return Ki},get MouseBindings(){return fl},SegmentationRepresentations:Vt,StrategyCallbacks:Lt,get Swipe(){return od},ToolModes:Fn,WorkerTypes:Xa},Symbol.toStringTag,{value:"Module"}));let Sw={};function Uhe(){Sw={}}const $9={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Sw,enabledElements:[],handleRadius:6};let Ye={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:Sw,enabledElements:[],handleRadius:6};function Bhe(){Uhe(),Ye={...structuredClone({...$9,svgNodeCache:{}}),svgNodeCache:{...$9.svgNodeCache}}}var Ghe="Expected a function",nF="__lodash_hash_undefined__",Whe="[object Function]",zhe="[object GeneratorFunction]",$he="[object Symbol]",jhe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Hhe=/^\w*$/,Khe=/^\./,qhe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Xhe=/[\\^$.*+?()[\]{}|]/g,Yhe=/\\(\\)?/g,Jhe=/^\[object .+?Constructor\]$/,Zhe=typeof Xi=="object"&&Xi&&Xi.Object===Object&&Xi,Qhe=typeof self=="object"&&self&&self.Object===Object&&self,SE=Zhe||Qhe||Function("return this")();function ege(t,e){return t==null?void 0:t[e]}function tge(t){var e=!1;if(t!=null&&typeof t.toString!="function")try{e=!!(t+"")}catch{}return e}var nge=Array.prototype,rge=Function.prototype,rF=Object.prototype,yC=SE["__core-js_shared__"],j9=function(){var t=/[^.]+$/.exec(yC&&yC.keys&&yC.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),iF=rge.toString,TE=rF.hasOwnProperty,oF=rF.toString,ige=RegExp("^"+iF.call(TE).replace(Xhe,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),H9=SE.Symbol,oge=nge.splice,age=aF(SE,"Map"),b1=aF(Object,"create"),K9=H9?H9.prototype:void 0,q9=K9?K9.toString:void 0;function Dd(t){var e=-1,r=t?t.length:0;for(this.clear();++e-1}function mge(t,e){var r=this.__data__,n=Tw(r,t);return n<0?r.push([t,e]):r[n][1]=e,this}qh.prototype.clear=dge;qh.prototype.delete=hge;qh.prototype.get=gge;qh.prototype.has=pge;qh.prototype.set=mge;function Gd(t){var e=-1,r=t?t.length:0;for(this.clear();++e=0&&n>=0&&(r>0||n>0)&&(i+=` ${r} ${n}`),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return`${e}-${dV(D1)}`}}const Bn={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:` `},ga={x:127,y:60},e0=` @@ -4039,8 +4039,8 @@ fn main( width="${s}" height="${s}" viewBox="0 0 ${s} ${s}"> ${o} ${r} - `;return uF(c,e)}const J9=Symbol("ElementCursorsMap");function fF(t,e){I1(t)[0]=e,pm(t,e)}function pm(t,e){const r=I1(t);r[1]=r[0],r[0]=e,t.style.cursor=(e instanceof No?e:No.getDefinedCursor("auto")).getStyleProperty()}function Jt(t){pm(t,I1(t)[1])}function Gt(t){pm(t,No.getDefinedCursor("none"))}function I1(t){let e=I1[J9];e instanceof WeakMap||(e=new WeakMap,Object.defineProperty(I1,J9,{value:e}));let r=e.get(t);return r||(r=[null,null],e.set(t,r)),r}const tpe=Object.freeze(Object.defineProperty({__proto__:null,hideElementCursor:Gt,initElementCursor:fF,resetElementCursor:Jt,setElementCursor:pm},Symbol.toStringTag,{value:"Module"}));function npe(t,e){let r=th.getDefinedCursor(e,!0);r||(r=No.getDefinedCursor(e)),r||(console.log(`Cursor ${e} is not defined either as SVG or as a standard cursor.`),r=No.getDefinedCursor(e)),pm(t,r)}const rpe=[...zge,...Uge],ipe=Object.freeze(Object.defineProperty({__proto__:null,CursorNames:rpe,CursorSVG:Ew,ImageMouseCursor:D1,MouseCursor:No,SVGMouseCursor:th,elementCursor:tpe,registerCursor:Gge,setCursorForElement:npe},Symbol.toStringTag,{value:"Module"}));function ni(t){return Ye.toolGroups.find(e=>e.id===t)}const{Active:Og,Passive:w3,Enabled:x3,Disabled:C3}=Fn,ope=[{mouseButton:fl.Primary}];class DE{constructor(e){this.viewportsInfo=[],this.toolOptions={},this.currentActivePrimaryToolName=null,this.prevActivePrimaryToolName=null,this.restoreToolOptions={},this._toolInstances={},this.id=e}getViewportIds(){return this.viewportsInfo.map(({viewportId:e})=>e)}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const r=this._toolInstances[e];if(!r){console.warn(`'${e}' is not registered with this toolGroup (${this.id}).`);return}return r}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e,r={}){const n=Ye.tools[e],i=typeof e<"u"&&e!=="",o=this.toolOptions[e];if(!i){console.warn("Tool with configuration did not produce a toolName: ",r);return}if(!n){console.warn(`'${e}' is not registered with the library. You need to use cornerstoneTools.addTool to register it.`);return}if(o){console.warn(`'${e}' is already registered for ToolGroup ${this.id}.`);return}const{toolClass:a}=n,s={name:e,toolGroupId:this.id,configuration:r},c=new a(s);this._toolInstances[e]=c}addToolInstance(e,r,n={}){var o;let i=(o=Ye.tools[e])==null?void 0:o.toolClass;if(!i){const a=Ye.tools[r].toolClass;class s extends a{}s.toolName=e,i=s,Ye.tools[e]={toolClass:s}}this.addTool(i.toolName,n)}addViewport(e,r){if(typeof e!="string")throw new Error("viewportId must be defined and be a string");const n=this._findRenderingEngine(e,r);this.viewportsInfo.some(({viewportId:s})=>s===e)||this.viewportsInfo.push({viewportId:e,renderingEngineId:n});const i=this.getActivePrimaryMouseButtonTool();Cr.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(i);const a={toolGroupId:this.id,viewportId:e,renderingEngineId:n};ut(et,k.TOOLGROUP_VIEWPORT_ADDED,a)}removeViewports(e,r){const n=[];if(this.viewportsInfo.forEach((o,a)=>{let s=!1;o.renderingEngineId===e&&(s=!0,r&&o.viewportId!==r&&(s=!1)),s&&n.push(a)}),n.length)for(let o=n.length-1;o>=0;o--)this.viewportsInfo.splice(n[o],1);const i={toolGroupId:this.id,viewportId:r,renderingEngineId:e};ut(et,k.TOOLGROUP_VIEWPORT_REMOVED,i)}setActiveStrategy(e,r){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool configuration.`);return}n.setActiveStrategy(r)}setToolMode(e,r,n={}){if(!e){console.warn("setToolMode: toolName must be defined");return}if(r===Fn.Active){this.setToolActive(e,n||this.restoreToolOptions[e]);return}if(r===Fn.Passive){this.setToolPassive(e);return}if(r===Fn.Enabled){this.setToolEnabled(e);return}if(r===Fn.Disabled){this.setToolDisabled(e);return}console.warn("setToolMode: mode must be defined")}setToolActive(e,r={}){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}if(!n){console.warn(`'${e}' instance ${n} is not registered with this toolGroup, can't set tool mode.`);return}const i=this.toolOptions[e]?this.toolOptions[e].bindings:[],o=r.bindings?r.bindings:[],s={bindings:[...i,...o].reduce((u,d)=>{const h=d.numTouchPoints!==void 0,g=d.mouseButton!==void 0;return!u.some(p=>S3(p,d))&&(h||g)&&u.push(d),u},[]),mode:Og};this.toolOptions[e]=s,this._toolInstances[e].mode=Og;const l=Cr.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(r)&&l)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&l){const d=No.getDefinedCursor("default");this._setCursorForViewports(d)}this._hasMousePrimaryButtonBinding(r)&&(this.prevActivePrimaryToolName===null?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),typeof n.onSetToolActive=="function"&&n.onSetToolActive(),this._renderViewports();const f={toolGroupId:this.id,toolName:e,toolBindingsOptions:r};ut(et,k.TOOL_ACTIVATED,f),this._triggerToolModeChangedEvent(e,Og,r)}setToolPassive(e,r){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const i=this.getToolOptions(e),o=Object.assign({bindings:i?i.bindings:[]},i,{mode:w3}),a=Array.isArray(r==null?void 0:r.removeAllBindings)?r.removeAllBindings:this.getDefaultPrimaryBindings();o.bindings=o.bindings.filter(c=>(r==null?void 0:r.removeAllBindings)!==!0&&!a.some(l=>S3(c,l)));let s=w3;o.bindings.length!==0&&(s=Og,o.mode=s),this.toolOptions[e]=o,n.mode=s,typeof n.onSetToolPassive=="function"&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,w3)}setToolEnabled(e){const r=this._toolInstances[e];if(r===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const n={bindings:[],mode:x3};this.toolOptions[e]=n,r.mode=x3,typeof r.onSetToolEnabled=="function"&&r.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,x3)}setToolDisabled(e){const r=this._toolInstances[e];if(r===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const n={bindings:[],mode:C3};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,r.mode=C3,typeof r.onSetToolDisabled=="function"&&r.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,C3)}getToolOptions(e){const r=this.toolOptions[e];if(r!==void 0)return r}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find(e=>{const r=this.toolOptions[e];return r.mode===Og&&this._hasMousePrimaryButtonBinding(r)})}setViewportsCursorByToolName(e,r){const n=this._getCursor(e,r);this._setCursorForViewports(n)}_getCursor(e,r){let n,i;return r&&(n=`${e}.${r}`,i=th.getDefinedCursor(n,!0),i)||(n=`${e}`,i=th.getDefinedCursor(n,!0),i)||(n=e,i=th.getDefinedCursor(n,!0),i)?i:No.getDefinedCursor("default")}_setCursorForViewports(e){this.viewportsInfo.forEach(({renderingEngineId:r,viewportId:n})=>{const i=Oi(n,r);if(!i)return;const{viewport:o}=i;fF(o.element,e)})}setToolConfiguration(e,r,n){const i=this._toolInstances[e];if(i===void 0)return console.warn(`Tool ${e} not present, can't set tool configuration.`),!1;let o;return n?o=r:o=Object.assign(i.configuration,r),i.configuration=o,typeof i.onSetToolConfiguration=="function"&&i.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return fl.Primary}getDefaultPrimaryBindings(){return ope}getToolConfiguration(e,r){if(this._toolInstances[e]===void 0){console.warn(`Tool ${e} not present, can't set tool configuration.`);return}const n=Fge(this._toolInstances[e].configuration,r)||this._toolInstances[e].configuration;return vs(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}setActivePrimaryTool(e){const r=this.getCurrentActivePrimaryToolName();this.setToolDisabled(r),this.setToolActive(e,{bindings:[{mouseButton:fl.Primary}]})}getCurrentActivePrimaryToolName(){return this.currentActivePrimaryToolName}clone(e,r=null){let n=ni(e);return n?(console.debug(`ToolGroup ${e} already exists`),n):(n=new DE(e),Ye.toolGroups.push(n),r=r??(()=>!0),Object.keys(this._toolInstances).filter(r).forEach(i=>{const o=this._toolInstances[i],a=this.toolOptions[i],s=o.mode;n.addTool(i),n.setToolMode(i,s,{bindings:a.bindings??[]})}),n)}_hasMousePrimaryButtonBinding(e){var n;const r=this.getDefaultPrimaryBindings();return(n=e==null?void 0:e.bindings)==null?void 0:n.some(i=>r.some(o=>S3(i,o)))}_renderViewports(){this.viewportsInfo.forEach(({renderingEngineId:e,viewportId:r})=>{jr(e).renderViewport(r)})}_triggerToolModeChangedEvent(e,r,n){const i={toolGroupId:this.id,toolName:e,mode:r,toolBindingsOptions:n};ut(et,k.TOOL_MODE_CHANGED,i)}_findRenderingEngine(e,r){const n=Bo();if((n==null?void 0:n.length)===0)throw new Error("No rendering engines found.");if(r)return r;const i=n.filter(o=>o.getViewport(e));if(i.length===0){if(n.length===1)return n[0].id;throw new Error("No rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.")}if(i.length>1)throw new Error("Multiple rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.");return i[0].id}}function S3(t,e){return t.mouseButton!==e.mouseButton||t.numTouchPoints!==e.numTouchPoints?!1:t.modifierKey===e.modifierKey}function dF(t){if(Ye.toolGroups.some(n=>n.id===t)){console.warn(`'${t}' already exists.`);return}const r=new DE(t);return Ye.toolGroups.push(r),r}function hF(t){const e=Ye.toolGroups.findIndex(r=>r.id===t);e>-1&&Ye.toolGroups.splice(e,1)}function gF(){const t=[...Ye.toolGroups];for(const e of t)hF(e.id);Ye.toolGroups=[]}function Pr(t,e){var n;e||(e=(n=Bo().find(i=>i.getViewports().find(o=>o.id===t)))==null?void 0:n.id);const r=Ye.toolGroups.filter(i=>i.viewportsInfo.some(o=>o.renderingEngineId===e&&(!o.viewportId||o.viewportId===t)));if(r.length){if(r.length>1)throw new Error(`Multiple tool groups found for renderingEngineId: ${e} and viewportId: ${t}. You should only - have one tool group per viewport in a renderingEngine.`);return r[0]}}function ape(){return Ye.toolGroups}const spe=[Fn.Active,Fn.Passive,Fn.Enabled];function pF(t){return Ye.toolGroups.filter(({toolOptions:e})=>{const r=Object.keys(e);for(let n=0;n{a.viewportsInfo.forEach(s=>{const{renderingEngineId:c,viewportId:l}=s,{FrameOfReferenceUID:f}=Oi(l,c);t.metadata.FrameOfReferenceUID===f&&n.push(s)})});const i=k.ANNOTATION_ADDED,o={annotation:t};if(!n.length){ut(et,i,o);return}n.forEach(({renderingEngineId:a,viewportId:s})=>{o.viewportId=s,o.renderingEngineId=a,ut(et,i,o)})}function bw(t){const e=k.ANNOTATION_REMOVED;ut(et,e,t)}function cn(t,e,r=Qt.HandlesUpdated){const n=e&&_e(e),{viewportId:i,renderingEngineId:o}=n||{},a=k.ANNOTATION_MODIFIED;ut(et,a,{annotation:t,viewportId:i,renderingEngineId:o,changeType:r})}function Un(t){wF({annotation:t})}function Dw(t,e=!1){wF({annotation:t,contourHoleProcessingEnabled:e})}function wF(t){const e=k.ANNOTATION_COMPLETED;ut(et,e,t)}const cpe=Object.freeze(Object.defineProperty({__proto__:null,triggerAnnotationAddedForElement:vF,triggerAnnotationAddedForFOR:yF,triggerAnnotationCompleted:Un,triggerAnnotationModified:cn,triggerAnnotationRemoved:bw,triggerContourAnnotationCompleted:Dw},Symbol.toStringTag,{value:"Module"}));let xF;function yc(){return xF}function IE(t){xF=t}function hn(t,e){const r=yc(),n=r.getGroupKey(e);return r.getAnnotations(n,t)}function Hr(t){return yc().getAnnotation(t)}function mm(){return yc().getAllAnnotations()}function Iw(t){const{annotationUID:e,parentAnnotationUID:r}=t;if(!r)return;const n=Hr(r),i=n.childAnnotationUIDs.indexOf(e);n.childAnnotationUIDs.splice(i,1),t.parentAnnotationUID=void 0}function vm(t,e){const{annotationUID:r}=t,{annotationUID:n}=e;Iw(e),t.childAnnotationUIDs||(t.childAnnotationUIDs=[]),!t.childAnnotationUIDs.includes(n)&&(t.childAnnotationUIDs.push(n),e.parentAnnotationUID=r)}function CF(t){return t.parentAnnotationUID?Hr(t.parentAnnotationUID):void 0}function ym(t){var e;return((e=t.childAnnotationUIDs)==null?void 0:e.map(r=>Hr(r)))??[]}function ln(t,e){t.annotationUID||(t.annotationUID=Pn());const r=yc();if(e instanceof HTMLDivElement){const n=r.getGroupKey(e);r.addAnnotation(t,n),vF(t,e)}else r.addAnnotation(t,void 0),yF(t);return t.annotationUID}function lpe(t,e){const r=yc(),n=r.getGroupKey(e);return r.getNumberOfAnnotations(n,t)}function mn(t){var n;if(!t)return;const e=yc(),r=e.getAnnotation(t);r&&((n=r.childAnnotationUIDs)==null||n.forEach(i=>mn(i)),e.removeAnnotation(t),bw({annotation:r,annotationManagerUID:e.uid}))}function upe(){const t=yc(),e=t.removeAllAnnotations();for(const r of e)bw({annotation:r,annotationManagerUID:t.uid})}function fpe(t,e){const r=yc(),n=r.getGroupKey(e),i=r.removeAnnotations(n,t);for(const o of i)bw({annotation:o,annotationManagerUID:r.uid})}function SF(t){let e=t;for(;e;)e.invalidated=!0,e=e.parentAnnotationUID?Hr(e.parentAnnotationUID):void 0}const dpe=Object.freeze(Object.defineProperty({__proto__:null,addAnnotation:ln,addChildAnnotation:vm,clearParentAnnotation:Iw,getAllAnnotations:mm,getAnnotation:Hr,getAnnotationManager:yc,getAnnotations:hn,getChildAnnotations:ym,getNumberOfAnnotations:lpe,getParentAnnotation:CF,invalidateAnnotation:SF,removeAllAnnotations:upe,removeAnnotation:mn,removeAnnotations:fpe,setAnnotationManager:IE},Symbol.toStringTag,{value:"Module"}));function ki(t){const e=t.toolName;if(!e)throw new Error(`No Tool Found for the ToolClass ${t.name}`);Ye.tools[e]||(Ye.tools[e]={toolClass:t})}function hpe(t){const e=t.toolName;return!!(e&&Ye.tools[e])}function Ow(t){return!!(t&&Ye.tools[t])}function TF(t){const e=t.toolName;if(!e)throw new Error(`No tool found for: ${t.name}`);if(!Ye.tools[e]!==void 0)delete Ye.tools[e];else throw new Error(`${e} cannot be removed because it has not been added`)}function Wd(t,e){const r=e||t.currentTarget,{viewport:n}=_e(r)||{};if(!n)return;const i=mpe(t),o=ppe(t),a=gpe(r,o),s=n.canvasToWorld(a);return{page:o,client:i,canvas:a,world:s}}function gpe(t,e){const r=t.getBoundingClientRect();return[e[0]-r.left-window.pageXOffset,e[1]-r.top-window.pageYOffset]}function ppe(t){return[t.pageX,t.pageY]}function mpe(t){return[t.clientX,t.clientY]}function _F(t){const e=t.currentTarget,{viewportId:r,renderingEngineId:n}=_e(e),i=Wd(t,e),o={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},a={event:t,eventName:k.MOUSE_DOUBLE_CLICK,viewportId:r,renderingEngineId:n,camera:{},element:e,startPoints:i,lastPoints:i,currentPoints:i,deltaPoints:o};!ut(e,k.MOUSE_DOUBLE_CLICK,a)&&(t.stopImmediatePropagation(),t.preventDefault())}const Z9=k.MOUSE_MOVE;function wm(t){const e=t.currentTarget,r=_e(e);if(!r)return;const{renderingEngineId:n,viewportId:i}=r,o=Wd(t);!ut(e,Z9,{renderingEngineId:n,viewportId:i,camera:{},element:e,currentPoints:o,eventName:Z9,event:t})&&(t.stopImmediatePropagation(),t.preventDefault())}const{MOUSE_DOWN:Q9,MOUSE_DOWN_ACTIVATE:vpe,MOUSE_CLICK:ype,MOUSE_UP:wpe,MOUSE_DRAG:eI}=k,xpe=400,Cpe=150,Spe=3,Tpe={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};let on={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};const Vi={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function EF(t){if(Vi.doubleClickTimeout){if(t.buttons===Vi.mouseDownEvent.buttons)return;Vi.mouseDownEvent=t,e5();return}Vi.doubleClickTimeout=setTimeout(e5,t.buttons===1?xpe:Cpe),Vi.mouseDownEvent=t,Vi.ignoreDoubleClick=!1,on.element=t.currentTarget,on.mouseButton=t.buttons;const e=_e(on.element),{renderingEngineId:r,viewportId:n}=e;on.renderingEngineId=r,on.viewportId=n,on.preventClickTimeout=setTimeout(Epe,on.clickDelay),on.element.removeEventListener("mousemove",wm);const i=Wd(t,on.element);on.startPoints=Yu(i),on.lastPoints=Yu(i),document.addEventListener("mouseup",OE),document.addEventListener("mousemove",bF)}function _pe(t){const e=Mw(on.startPoints,on.startPoints),r={event:t,eventName:Q9,element:on.element,mouseButton:on.mouseButton,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},startPoints:on.startPoints,lastPoints:on.startPoints,currentPoints:on.startPoints,deltaPoints:e};on.lastPoints=Yu(r.lastPoints),ut(r.element,Q9,r)&&ut(r.element,vpe,r)}function bF(t){const e=_e(on.element);if(!(e!=null&&e.viewport))return;const r=Wd(t,on.element),n=MF(on.element,on.lastPoints),i=Mw(r,n);if(Vi.doubleClickTimeout)if(IF(i.canvas))e5();else return;const o={event:t,eventName:eI,mouseButton:on.mouseButton,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},element:on.element,startPoints:Yu(on.startPoints),lastPoints:Yu(n),currentPoints:r,deltaPoints:i};!ut(on.element,eI,o)&&(t.stopImmediatePropagation(),t.preventDefault()),on.lastPoints=Yu(r)}function OE(t){if(clearTimeout(on.preventClickTimeout),Vi.doubleClickTimeout)Vi.mouseUpEvent?FS():(Vi.mouseUpEvent=t,on.element.addEventListener("mousemove",DF));else{const e=on.isClickEvent?ype:wpe,r=Wd(t,on.element),n=Mw(r,on.lastPoints),i={event:t,eventName:e,mouseButton:on.mouseButton,element:on.element,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},startPoints:Yu(on.startPoints),lastPoints:Yu(on.lastPoints),currentPoints:r,deltaPoints:n};ut(i.element,e,i),FS()}document.removeEventListener("mousemove",bF)}function DF(t){const e=Wd(t,on.element),r=MF(on.element,on.lastPoints),n=Mw(e,r);IF(n.canvas)&&(e5(),wm(t))}function IF(t){return Math.abs(t[0])+Math.abs(t[1])>Spe}function Epe(){on.isClickEvent=!1}function e5(){Vi.ignoreDoubleClick=!0;const t=Vi.mouseDownEvent,e=Vi.mouseUpEvent;OF(),_pe(t),e&&OE(e)}function OF(){Vi.doubleClickTimeout&&(clearTimeout(Vi.doubleClickTimeout),Vi.doubleClickTimeout=null),Vi.mouseDownEvent=null,Vi.mouseUpEvent=null}function FS(){var t,e;document.removeEventListener("mouseup",OE),(t=on.element)==null||t.removeEventListener("mousemove",DF),(e=on.element)==null||e.addEventListener("mousemove",wm),OF(),on=JSON.parse(JSON.stringify(Tpe))}function Yu(t){return JSON.parse(JSON.stringify(t))}function MF(t,e){const{viewport:r}=_e(t)||{};if(!r)return e;const n=r.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:n}}function Mw(t,e){return!t||!e?{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}:{page:T3(t.page,e.page),client:T3(t.client,e.client),canvas:T3(t.canvas,e.canvas),world:bpe(t.world,e.world)}}function T3(t,e){return[t[0]-e[0],t[1]-e[1]]}function bpe(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function Dpe(){return on.mouseButton}function PF(t){Vi.ignoreDoubleClick?(Vi.ignoreDoubleClick=!1,t.stopImmediatePropagation(),t.preventDefault()):FS()}function RF(t){t.removeEventListener("dblclick",_F),t.removeEventListener("mousedown",EF),t.removeEventListener("mousemove",wm),t.removeEventListener("dblclick",PF,{capture:!0})}function Ipe(t){RF(t),t.addEventListener("dblclick",_F),t.addEventListener("mousedown",EF),t.addEventListener("mousemove",wm),t.addEventListener("dblclick",PF,{capture:!0})}const LF={enable:Ipe,disable:RF},Ope=2e3,Dh={mouse:0,touch:1};let tI,nI;function AF(t,e){const r=Date.now();if(t!==tI){if(r-nI<=Ope)return e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),!1;tI=t}nI=r}const NF=AF.bind(null,Dh.mouse),kF=AF.bind(null,Dh.touch);function rI(t,e,r){const n=r?NF:kF;e.forEach(function(i){t.addEventListener(i,n,{passive:!1})})}function iI(t,e,r){const n=r?NF:kF;e.forEach(function(i){t.removeEventListener(i,n)})}const VF=["mousedown","mouseup","mousemove"],FF=["touchstart","touchend"];function UF(t){iI(t,VF,Dh.mouse),iI(t,FF,Dh.touch)}function Mpe(t){UF(t),rI(t,VF,Dh.mouse),rI(t,FF,Dh.touch)}const BF={enable:Mpe,disable:UF};function Pw(t,e){const r=e||t.currentTarget,n=t.type==="touchend"?t.changedTouches:t.touches;return Object.keys(n).map(i=>{const o=Lpe(n[i]),a=Rpe(n[i]),s=Ppe(r,a),{viewport:c}=_e(r),l=c.canvasToWorld(s);return{page:a,client:o,canvas:s,world:l,touch:{identifier:i,radiusX:n[i].radiusX,radiusY:n[i].radiusY,force:n[i].force,rotationAngle:n[i].rotationAngle}}})}function Ppe(t,e){const r=t.getBoundingClientRect();return[e[0]-r.left-window.pageXOffset,e[1]-r.top-window.pageYOffset]}function Rpe(t){return[t.pageX,t.pageY]}function Lpe(t){return[t.clientX,t.clientY]}function t5(t,e){const r=O1(t),n=O1(e);return{page:_3(r.page,n.page),client:_3(r.client,n.client),canvas:_3(r.canvas,n.canvas),world:Npe(r.world,n.world)}}function ME(t,e){const r=O1(t),n=O1(e);return{page:nh(r.page,n.page),client:nh(r.client,n.client),canvas:nh(r.canvas,n.canvas),world:GF(r.world,n.world)}}function Ape(t,e){}function n5(t,e){const r=oI(t),n=oI(e);return{page:r.page-n.page,client:r.client-n.client,canvas:r.canvas-n.canvas,world:r.world-n.world}}function il(t){return JSON.parse(JSON.stringify(t))}function US(t){return JSON.parse(JSON.stringify(t))}function O1(t){return t.reduce((e,r)=>({page:[e.page[0]+r.page[0]/t.length,e.page[1]+r.page[1]/t.length],client:[e.client[0]+r.client[0]/t.length,e.client[1]+r.client[1]/t.length],canvas:[e.canvas[0]+r.canvas[0]/t.length,e.canvas[1]+r.canvas[1]/t.length],world:[e.world[0]+r.world[0]/t.length,e.world[1]+r.world[1]/t.length,e.world[2]+r.world[2]/t.length]}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function uc(t){return t.reduce((e,r)=>({page:[e.page[0]+r.page[0]/t.length,e.page[1]+r.page[1]/t.length],client:[e.client[0]+r.client[0]/t.length,e.client[1]+r.client[1]/t.length],canvas:[e.canvas[0]+r.canvas[0]/t.length,e.canvas[1]+r.canvas[1]/t.length],world:[e.world[0]+r.world[0]/t.length,e.world[1]+r.world[1]/t.length,e.world[2]+r.world[2]/t.length],touch:{identifier:null,radiusX:e.touch.radiusX+r.touch.radiusX/t.length,radiusY:e.touch.radiusY+r.touch.radiusY/t.length,force:e.touch.force+r.touch.force/t.length,rotationAngle:e.touch.rotationAngle+r.touch.rotationAngle/t.length}}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0],touch:{identifier:null,radiusX:0,radiusY:0,force:0,rotationAngle:0}})}function _3(t,e){return[t[0]-e[0],t[1]-e[1]]}function Npe(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function oI(t){const e=[];for(let r=0;r({page:r.page+n.page/e.length,client:r.client+n.client/e.length,canvas:r.canvas+n.canvas/e.length,world:r.world+n.world/e.length}),{page:0,client:0,canvas:0,world:0})}function nh(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2))}function GF(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2))}const kpe=Object.freeze(Object.defineProperty({__proto__:null,copyPoints:US,copyPointsList:il,getDeltaDistance:ME,getDeltaDistanceBetweenIPoints:n5,getDeltaPoints:t5,getDeltaRotation:Ape,getMeanPoints:O1,getMeanTouchPoints:uc},Symbol.toStringTag,{value:"Module"}));Cr.getRuntimeSettings();const{TOUCH_START:aI,TOUCH_START_ACTIVATE:Vpe,TOUCH_PRESS:sI,TOUCH_DRAG:cI,TOUCH_END:lI,TOUCH_TAP:uI,TOUCH_SWIPE:E3}=k,M1={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},r5={page:0,client:0,canvas:0,world:0},WF={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...M1,touch:null}],lastPointsList:[{...M1,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:r5,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},zF={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...M1,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let Ut=JSON.parse(JSON.stringify(WF)),gi=JSON.parse(JSON.stringify(zF));function sf(t,e,r){return ut(t,e,r)}function $F(t){Ut.element=t.currentTarget;const e=_e(Ut.element),{renderingEngineId:r,viewportId:n}=e;Ut.renderingEngineId=r,Ut.viewportId=n,!Ut.isTouchStart&&(clearTimeout(Ut.pressTimeout),Ut.pressTimeout=setTimeout(()=>Fpe(t),Ut.pressDelay),Upe(t),document.addEventListener("touchmove",jF),document.addEventListener("touchend",HF))}function Fpe(t){if(Ut.accumulatedDistance.canvas>Ut.pressMaxDistance)return;const r={event:t,eventName:sI,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,startPointsList:il(Ut.startPointsList),lastPointsList:il(Ut.lastPointsList),startPoints:US(uc(Ut.startPointsList)),lastPoints:US(uc(Ut.lastPointsList))};sf(r.element,sI,r)}function Upe(t){Ut.isTouchStart=!0,Ut.startTime=new Date;const e=Pw(t,Ut.element),r=uc(e),n=M1,i=r5,o={event:t,eventName:aI,element:Ut.element,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},startPointsList:e,lastPointsList:e,currentPointsList:e,startPoints:r,lastPoints:r,currentPoints:r,deltaPoints:n,deltaDistance:i};Ut.startPointsList=il(o.startPointsList),Ut.lastPointsList=il(o.lastPointsList),sf(o.element,aI,o)&&sf(o.element,Vpe,o)}function jF(t){const e=Pw(t,Ut.element),r=KF(Ut.element,Ut.lastPointsList),n=e.length===r.length?t5(e,r):M1,i=e.length===r.length?n5(e,r):r5,o=e.length===r.length?ME(e,Ut.lastPointsList):r5;Ut.accumulatedDistance={page:Ut.accumulatedDistance.page+o.page,client:Ut.accumulatedDistance.client+o.client,canvas:Ut.accumulatedDistance.canvas+o.canvas,world:Ut.accumulatedDistance.world+o.world};const a={event:t,eventName:cI,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,startPoints:uc(Ut.startPointsList),lastPoints:uc(r),currentPoints:uc(e),startPointsList:il(Ut.startPointsList),lastPointsList:il(r),currentPointsList:e,deltaPoints:n,deltaDistance:i};sf(Ut.element,cI,a),Gpe(t,n),Ut.lastPointsList=il(e)}function HF(t){clearTimeout(Ut.pressTimeout);const e=Pw(t,Ut.element),r=KF(Ut.element,Ut.lastPointsList),n=e.length===r.length?t5(e,r):t5(e,e),i=e.length===r.length?n5(e,r):n5(e,e),o={event:t,eventName:lI,element:Ut.element,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},startPointsList:il(Ut.startPointsList),lastPointsList:il(r),currentPointsList:e,startPoints:uc(Ut.startPointsList),lastPoints:uc(r),currentPoints:uc(e),deltaPoints:n,deltaDistance:i};sf(o.element,lI,o),Bpe(t),Ut=JSON.parse(JSON.stringify(WF)),document.removeEventListener("touchmove",jF),document.removeEventListener("touchend",HF)}function Bpe(t){const e=new Date().getTime(),r=Ut.startTime.getTime();if(e-r>gi.tapToleranceMs||(gi.taps===0&&(gi.element=Ut.element,gi.renderingEngineId=Ut.renderingEngineId,gi.viewportId=Ut.viewportId,gi.startPointsList=Ut.startPointsList),gi.taps>0&&!(gi.element==Ut.element&&gi.renderingEngineId==Ut.renderingEngineId&&gi.viewportId==Ut.viewportId)))return;const n=Pw(t,gi.element);ME(n,gi.startPointsList).canvas>gi.tapMaxDistance||(clearTimeout(gi.tapTimeout),gi.taps+=1,gi.tapTimeout=setTimeout(()=>{const o={event:t,eventName:uI,element:gi.element,renderingEngineId:gi.renderingEngineId,viewportId:gi.viewportId,camera:{},currentPointsList:n,currentPoints:uc(n),taps:gi.taps};sf(o.element,uI,o),gi=JSON.parse(JSON.stringify(zF))},gi.tapToleranceMs))}function Gpe(t,e){const r=new Date().getTime(),n=Ut.startTime.getTime();if(Ut.swiped||r-n>Ut.swipeToleranceMs)return;const[i,o]=e.canvas,a={event:t,eventName:E3,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,swipe:null};Math.abs(i)>Ut.swipeDistanceThreshold&&(a.swipe=i>0?od.RIGHT:od.LEFT,sf(a.element,E3,a),Ut.swiped=!0),Math.abs(o)>Ut.swipeDistanceThreshold&&(a.swipe=o>0?od.DOWN:od.UP,sf(a.element,E3,a),Ut.swiped=!0)}function KF(t,e){const{viewport:r}=_e(t);return e.map(n=>{const i=r.canvasToWorld(n.canvas);return{page:n.page,client:n.client,canvas:n.canvas,world:i,touch:n.touch}})}function qF(t){BF.disable(t),t.removeEventListener("touchstart",$F)}function Wpe(t){qF(t),BF.enable(t),t.addEventListener("touchstart",$F,{passive:!1})}const XF={enable:Wpe,disable:qF},fI=10,dI=40,hI=800;function zpe(t){let e=0,r=0,n=0,i=0;return"detail"in t&&(r=t.detail),"wheelDelta"in t&&(r=-t.wheelDelta/120),"wheelDeltaY"in t&&(r=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),n=e*fI,i=r*fI,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(n=t.deltaX),(n||i)&&t.deltaMode&&(t.deltaMode===1?(n*=dI,i*=dI):(n*=hI,i*=hI)),n&&!e&&(e=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:e,spinY:r,pixelX:n,pixelY:i}}function YF(t){const e=t.currentTarget,r=_e(e),{renderingEngineId:n,viewportId:i}=r;if(t.deltaY>-1&&t.deltaY<1)return;t.preventDefault();const{spinX:o,spinY:a,pixelX:s,pixelY:c}=zpe(t),l=a<0?-1:1,f={event:t,eventName:k.MOUSE_WHEEL,renderingEngineId:n,viewportId:i,element:e,camera:{},detail:t,wheel:{spinX:o,spinY:a,pixelX:s,pixelY:c,direction:l},points:Wd(t)};ut(e,k.MOUSE_WHEEL,f)}function $pe(t){JF(t),t.addEventListener("wheel",YF,{passive:!1})}function JF(t){t.removeEventListener("wheel",YF)}const ZF={enable:$pe,disable:JF},jpe={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let bi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Rw(t){bi.element=t.currentTarget;const e=_e(bi.element),{renderingEngineId:r,viewportId:n}=e;bi.renderingEngineId=r,bi.viewportId=n,bi.key=t.key,bi.keyCode=t.keyCode,t.preventDefault();const i={renderingEngineId:bi.renderingEngineId,viewportId:bi.viewportId,element:bi.element,key:bi.key,keyCode:bi.keyCode};ut(i.element,k.KEY_DOWN,i),document.addEventListener("keyup",QF),document.addEventListener("visibilitychange",PE),bi.element.removeEventListener("keydown",Rw)}function PE(){document.removeEventListener("visibilitychange",PE),document.visibilityState==="hidden"&&eU()}function QF(t){const e={renderingEngineId:bi.renderingEngineId,viewportId:bi.viewportId,element:bi.element,key:bi.key,keyCode:bi.keyCode};document.removeEventListener("keyup",QF),document.removeEventListener("visibilitychange",PE),bi.element.addEventListener("keydown",Rw),bi=structuredClone(jpe),ut(e.element,k.KEY_UP,e)}function Hpe(){return bi.keyCode}function eU(){bi.keyCode=void 0}function Kpe(t){tU(t),t.addEventListener("keydown",Rw)}function tU(t){t.removeEventListener("keydown",Rw)}const Xh={enable:Kpe,disable:tU,getModifierKey:Hpe},{EPSILON:n0}=wf;function nU(t,e,r=!1){var f;let n=1/0,i=r?-1/0:0,o=1/0,a=r?-1/0:0,s=1/0,c=r?-1/0:0;const l=((f=t[0])==null?void 0:f.length)===3;for(let u=0;uJSON.stringify(t)===JSON.stringify(e);function RE(t,e,r,n){const i=r[0]/2,o=r[1]/2,a=r[2]/2,s=new Array(8);s[0]=zr(t,[n[0]-i,n[1]-o,n[2]-a]);const c=[[1,-1,-1],[-1,1,-1],[1,1,-1],[-1,-1,1],[1,-1,1],[-1,1,1],[1,1,1]];for(let l=0;l<7;l++){const[f,u,d]=c[l];s[l+1]=zr(t,[n[0]+f*i,n[1]+u*o,n[2]+d*a])}return cf(s,e)}function iU(t,e){const{spacing:r}=t,n=t.voxelManager.getScalarDataLength(),i=[];let o=0;for(let a=0;a{const e=LE.get(t);e&&(e.isDirty=!0)},Ype=t=>{const e=LE.get(t);return e&&!e.isDirty?e.indices:null},Jpe=(t,e)=>{LE.set(t,{indices:e,isDirty:!1})};function To(t,e,r){const n={segmentationId:t,modifiedSlicesToUse:e,segmentIndex:r};Xpe(t),ut(et,k.SEGMENTATION_DATA_MODIFIED,n)}function es(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_MODIFIED,e)}function AE(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_REMOVED,e)}function qc(t,e,r){const n={segmentationId:e,type:r,viewportId:t};ut(et,k.SEGMENTATION_REPRESENTATION_MODIFIED,n)}function BS(t,e,r){const n={viewportId:t,segmentationId:e,type:r};ut(et,k.SEGMENTATION_REPRESENTATION_REMOVED,n)}const Zpe=Object.freeze(Object.defineProperty({__proto__:null,triggerSegmentationDataModified:To,triggerSegmentationModified:es,triggerSegmentationRemoved:AE,triggerSegmentationRepresentationModified:qc,triggerSegmentationRepresentationRemoved:BS},Symbol.toStringTag,{value:"Module"})),Qpe={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidth:1,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDash:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3};function e1e(){return Qpe}const t1e={renderOutline:!0,renderOutlineInactive:!0,outlineWidth:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.5,fillAlphaInactive:.4,outlineOpacity:1,outlineOpacityInactive:.85};function n1e(){return t1e}class r1e{constructor(){this.config={global:{},segmentations:{},viewportsStyle:{}}}setStyle(e,r){const{viewportId:n,segmentationId:i,type:o,segmentIndex:a}=e,s=this.getStyle(e);let c;if(!n&&!i?c={...s,...r}:c=this.copyActiveToInactiveIfNotProvided({...s,...r},o),!o)throw new Error("Type is required to set a style");if(n){this.config.viewportsStyle[n]||(this.config.viewportsStyle[n]={renderInactiveSegmentations:!1,representations:{}});const l=this.config.viewportsStyle[n].representations;if(i){l[i]||(l[i]={}),l[i][o]||(l[i][o]={});const f=l[i][o];a!==void 0?(f.perSegment||(f.perSegment={}),f.perSegment[a]=c):f.allSegments=c}else{const f="__allSegmentations__";l[f]||(l[f]={}),l[f][o]||(l[f][o]={}),l[f][o].allSegments=c}}else if(i){this.config.segmentations[i]||(this.config.segmentations[i]={}),this.config.segmentations[i][o]||(this.config.segmentations[i][o]={});const l=this.config.segmentations[i][o];a!==void 0?(l.perSegment||(l.perSegment={}),l.perSegment[a]=c):l.allSegments=c}else this.config.global[o]=c}copyActiveToInactiveIfNotProvided(e,r){const n={...e};if(r===Vt.Labelmap){const i=n;i.renderOutlineInactive??(i.renderOutlineInactive=i.renderOutline),i.outlineWidthInactive??(i.outlineWidthInactive=i.outlineWidth),i.renderFillInactive??(i.renderFillInactive=i.renderFill),i.fillAlphaInactive??(i.fillAlphaInactive=i.fillAlpha),i.outlineOpacityInactive??(i.outlineOpacityInactive=i.outlineOpacity)}else if(r===Vt.Contour){const i=n;i.outlineWidthInactive??(i.outlineWidthInactive=i.outlineWidth),i.outlineOpacityInactive??(i.outlineOpacityInactive=i.outlineOpacity),i.outlineDashInactive??(i.outlineDashInactive=i.outlineDash),i.renderOutlineInactive??(i.renderOutlineInactive=i.renderOutline),i.renderFillInactive??(i.renderFillInactive=i.renderFill),i.fillAlphaInactive??(i.fillAlphaInactive=i.fillAlpha)}return n}getStyle(e){var s,c,l,f,u;const{viewportId:r,segmentationId:n,type:i,segmentIndex:o}=e;let a=this.getDefaultStyle(i);if(this.config.global[i]&&(a={...a,...this.config.global[i]}),(s=this.config.segmentations[n])!=null&&s[i]&&(a={...a,...this.config.segmentations[n][i].allSegments},o!==void 0&&((c=this.config.segmentations[n][i].perSegment)!=null&&c[o])&&(a={...a,...this.config.segmentations[n][i].perSegment[o]})),r&&this.config.viewportsStyle[r]){this.config.viewportsStyle[r].renderInactiveSegmentations;const d="__allSegmentations__";(l=this.config.viewportsStyle[r].representations[d])!=null&&l[i]&&(a={...a,...this.config.viewportsStyle[r].representations[d][i].allSegments}),n&&((f=this.config.viewportsStyle[r].representations[n])!=null&&f[i])&&(a={...a,...this.config.viewportsStyle[r].representations[n][i].allSegments},o!==void 0&&((u=this.config.viewportsStyle[r].representations[n][i].perSegment)!=null&&u[o])&&(a={...a,...this.config.viewportsStyle[r].representations[n][i].perSegment[o]}))}return a}getRenderInactiveSegmentations(e){var r;return(r=this.config.viewportsStyle[e])==null?void 0:r.renderInactiveSegmentations}setRenderInactiveSegmentations(e,r){this.config.viewportsStyle[e]||(this.config.viewportsStyle[e]={renderInactiveSegmentations:!1,representations:{}}),this.config.viewportsStyle[e].renderInactiveSegmentations=r}getDefaultStyle(e){switch(e){case Vt.Labelmap:return n1e();case Vt.Contour:return e1e();case Vt.Surface:return{};default:throw new Error(`Unknown representation type: ${e}`)}}clearSegmentationStyle(e){this.config.segmentations[e]&&delete this.config.segmentations[e]}clearAllSegmentationStyles(){this.config.segmentations={}}clearViewportStyle(e){this.config.viewportsStyle[e]&&delete this.config.viewportsStyle[e]}clearAllViewportStyles(){for(const e in this.config.viewportsStyle){const n=this.config.viewportsStyle[e].renderInactiveSegmentations;this.config.viewportsStyle[e]={renderInactiveSegmentations:n,representations:{}}}}resetToGlobalStyle(){this.clearAllSegmentationStyles(),this.clearAllViewportStyles()}hasCustomStyle(e){const{type:r}=e,n=this.getStyle(e),i=this.getDefaultStyle(r);return!TV(n,i)}}const Ha=new r1e;function i1e(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_ADDED,e)}const gI={colorLUT:[],segmentations:[],viewportSegRepresentations:{}};class o1e{constructor(e){this._stackLabelmapImageIdReferenceMap=new Map,this._labelmapImageIdReferenceMap=new Map,e||(e=Pn()),this.state=Object.freeze(vs(gI)),this.uid=e}getState(){return this.state}updateState(e){const r=vs(this.state);e(r),this.state=Object.freeze(r)}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this._stackLabelmapImageIdReferenceMap.clear(),this._labelmapImageIdReferenceMap.clear(),this.state=Object.freeze(vs(gI))}getSegmentation(e){return this.state.segmentations.find(r=>r.segmentationId===e)}updateSegmentation(e,r){this.updateState(n=>{const i=n.segmentations.find(o=>o.segmentationId===e);if(!i){console.warn(`Segmentation with id ${e} not found. Update aborted.`);return}Object.assign(i,r)}),es(e)}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error(`Segmentation with id ${e.segmentationId} already exists`);this.updateState(r=>{const n=vs(e);if(n.representationData.Labelmap&&"volumeId"in n.representationData.Labelmap&&!("imageIds"in n.representationData.Labelmap)){const i=this.getLabelmapImageIds(n.representationData);n.representationData.Labelmap.imageIds=i}r.segmentations.push(n)}),i1e(e.segmentationId)}removeSegmentation(e){this.updateState(r=>{const n=r.segmentations.filter(i=>i.segmentationId!==e);r.segmentations.splice(0,r.segmentations.length,...n)}),AE(e)}addSegmentationRepresentation(e,r,n,i){if(!Wn(e))return;if(this.getSegmentationRepresentations(e,{type:n,segmentationId:r}).length>0){console.debug("A segmentation representation of type",n,"already exists in viewport",e,"for segmentation",r);return}this.updateState(s=>{s.viewportSegRepresentations[e]||(s.viewportSegRepresentations[e]=[],Ha.setRenderInactiveSegmentations(e,!0)),n!==Vt.Labelmap?this.addDefaultSegmentationRepresentation(s,e,r,n,i):this.addLabelmapRepresentation(s,e,r,i)}),qc(e,r,n)}addDefaultSegmentationRepresentation(e,r,n,i,o){const a=e.segmentations.find(c=>c.segmentationId===n);if(!a)return;const s={};Object.keys(a.segments).forEach(c=>{s[Number(c)]={visible:!0}}),e.viewportSegRepresentations[r].push({segmentationId:n,type:i,active:!0,visible:!0,colorLUTIndex:(o==null?void 0:o.colorLUTIndex)||0,segments:s,config:{...pI(i),...o}}),this._setActiveSegmentation(e,r,n)}addLabelmapRepresentation(e,r,n,i=pI(Vt.Labelmap)){if(!Wn(r))return;const a=this.getSegmentation(n);if(!a)return;const{representationData:s}=a;if(!s.Labelmap)return this.addDefaultSegmentationRepresentation(e,r,n,Vt.Labelmap,i);this.processLabelmapRepresentationAddition(r,n),this.addDefaultSegmentationRepresentation(e,r,n,Vt.Labelmap,i)}async processLabelmapRepresentationAddition(e,r){const n=Wn(e);if(!n)return;const i=this.getSegmentation(r);if(!i)return;const o=n.viewport instanceof Tr,{representationData:a}=i,s="volumeId"in a.Labelmap;n.viewport,!o&&!s&&this.updateLabelmapSegmentationImageReferences(e,i.segmentationId)}_updateLabelmapSegmentationReferences(e,r,n,i){const o=r.getCurrentImageId();let a=!1;for(const s of n)r.isReferenceViewable({referencedImageId:s},{asOverlay:!0})&&(a=!0,this._stackLabelmapImageIdReferenceMap.get(e).set(o,s),this._updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:o,labelmapImageId:s}));return i&&i(r,e,n),a?this._stackLabelmapImageIdReferenceMap.get(e).get(o):void 0}updateLabelmapSegmentationImageReferences(e,r){const n=this.getSegmentation(r);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(r)||this._stackLabelmapImageIdReferenceMap.set(r,new Map);const{representationData:i}=n;if(!i.Labelmap)return;const o=this.getLabelmapImageIds(i),s=Wn(e).viewport;return this._updateLabelmapSegmentationReferences(r,s,o,null)}_updateAllLabelmapSegmentationImageReferences(e,r){const n=this.getSegmentation(r);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(r)||this._stackLabelmapImageIdReferenceMap.set(r,new Map);const{representationData:i}=n;if(!i.Labelmap)return;const o=this.getLabelmapImageIds(i),s=Wn(e).viewport;this._updateLabelmapSegmentationReferences(r,s,o,(c,l,f)=>{c.getImageIds().forEach((d,h)=>{for(const g of f)c.isReferenceViewable({referencedImageId:g,sliceIndex:h},{asOverlay:!0,withNavigation:!0})&&(this._stackLabelmapImageIdReferenceMap.get(l).set(d,g),this._updateLabelmapImageIdReferenceMap({segmentationId:l,referenceImageId:d,labelmapImageId:g}))})})}getLabelmapImageIds(e){const r=e.Labelmap;let n;if(r.imageIds)n=r.imageIds;else if(!n&&r.volumeId){const i=r.volumeId;n=$e.getVolume(i).imageIds}return n}getLabelmapImageIdsForImageId(e,r){const n=this._generateMapKey({segmentationId:r,referenceImageId:e});return this._labelmapImageIdReferenceMap.get(n)}getCurrentLabelmapImageIdsForViewport(e,r){const n=Wn(e);if(!n)return;const o=n.viewport.getCurrentImageId();return this.getLabelmapImageIdsForImageId(o,r)}getCurrentLabelmapImageIdForViewport(e,r){const n=Wn(e);if(!n||!this._stackLabelmapImageIdReferenceMap.has(r))return;const o=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(r).get(o)}getStackSegmentationImageIdsForViewport(e,r){if(!this.getSegmentation(r))return[];this._updateAllLabelmapSegmentationImageReferences(e,r);const{viewport:i}=Wn(e),o=i.getImageIds(),a=this._stackLabelmapImageIdReferenceMap.get(r);return o.map(s=>a.get(s))}removeSegmentationRepresentationsInternal(e,r){const n=[];return this.updateState(i=>{if(!i.viewportSegRepresentations[e])return;const o=i.viewportSegRepresentations[e];let a=!1;if(!r||Object.values(r).every(s=>s===void 0))n.push(...o),delete i.viewportSegRepresentations[e];else{const{segmentationId:s,type:c}=r;i.viewportSegRepresentations[e]=o.filter(l=>{const f=s&&c&&l.segmentationId===s&&l.type===c||s&&!c&&l.segmentationId===s||!s&&c&&l.type===c;return f&&(n.push(l),l.active&&(a=!0)),!f}),i.viewportSegRepresentations[e].length===0?delete i.viewportSegRepresentations[e]:a&&(i.viewportSegRepresentations[e][0].active=!0)}}),n}removeSegmentationRepresentations(e,r){const n=this.removeSegmentationRepresentationsInternal(e,r);n.forEach(o=>{BS(e,o.segmentationId,o.type)});const i=this.getSegmentationRepresentations(e);return i.length>0&&i[0].active&&qc(e,i[0].segmentationId,i[0].type),n}removeSegmentationRepresentation(e,r,n){const i=this.removeSegmentationRepresentationsInternal(e,r);return n||i.forEach(({segmentationId:o,type:a})=>{BS(e,o,a)}),i}_updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:r,labelmapImageId:n}){const i=this._generateMapKey({segmentationId:e,referenceImageId:r});if(!this._labelmapImageIdReferenceMap.has(i)){this._labelmapImageIdReferenceMap.set(i,[n]);return}const o=this._labelmapImageIdReferenceMap.get(i),a=Array.from(new Set([...o,n]));this._labelmapImageIdReferenceMap.set(i,a)}_setActiveSegmentation(e,r,n){const i=e.viewportSegRepresentations[r];i&&i.forEach(o=>{o.active=o.segmentationId===n})}setActiveSegmentation(e,r){this.updateState(n=>{const i=n.viewportSegRepresentations[e];i&&i.forEach(o=>{o.active=o.segmentationId===r})}),qc(e,r)}getActiveSegmentation(e){if(!this.state.viewportSegRepresentations[e])return;const r=this.state.viewportSegRepresentations[e].find(n=>n.active);if(r)return this.getSegmentation(r.segmentationId)}getSegmentationRepresentations(e,r={}){const n=this.state.viewportSegRepresentations[e];return n?!r.type&&!r.segmentationId?n:n.filter(i=>{const o=r.type?i.type===r.type:!0,a=r.segmentationId?i.segmentationId===r.segmentationId:!0;return o&&a}):[]}getSegmentationRepresentation(e,r){return this.getSegmentationRepresentations(e,r)[0]}getSegmentationRepresentationVisibility(e,r){const n=this.getSegmentationRepresentation(e,r);return n==null?void 0:n.visible}setSegmentationRepresentationVisibility(e,r,n){this.updateState(i=>{const o=this.getSegmentationRepresentations(e,r);o&&o.forEach(a=>{a.visible=n,Object.entries(a.segments).forEach(([s,c])=>{c.visible=n})})}),qc(e,r.segmentationId,r.type)}addColorLUT(e,r){this.updateState(n=>{n.colorLUT[r]&&console.warn("Color LUT table already exists, overwriting"),n.colorLUT[r]=vs(e)})}removeColorLUT(e){this.updateState(r=>{delete r.colorLUT[e]})}_getStackIdForImageIds(e){return e.map(r=>r.slice(-Math.round(r.length*.15))).join("_")}getAllViewportSegmentationRepresentations(){return Object.entries(this.state.viewportSegRepresentations).map(([e,r])=>({viewportId:e,representations:r}))}getSegmentationRepresentationsBySegmentationId(e){const r=[];return Object.entries(this.state.viewportSegRepresentations).forEach(([n,i])=>{const o=i.filter(a=>a.segmentationId===e);o.length>0&&r.push({viewportId:n,representations:o})}),r}_generateMapKey({segmentationId:e,referenceImageId:r}){return`${e}-${r}`}}async function oU({imageIds:t,options:e}){const r=t,n=(e==null?void 0:e.volumeId)||Pn();return await Y4(n,r),{volumeId:n}}async function a1e({segmentationId:t,options:e}){const r=rr.getSegmentation(t),n=r.representationData.Labelmap,{volumeId:i}=await oU({imageIds:n.imageIds,options:e});r.representationData.Labelmap.volumeId=i}function pI(t){const e=Ql.newInstance(),r=Ed.newInstance();return r.addPoint(0,0),t===Vt.Labelmap?{cfun:e,ofun:r}:{}}const rr=new o1e("DEFAULT");function Ea(t,e={}){return rr.getSegmentationRepresentations(t,e)}function NE(t,e){const r=rr;if(!e.segmentationId||!e.type)throw new Error("getSegmentationRepresentation: No segmentationId or type provided, you need to provide at least one of them");const n=r.getSegmentationRepresentations(t,e);return n==null?void 0:n[0]}function aU(t){return rr.getSegmentationRepresentationsBySegmentationId(t)}function s1e(t,e){const r=_e(t),{viewport:n}=r,o=n.getActors().filter(a=>a.representationUID&&typeof a.representationUID=="string"&&a.representationUID.startsWith(e));n.removeActors(o.map(a=>a.uid))}function sU(t,e,r){const n=Wn(t);if(!n)return;const{renderingEngine:i,viewport:o}=n;if(!i||!o)return;const s=o.getActors().filter(r);return s.length>0?s[0]:void 0}function c1e(t,e){const r=Wn(t);if(!r)return;const{renderingEngine:n,viewport:i}=r;if(!n||!i)return;const a=i.getActors().filter(e);return a.length>0?a:void 0}function l1e(t,e){const r=Lw(t,e);return r==null?void 0:r.uid}function Tp(t,e){return c1e(t,r=>{var n;return(n=r.representationUID)==null?void 0:n.startsWith(`${e}-${Vt.Labelmap}`)})}function Lw(t,e){return sU(t,e,r=>{var n;return(n=r.representationUID)==null?void 0:n.startsWith(`${e}-${Vt.Labelmap}`)})}function u1e(t,e,r){return sU(t,e,n=>n.representationUID===cU(e,r))}function cU(t,e){return`${t}-${Vt.Surface}-${e}`}function f1e(t,e,r){const n=_e(t),{viewport:i}=n,o=u1e(i.id,r,e.segmentIndex),a=o==null?void 0:o.actor,s=e.visible;if(a){if(a.setVisibility(s),!s)return;const y=a.getMapper(),m=y.getInputData(),w=e.points,x=e.polys,C=m.getPoints().getData(),S=m.getPolys().getData();if(w.length===C.length&&x.length===S.length)return;const T=Br.newInstance();T.getPoints().setData(w,3);const _=_d.newInstance({values:Float32Array.from(x)});T.setPolys(_),y.setInputData(T),y.modified(),i.getRenderer().resetCameraClippingRange();return}const c=e.points,l=e.polys,f=e.color,u=Br.newInstance();u.getPoints().setData(c,3);const d=_d.newInstance({values:Float32Array.from(l)});u.setPolys(d);const h=wa.newInstance({});let g;h.setInputData(u);const p=dc.newInstance();p.setMapper(h),p.getProperty().setColor(f[0]/255,f[1]/255,f[2]/255),p.getProperty().setLineWidth(2);const v=cU(r,e.segmentIndex);i.addActor({uid:Pn(),actor:p,clippingFilter:g,representationUID:v}),i.resetCamera(),i.getRenderer().resetCameraClippingRange(),i.render()}function Vn(t){return rr.getSegmentation(t)}function xm(t){return rr.getColorLUT(t)}let i5={};function d1e(){return i5}function h1e(t){i5=t}let mI=!1;function jl(){var e;if(!((e=i5.addons)!=null&&e.polySeg))return console.warn("PolySeg add-on not configured. This will prevent automatic conversion between segmentation representations (labelmap, contour, surface). To enable these features, install @cornerstonejs/polymorphic-segmentation and register it during initialization: cornerstoneTools.init({ addons: { polySeg } })."),null;const t=i5.addons.polySeg;return mI||(t.init(),mI=!0),t}function kE({segmentationId:t,type:e,data:r}){const n=Vn(t);if(!n)throw new Error(`Segmentation ${t} not found`);switch(n.representationData[e]&&console.warn(`Representation data of type ${e} already exists for segmentation ${t}, overwriting it.`),e){case Vt.Labelmap:r&&(n.representationData[e]=r);break;case Vt.Contour:r&&(n.representationData[e]=r);break;case Vt.Surface:r&&(n.representationData[e]=r);break;default:throw new Error(`Invalid representation type ${e}`)}}function VE(t){const e=typeof t;return t!==null&&(e==="object"||e==="function")}function Yh(t,e,r){let n,i,o,a,s,c,l=0,f=!1,u=!1,d=!0;const h=!e&&e!==0&&typeof window.requestAnimationFrame=="function";if(typeof t!="function")throw new TypeError("Expected a function");e=Number(e)||0,VE(r)&&(f=!!r.leading,u="maxWait"in r,o=u?Math.max(Number(r.maxWait)||0,e):o,d="trailing"in r?!!r.trailing:d);function g(b){const D=n,I=i;return n=i=void 0,l=b,a=t.apply(I,D),a}function p(b,D){return h?window.requestAnimationFrame(b):setTimeout(b,D)}function v(b){if(h)return window.cancelAnimationFrame(b);clearTimeout(b)}function y(b){return l=b,s=p(x,e),f?g(b):a}function m(b){const D=b-c,I=b-l,P=e-D;return u?Math.min(P,o-I):P}function w(b){const D=b-c,I=b-l;return c===void 0||D>=e||D<0||u&&I>=o}function x(){const b=Date.now();if(w(b))return C(b);s=p(x,m(b))}function C(b){return s=void 0,d&&n?g(b):(n=i=void 0,a)}function S(){s!==void 0&&v(s),l=0,n=c=i=s=void 0}function T(){return s===void 0?a:C(Date.now())}function _(){return s!==void 0}function E(...b){const D=Date.now(),I=w(D);if(n=b,i=this,c=D,I){if(s===void 0)return y(c);if(u)return s=p(x,e),g(c)}return s===void 0&&(s=p(x,e)),a}return E.cancel=S,E.flush=T,E.pending=_,E}const A2=new Map;async function FE(t,e,r,n,i){const o=await r();kE({segmentationId:t,type:e,data:o}),i==null||i(),A2.has(t)||A2.set(t,[]);const a=A2.get(t);return a.includes(e)||a.push(e),g1e(n),es(t),o}function g1e(t){const e=r=>{p1e(r,t)};t._debouncedUpdateFunction=e,et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction),et.addEventListener(k.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction)}const p1e=Yh((t,e)=>{const r=t.detail.segmentationId,n=A2.get(r);!n||!n.length||(e(r),n.length&&es(r))},300);function UE(t,e){const r=NE(t,e);return r?Object.entries(r.segments).reduce((i,[o,a])=>(a.visible||i.add(Number(o)),i),new Set):new Set}function m1e(t,e,r=!1){const n=Wn(t);if(!n)return;const{viewport:i}=n;s1e(i.element,e),r&&i.render()}async function v1e(t,e){var l;const{segmentationId:r,type:n}=e,i=Vn(r);if(!i)return;let o=i.representationData[Vt.Surface];if(!o&&((l=jl())!=null&&l.canComputeRequestedRepresentation(r,Vt.Surface))){const f=jl();if(o=await FE(r,Vt.Surface,()=>f.computeSurfaceData(r,{viewport:t}),()=>f.updateSurfaceData(r,{viewport:t})),!o)throw new Error(`No Surface data found for segmentationId ${r} even we tried to compute it`)}else!o&&!jl()&&console.debug(`No surface data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to surface. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!o){console.warn(`No Surface data found for segmentationId ${r}. Skipping render.`);return}const{geometryIds:a}=o;a!=null&&a.size||console.warn(`No Surfaces found for segmentationId ${r}. Skipping render.`);const{colorLUTIndex:s}=e,c=xm(s);a.forEach(f=>{const u=$e.getGeometry(f);if(!(u!=null&&u.data)){console.warn(`No Surfaces found for geometryId ${f}. Skipping render.`);return}const{segmentIndex:d}=u.data,g=UE(t.id,{segmentationId:r,type:n}).has(d),p=u.data,v=c[d];p.color=v.slice(0,3),p.visible=!g,f1e(t.element,p,r)}),t.render()}const lU={render:v1e,removeRepresentation:m1e};function y1e(t,e,r,n){const i=t.getViewReference(),{viewPlaneNormal:o,FrameOfReferenceUID:a}=i,s={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:e,viewPlaneNormal:o,FrameOfReferenceUID:a,referencedImageId:w1e(t,r[0],o),...n}};return ln(s,t.element),s}function w1e(t,e,r){let n;if(t instanceof lr)n=BE(t,e,r);else if(t instanceof Tr){const i=x1e(t),o=yl(i),a=$e.getVolume(o);n=Zl(a,e,r)}else throw new Error("getReferencedImageId: viewport must be a StackViewport or BaseVolumeViewport");return n}function x1e(t){var r;const e=(r=t.getViewReferenceId)==null?void 0:r.call(t);if(e)return e;if(t instanceof Tr)return`volumeId:${C1e(t)}`;throw new Error("getTargetId: viewport must have a getTargetId method")}function C1e(t){var r;const e=t.getActors();if(e)return(r=e.find(n=>n.actor.getClassName()==="vtkVolume"))==null?void 0:r.uid}function BE(t,e,r){const n=t.getImageIds();if(!n||!n.length)return;const i=n.map(o=>{const{imagePositionPatient:a}=wt("imagePlaneModule",o),s=S1e(e,a,r);return{imageId:o,distance:s}});return i.sort((o,a)=>o.distance-a.distance),i[0].imageId}function S1e(t,e,r){const n=Ke();Mn(n,t,e);const i=kt(n,r);return Math.abs(i)}function uU(t,e){const{segmentation:r}=t.data,{segmentation:n}=e.data;return r.segmentationId===n.segmentationId&&r.segmentIndex===n.segmentIndex}class fU{constructor(e){this.getGroupKey=r=>{if(typeof r=="string")return r;const i=_e(r);if(!i)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return i.FrameOfReferenceUID},this._imageVolumeModifiedHandler=r=>{const n=r.detail,{FrameOfReferenceUID:i}=n,a=this.annotations[i];a&&Object.keys(a).forEach(s=>{a[s].forEach(l=>{l.invalidated!==void 0&&(l.invalidated=!0)})})},this.getFramesOfReference=()=>Object.keys(this.annotations),this.getAnnotations=(r,n)=>{const i=this.annotations;return i[r]?n?i[r][n]?i[r][n]:[]:i[r]:[]},this.getAnnotation=r=>{const n=this.annotations;for(const i in n){const o=n[i];for(const a in o){const s=o[a];for(const c of s)if(r===c.annotationUID)return c}}},this.getNumberOfAnnotations=(r,n)=>{const i=this.getAnnotations(r,n);if(!i.length)return 0;if(n)return i.length;let o=0;for(const a in i)o+=i[a].length;return o},this.addAnnotation=(r,n)=>{const{metadata:i}=r,{FrameOfReferenceUID:o,toolName:a}=i;n=n||o;const s=this.annotations;let c=s[n];c||(s[n]={},c=s[n]);let l=c[a];l||(c[a]=[],l=c[a]),this.preprocessingFn&&(r=this.preprocessingFn(r)),l.push(r)},this.removeAnnotation=r=>{const{annotations:n}=this;for(const i in n){const o=n[i];for(const a in o){const s=o[a],c=s.findIndex(l=>l.annotationUID===r);c!==-1&&(s.splice(c,1),s.length===0&&delete o[a])}Object.keys(o).length===0&&delete n[i]}},this.removeAnnotations=(r,n)=>{const i=this.annotations,o=[];if(!i[r])return o;if(n){const a=i[r][n];for(const s of a)this.removeAnnotation(s.annotationUID),o.push(s)}else for(const a in i[r]){const s=i[r][a];for(const c of s)this.removeAnnotation(c.annotationUID),o.push(c)}return o},this.saveAnnotations=(r,n)=>{const i=this.annotations;if(r&&n){const o=i[r];if(!o)return;const a=o[n];return structuredClone(a)}else if(r){const o=i[r];return structuredClone(o)}return structuredClone(i)},this.restoreAnnotations=(r,n,i)=>{const o=this.annotations;if(n&&i){let a=o[n];a||(o[n]={},a=o[n]),a[i]=r}else n?o[n]=r:this.annotations=structuredClone(r)},this.getAllAnnotations=()=>Object.values(this.annotations).map(r=>Object.values(r)).flat(2),this.getNumberOfAllAnnotations=()=>{let r=0;const n=this.annotations;for(const i in n){const o=n[i];for(const a in o){const s=o[a];r+=s.length}}return r},this.removeAllAnnotations=()=>{const r=[];for(const n of this.getAllAnnotations())this.removeAnnotation(n.annotationUID),r.push(n);return r},e||(e=Pn()),this.annotations={},this.uid=e,et.addEventListener(rt.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}setPreprocessingFn(e){this.preprocessingFn=e}}const T1e=new fU("DEFAULT"),Ju=new Set;function dU(t,e=!0){const r=gU();t&&(e?D1e(t,Ju,r):pU(t,Ju,r)),mU(r,Ju)}function _1e(){const t=gU();I1e(Ju,t),mU(t,Ju)}function E1e(){return Array.from(Ju)}function si(t){return Ju.has(t)}function b1e(){return Ju.size}function hU(t){const e=si(t);return dU(t,e),e}function gU(){return Object.freeze({added:[],removed:[],locked:[]})}function D1e(t,e,r){if(!e.has(t)){e.add(t),r.added.push(t);const n=Hr(t);n&&(n.isLocked=!0)}}function pU(t,e,r){if(e.delete(t)){r.removed.push(t);const n=Hr(t);n&&(n.isLocked=!1)}}function I1e(t,e){t.forEach(r=>{pU(r,t,e)})}function mU(t,e){(t.added.length>0||t.removed.length>0)&&(e.forEach(r=>void t.locked.push(r)),ut(et,k.ANNOTATION_LOCK_CHANGE,t))}const O1e=Object.freeze(Object.defineProperty({__proto__:null,checkAndSetAnnotationLocked:hU,getAnnotationsLocked:E1e,getAnnotationsLockedCount:b1e,isAnnotationLocked:si,setAnnotationLocked:dU,unlockAllAnnotations:_1e},Symbol.toStringTag,{value:"Module"})),Xc=new Set;function na(t,e=!0,r=!1){e?M1e(t,r):GE(t)}function M1e(t,e=!1){const r=yU();if(!e){wU(Xc,r);const n=Hr(t);n&&(n.isSelected=!0)}if(t&&!Xc.has(t)){Xc.add(t),r.added.push(t);const n=Hr(t);n&&(n.isSelected=!0)}xU(r,Xc)}function GE(t){const e=yU();if(t){if(Xc.delete(t)){e.removed.push(t);const r=Hr(t);r.isSelected=!1}}else wU(Xc,e);xU(e,Xc)}function vU(){return Array.from(Xc)}function P1e(t){return vU().filter(e=>{var n;const r=Hr(e);return((n=r==null?void 0:r.metadata)==null?void 0:n.toolName)===t})}function Cm(t){return Xc.has(t)}function R1e(){return Xc.size}function yU(){return Object.freeze({added:[],removed:[],selection:[]})}function wU(t,e){t.forEach(r=>{if(t.delete(r)){e.removed.push(r);const n=Hr(r);n&&(n.isSelected=!1)}})}function xU(t,e){(t.added.length>0||t.removed.length>0)&&(e.forEach(r=>void t.selection.push(r)),ut(et,k.ANNOTATION_SELECTION_CHANGE,t))}const L1e=Object.freeze(Object.defineProperty({__proto__:null,deselectAnnotation:GE,getAnnotationsSelected:vU,getAnnotationsSelectedByToolName:P1e,getAnnotationsSelectedCount:R1e,isAnnotationSelected:Cm,setAnnotationSelected:na},Symbol.toStringTag,{value:"Module"})),A1e=t=>(t.data||(t.data={}),t.data.handles||(t.data.handles={}),t.data.handles.textBox||(t.data.handles.textBox={}),t),N1e=t=>(t.data||(t.data={}),t.data.cachedStats||(t.data.cachedStats={}),t),Id=new Set;function CU(t,e=!0){const r=SU();t&&(e?TU(t,Id,r):V1e(t,Id,r)),_U(r)}function k1e(){const t=SU();Id.forEach(e=>{TU(e,Id,t)}),_U(t)}function Kr(t){if(Hr(t))return!Id.has(t)}function SU(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function TU(t,e,r){if(e.delete(t)){r.lastVisible.push(t);const n=Hr(t);n.isVisible=!0}}function V1e(t,e,r){e.has(t)||(e.add(t),Cm(t)&&GE(t),r.lastHidden.push(t))}function _U(t){(t.lastHidden.length>0||t.lastVisible.length>0)&&(Id.forEach(e=>void t.hidden.push(e)),ut(et,k.ANNOTATION_VISIBILITY_CHANGE,t))}function EU(t){const e=!Id.has(t);return CU(t,e),e}const F1e=Object.freeze(Object.defineProperty({__proto__:null,checkAndSetAnnotationVisibility:EU,isAnnotationVisible:Kr,setAnnotationVisibility:CU,showAllAnnotations:k1e},Symbol.toStringTag,{value:"Module"})),WE=T1e,U1e=t=>{t=A1e(t),t=N1e(t);const e=t.annotationUID,r=hU(e);t.isLocked=r;const n=EU(e);return t.isVisible=n,t};WE.setPreprocessingFn(U1e);IE(WE);function B1e(){IE(WE)}function eu(t){if(!t.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:e,segmentIndex:r}=t.data.segmentation,n=Vn(e),{annotationUIDsMap:i}=(n==null?void 0:n.representationData.Contour)||{},o=i==null?void 0:i.get(r);o&&(o.delete(t.annotationUID),o.size||i.delete(r))}function tu(t){if(t.parentAnnotationUID)return;if(!t.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:e,segmentIndex:r}=t.data.segmentation,n=Vn(e);n.representationData.Contour||(n.representationData.Contour={annotationUIDsMap:new Map});let{annotationUIDsMap:i}=n.representationData.Contour;i||(i=new Map);let o=i==null?void 0:i.get(r);o||(o=new Set,i.set(r,o)),i.set(r,o.add(t.annotationUID))}const G1e="PlanarFreehandContourSegmentationTool";function zE(t){var o;const{polyline:e}=((o=t.data)==null?void 0:o.contour)||{};if(!e||e.length<3){console.warn("Skipping creation of new annotation due to invalid polyline:",e);return}mn(t.annotationUID),eu(t);const r=e[0],n=e[e.length-1],i={metadata:{...t.metadata,toolName:G1e,originalToolName:t.metadata.originalToolName||t.metadata.toolName},data:{cachedStats:{},handles:{points:[r,n],textBox:t.data.handles.textBox?{...t.data.handles.textBox}:void 0},contour:{...t.data.contour},spline:t.data.spline,segmentation:{...t.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};return ln(i,t.metadata.FrameOfReferenceUID),tu(i),i}var ra;(function(t){t[t.CounterClockwise=-1]="CounterClockwise",t[t.Unknown=0]="Unknown",t[t.Clockwise=1]="Clockwise"})(ra||(ra={}));function $E(t,e){return t.minX<=e.maxX&&t.maxX>=e.minX&&t.minY<=e.maxY&&t.maxY>=e.minY}function o5(t,e){const r=t.maxX-t.minX,n=t.maxY-t.minY,i=[r,n],o=[t.minX+r/2,t.minY+n/2],a=[Math.abs(e[0]-o[0]),Math.abs(e[1]-o[1])],s=a[0]-i[0]*.5,c=a[1]-i[1]*.5;if(s>0&&c>0)return s*s+c*c;const l=Math.max(s,0)+Math.max(c,0);return l*l}function W1e(t,e){return Math.sqrt(o5(t,e))}const z1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:W1e,distanceToPointSquared:o5,intersectAABB:$E},Symbol.toStringTag,{value:"Module"}));class bU{}class DU{constructor(e){this.storePointData=e.storePointData}getStatistics(){console.debug("InstanceCalculator getStatistics called")}}const{PointsManager:$1e}=Rn;function P1(t){return{max:[-1/0],min:[1/0],sum:[0],count:0,maxIJK:null,maxLPS:null,minIJK:null,minLPS:null,runMean:[0],m2:[0],m3:[0],m4:[0],allValues:[[]],pointsInShape:t?$1e.create3(1024):null,sumLPS:[0,0,0]}}function IU(t,e,r=null,n=null){Array.isArray(e)&&e.length>1&&t.max.length===1&&(t.max.push(t.max[0],t.max[0]),t.min.push(t.min[0],t.min[0]),t.sum.push(t.sum[0],t.sum[0]),t.runMean.push(0,0),t.m2.push(t.m2[0],t.m2[0]),t.m3.push(t.m3[0],t.m3[0]),t.m4.push(t.m4[0],t.m4[0]),t.allValues.push([],[])),t!=null&&t.pointsInShape&&r&&t.pointsInShape.push(r);const i=Array.isArray(e)?e:[e];t.count+=1,r&&(t.sumLPS[0]+=r[0],t.sumLPS[1]+=r[1],t.sumLPS[2]+=r[2]),t.max.forEach((o,a)=>{const s=i[a];t.allValues[a].push(s);const c=t.count,l=s-t.runMean[a],f=l/c,u=l*f*(c-1);t.sum[a]+=s,t.runMean[a]+=f,t.m4[a]+=u*f*f*(c*c-3*c+3)+6*f*f*t.m2[a]-4*f*t.m3[a],t.m3[a]+=u*f*(c-2)-3*f*t.m2[a],t.m2[a]+=u,st.max[a]&&(t.max[a]=s,a===0&&(t.maxIJK=n?[...n]:null,t.maxLPS=r?[...r]:null))})}function j1e(t){if(t.length===0)return 0;const e=[...t].sort((n,i)=>n-i),r=Math.floor(e.length/2);return e.length%2===0?(e[r-1]+e[r])/2:e[r]}function OU(t,e){const r=t.sum.map(u=>u/t.count),n=t.m2.map(u=>Math.sqrt(u/t.count)),i=t.sumLPS.map(u=>u/t.count),o=t.m3.map((u,d)=>{const h=t.m2[d]/t.count;return h===0?0:u/(t.count*Math.pow(h,1.5))}),a=t.m4.map((u,d)=>{const h=t.m2[d]/t.count;return h===0?0:u/(t.count*h*h)-3}),s=t.allValues.map(u=>j1e(u)),c={max:{name:"max",label:"Max Pixel",value:t.max.length===1?t.max[0]:t.max,unit:e,pointIJK:t.maxIJK?[...t.maxIJK]:null,pointLPS:t.maxLPS?[...t.maxLPS]:null},min:{name:"min",label:"Min Pixel",value:t.min.length===1?t.min[0]:t.min,unit:e,pointIJK:t.minIJK?[...t.minIJK]:null,pointLPS:t.minLPS?[...t.minLPS]:null},mean:{name:"mean",label:"Mean Pixel",value:r.length===1?r[0]:r,unit:e},stdDev:{name:"stdDev",label:"Standard Deviation",value:n.length===1?n[0]:n,unit:e},count:{name:"count",label:"Voxel Count",value:t.count,unit:null},median:{name:"median",label:"Median",value:s.length===1?s[0]:s,unit:e},skewness:{name:"skewness",label:"Skewness",value:o.length===1?o[0]:o,unit:null},kurtosis:{name:"kurtosis",label:"Kurtosis",value:a.length===1?a[0]:a,unit:null},maxLPS:{name:"maxLPS",label:"Max LPS",value:t.maxLPS?Array.from(t.maxLPS):null,unit:null},minLPS:{name:"minLPS",label:"Min LPS",value:t.minLPS?Array.from(t.minLPS):null,unit:null},pointsInShape:t.pointsInShape,center:{name:"center",label:"Center",value:i?[...i]:null,unit:null},array:[]};c.array.push(c.min,c.max,c.mean,c.stdDev,c.median,c.skewness,c.kurtosis,c.count,c.maxLPS,c.minLPS),c.center.value&&c.array.push(c.center);const l=t.pointsInShape!==null,f=P1(l);return t.max=f.max,t.min=f.min,t.sum=f.sum,t.count=f.count,t.maxIJK=f.maxIJK,t.maxLPS=f.maxLPS,t.minIJK=f.minIJK,t.minLPS=f.minLPS,t.runMean=f.runMean,t.m2=f.m2,t.m3=f.m3,t.m4=f.m4,t.allValues=f.allValues,t.pointsInShape=f.pointsInShape,t.sumLPS=f.sumLPS,c}const Jf=class Jf extends bU{static statsInit(e){e.storePointData||(this.state.pointsInShape=null),this.state=P1(e.storePointData)}};Jf.state=P1(!0),Jf.statsCallback=({value:e,pointLPS:r=null,pointIJK:n=null})=>{IU(Jf.state,e,r,n)},Jf.getStatistics=e=>OU(Jf.state,e==null?void 0:e.unit);let dl=Jf;class MU extends DU{constructor(e){super(e),this.state=P1(e.storePointData)}statsInit(e){this.state=P1(e.storePointData)}statsCallback(e){IU(this.state,e.value,e.pointLPS,e.pointIJK)}getStatistics(e){return OU(this.state,e==null?void 0:e.unit)}}const H1e=Object.freeze(Object.defineProperty({__proto__:null,BasicStatsCalculator:dl,Calculator:bU,InstanceBasicStatsCalculator:MU,InstanceCalculator:DU},Symbol.toStringTag,{value:"Module"}));function nu(t,e){if(t.length!==e.length)throw Error("Both points should have the same dimensionality");const[r,n,i=0]=t,[o,a,s=0]=e,c=o-r,l=a-n,f=s-i;return c*c+l*l+f*f}function ko(t,e){return Math.sqrt(nu(t,e))}function GS(t,e){const[r,n]=t,[i,o]=e,a=2*i-r,s=2*o-n;return[a,s]}const K1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:ko,distanceToPointSquared:nu,mirror:GS},Symbol.toStringTag,{value:"Module"}));function Zu(t){const[e,r]=t;return ko(e,r)}function rh(t){const[e,r]=t,n=ko(e,r),i=[e[0]-n,e[1]-n],o=[e[0]+n,e[1]+n];return[i,o]}const q1e=Object.freeze(Object.defineProperty({__proto__:null,getCanvasCircleCorners:rh,getCanvasCircleRadius:Zu},Symbol.toStringTag,{value:"Module"}));function Aw(t,e,r={}){return r.precalculated||jE(t,r),r.precalculated(e)}const jE=(t,e={})=>{const{xRadius:r,yRadius:n,zRadius:i}=t;(e.invXRadiusSq===void 0||e.invYRadiusSq===void 0||e.invZRadiusSq===void 0)&&(e.invXRadiusSq=r!==0?1/r**2:0,e.invYRadiusSq=n!==0?1/n**2:0,e.invZRadiusSq=i!==0?1/i**2:0);const{invXRadiusSq:o,invYRadiusSq:a,invZRadiusSq:s}=e,{center:c}=t,[l,f,u]=c;return e.precalculated=d=>{const h=d[0]-l;let g=h*h*o;if(g>1)return!1;const p=d[1]-f;if(g+=p*p*a,g>1)return!1;const v=d[2]-u;return g+=v*v*s,g<=1},e};function a5(t){const[e,r,n,i]=t,o=[n[0],r[1]],a=[i[0],e[1]];return[o,a]}const X1e=Object.freeze(Object.defineProperty({__proto__:null,getCanvasEllipseCorners:a5,pointInEllipse:Aw,precalculatePointInEllipse:jE},Symbol.toStringTag,{value:"Module"}));function s5(t,e,r){let n;const i=nu(t,e);if(t[0]===e[0]&&t[1]===e[1]&&(n=t),!n){const o=((r[0]-t[0])*(e[0]-t[0])+(r[1]-t[1])*(e[1]-t[1]))/i;o<0?n=t:o>1?n=e:n=[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]}return{point:[...n],distanceSquared:nu(r,n)}}function Sm(t,e,r){return s5(t,e,r).distanceSquared}function Ii(t,e,r){if(t.length!==2||e.length!==2||r.length!==2)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(Sm(t,e,r))}function Av(t){return typeof t=="number"?t?t<0?-1:1:t===t?0:NaN:NaN}function c5(t,e,r,n,i=!1){const[o,a]=t,[s,c]=e,[l,f]=r,[u,d]=n;if(i){const I=(o-s)*(f-d)-(a-c)*(l-u);if(Math.abs(I)<1e-10)return;const P=((o-l)*(f-d)-(a-f)*(l-u))/I,O=o+P*(s-o),A=a+P*(c-a);return[O,A]}const h=c-a,g=o-s,p=s*a-o*c,v=h*l+g*f+p,y=h*u+g*d+p;if(v!==0&&y!==0&&Av(v)===Av(y))return;const m=d-f,w=l-u,x=u*f-l*d,C=m*o+w*a+x,S=m*s+w*c+x;if(C!==0&&S!==0&&Av(C)===Av(S))return;const T=h*w-m*g;let _;_=g*x-w*p;const E=_/T;_=m*p-h*x;const b=_/T;return[E,b]}const Mg=.01;function N2(t,e,r){const n=t[0]<=e[0]?t[0]:e[0],i=t[0]>=e[0]?t[0]:e[0],o=t[1]<=e[1]?t[1]:e[1],a=t[1]>=e[1]?t[1]:e[1];if(!(r[0]>=n-Mg&&r[0]<=i+Mg&&r[1]>=o-Mg&&r[1]<=a+Mg))return!1;const c=(e[1]-t[1])*(r[0]-e[0])-(e[0]-t[0])*(r[1]-e[1]);return(c>=0?c:-c)<=Mg}const Y1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:Ii,distanceToPointSquared:Sm,distanceToPointSquaredInfo:s5,intersectLine:c5,isPointOnLineSegment:N2},Symbol.toStringTag,{value:"Module"}));function PU(t){if(t.length<3)return!1;const e=t.length,r=t[0],n=t[e-1],i=nu(r,n);return of(0,i)}function lf(t,e,r={closed:void 0}){if(t.length<3)return!1;const n=t.length;let i=0;const{closed:o,holes:a}=r;if(a!=null&&a.length){for(const l of a)if(lf(l,e))return!1}const s=!(o===void 0?PU(t):o),c=t.length-(s?1:2);for(let l=0;l<=c;l++){const f=t[l],u=l===n-1?0:l+1,d=t[u],h=f[0]>=d[0]?f[0]:d[0],g=f[1]>=d[1]?f[1]:d[1],p=f[1]<=d[1]?f[1]:d[1];if(e[0]<=h&&e[1]>=p&&e[1]h?s:h,c=c>g?c:g,i&&(l=lp?f:p)}return i?{minX:o,maxX:s,minY:a,maxY:c,minZ:l,maxZ:f}:{minX:o,maxX:s,minY:a,maxY:c}}function _m(t){const e=t.length;let r=0,n=e-1;for(let i=0;i=0?1:-1}function J1e(t){const e=Ke(),r=t[0];for(let n=0,i=t.length;ne[0]?t[0]:e[0],c=t[1]>e[1]?t[1]:e[1],l=r[0]n[0]?r[0]:n[0],d=r[1]>n[1]?r[1]:n[1];if(o>u||sd||c0?1:2}function kv(t,e,r){return e[0]<=Math.max(t[0],r[0])&&e[0]>=Math.min(t[0],r[0])&&e[1]<=Math.max(t[1],r[1])&&e[1]>=Math.min(t[1],r[1])}function qE(t,e,r,n=!0){const i=[],o=t.length,a=o-(n?1:2);for(let s=0;s<=a;s++){const c=t[s],l=s===o-1?0:s+1,f=t[l];KE(e,r,c,f)&&i.push([s,l])}return i}const Q1e=.01;function RU(t,e,r,n){const i=[e[0]-t[0],e[1]-t[1]],o=[n[0]-r[0],n[1]-r[1]],a=o[1]*i[0]-o[0]*i[1];if((a>=0?a:-a)e[0]?t[0]:e[0],t[1]e[1]?t[1]:e[1]],p=[r[0]n[0]?r[0]:n[0],r[1]n[1]?r[1]:n[1]];if(!(g[0]<=p[1]&&g[1]>=p[0]&&g[2]<=p[3]&&g[3]>=p[2])||!(N2(t,e,r)||N2(t,e,n)||N2(r,n,t)))return;const m=g[0]>p[0]?g[0]:p[0],w=g[1]p[2]?g[2]:p[2],C=g[3]{const p=g[0],v=e[g[0]],y=e[g[1]],m=RU(l,d,v,y),w=nu(l,m);return{sourceLineSegmentId:p,coordinate:m,targetStartPointDistSquared:w}});h.sort((g,p)=>g.targetStartPointDistSquared-p.targetStartPointDistSquared),h.forEach(g=>{const{sourceLineSegmentId:p,coordinate:v}=g,y={type:dd.Intersection,coordinates:v,position:ih.Edge,direction:a,visited:!1,next:null},m={...y,direction:E0.Unknown,cloned:!0};a===E0.Entering?y.next=m:m.next=y;let w=i.get(p);w||(w=[],i.set(p,w)),r.push(y),w.push(m),a*=-1})}for(let s=0,c=e.length;s({intersectionPoint:h,lineSegStartDistSquared:nu(f,h.coordinates)})).sort((h,g)=>h.lineSegStartDistSquared-g.lineSegStartDistSquared).map(({intersectionPoint:h})=>h).forEach(h=>n.push(h))}return vI(r),vI(n),{targetPolylinePoints:r,sourcePolylinePoints:n}}function AU(t){for(let e=0,r=t.length;e=f&&console.warn("Maximum iterations reached in mergePolylines, possible infinite loop detected"),s}function kw(t,e){const r=R1(t),n=R1(e),i=kt(n,r);of(-1,i)||(e=e.slice().reverse());const{targetPolylinePoints:o}=LU(t,e);let a=null;const s=[];let c=0;const l=t.length*2;for(;(a=AU(o))&&c=h&&console.warn("Maximum inner iterations reached in subtractPolylines, possible infinite loop detected"),s.push(f)}return c>=l&&console.warn("Maximum outer iterations reached in subtractPolylines, possible infinite loop detected"),s}function NU(t,e,r,n=!0){let i,o;n?(o=t.length-1,i=0):(o=0,i=1);for(let a=i;ad&&(d=v,h=g)}d{const u=[t[f[0]],t[f[1]]],d=[(u[0][0]+u[1][0])/2,(u[0][1]+u[1][1])/2];s.push(Sr(d,e))});const c=Math.min(...s),l=s.indexOf(c);return{segment:a[l],distance:c}}const r0=.001,nme=(t,e)=>{let r,n,i;if(t instanceof lr){const a=t.getImageData();if(!a)return;n=a.direction.slice(0,3),i=a.direction.slice(3,6),r=a.spacing}else{const a=t.getImageData(),{direction:s,spacing:c}=a,{viewPlaneNormal:l,viewUp:f}=t.getCamera(),u=s.slice(0,3),d=s.slice(3,6),h=s.slice(6,9),g=Ke();kn(g,f,l);const p=Math.abs(kt(g,u)),v=Math.abs(kt(g,d)),y=Math.abs(kt(g,h));let m;if(Math.abs(1-p)s4(t,e){const{xDir:i,yDir:o,spacing:a}=n,s=_e(t),{viewport:c}=s;if(!e.length)return e.push(r),console.log(">>>>> !canvasPoints. :: RETURN"),1;const l=c.canvasToWorld(e[e.length-1]),f=c.canvasToWorld(r),u=Ke();qn(u,f,l);const d=Math.abs(kt(u,i)),h=Math.abs(kt(u,o)),g=Math.max(Math.floor(d/a[0]),Math.floor(h/a[0]));if(g>1){const p=e[e.length-1],v=s4(p,r),y=rn();Jr(y,r,p),ms(y,y[0]/v,y[1]/v);const m=v/g;for(let w=1;w<=g;w++)e.push([p[0]+m*y[0]*w,p[1]+m*y[1]*w])}else e.push(r);return g},ome=(t,e,r,n)=>{const i=[t[0]-e[0],t[1]-e[1]],o=[r[0]-e[0],r[1]-e[1]],a=i[0]*o[0]+i[1]*o[1];if(a<0)return!1;const s=Math.sqrt(o[0]*o[0]+o[1]*o[1]);if(s===0)return!1;const c=a/s,l=[o[0]/s,o[1]/s],f=[l[0]*c,l[1]*c],u=[e[0]+f[0],e[1]+f[1]];return!(Sr(t,u)>n||Sr(e,u)>Sr(e,r))},ame=1e-6;function VU(t){let e;const r=gE(t,50);for(let a=0;a<3;a++)if(r.every((s,c,l)=>Math.abs(s[a]-l[0][a])[o[0],o[1]]).sort((o,a)=>o[0]===a[0]?o[1]-a[1]:o[0]-a[0]);function r(o,a,s){return(a[0]-o[0])*(s[1]-o[1])-(a[1]-o[1])*(s[0]-o[0])}const n=[];for(const o of e){for(;n.length>=2&&r(n[n.length-2],n[n.length-1],o)<=0;)n.pop();n.push(o)}const i=[];for(let o=e.length-1;o>=0;o--){const a=e[o];for(;i.length>=2&&r(i[i.length-2],i[i.length-1],a)<=0;)i.pop();i.push(a)}return n.pop(),i.pop(),n.concat(i)}const Sf=Object.freeze(Object.defineProperty({__proto__:null,addCanvasPointsToArray:ime,containsPoint:lf,containsPoints:Tm,convexHull:FU,decimate:YE,getAABB:uf,getArea:_m,getClosestLineSegmentIntersection:tme,getFirstLineSegmentIntersectionIndexes:NU,getLineSegmentIntersectionsCoordinates:kU,getLineSegmentIntersectionsIndexes:qE,getNormal2:R1,getNormal3:Z1e,getSignedArea:HE,getSubPixelSpacingAndXYDirections:nme,getWindingDirection:k2,intersectPolyline:XE,isClosed:PU,isPointInsidePolyline3D:JE,mergePolylines:Nw,pointCanProjectOnLine:ome,pointsAreWithinCloseContourProximity:rme,projectTo2D:VU,subtractPolylines:kw},Symbol.toStringTag,{value:"Module"}));function sme(t,e,r,n){const i=[t,e],o=[t+r,e],a=[t+r,e],s=[t+r,e+n],c=[t+r,e+n],l=[t,e+n],f=[t,e+n];return{top:[i,o],right:[a,s],bottom:[c,l],left:[f,[t,e]]}}function ZE(t,e){if(t.length!==4||e.length!==2)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[r,n,i,o]=t;let a=655535;const s=sme(r,n,i,o);return Object.keys(s).forEach(c=>{const[l,f]=s[c],u=Ii(l,f,e);u0){if(o>i)return 0;o>n&&(r[0]=o)}else{if(o=r[0]&&o<=r[2]&&a>=r[1]&&a<=r[3])return yI;const u=[0,1];if(Vv(r[0]-o,l,u)&&Vv(o-r[2],-l,u)&&Vv(r[1]-a,f,u)&&Vv(a-r[3],-f,u)){const[d,h]=u;return h<1&&(i[0]=o+h*l,i[1]=a+h*f),d>0&&(n[0]+=d*l,n[1]+=d*f),yI}return ume}const fme=Object.freeze(Object.defineProperty({__proto__:null,findClosestPoint:WS,liangBarksyClip:ep},Symbol.toStringTag,{value:"Module"}));function dme(t,e){const[r,n]=t,[i,o]=e,a=Mn(Ke(),n,r),s=Mn(Ke(),i,o),c=kt(a,s),l=ta(a),f=ta(s),u=c/(l*f);return Math.acos(u)*180/Math.PI}function hme(t,e){const[r,n]=t,[i,o]=e,a=xs(rn(),n,r),s=xs(rn(),i,o),c=a4(a,s),l=Cy(a),f=Cy(s),u=c/(l*f);return Math.acos(u)*(180/Math.PI)}function oh(t,e){return t[0].length===3?dme(t,e):hme(t,e)}const gme=Object.freeze(Object.defineProperty({__proto__:null,angleBetweenLines:oh},Symbol.toStringTag,{value:"Module"})),pme=Object.freeze(Object.defineProperty({__proto__:null,BasicStatsCalculator:H1e,aabb:z1e,angle:gme,circle:q1e,ellipse:X1e,lineSegment:Y1e,point:K1e,polyline:Sf,rectangle:cme,vec2:fme},Symbol.toStringTag,{value:"Module"}));function wc(t,e,r,n){var g,p,v;const{canvasToWorld:i,worldToCanvas:o}=r,{data:a}=t,{targetWindingDirection:s}=e;let{points:c}=e,l=k2(c);(g=n==null?void 0:n.decimate)!=null&&g.enabled&&(c=YE(e.points,(p=n==null?void 0:n.decimate)==null?void 0:p.epsilon));let{closed:f}=e;const u=c.length,d=new Array(u);k2(c);const h=CF(t);if(f===void 0){let y=!1;if(c.length>3){const m=nu(c[0],c[u-1]);y=Zt(0,m)}f=y}if((n==null?void 0:n.updateWindingDirection)!==!1){let y=h?h.data.contour.windingDirection*-1:s;y===void 0&&(y=l),y!==l&&c.reverse();const m=(((v=a.handles)==null?void 0:v.points)??[]).map(o);m.length>2&&k2(m)!==y&&a.handles.points.reverse(),l=y}for(let y=0;y{Ye.svgNodeCache[i][a].touched=!1}),{svgLayerElement:o,svgNodeCacheForCanvas:Ye.svgNodeCache,getSvgNode:wme.bind(this,i),appendNode:xme.bind(this,o,i),setNodeTouched:Cme.bind(this,i),clearUntouched:Sme.bind(this,o,i)}}function yme(t){const e=`.${mme}`,r=t.querySelector(e);return r==null?void 0:r.querySelector(":scope > .svg-layer")}function wme(t,e){if(Ye.svgNodeCache[t]&&Ye.svgNodeCache[t][e])return Ye.svgNodeCache[t][e].domRef}function xme(t,e,r,n){if(!Ye.svgNodeCache[e])return null;Ye.svgNodeCache[e][n]={touched:!0,domRef:r},t.appendChild(r)}function Cme(t,e){Ye.svgNodeCache[t]&&Ye.svgNodeCache[t][e]&&(Ye.svgNodeCache[t][e].touched=!0)}function Sme(t,e){Ye.svgNodeCache[e]&&Object.keys(Ye.svgNodeCache[e]).forEach(r=>{const n=Ye.svgNodeCache[e][r];!n.touched&&n.domRef&&(t.removeChild(n.domRef),delete Ye.svgNodeCache[e][r])})}function UU(t,e){const r=vme(t);e(r),r.clearUntouched()}function wl(t,e,r){return`${t}::${e}::${r}`}function Ya(t,e){Object.keys(t).forEach(r=>{const n=e.getAttribute(r),i=t[r];i===void 0||i===""?e.removeAttribute(r):n!==i&&e.setAttribute(r,i)})}function xl(t,e){Object.keys(t).forEach(r=>{const n=t[r];n!==void 0&&n!==""&&e.setAttribute(r,n)})}function ia(t,e,r,n,i,o={},a=""){const{color:s,fill:c,width:l,lineWidth:f,lineDash:u,fillOpacity:d,strokeOpacity:h}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},o),g=f||l,p="http://www.w3.org/2000/svg",v=wl(e,"circle",r),y=t.getSvgNode(v),m={cx:`${n[0]}`,cy:`${n[1]}`,r:`${i}`,stroke:s,fill:c,"stroke-width":g,"stroke-dasharray":u,"fill-opacity":d,"stroke-opacity":h};if(y)Ya(m,y),t.setNodeTouched(v);else{const w=document.createElementNS(p,"circle");a!==""&&w.setAttribute("data-id",a),xl(m,w),t.appendNode(w,v)}}function QE(t,e,r,n,i={},o=""){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"ellipse",r),h=t.getSvgNode(d),[g,p,v,y]=n,m=Math.hypot(v[0]-y[0],v[1]-y[1]),w=Math.hypot(p[0]-g[0],p[1]-g[1]),x=Math.atan2(v[1]-y[1],v[0]-y[0])*180/Math.PI,C=[(v[0]+y[0])/2,(p[1]+g[1])/2],S=m/2,T=w/2,_={cx:`${C[0]}`,cy:`${C[1]}`,rx:`${S}`,ry:`${T}`,stroke:a,fill:"transparent",transform:`rotate(${x} ${C[0]} ${C[1]})`,"stroke-width":f,"stroke-dasharray":l};if(h)Ya(_,h),t.setNodeTouched(d);else{const E=document.createElementNS(u,"ellipse");o!==""&&E.setAttribute("data-id",o),xl(_,E),t.appendNode(E,d)}}function Tme(t,e,r,n,i,o={},a=""){const s=[(n[0]+i[0])/2,n[1]],c=[(n[0]+i[0])/2,i[1]],l=[n[0],(n[1]+i[1])/2],f=[i[0],(n[1]+i[1])/2];QE(t,e,r,[c,s,l,f],o={},a="")}function l5(t,e,r,n,i={},o){const{color:a,handleRadius:s,width:c,lineWidth:l,fill:f,type:u,opacity:d}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},i),h=l||c,g="http://www.w3.org/2000/svg",p=wl(e,"handle",`hg-${r}-index-${o}`);let v;if(u==="circle")v={cx:`${n[0]}`,cy:`${n[1]}`,r:s,stroke:a,fill:f,"stroke-width":h,opacity:d};else if(u==="rect"){const w=parseFloat(s)*1.5,x=n[0]-w*.5,C=n[1]-w*.5;v={x:`${x}`,y:`${C}`,width:`${w}`,height:`${w}`,stroke:a,fill:f,"stroke-width":h,rx:`${w*.1}`,opacity:d}}else throw new Error(`Unsupported handle type: ${u}`);const y=t.getSvgNode(p);if(y)Ya(v,y),t.setNodeTouched(p);else{const m=document.createElementNS(g,u);xl(v,m),t.appendNode(m,p)}}function or(t,e,r,n,i={}){n.forEach((o,a)=>{l5(t,e,r,o,i,a)})}function Sn(t,e,r,n,i,o={},a=""){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:s="rgb(0, 255, 0)",width:c=10,lineWidth:l,lineDash:f,markerStartId:u=null,markerEndId:d=null,shadow:h=!1,strokeOpacity:g=1}=o,p=l||c,v="http://www.w3.org/2000/svg",y=wl(e,"line",r),m=t.getSvgNode(y),w=t.svgLayerElement.id,x=h?`filter:url(#shadow-${w});`:"",C={x1:`${n[0]}`,y1:`${n[1]}`,x2:`${i[0]}`,y2:`${i[1]}`,stroke:s,style:x,"stroke-width":p,"stroke-dasharray":f,"marker-start":u?`url(#${u})`:"","marker-end":d?`url(#${d})`:"","stroke-opacity":g};if(m)Ya(C,m),t.setNodeTouched(y);else{const S=document.createElementNS(v,"line");a!==""&&S.setAttribute("data-id",a),xl(C,S),t.appendNode(S,y)}}function BU(t,e,r,n,i,o={}){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),f=i[0]+(n[0]-i[0])/2,u=[f,n[1]],d=[f,i[1]],h={start:n,end:u},g={start:u,end:d},p={start:d,end:i};Sn(t,e,"1",h.start,h.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"2",g.start,g.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"3",p.start,p.end,{color:a,width:s,lineWidth:c,lineDash:l})}function gc(t,e,r,n,i){if(n.length<2)return;const{color:o="rgb(0, 255, 0)",width:a=10,fillColor:s="none",fillOpacity:c=0,lineWidth:l,lineDash:f,closePath:u=!1,markerStartId:d=null,markerEndId:h=null}=i,g=l||a,p="http://www.w3.org/2000/svg",v=wl(e,"polyline",r),y=t.getSvgNode(v);let m="";for(const x of n)m+=`${x[0].toFixed(1)}, ${x[1].toFixed(1)} `;if(u){const x=n[0];m+=`${x[0]}, ${x[1]}`}const w={points:m,stroke:o,fill:s,"fill-opacity":c,"stroke-width":g,"stroke-dasharray":f,"marker-start":d?`url(#${d})`:"","marker-end":h?`url(#${h})`:""};if(y)Ya(w,y),t.setNodeTouched(v);else{const x=document.createElementNS(p,"polyline");xl(w,x),t.appendNode(x,v)}}function Hl(t,e,r,n,i){const a=n.length&&n[0].length&&Array.isArray(n[0][0])?n:[n],{color:s="rgb(0, 255, 0)",width:c=10,fillColor:l="none",fillOpacity:f=0,lineWidth:u,lineDash:d,closePath:h=!1}=i,g=u||c,p="http://www.w3.org/2000/svg",v=wl(e,"path",r),y=t.getSvgNode(v);let m="";for(let x=0,C=a.length;xm.length){for(let C=0;C0?WS(n,i):i,c=Dme(o),l=WS(c,s),f=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},a);Sn(t,e,`link-${r}`,s,l,f)}function Dme(t){const{x:e,y:r,height:n,width:i}=t,o=i/2,a=n/2,s=[e+o,r],c=[e,r+a],l=[e+o,r+n],f=[e+i,r+a];return[s,c,l,f]}function ho(t,e,r,n,i,o,a,s={}){const c=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),l=ff(t,e,r,n,i,c);return bme(t,e,r,o,i,l,c),l}function e8(t,e,r,n,i={},o=""){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"rect",r),h=t.getSvgNode(d),[g,p,v,y]=n,m=Math.hypot(g[0]-p[0],g[1]-p[1]),w=Math.hypot(g[0]-v[0],g[1]-v[1]),x=[(y[0]+g[0])/2,(y[1]+g[1])/2],C=[(v[0]+g[0])/2,(v[1]+g[1])/2],S=Math.atan2(x[1]-C[1],x[0]-C[0])*180/Math.PI,T={x:`${x[0]-m/2}`,y:`${x[1]-w/2}`,width:`${m}`,height:`${w}`,stroke:a,fill:"transparent",transform:`rotate(${S} ${x[0]} ${x[1]})`,"stroke-width":f,"stroke-dasharray":l};if(h)Ya(T,h),t.setNodeTouched(d);else{const _=document.createElementNS(u,"rect");o!==""&&_.setAttribute("data-id",o),xl(T,_),t.appendNode(_,d)}}function Em(t,e,r,n,i,o={},a=""){const s=[n[0],n[1]],c=[i[0],n[1]],l=[n[0],i[1]],f=[i[0],i[1]];e8(t,e,r,[s,c,l,f],o,a)}const CI="http://www.w3.org/2000/svg";function u5(t,e,r,n,i,o={}){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{viaMarker:a=!1,color:s="rgb(0, 255, 0)",markerSize:c=10}=o;if(!a){Ime(t,e,r,n,i,o);return}const l=t.svgLayerElement.id,u=`${`arrow-${e}`}-${l}`,d=t.svgLayerElement.querySelector("defs");let h=d.querySelector(`#${u}`);if(h){h.setAttribute("markerWidth",`${c}`),h.setAttribute("markerHeight",`${c}`);const g=h.querySelector("path");g&&g.setAttribute("fill",s)}else{h=document.createElementNS(CI,"marker"),h.setAttribute("id",u),h.setAttribute("viewBox","0 0 10 10"),h.setAttribute("refX","8"),h.setAttribute("refY","5"),h.setAttribute("markerWidth",`${c}`),h.setAttribute("markerHeight",`${c}`),h.setAttribute("orient","auto");const g=document.createElementNS(CI,"path");g.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),g.setAttribute("fill",s),h.appendChild(g),d.appendChild(h)}o.markerEndId=u,Sn(t,e,r,n,i,o)}function Ime(t,e,r,n,i,o={}){const{color:a="rgb(0, 255, 0)",width:s=2,lineWidth:c,lineDash:l}=o,f=10,u=Math.atan2(i[1]-n[1],i[0]-n[0]),d={start:[i[0]-f*Math.cos(u-Math.PI/7),i[1]-f*Math.sin(u-Math.PI/7)],end:i},h={start:[i[0]-f*Math.cos(u+Math.PI/7),i[1]-f*Math.sin(u+Math.PI/7)],end:i};Sn(t,e,r,n,i,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"2",d.start,d.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"3",h.start,h.end,{color:a,width:s,lineWidth:c,lineDash:l})}function GU(t,e,r,n,i,o={}){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"rect",r),h=t.getSvgNode(d),g=[Math.min(n[0],i[0]),Math.min(n[1],i[1])],p=Math.abs(n[0]-i[0]),v=Math.abs(n[1]-i[1]),y={x:`${g[0]}`,y:`${g[1]}`,width:`${p}`,height:`${v}`,stroke:a,fill:"black","stroke-width":f,"stroke-dasharray":l};if(h)Ya(y,h),t.setNodeTouched(d);else{const m=document.createElementNS(u,"rect");xl(y,m),t.appendNode(m,d)}}const Ome=Object.freeze(Object.defineProperty({__proto__:null,draw:UU,drawArrow:u5,drawCircle:ia,drawEllipse:Tme,drawEllipseByCoordinates:QE,drawFan:$S,drawHandle:l5,drawHandles:or,drawHeight:BU,drawLine:Sn,drawLinkedTextBox:ho,drawPath:Hl,drawPolyline:gc,drawRect:Em,drawRectByCoordinates:e8,drawRedactionRect:GU,drawTextBox:ff,setAttributesIfNecessary:Ya,setNewAttributesIfValid:xl},Symbol.toStringTag,{value:"Module"}));function WU(t,e){const r=_e(t),{renderingEngineId:n,viewportId:i}=r,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;c{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let r=0;r{this._needsRender.add(r)}),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const r=[...this._viewportElements.values()];e.forEach(n=>{r.indexOf(n)!==-1&&this._needsRender.add(n)}),this._render()}_render(){this._needsRender.size>0&&this._animationFrameSet===!1&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const r=_e(e);if(!r)return;if(!jr(r.renderingEngineId)){console.warn("rendering Engine has been destroyed");return}const i=WU(e,[Mme,Pme,Rme]),{renderingEngineId:o,viewportId:a}=r,s={element:e,renderingEngineId:o,viewportId:a};UU(e,c=>{let l=!1;const f=u=>{if(u.renderAnnotation){const d=u.renderAnnotation(r,c);l=l||d}};i.forEach(f),l&&ut(e,k.ANNOTATION_RENDERED,{...s})})}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}}const t8=new Lme;function Jh(t){t8.renderViewport(t)}function Be(t){t.length&&t.forEach(e=>{const r=Wn(e);if(!r){console.warn(`Viewport not available for ${e}`);return}const{viewport:n}=r;if(!n){console.warn(`Viewport not available for ${e}`);return}const i=n.element;Jh(i)})}function zU(t,e){const r=t.length,n=[];for(let i=0;i{const i=n.getCamera();return Math.abs(kt(i.viewPlaneNormal,e.viewPlaneNormal))>r})}function At(t,e,r=!0){const n=_e(t),{renderingEngine:i,FrameOfReferenceUID:o}=n;let a=i.getViewports();a=zU(a,o),a=Vw(a,e);const s=i.getViewport(n.viewportId);return r&&(a=$U(a,s.getCamera())),a.map(l=>l.id)}const Fme=Object.freeze(Object.defineProperty({__proto__:null,filterViewportsWithFrameOfReferenceUID:zU,filterViewportsWithParallelNormals:$U,filterViewportsWithToolEnabled:Vw,getViewportIdsWithToolToRender:At},Symbol.toStringTag,{value:"Module"})),f5="PlanarFreehandContourSegmentationTool";function df(t,e){const r=t.length,n=new Array(r);for(let i=0;i{const n=r,i=df(n.data.contour.polyline,t);return{annotation:n,polyline:i}})}function Uw(t,e,r){vm(e,r),eu(r);const{contour:n}=r.data,i=df(n.polyline,t);wc(r,{points:i,closed:n.closed,targetWindingDirection:e.data.contour.windingDirection===ra.Clockwise?ra.CounterClockwise:ra.Clockwise},t);const{element:o}=t;i8(t,[e,r])}function r8(t,e,r,n,i){var m;if(!Ow(f5)){console.warn(`${f5} is not registered in cornerstone. Cannot combine polylines.`);return}const o=i[0],a=lf(r,o),s=jU(t,e),c=new Set(s),l=new Map,f=(w,x)=>{let C=l.get(w);C||(C=[],l.set(w,C)),C.push(x),c.delete(x)},u=[];if(a){const w=Nw(r,i);u.push(w),Array.from(c.keys()).forEach(x=>f(w,x))}else kw(r,i).forEach(x=>{u.push(x),Array.from(c.keys()).forEach(C=>{Tm(x,C.polyline)&&f(x,C)})});Array.from(l.values()).forEach(w=>w.forEach(x=>Iw(x.annotation)));const{element:d}=t,{metadata:h,data:g}=e,{handles:p,segmentation:v}=g,{textBox:y}=p;mn(n.annotationUID),mn(e.annotationUID),eu(n),eu(e);for(let w=0;wvm(C,S.annotation))}i8(t,[e,n])}function HU(t,e,r){const n=t.canvasToWorld(r[0]),i=t.canvasToWorld(r[r.length-1]),o={metadata:{...e.metadata,toolName:f5,originalToolName:e.metadata.originalToolName||e.metadata.toolName},data:{cachedStats:{},handles:{points:[n,i],textBox:e.data.handles.textBox?{...e.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:e.data.spline,segmentation:{...e.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:e.interpolationUID,interpolationCompleted:e.interpolationCompleted};return wc(o,{points:r,closed:!0,targetWindingDirection:ra.Clockwise},t),o}function i8(t,e){const{element:r}=t,n=new Set([f5]);e.forEach(i=>{n.add(i.metadata.toolName)});for(const i of n.values())if(Ow(i)){const o=At(r,i);Be(o)}}function Bw(t,e){const r=[],n=new Set,i=new Set;for(let o=0;o[...r]);let e=t[0].map(r=>[...r]);for(let r=1;rd5(o.data.contour.polyline,r)),i=e.map(o=>d5(o.data.contour.polyline,r));return Bw(n,i)}function d5(t,e){const r=t.length,n=new Array(r);for(let i=0;i[...n]);let r=t.map(n=>[...n]);for(let n=0;nd5(o.data.contour.polyline,r)),i=e.map(o=>d5(o.data.contour.polyline,r));return Gw(n,i)}const zme="PlanarFreehandContourSegmentationTool";function KU(t,e,r,n){const i=new Map;return r.forEach(o=>{if(o.length<3)return;const a={annotationUID:Pn(),data:{contour:{closed:!0,polyline:o},segmentation:{segmentationId:e,segmentIndex:n},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:zme,...t.getViewReference()}};ln(a,t.element);const s=(i==null?void 0:i.get(n))||new Set;s.add(a.annotationUID),i.set(n,s)}),i}function SI(t,e){const r=[],{annotationUIDsMap:n}=t,i=n.get(e);for(const o of i){const a=Hr(o),{polyline:s}=a.data.contour;r.push(s)}return r}function qU(t,e,r,n){if(!e||!e.representationData.Contour)return;const i=e.representationData.Contour,{annotationUIDsMap:o}=i;if(!o||!o.get(r)||!o.get(n))return;const a=SI(i,r),s=SI(i,n),c=a.map(f=>df(f,t)),l=s.map(f=>df(f,t));return{polyLinesCanvas1:c,polyLinesCanvas2:l}}function $me(t,e,r,n,{name:i,segmentIndex:o,color:a}){const{polyLinesCanvas1:s,polyLinesCanvas2:c}=qU(t,e,r,n)||{};if(!s||c)return;const f=Bw(s,c).map(g=>n8(g,t)),u=KU(t,e.segmentationId,f,o),d=e.representationData.Contour,{annotationUIDsMap:h}=d;h&&h.set(o,u.get(o))}function jme(t,e,r,n,{name:i,segmentIndex:o,color:a}){const{polyLinesCanvas1:s,polyLinesCanvas2:c}=qU(t,e,r,n)||{};if(!s||c)return;const f=Gw(s,c).map(g=>n8(g,t)),u=KU(t,e.segmentationId,f,o),d=e.representationData.Contour,{annotationUIDsMap:h}=d;h&&h.set(o,u.get(o))}function bm(t){var e;return!!((e=t.data)!=null&&e.segmentation)}function XU(t,e,r){const n=[],i=uf(e);for(let o=0;oa.isContourHole),o=n.filter(a=>!a.isContourHole);if(i.length>0){const a=i[0];Jme(t,a.targetAnnotation,e),JU(t,[e,a.targetAnnotation]);return}if(o.length!==0){if(!Ow(h5)){console.warn(`${h5} is not registered in cornerstone. Cannot process multiple intersections.`);return}Kme(t,e,r,o)}}function Kme(t,e,r,n){const{element:i}=t,o=[e],a=[],s=[];n.forEach(({targetAnnotation:d})=>{const h=Yme(t,d);s.push(...h),o.push(d)});const c=r[0];if(n.some(({targetPolyline:d})=>lf(d,c))){let d=r;n.forEach(({targetPolyline:h})=>{d=Nw(d,h)}),a.push(d)}else n.forEach(({targetPolyline:d})=>{const h=kw(d,r);a.push(...h)});o.forEach(d=>{mn(d.annotationUID),eu(d)}),s.forEach(d=>Iw(d.annotation));const f=n[0].targetAnnotation,u=[];a.forEach(d=>{if(!d||d.length<3){console.warn("Skipping creation of new annotation due to invalid polyline:",d);return}const h=qme(t,f,d);ln(h,i),tu(h),cn(h,t.element),u.push(h)}),Xme(t,s,u),JU(t,o)}function qme(t,e,r){const n=t.canvasToWorld(r[0]),i=t.canvasToWorld(r[r.length-1]),o={metadata:{...e.metadata,toolName:h5,originalToolName:e.metadata.originalToolName||e.metadata.toolName},data:{cachedStats:{},handles:{points:[n,i],textBox:e.data.handles.textBox?{...e.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:e.data.spline,segmentation:{...e.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:e.interpolationUID,interpolationCompleted:e.interpolationCompleted};return wc(o,{points:r,closed:!0,targetWindingDirection:ra.Clockwise},t),o}function Xme(t,e,r){e.forEach(n=>{const i=r.find(o=>{const a=o8(o.data.contour.polyline,t);return Tm(a,n.polyline)});i&&vm(i,n.annotation)})}function Yme(t,e){return ym(e).map(r=>{const n=r,i=o8(n.data.contour.polyline,t);return{annotation:n,polyline:i}})}function Jme(t,e,r){vm(e,r),eu(r);const{contour:n}=r.data,i=o8(n.polyline,t);wc(r,{points:i,closed:n.closed,targetWindingDirection:e.data.contour.windingDirection===ra.Clockwise?ra.CounterClockwise:ra.Clockwise},t)}function o8(t,e){const r=t.length,n=new Array(r);for(let i=0;i{n.add(i.metadata.toolName)});for(const i of n.values())if(Ow(i)){const o=At(r,i);Be(o)}}const{isEqual:TI}=Rn;function a8(t){const{metadata:e}=t;return xV().filter(r=>{if(r.FrameOfReferenceUID===e.FrameOfReferenceUID){const n=r.viewport,{viewPlaneNormal:i,viewUp:o}=n.getCamera();return TI(i,e.viewPlaneNormal)&&(!e.viewUp||TI(o,e.viewUp))}}).map(r=>r.viewport)}async function Zme(t,e,r,n=!0){const i=typeof t=="string"?Hr(t):t,o=typeof e=="string"?Hr(e):e;if(!i||!o)throw new Error("Both source and target annotations must be valid");r||(r=Qme(i));const a=df(i.data.contour.polyline,r),s=df(o.data.contour.polyline,r),c=Fw(a,s);if(!c.hasIntersection){console.warn("No intersection found between the two annotations");return}if(c.isContourHole){if(!n){console.warn("Hole processing is disabled");return}Uw(r,o,i)}else r8(r,o,s,i,a)}function Qme(t){const e=a8(t);if(!e.length)throw new Error("No viewport found for the annotation");return e[0]}const eve=Object.freeze(Object.defineProperty({__proto__:null,addContourSegmentationAnnotation:tu,addition:$me,areSameSegment:uU,checkIntersection:Fw,combinePolylines:r8,contourSegmentationOperation:Zme,convertContourPolylineToCanvasSpace:df,convertContourPolylineToWorld:n8,convertContourSegmentationAnnotation:zE,createNewAnnotationFromPolyline:HU,createPolylineHole:Uw,findAllIntersectingContours:XU,getContourHolesData:jU,isContourSegmentationAnnotation:bm,processMultipleIntersections:YU,removeContourSegmentationAnnotation:eu,subtractAnnotationPolylines:Wme,subtractMultiplePolylineSets:Gme,subtractPolylineSets:Gw,subtraction:jme,unifyAnnotationPolylines:Bme,unifyMultiplePolylineSets:Ume,unifyPolylineSets:Bw,updateViewportsForAnnotations:i8},Symbol.toStringTag,{value:"Module"}));function tve(t){if(!t)throw new Error(`No contours found for geometryId ${t.id}`);const e=t.id;if(t.type!==Qc.CONTOUR)throw new Error(`Geometry type ${t.type} not supported for rendering.`);if(!t.data){console.warn(`No contours found for geometryId ${e}. Skipping render.`);return}}function nve(t,e,r,n){r.size?t.render():rve(t,e,n)}function rve(t,e,r){const{segmentationId:n}=r,i=new Map;e.forEach(o=>{const a=$e.getGeometry(o);if(!a){console.warn(`No geometry found for geometryId ${o}. Skipping render.`);return}const s=a.data.segmentIndex;tve(a);const c=Ha.getStyle({viewportId:t.id,segmentationId:n,type:Vt.Contour,segmentIndex:s}),l=a.data,f=t.getCamera().viewPlaneNormal;l.contours.forEach(u=>{const{points:d,color:h,id:g}=u,p=BE(t,d[0],f),v={annotationUID:Pn(),data:{contour:{closed:!0,polyline:d},segmentation:{segmentationId:n,segmentIndex:s,color:h,id:g},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:p,toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:t.getFrameOfReferenceUID(),viewPlaneNormal:t.getCamera().viewPlaneNormal}},y=t.element;ln(v,y),tu(v)}),c&&i.set(s,c)}),t.render()}function ive(t,e,r=!1){const n=Vn(e),{annotationUIDsMap:i}=n.representationData.Contour;i.forEach(o=>{o.forEach(a=>{mn(a)})})}function ZU(t){const e=Ype(t);if(e)return e;const r=Vn(t);if(!r)throw new Error(`No segmentation found for segmentationId ${t}`);let n;if(r.representationData.Labelmap)n=ove(r,t);else if(r.representationData.Contour)n=cve(r);else if(r.representationData.Surface)n=lve(r);else throw new Error(`Unsupported segmentation type: ${r.representationData}`);return Jpe(t,n),n}function ove(t,e){const r=t.representationData[Vt.Labelmap],n=new Set;return r.imageIds?sve(n,r.imageIds):ave(n,e),Array.from(n).map(Number).sort((i,o)=>i-o)}function ave(t,e){$e.getVolume(e).voxelManager.forEach(({value:n})=>{n!==0&&t.add(n)})}function sve(t,e){e.forEach(r=>{$e.getImage(r).voxelManager.getScalarData().forEach(o=>{o!==0&&t.add(o)})})}function cve(t){const{annotationUIDsMap:e,geometryIds:r}=t.representationData.Contour||{};if(!r)throw new Error(`No geometryIds found for segmentationId ${t.segmentationId}`);const n=new Set([...e.keys()]);return r.forEach(i=>{const o=$e.getGeometry(i);n.add(o.data.segmentIndex)}),Array.from(n).sort((i,o)=>i-o)}function lve(t){var r;const e=((r=t.representationData.Surface)==null?void 0:r.geometryIds)??[];return Array.from(e.keys()).map(Number).sort((n,i)=>n-i)}const i0=new Map,_I=new Map;function uve(t,e,r=!1){const n=Wn(t);if(!n)return;const{viewport:i}=n;ive(t,e),r&&i.render()}async function fve(t,e){var l,f;const{segmentationId:r}=e,n=Vn(r);if(!n)return;let i=n.representationData[Vt.Contour];const o=jl();if(!i&&((l=jl())!=null&&l.canComputeRequestedRepresentation(r,Vt.Contour))&&!i0.get(t.id)?(i0.set(t.id,!0),i=await FE(r,Vt.Contour,()=>o.computeContourData(r,{viewport:t}),()=>{}),i0.set(t.id,!1)):!i&&!jl()&&console.debug(`No contour data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to contour. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`),!i||!((f=i.geometryIds)!=null&&f.length))return;let a=!1;const s=t.getCamera().viewPlaneNormal;i.annotationUIDsMap&&(a=!hve(i.annotationUIDsMap,s)),i.geometryIds.length>0&&(a=!dve(i.geometryIds,s));const c=_I.get(t.id)||new Set;if(a&&!i0.get(t.id)&&!c.has(r)&&t.viewportStatus===Lo.RENDERED){i0.set(t.id,!0);const u=ZU(r),h=(await o.computeSurfaceData(r,{segmentIndices:u,viewport:t})).geometryIds,g=[];for(const m of h.values()){const x=$e.getGeometry(m).data;g.push({points:x.points,polys:x.polys,segmentIndex:x.segmentIndex,id:x.segmentIndex})}const p=await o.clipAndCacheSurfacesForViewport(g,t),v=o.extractContourData(p),y=o.createAndAddContourSegmentationsFromClippedSurfaces(v,t,r);i.annotationUIDsMap=new Map([...i.annotationUIDsMap,...y]),c.add(r),_I.set(t.id,c),i0.set(t.id,!1)}nve(t,i.geometryIds,i.annotationUIDsMap,e)}function dve(t,e){var u,d,h;let r=null,n=null;for(const g of t){const p=$e.getGeometry(g);if(!p)continue;const v=p.data;if(((h=(d=(u=v.contours)==null?void 0:u[0])==null?void 0:d.points)==null?void 0:h.length)>=3){r=p,n=v;break}}if(!r||!n)return!1;const o=n.contours[0].points,a=o[0],s=o[1],c=o[2];let l=kn(Ke(),Mn(Ke(),s,a),Mn(Ke(),c,a));l=Qn(Ke(),l);const f=kt(l,e);return Math.abs(f)>.9}function hve(t,e){const r=Array.from(t.values()).flat().map(i=>Array.from(i)).flat(),n=gE(r,3);for(const i of n){const o=Hr(i);if(o!=null&&o.metadata){if(!o.metadata.viewPlaneNormal)continue;const a=o.metadata.viewPlaneNormal,s=Math.abs(e[0]*a[0]+e[1]*a[1]+e[2]*a[2]);if(Math.abs(s-1)>.01)return!1}}return!0}const QU={render:fve,removeRepresentation:uve};function Tf(t,e){return ru(t,e)[0]}function ru(t,e){return rr.getCurrentLabelmapImageIdsForViewport(t,e)}function gve(t,e){return rr.getLabelmapImageIdsForImageId(t,e)}const EI=new Map,pve=({cfun:t,ofun:e,actor:r})=>{r.getProperty().setRGBTransferFunction(1,t),r.getProperty().setScalarOpacity(1,e)};async function mve({viewport:t,volumeInputs:e,segmentationId:r}){var E;const n=t.getDefaultActor(),{actor:i}=n,{uid:o,callback:a}=n,s=t.getVolumeId();if((E=EI.get(o))!=null&&E.added)return{uid:o,actor:i};const c=e,l=$e.getVolume(c[0].volumeId);if(!l)throw new Error(`imageVolume with id: ${l.volumeId} does not exist`);const{volumeId:f}=c[0],u=await X4(f);if(!u)throw new Error(`segImageVolume with id: ${u.volumeId} does not exist`);const h=u.voxelManager.getCompleteScalarDataArray(),{imageData:g}=u,p=$e.getVolume(s),y=p.voxelManager.getCompleteScalarDataArray(),m=2,w=new Float32Array(m*p.voxelManager.getScalarDataLength()),x=g.getDimensions();for(let b=0;bie);for(const te of j)for(let ie=0;ie{et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,_);const D=t.getActor(o),{element:I,id:P}=t;t.removeActors([o]);const O=await Uy({volumeId:o,blendMode:Zc.MAXIMUM_INTENSITY_BLEND,callback:({volumeActor:A})=>{D.callback&&D.callback({volumeActor:A,volumeId:f})}},I,P);t.addActor({actor:O,uid:o}),t.render()}),{uid:o,actor:i}}const{uuidv4:eB}=Rn;async function vve(t,e,r,n){const i=_e(t),{renderingEngine:o,viewport:a}=i,{id:s}=a,c=!0,l=!1,f=!0;if(a instanceof Tr){const d=yve(e,r);$e.getVolume(d)||await wve(e);let h=(n==null?void 0:n.blendMode)??Zc.MAXIMUM_INTENSITY_BLEND,g=h===Zc.LABELMAP_EDGE_PROJECTION_BLEND;if(g){const v=a.getVolumeId(),y=$e.getVolume(v),w=$e.getVolume(d).dimensions,x=y.dimensions;(w[0]!==x[0]||w[1]!==x[1]||w[2]!==x[2])&&(g=!1,h=Zc.MAXIMUM_INTENSITY_BLEND,console.debug("Dimensions mismatch - falling back to regular volume addition"))}const p=[{volumeId:d,visibility:c,representationUID:`${r}-${Vt.Labelmap}`,useIndependentComponents:g,blendMode:h}];if(!p[0].useIndependentComponents)await Uk(o,p,[s],l,f);else return await mve({viewport:a,volumeInputs:p,segmentationId:r})}else{const d=ru(a.id,r).map(h=>({imageId:h,representationUID:`${r}-${Vt.Labelmap}-${h}`}));Bk(o,d,[s])}To(r)}function yve(t,e){let{volumeId:r}=t;if(!r){r=eB();const n=Vn(e);n.representationData.Labelmap={...n.representationData.Labelmap,volumeId:r},t.volumeId=r,es(e)}return r}async function wve(t){const e=t;if(!(e.imageIds.length>0))throw new Error("cannot create labelmap, no imageIds found for the volume labelmap");return await Y4(t.volumeId||eB(),e.imageIds)}function xve(t,e){const r=_e(t),{viewport:n}=r;n.removeActors([l1e(n.id,e)])}function Od(t){return rr.getActiveSegmentation(t)}function Cve(t,e){rr.setActiveSegmentation(t,e)}function cu(t){return Od(t)}function Sve(t,e){Cve(t,e)}const Tve=Object.freeze(Object.defineProperty({__proto__:null,getActiveSegmentation:cu,setActiveSegmentation:Sve},Symbol.toStringTag,{value:"Module"}));function Da(t){const e=Vn(t);if(e){const r=Object.keys(e.segments).find(n=>e.segments[n].active);return r?Number(r):void 0}}const b3=255,_p=new Map;let D3=!1;function _ve(t,e,r=!1){const n=Wn(t);if(_p.forEach((o,a)=>{a.includes(e)&&_p.delete(a)}),!n)return;const{viewport:i}=n;xve(i.element,e),r&&i.render()}async function Eve(t,e){var s;const{segmentationId:r,config:n}=e,i=Vn(r);if(!i){console.warn("No segmentation found for segmentationId: ",r);return}let o=i.representationData[Vt.Labelmap],a=Tp(t.id,r);if(!o&&((s=jl())!=null&&s.canComputeRequestedRepresentation(r,Vt.Labelmap))&&!D3){D3=!0;const c=jl();if(o=await FE(r,Vt.Labelmap,()=>c.computeLabelmapData(r,{viewport:t}),()=>null,()=>{rr.processLabelmapRepresentationAddition(t.id,r),setTimeout(()=>{To(r)},0)}),!o)throw new Error(`No labelmap data found for segmentationId ${r}.`);D3=!1}else!o&&!jl()&&console.debug(`No labelmap data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to labelmap. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(o){if(t instanceof ur)a!=null&&a.length||await DI(t,o,r,n),a=Tp(t.id,r);else{const c=ru(t.id,r);if(!(c!=null&&c.length))return;a||await DI(t,o,r,n),a=Tp(t.id,r)}if(a!=null&&a.length)for(const c of a)bve(t.id,c,e)}}function bve(t,e,r){var C;const{segmentationId:n}=r,{cfun:i,ofun:o}=r.config,{colorLUTIndex:a}=r,s=cu(t),c=(s==null?void 0:s.segmentationId)===n,l=Ha.getStyle({viewportId:t,type:Vt.Labelmap,segmentationId:n}),f=Ha.getRenderInactiveSegmentations(t),u=xm(a),d=Math.min(256,u.length),{outlineWidth:h,renderOutline:g,outlineOpacity:p,activeSegmentOutlineWidthDelta:v}=bI(l,c),y=UE(t,{segmentationId:n,type:Vt.Labelmap});for(let S=0;So.getCurrentImageId()===r),!i||!i.length)?void 0:i[0].getImageData()}else if(e.startsWith("volumeId:")){const r=yl(e),n=sm(r);return!n||!n.length?void 0:n[0].getImageData()}else if(e.startsWith("videoId:")){const r=Ur(e),n=zy(r);return!n||!n.length?void 0:n[0].getImageData()}else throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){var n;const r=(n=e.getViewReferenceId)==null?void 0:n.call(e);if(r)return r;throw new Error("getTargetId: viewport must have a getViewReferenceId method")}undo(){this.doneEditMemo(),Fv.undo()}redo(){Fv.redo()}static createZoomPanMemo(e){const r={pan:e.getPan(),zoom:e.getZoom()},n={restoreMemo:()=>{const i=e.getPan(),o=e.getZoom();e.setZoom(r.zoom),e.setPan(r.pan),e.render(),r.pan=i,r.zoom=o}};return Fv.push(n),n}doneEditMemo(){var e,r;(r=(e=this.memo)==null?void 0:e.commitMemo)!=null&&r.call(e)&&Fv.push(this.memo),this.memo=null}};Lp.defaults={configuration:{strategies:{},defaultStrategy:void 0,activeStrategy:void 0,strategyOptions:{}}};let vi=Lp;vi.toolName="BaseTool";const{isEqual:Ive}=Rn,{EPSILON:Ove}=wf,Mve=1-Ove;function s8(t,e,r){var c;const{viewPlaneNormal:n}=e,i=t.filter(l=>{let f=l.metadata.viewPlaneNormal;if(!l.metadata.referencedImageId&&!f&&l.metadata.FrameOfReferenceUID){for(const d of l.data.handles.points){const h=Mn(Ke(),d,e.focalPoint),g=kt(h,e.viewPlaneNormal);if(!Ive(g,0))return!1}return l.metadata.viewPlaneNormal=e.viewPlaneNormal,l.metadata.cameraFocalPoint=e.focalPoint,!0}if(!f){const{referencedImageId:d}=l.metadata,{imageOrientationPatient:h}=wt("imagePlaneModule",d),g=Ft(h[0],h[1],h[2]),p=Ft(h[3],h[4],h[5]);f=Ke(),kn(f,g,p),l.metadata.viewPlaneNormal=f}const u=Math.abs(kt(n,f))>Mve;return f&&u});if(!i.length)return[];const o=r/2,{focalPoint:a}=e,s=[];for(const l of i){const f=l.data,u=f.handles.points[0]||((c=f.contour)==null?void 0:c.polyline[0]);if(!l.isVisible)continue;const d=Ke();if(!u){s.push(l);continue}Mn(d,a,u);const h=kt(d,n);Math.abs(h)n.isVisible?n.data.isCanvasAnnotation?!0:t.isReferenceViewable(n.metadata,r):!1)}function nB(t){if(t){if(t.data&&t.highlighted)return rc.Highlighted;if(Cm(t.annotationUID))return rc.Selected;if(si(t.annotationUID))return rc.Locked;if(t.data&&t.autoGenerated)return rc.AutoGenerated}return rc.Default}function Pve(t,e,r){const n=bh("textBoxFontSize",t,e,r),i=bh("textBoxFontFamily",t,e,r);return`${n}px ${i}`}const Rve=Object.freeze(Object.defineProperty({__proto__:null,getFont:Pve,getState:nB,style:bE},Symbol.toStringTag,{value:"Module"}));class _f extends vi{constructor(){super(...arguments),this.onImageSpacingCalibrated=e=>{const{element:r,imageId:n}=e.detail,i=Ur(n),o=yc();o.getFramesOfReference().forEach(s=>{const l=o.getAnnotations(s)[this.getToolName()];!l||!l.length||(l.forEach(f=>{var d;if(!((d=f.metadata)!=null&&d.referencedImageId))return;Ur(f.metadata.referencedImageId)===i&&(f.invalidated=!0,f.data.cachedStats={})}),Jh(r))})}}filterInteractableAnnotationsForElement(e,r){if(!(r!=null&&r.length))return[];const n=_e(e),{viewport:i}=n;return Dm(i,r)}createAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n,a=_e(i),{viewport:s}=a,c=s.getCamera(),{viewPlaneNormal:l,viewUp:f,position:u}=c,d=this.getReferencedImageId(s,o,l,f),h=s.getViewReference({points:[o]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...h,referencedImageId:d,viewUp:f,cameraPosition:u},data:{cachedStats:{},handles:{points:[],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}}}getReferencedImageId(e,r,n,i){const o=this.getTargetId(e);let a=o.split(/^[a-zA-Z]+:/)[1];if(e instanceof Tr){const s=yl(o),c=$e.getVolume(s);a=Zl(c,r,n)}return a}getStyle(e,r,n){return bh(e,r,nB(n),this.mode)}}_f.toolName="AnnotationDisplayTool";const{DefaultHistoryMemo:Lve}=fE,{PointsManager:Ave}=Rn;class cr extends _f{static createAnnotation(...e){let r={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(const n of e)r=Ui(r,n);return r}static createAnnotationForViewport(e,...r){return this.createAnnotation({metadata:e.getViewReference()},...r)}static createAndAddAnnotation(e,...r){const n=this.createAnnotationForViewport(e,...r);ln(n,e.element),cn(n,e.element)}constructor(e,r){var n,i;super(e,r),this.mouseMoveCallback=(o,a)=>{if(!a)return!1;const{element:s,currentPoints:c}=o.detail,l=c.canvas;let f=!1;for(const u of a){if(si(u.annotationUID)||!Kr(u.annotationUID))continue;const{data:d}=u,h=d.handles?d.handles.activeHandleIndex:void 0,g=this._imagePointNearToolOrHandle(s,u,l,6),p=g&&!u.highlighted,v=!g&&u.highlighted;p||v?(u.highlighted=!u.highlighted,f=!0):d.handles&&d.handles.activeHandleIndex!==h&&(f=!0)}return f},this.isSuvScaled=cr.isSuvScaled,(n=e.configuration)!=null&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),(i=e.configuration)!=null&&i.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,r,n,i){const o=_e(e),{viewport:a}=o,{data:s}=r,{isCanvasAnnotation:c}=s,{points:l,textBox:f}=s.handles;if(f){const{worldBoundingBox:u}=f;if(u){const d={topLeft:a.worldToCanvas(u.topLeft),topRight:a.worldToCanvas(u.topRight),bottomLeft:a.worldToCanvas(u.bottomLeft),bottomRight:a.worldToCanvas(u.bottomRight)};if(n[0]>=d.topLeft[0]&&n[0]<=d.bottomRight[0]&&n[1]>=d.topLeft[1]&&n[1]<=d.bottomRight[1])return s.handles.activeHandleIndex=null,f}}for(let u=0;u<(l==null?void 0:l.length);u++){const d=l[u],h=c?d.slice(0,2):a.worldToCanvas(d);if(Sr(n,h)this.getStyle(p,n,r),{annotationUID:o}=r,a=Kr(o),s=si(o),c=i("lineWidth"),l=i("lineDash"),f=i("angleArcLineDash"),u=i("color"),d=i("markerSize"),h=i("shadow"),g=this.getLinkedTextBoxStyle(n,r);return{visibility:a,locked:s,color:u,lineWidth:c,lineDash:l,lineOpacity:1,fillColor:u,fillOpacity:0,shadow:h,textbox:g,markerSize:d,angleArcLineDash:f}}_imagePointNearToolOrHandle(e,r,n,i){if(this.getHandleNearImagePoint(e,r,n,i)||this.isPointNearTool(e,r,n,i,"mouse"))return!0}static createAnnotationState(e,r){const{data:n,annotationUID:i}=e,o={...n,cachedStats:{}};delete o.contour,delete o.spline;const a={annotationUID:i,data:structuredClone(o),deleting:r},s=n.contour;return s&&(a.data.contour={...s,polyline:null,pointsManager:Ave.create3(s.polyline.length,s.polyline)}),a}static createAnnotationMemo(e,r,n){if(!r)return;const{newAnnotation:i,deleting:o=i?!1:void 0}=n||{},{annotationUID:a}=r,s=cr.createAnnotationState(r,o),c={restoreMemo:()=>{const l=cr.createAnnotationState(r,o),{viewport:f}=_e(e)||{};if(f==null||f.setViewReference(r.metadata),s.deleting===!0){if(s.deleting=!1,Object.assign(r.data,s.data),r.data.contour){const d=r.data;d.contour.polyline=s.data.contour.pointsManager.points,delete s.data.contour.pointsManager,d.segmentation&&tu(r)}s.data=l.data,ln(r,e),na(r.annotationUID,!0),f==null||f.render();return}if(s.deleting===!1){s.deleting=!0,s.data=l.data,na(r.annotationUID),mn(r.annotationUID),f==null||f.render();return}const u=Hr(a);if(!u){console.warn("No current annotation");return}Object.assign(u.data,s.data),u.data.contour&&(u.data.contour.polyline=s.data.contour.pointsManager.points),s.data=l.data,u.invalidated=!0,cn(u,e,Qt.History)},id:a,operationType:"annotation"};return Lve.push(c),c}createMemo(e,r,n){this.memo||(this.memo=cr.createAnnotationMemo(e,r,n))}static hydrateBase(e,r,n,i={}){if(!r)return null;const{viewport:o}=r,a=o.getFrameOfReferenceUID(),s=o.getCamera(),c=i.viewplaneNormal??s.viewPlaneNormal,l=i.viewUp??s.viewUp,f=i.toolInstance||new e;let u,d=c,h=l;if(i.referencedImageId)u=i.referencedImageId,d=void 0,h=void 0;else if(o instanceof lr){const g=dE(n[0],o);g!==void 0&&(u=o.getImageIds()[g])}else if(o instanceof Tr)u=f.getReferencedImageId(o,n[0],c,l);else throw new Error("Unsupported viewport type");return{FrameOfReferenceUID:a,referencedImageId:u,viewPlaneNormal:d,viewUp:h,instance:f,viewport:o}}}cr.toolName="AnnotationTool";const{CalibrationTypes:kf}=Qa,Vf="px",Uv="voxels",rB=[1,2,3,4],Nve=["3,3","4,7"],kve=["4,3","4,7"],jS={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm²",9:"cm²/s",12:"degrees"},Vve=.001,Pg="²",Ia=(t,e)=>{const{calibration:r,hasPixelSpacing:n}=t;let i=n?"mm":Vf;const o=n?"mm³":Uv;let a=i+Pg,s=1,c="";if(!r||!r.type&&!r.sequenceOfUltrasoundRegions)return{unit:i,areaUnit:a,scale:s,volumeUnit:o};if(r.type===kf.UNCALIBRATED)return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv};if(r.sequenceOfUltrasoundRegions){let f,u;if(Array.isArray(e)&&e.length===2)[f,u]=e;else if(typeof e=="function"){const y=e();f=y[0],u=y[1]}let d=r.sequenceOfUltrasoundRegions.filter(y=>f[0]>=y.regionLocationMinX0&&f[0]<=y.regionLocationMaxX1&&f[1]>=y.regionLocationMinY0&&f[1]<=y.regionLocationMaxY1&&u[0]>=y.regionLocationMinX0&&u[0]<=y.regionLocationMaxX1&&u[1]>=y.regionLocationMinY0&&u[1]<=y.regionLocationMaxY1);if(!(d!=null&&d.length))return{unit:i,areaUnit:a,scale:s,volumeUnit:o};if(d=d.filter(y=>rB.includes(y.regionDataType)&&Nve.includes(`${y.physicalUnitsXDirection},${y.physicalUnitsYDirection}`)),!d.length)return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv};const h=d[0],g=Math.abs(h.physicalDeltaX),p=Math.abs(h.physicalDeltaY);if(Zt(g,p,Vve))s=1/g,c="US Region",i=jS[h.physicalUnitsXDirection]||"unknown",a=i+Pg;else return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv}}else r.scale&&(s=r.scale);return[kf.ERMF,kf.USER,kf.ERROR,kf.PROJECTION,kf.CALIBRATED,kf.UNKNOWN].includes(r==null?void 0:r.type)&&(c=r.type),{unit:i+(c?` ${c}`:""),areaUnit:a+(c?` ${c}`:""),scale:s,volumeUnit:o+(c?` ${c}`:"")}},g5=(t,e)=>{const[r]=e,{calibration:n}=t;let i=["raw"],o=[null],a="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{units:i,values:o};if(n.sequenceOfUltrasoundRegions){const s=n.sequenceOfUltrasoundRegions.filter(p=>rB.includes(p.regionDataType)&&kve.includes(`${p.physicalUnitsXDirection},${p.physicalUnitsYDirection}`));if(!(s!=null&&s.length))return{units:i,values:o};const c=s.find(p=>r[0]>=p.regionLocationMinX0&&r[0]<=p.regionLocationMaxX1&&r[1]>=p.regionLocationMinY0&&r[1]<=p.regionLocationMaxY1);if(!c)return{units:i,values:o};const{referencePixelX0:l=0,referencePixelY0:f=0}=c,{physicalDeltaX:u,physicalDeltaY:d}=c,h=(r[1]-c.regionLocationMinY0-f)*d,g=(r[0]-c.regionLocationMinX0-l)*u;a="US Region",o=[g,h],i=[jS[c.physicalUnitsXDirection],jS[c.physicalUnitsYDirection]]}return{units:i,values:o,calibrationType:a}},c8=t=>{var e;return((e=t.calibration)==null?void 0:e.aspect)||1};function Ww(t,e,r,n){const i=Ke();kn(i,e,t);const o=Ft(...r),a=Ft(...n),s=Ke();qn(s,o,a);const c=ta(s);if(c<1e-4)return{worldWidth:0,worldHeight:0};const l=kt(s,i)/(c*ta(i)),u=Math.sqrt(1-l*l)*c,d=l*c;return{worldWidth:u,worldHeight:d}}function Zh(t,e,r,n){const i=Ke();kn(i,e,t);const o=Ft(...r),a=Ft(...n),s=Ke();qn(s,o,a);const c=ta(s);if(c<1e-4)return{worldWidth:0,worldHeight:0};const l=kt(s,i)/(c*ta(i)),u=Math.sqrt(1-l*l)*c,d=l*c;return{worldWidth:u,worldHeight:d}}function l8(t,e,r,n,i=.25){const o=u8(t,e,{targetVolumeId:r,stepSize:i});let a;for(const s of o){const c=t.getIntensityFromWorld(s),l=n(c,s);l&&(a=l)}return a}function u8(t,e,{targetVolumeId:r,stepSize:n}){const i=t.getCamera(),{viewPlaneNormal:o}=i,{spacingInNormalDirection:a}=jh(t,i,r),s=a*n||1,c=t.getBounds(),l=[];let f=[...e];for(;II(f,c);)l.push([...f]),f[0]+=o[0]*s,f[1]+=o[1]*s,f[2]+=o[2]*s;for(f=[...e];II(f,c);)l.push([...f]),f[0]-=o[0]*s,f[1]-=o[1]*s,f[2]-=o[2]*s;return l}const II=function(t,e){const[r,n,i,o,a,s]=e,c=10;return t[0]>r+c&&t[0]i+c&&t[1]a+c&&t[2]{const c=[Ft(r,n,i),Ft(o,n,i),Ft(r,a,i),Ft(o,a,i),Ft(r,n,s),Ft(o,n,s),Ft(r,a,s),Ft(o,a,s)],l=Ft(e[0],e[1],e[2]),f=Ft(t[0],t[1],t[2]),u=-kt(l,f);let d=null;for(const h of c){const g=kt(l,h)+u;if(d===null)d=Math.sign(g);else if(Math.sign(g)!==d)return!0}return!1},{EPSILON:Fve}=wf,Uve=1-Fve;function zw(t,e){const{viewPlaneNormal:r}=e,n=t.filter(i=>{let o=i.metadata.viewPlaneNormal;if(!o){const{referencedImageId:s}=i.metadata,{imageOrientationPatient:c}=wt("imagePlaneModule",s),l=Ft(c[0],c[1],c[2]),f=Ft(c[3],c[4],c[5]);o=Ke(),kn(o,l,f),i.metadata.viewPlaneNormal=o}const a=Math.abs(kt(r,o))>Uve;return o&&a});return n.length?n:[]}const Bve={filterAnnotationsWithinSlice:s8,getWorldWidthAndHeightFromCorners:Ww,getWorldWidthAndHeightFromTwoPoints:Zh,filterAnnotationsForDisplay:Dm,getPointInLineOfSightWithCriteria:l8,isPlaneIntersectingAABB:iB,filterAnnotationsWithinSamePlane:zw,getPointsInLineOfSight:u8},Gve=Object.freeze(Object.defineProperty({__proto__:null,default:Bve,filterAnnotationsForDisplay:Dm,filterAnnotationsWithinSamePlane:zw,filterAnnotationsWithinSlice:s8,getPointInLineOfSightWithCriteria:l8,getPointsInLineOfSight:u8,getWorldWidthAndHeightFromCorners:Ww,getWorldWidthAndHeightFromTwoPoints:Zh,isPlaneIntersectingAABB:iB},Symbol.toStringTag,{value:"Module"}));function Wo(t,e,r){let n=!0,i=!0;if(typeof t!="function")throw new TypeError("Expected a function");return VE(r)&&(n="leading"in r?!!r.leading:n,i="trailing"in r?!!r.trailing:i),Yh(t,e,{leading:n,trailing:i,maxWait:e})}function Wve(t){var e;return((e=t[0])==null?void 0:e.length)===3}function zve(t,e){if(!e||e.length===0||e.length===t.length)return t;const r=e[e.length-1]-e[0]+1,n=d3(e.map(o=>t[o][0])),i=d3(e.map(o=>t[o][1]));if(Wve(t)){const o=d3(e.map(a=>t[a][2]));return x9(Ig(n,r),Ig(i,r),Ig(o,r))}else return x9(Ig(n,r),Ig(i,r))}function $ve(t,e){const r=[],[n,i]=e,o=i-n+1,a=Math.floor(o/t);let s=0,c=Math.round((o-1)/(a-1)*s)+n;for(;c<=i;)r.push(c),s++,c=Math.round((o-1)/(a-1)*s)+n;return r}function HS(t,e,r,n){const i=r-e+1,o=Math.floor(n/100*i)??1,a=Math.floor(i/o)??1;if(isNaN(i)||!i||!a||i/a<2)return t;const s=Math.max(0,e),c=Math.min(t.length-1,r),l=t.slice(0,s),f=t.slice(c+1,t.length),u=$ve(a,[s,c]),d=zve(t,u);return[...l,...d,...f]}function $w(t,e){var n,i;return e!=null&&e.autoGenerated?!1:((n=t==null?void 0:t.smoothing)==null?void 0:n.smoothOnAdd)===!0||((i=t==null?void 0:t.smoothing)==null?void 0:i.smoothOnEdit)===!0}function jve(t,e){return ko(t,e)<.001}function Hve(t,e){return ko(t,e)===0}function Kve(t,e){for(let r=0;rjve(c,l)===!1,[o,a]=OI([b0(r,t.length,1),r,t],[b0(n,e.length,1),n,e],i,1),[s]=OI([b0(o,t.length,-1),o,t],[b0(a,e.length,-1),a,e],i,-1);return[o,s]}function jw(t,e,r){const{interpolation:n,smoothing:i}=t,o=e;if(n){const{knotsRatioPercentageOnAdd:a,knotsRatioPercentageOnEdit:s,smoothOnAdd:c=!1,smoothOnEdit:l=!1}=i,f=r?s:a;if(r?l:c){const[d,h]=r?qve(e,r):[0,e.length-1];return!e[d]||!e[h]?e:HS(e,d,h,f)}}return o}const Qh=t=>{if(t.shiftKey)return t.ctrlKey?Ki.ShiftCtrl:t.altKey?Ki.ShiftAlt:t.metaKey?Ki.ShiftMeta:Ki.Shift;if(t.ctrlKey)return t.altKey?Ki.CtrlAlt:t.metaKey?Ki.CtrlMeta:Ki.Ctrl;if(t.altKey)return t.metaKey&&Ki.AltMeta||Ki.Alt;if(t.metaKey)return Ki.Meta};function f8(t,e){const r=t[0],n=t[t.length-1],i=rn();ms(i,n[0]-r[0],n[1]-r[1]),Fl(i,i);const o=rn(),a=rn();ms(o,-i[1],i[0]),ms(a,i[1],-i[0]);const s=[(r[0]+n[0])/2,(r[1]+n[1])/2],c={dist:0,index:null};for(let u=0;uc.dist&&(c.dist=h,c.index=u)}return[t[c.index],s].map(e.canvasToWorld)}function Xve(t,e){const{viewport:r}=t,n=e.data.contour.polyline.map(r.worldToCanvas);return f8(n,r)}const{addCanvasPointsToArray:d8,pointsAreWithinCloseContourProximity:oB,getFirstLineSegmentIntersectionIndexes:aB,getSubPixelSpacingAndXYDirections:Yve}=Sf;function Jve(t,e,r){this.isDrawing=!0;const n=t.detail,{currentPoints:i,element:o}=n,a=i.canvas,s=_e(o),{viewport:c}=s,l=Qh(t.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:f,xDir:u,yDir:d}=Yve(c,this.configuration.subPixelResolution)||{};!f||!u||!d||(this.drawData={canvasPoints:[a],polylineIndex:0,contourHoleProcessingEnabled:l,newAnnotation:!0},this.commonData={annotation:e,viewportIdsToRender:r,spacing:f,xDir:u,yDir:d,movingTextBox:!1},Ye.isInteractingWithTool=!0,o.addEventListener(k.MOUSE_UP,this.mouseUpDrawCallback),o.addEventListener(k.MOUSE_DRAG,this.mouseDragDrawCallback),o.addEventListener(k.MOUSE_CLICK,this.mouseUpDrawCallback),o.addEventListener(k.TOUCH_END,this.mouseUpDrawCallback),o.addEventListener(k.TOUCH_DRAG,this.mouseDragDrawCallback),o.addEventListener(k.TOUCH_TAP,this.mouseUpDrawCallback),Gt(o))}function Zve(t){Ye.isInteractingWithTool=!1,t.removeEventListener(k.MOUSE_UP,this.mouseUpDrawCallback),t.removeEventListener(k.MOUSE_DRAG,this.mouseDragDrawCallback),t.removeEventListener(k.MOUSE_CLICK,this.mouseUpDrawCallback),t.removeEventListener(k.TOUCH_END,this.mouseUpDrawCallback),t.removeEventListener(k.TOUCH_DRAG,this.mouseDragDrawCallback),t.removeEventListener(k.TOUCH_TAP,this.mouseUpDrawCallback),Jt(t)}function Qve(t){const e=t.detail,{currentPoints:r,element:n}=e,i=r.world,o=r.canvas,a=_e(n),{viewport:s}=a,{annotation:c,viewportIdsToRender:l,xDir:f,yDir:u,spacing:d,movingTextBox:h}=this.commonData,{polylineIndex:g,canvasPoints:p,newAnnotation:v}=this.drawData;this.createMemo(n,c,{newAnnotation:v});const y=p[p.length-1],m=s.canvasToWorld(y),w=Ke();qn(w,i,m);const x=Math.abs(kt(w,f)),C=Math.abs(kt(w,u));if(!(x<=d[0]&&C<=d[1])){if(h){this.isDrawing=!1;const{deltaPoints:S}=e,T=S.world,{textBox:_}=c.data.handles,{worldPosition:E}=_;E[0]+=T[0],E[1]+=T[1],E[2]+=T[2],_.hasMoved=!0}else{const S=this.findCrossingIndexDuringCreate(t);if(S!==void 0)this.applyCreateOnCross(t,S);else{const T=d8(n,p,o,this.commonData);this.drawData.polylineIndex=g+T}c.invalidated=!0}Be(l),c.invalidated&&cn(c,n,Qt.HandlesUpdated)}}function e2e(t){const{allowOpenContours:e}=this.configuration,{canvasPoints:r,contourHoleProcessingEnabled:n}=this.drawData,i=r[0],o=r[r.length-1],a=t.detail,{element:s}=a;this.doneEditMemo(),this.drawData.newAnnotation=!1,e&&!oB(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:n}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:n})}function t2e(t,e){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:r}=this.drawData,{contourHoleProcessingEnabled:n,minPointsToSave:i}=e??{};if(i&&r.length=2)if(c.length>this.configuration.checkCanvasEditFallbackProximity){const u=c[0],d=[];for(let p=0;pp.distance-v.distance);const h=[d[0],d[1]],g=Math.min(h[0].index,h[1].index);this.editData.startCrossingIndex=g}else{const u=rn();Jr(u,c[1],c[0]),Fl(u,u);const d=6,h=[c[0][0]-u[0]*d,c[0][1]-u[1]*d],g=Md(l,h,c[0],e);if(g){const p=[h];u2e(n,p,c[0],this.commonData),c.unshift(...p),this.removePointsUpUntilFirstCrossing(e),this.editData.editIndex=c.length-1,this.editData.startCrossingIndex=g[0]}}}function d2e(t){const{editCanvasPoints:e,prevCanvasPoints:r}=this.editData;let n=0;for(let i=0;i0;n--){const i=[r[n],r[n-1]],o=!!Md(e,i[0],i[1],t);if(r.pop(),o)break}}function p2e(){const{editCanvasPoints:t,prevCanvasPoints:e,startCrossingIndex:r}=this.editData;if(r===void 0)return;const n=t[t.length-1],i=[];for(let a=0;aa.distance-s.distance);const o=t.slice(0,-1);for(let a=0;a1&&this.checkForFirstCrossing(t,!0),this.editData.snapIndex=this.findSnapIndex(),this.editData.snapIndex===-1){this.finishEditAndStartNewEdit(t);return}this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(t),g!==void 0&&this.checkForSecondCrossing(t,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(t)),Be(c)}function S2e(t){const e=t.detail,{element:r}=e,n=_e(r),{viewport:i,renderingEngine:o}=n,{annotation:a,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:c,editCanvasPoints:l}=this.editData;wc(a,{points:c,closed:!0,targetWindingDirection:ra.Clockwise},i),a.autoGenerated&&(a.autoGenerated=!1),cn(a,r);const f=l.pop();this.editData={prevCanvasPoints:c,editCanvasPoints:[f],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0,annotation:a},Be(s)}function T2e(t){const{prevCanvasPoints:e,editCanvasPoints:r,startCrossingIndex:n,snapIndex:i}=this.editData;if(n===void 0||i===void 0)return;const o=t.detail,{element:a}=o,s=[...r];sB(a,s,e[i],this.commonData),s.length>r.length&&s.pop();let c,l;n>i?(c=i,l=n):(c=n,l=i);const f=Sr(e[c],s[0]),u=Sr(e[c],s[s.length-1]),d=Sr(e[l],s[0]),h=Sr(e[l],s[s.length-1]),g=[];for(let C=0;C=0;C--){const S=s[C];g.push([S[0],S[1]])}for(let C=l;C=0;C--){const S=s[C];y.push([S[0],S[1]])}const m=MI(g),w=MI(y);return m>w?g:y}function _2e(t){const e=t.detail,{element:r}=e;this.completeClosedContourEdit(r)}function E2e(t){var s;const e=_e(t),{viewport:r}=e,{annotation:n,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();const{fusedCanvasPoints:o,prevCanvasPoints:a}=this.editData;if(o){const c=$w(this.configuration,n)?jw(this.configuration,o,a):o,l=((s=this.configuration)==null?void 0:s.decimate)||{};wc(n,{points:c,closed:!0,targetWindingDirection:ra.Clockwise},r,{decimate:{enabled:!!l.enabled,epsilon:l.epsilon}}),n.autoGenerated&&(n.autoGenerated=!1),cn(n,t)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,Be(i),this.deactivateClosedContourEdit(t)}function b2e(t){this.completeClosedContourEdit(t)}function D2e(t){t.activateClosedContourEdit=w2e.bind(t),t.deactivateClosedContourEdit=x2e.bind(t),t.mouseDragClosedContourEditCallback=C2e.bind(t),t.mouseUpClosedContourEditCallback=_2e.bind(t),t.finishEditAndStartNewEdit=S2e.bind(t),t.fuseEditPointsWithClosedContour=T2e.bind(t),t.cancelClosedContourEdit=b2e.bind(t),t.completeClosedContourEdit=E2e.bind(t)}const{addCanvasPointsToArray:cB,getSubPixelSpacingAndXYDirections:I2e}=Sf;function O2e(t,e,r){this.isEditingOpen=!0;const n=t.detail,{currentPoints:i,element:o}=n,a=i.canvas,s=_e(o),{viewport:c}=s;this.doneEditMemo();const l=e.data.contour.polyline.map(c.worldToCanvas),{spacing:f,xDir:u,yDir:d}=I2e(c,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:l,editCanvasPoints:[a],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:e,viewportIdsToRender:r,spacing:f,xDir:u,yDir:d,movingTextBox:!1},Ye.isInteractingWithTool=!0,o.addEventListener(k.MOUSE_UP,this.mouseUpOpenContourEditCallback),o.addEventListener(k.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),o.addEventListener(k.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),o.addEventListener(k.TOUCH_END,this.mouseUpOpenContourEditCallback),o.addEventListener(k.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),o.addEventListener(k.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Gt(o)}function M2e(t){Ye.isInteractingWithTool=!1,t.removeEventListener(k.MOUSE_UP,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(k.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.TOUCH_END,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(k.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Jt(t)}function P2e(t){const e=t.detail,{currentPoints:r,element:n}=e,i=r.world,o=r.canvas,a=_e(n),{viewport:s}=a,{viewportIdsToRender:c,xDir:l,yDir:f,spacing:u}=this.commonData,{editIndex:d,editCanvasPoints:h,startCrossingIndex:g}=this.editData,p=h[h.length-1],v=s.canvasToWorld(p),y=Ke();this.createMemo(n,this.commonData.annotation),qn(y,i,v);const m=Math.abs(kt(y,l)),w=Math.abs(kt(y,f));if(m<=u[0]&&w<=u[1])return;g!==void 0&&this.checkAndRemoveCrossesOnEditLine(t);const x=cB(n,h,o,this.commonData),C=d+x;this.editData.editIndex=C,g===void 0&&h.length>1&&this.checkForFirstCrossing(t,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(t),g!==void 0&&this.checkForSecondCrossing(t,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(t)):this.checkIfShouldOverwriteAnEnd(t)&&this.openContourEditOverwriteEnd(t),Be(c)}function R2e(t){const e=t.detail,{element:r}=e,n=_e(r),{viewport:i}=n,{annotation:o,viewportIdsToRender:a}=this.commonData,s=this.fuseEditPointsForOpenContourEndEdit();wc(o,{points:s,closed:!1},i);const c=o.data.contour.polyline;o.data.handles.points=[c[0],c[c.length-1]],o.data.handles.activeHandleIndex=1,cn(o,r),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.doneEditMemo(),this.deactivateOpenContourEdit(r),this.activateOpenContourEndEdit(t,o,a,null)}function L2e(t){const e=t.detail,{currentPoints:r,lastPoints:n}=e,i=r.canvas,o=n.canvas,{snapIndex:a,prevCanvasPoints:s,startCrossingIndex:c}=this.editData;if(c===void 0||a===void 0)return!1;if(a===-1)return!0;if(a!==0&&a!==s.length-1)return!1;const l=i,f=o,u=s[a],d=rn(),h=rn();ms(d,l[0]-f[0],l[1]-f[1]),ms(h,l[0]-u[0],l[1]-u[1]);const g=a4(d,h),p=Math.sqrt(d[0]*d[0]+d[1]*d[1]),v=Math.sqrt(h[0]*h[0]+h[1]*h[1]);return Math.acos(g/(p*v))=n;s--){const c=e[s];i.push([c[0],c[1]])}else for(let s=0;s=0;s--){const c=r[s];i.push([c[0],c[1]])}return i}function N2e(t){const{prevCanvasPoints:e,editCanvasPoints:r,startCrossingIndex:n,snapIndex:i}=this.editData;if(n===void 0||i===void 0)return;const o=t.detail,{element:a}=o,s=[...r];cB(a,s,e[i],this.commonData),s.length>r.length&&s.pop();let c,l;n>i?(c=i,l=n):(c=n,l=i);const f=Sr(e[c],s[0]),u=Sr(e[c],s[s.length-1]),d=Sr(e[l],s[0]),h=Sr(e[l],s[s.length-1]),g=[];for(let y=0;y=0;y--){const m=s[y];g.push([m[0],m[1]])}for(let y=l;yHr(r).data.contour.polyline)}function Im(t,e){const r=lB(t),n=[];return r.forEach(i=>{const o=i.length,a=new Array(o);for(let s=0;sn.worldToCanvas(l)),a=Im(r,n),s=[o,...a];Hl(e,r.annotationUID,"1",s,i)}function X2e(t,e,r){var c;const{viewport:n}=t,i=this._getRenderingOptions(t,r),o=r.data.contour.polyline.map(l=>n.worldToCanvas(l));gc(e,r.annotationUID,"1",o,i);const s=r.data.handles.activeHandleIndex;if(((c=this.configuration.alwaysRenderOpenContourHandles)==null?void 0:c.enabled)===!0){const l=this.configuration.alwaysRenderOpenContourHandles.radius,f="0",u=[o[0],o[o.length-1]];s===0?u.shift():s===1&&u.pop(),or(e,r.annotationUID,f,u,{color:i.color,handleRadius:l})}if(s!==null){const l="1",f=s===0?0:o.length-1,u=o[f];or(e,r.annotationUID,l,[u],{color:i.color})}}function Y2e(t,e,r){const{viewport:n}=t,{openUShapeContourVectorToPeak:i}=r.data,{polyline:o}=r.data.contour;if(this.renderOpenContour(t,e,r),!i)return;const a=n.worldToCanvas(o[0]),s=n.worldToCanvas(o[o.length-1]),c=[n.worldToCanvas(i[0]),n.worldToCanvas(i[1])],l=this._getRenderingOptions(t,r);gc(e,r.annotationUID,"first-to-last",[a,s],{color:l.color,width:l.width,closePath:!1,lineDash:"2,2"}),gc(e,r.annotationUID,"midpoint-to-open-contour",[c[0],c[1]],{color:l.color,width:l.width,closePath:!1,lineDash:"2,2"})}function J2e(t,e,r){const n=this._getRenderingOptions(t,r),{allowOpenContours:i}=this.configuration,{canvasPoints:o}=this.drawData;if(n.closePath=!1,gc(e,r.annotationUID,"1",o,n),i){const a=o[0],s=o[o.length-1];$2e(a,s,this.configuration.closeContourProximity)?gc(e,r.annotationUID,"2",[s,a],n):or(e,r.annotationUID,"0",[a],{color:n.color,handleRadius:2})}}function Z2e(t,e,r){const{viewport:n}=t,{fusedCanvasPoints:i}=this.editData;if(i===void 0){this.renderClosedContour(t,e,r);return}const o=Im(r,n),a=[i,...o],s=this._getRenderingOptions(t,r),c="preview-1";r.parentAnnotationUID&&s.fillOpacity&&(s.fillOpacity=0),Hl(e,r.annotationUID,c,a,s)}function Q2e(t,e,r){const{fusedCanvasPoints:n}=this.editData;if(n===void 0){this.renderOpenContour(t,e,r);return}const i=this._getRenderingOptions(t,r);gc(e,r.annotationUID,"preview-1",n,i)}function eye(t,e,r){if(r.parentAnnotationUID)return;const{viewport:n}=t,i=this._getRenderingOptions(t,r),o=r.data.contour.polyline.map(g=>n.worldToCanvas(g)),a=Im(r,n),s="1",c=o[0],l=6,f=100,u=[];for(let g=0;g0}else if(t instanceof lr){const{preScale:r}=t.getImageData()||{};return!!(r!=null&&r.scaled)}else return!1}function KS(t,e){let r=0;for(let n=0;nthis.moveAnnotation(i,r))}updateContourPolyline(e,r,n,i){var a;const o=((a=this.configuration)==null?void 0:a.decimate)||{};wc(e,r,n,{decimate:{enabled:!!o.enabled,epsilon:o.epsilon},updateWindingDirection:i==null?void 0:i.updateWindingDirection})}getPolylinePoints(e){var r;return((r=e.data.contour)==null?void 0:r.polyline)??e.data.polyline}renderAnnotationInstance(e){const{enabledElement:r,annotationStyle:n,svgDrawingHelper:i}=e,o=e.annotation;if(o.parentAnnotationUID)return;const{annotationUID:a}=o,{viewport:s}=r,{worldToCanvas:c}=s,l=this.getPolylinePoints(o).map(y=>c(y)),{lineWidth:f,lineDash:u,color:d,fillColor:h,fillOpacity:g}=n,p=Im(o,s),v=[l,...p];return Hl(i,a,"contourPolyline",v,{color:d,lineDash:u,lineWidth:Math.max(.1,f),fillColor:h,fillOpacity:g}),!0}}class oye{constructor(){this.annotationUIDs=new Set,this._isVisible=!0,this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(e=!0,r,n){this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach(i=>{const o=Hr(i);if(!o){this.annotationUIDs.delete(i);return}if(o.isVisible===e||!e&&(n==null?void 0:n(i))===!1)return;o.isVisible=e;const a={...r,annotation:o};ut(et,k.ANNOTATION_MODIFIED,a)}))}get isVisible(){return this._isVisible}findNearby(e,r){const n=[...this.annotationUIDs];if(n.length===0)return null;if(!e)return n[r===1?0:n.length-1];const i=n.indexOf(e);return i===-1||i+r<0||i+r>=n.length?null:n[i+r]}add(...e){e.forEach(r=>this.annotationUIDs.add(r))}remove(...e){e.forEach(r=>this.annotationUIDs.delete(r))}clear(){this.annotationUIDs.clear()}}const mr={...dpe,...cpe,resetAnnotationManager:B1e},aye=Object.freeze(Object.defineProperty({__proto__:null,AnnotationGroup:oye,FrameOfReferenceSpecificAnnotationManager:fU,config:Rve,locking:O1e,selection:L1e,state:mr,visibility:F1e},Symbol.toStringTag,{value:"Module"})),PI="PlanarFreehandContourSegmentationTool";function h8(t,e=[]){const{viewport:r,sliceData:n,annotation:i}=t,o=new Map,{toolName:a,originalToolName:s}=i.metadata,c=s||a,l=(hn(c,r.element)||[]).filter(f=>!f.metadata.originalToolName||f.metadata.originalToolName===c);if(c!==PI){const f=hn(PI,r.element);f!=null&&f.length&&f.forEach(u=>{const{metadata:d}=u;d.originalToolName===c&&d.originalToolName!==d.toolName&&l.push(u)})}if(!(l!=null&&l.length))return o;for(let f=0;fh.metadata.sliceIndex===f);if(!(u!=null&&u.length))continue;const d=u.filter(h=>e.every(g=>{const p=g.parentKey?g.parentKey(h):h,v=p==null?void 0:p[g.key];return Array.isArray(v)?v.every((y,m)=>y===g.value[m]):v===g.value}));d.length&&o.set(f,d)}return o}function sye(t,e){const r=h8(t,e),n=[];if(!(r!=null&&r.size))return n;for(const i of r.values())i.forEach(o=>{n.push(o)});return n}function uB(t,e,r){const n=Ui({data:{},metadata:{}},r);return Object.assign(n,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(n.data,{handles:{points:e.points||e||[],interpolationSources:e.sources,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{...r.data.contour,polyline:t}}),n}function cye(t,e){const r=h8(e,[{key:"interpolationUID",value:e.interpolationUID}]),n=lye(r);if(!n){console.warn("No annotations found to interpolate",r);return}const i=uye(r,t.annotationUID),o=[];for(let a=n[0]+1;a=e[0];o--){const a=r.get(o);if(a!=null&&a.length){if(a[0].autoGenerated)continue;a.length>1&&(i=!1),n.push(o);break}}if(!(!i||!n.length)){for(let o=t+1;o<=e[1];o++){const a=r.get(o);if(a!=null&&a.length){if(a[0].autoGenerated)continue;a.length>1&&(i=!1),n.push(o);break}}if(!(!i||n.length<2))return n}}const{PointsManager:RI}=Rn;function gye(t,e=12){const r=RI.create3(e);r.sources=[];const{sources:n}=r,{length:i,sources:o=[]}=t,a=5;if(in.push(RI.create3(e)));const c=pye(t,a),l=mye(c,e),f=[];if((l==null?void 0:l.length)>2){let u=-1;const d=s/3;l.forEach(p=>{const[v,,y]=p,m=Math.ceil((v+y)/2);y-u2*d?(o0(f,u,v,s,i),u=o0(f,v,m,s,i)):u=o0(f,u,m,s,i),y-u>d&&(u=o0(f,u,y,s,i)))});const h=f[0];qS(h+i-u,i)>2*d&&o0(f,u,h-d,s,i)}else{const u=Math.floor(i/e);o0(f,-1,i-u,u,i)}return f.forEach(u=>{const d=t.getPointArray(u);r.push(d),o.forEach((h,g)=>n[g].push(h.getPoint(u)))}),r}function pye(t,e=6){const{length:r}=t,n=Ke(),i=Ke(),o=new Float32Array(r);for(let a=0;a{try{e&&(r.isInterpolationUpdate=!0,r.autoGenerated=!1),wye(t)}finally{e&&(r.autoGenerated=!0)}})}function wye(t){const{annotation:e}=t;yye(e);const{interpolationData:r,interpolationList:n}=cye(e,t)||{};if(!r||!n)return;const i={toolName:e.metadata.toolName,toolType:e.metadata.toolName,viewport:t.viewport};for(let l=0;ls.x.length,n)})}function Cye(t,e,r,n,i,o,a){const[s,c]=n,l=(r-s)/(c-s),f=i.get(s)[0],u=i.get(c)[0],d=_ye(t,e,l,o),h=l>.5?u:f,g=gye(d);i.has(r)?Tye(d,g,r,h,a):Sye(d,g,r,h,a)}function Sye(t,e,r,n,i){var f;const o=t.points,{viewport:a}=i,s=uB(o,e,n),c=a.getViewReference({sliceIndex:r});if(!c)throw new Error(`Can't find slice ${r}`);Object.assign(s.metadata,c),mr.addAnnotation(s,a.element),(f=n.onInterpolationComplete)==null||f.call(n,s,n);const{parentAnnotationUID:l}=n;if(l){const u=mr.getAnnotation(l),d=fB(u,r,i);Uw(a,d,s)}}function fB(t,e,r){const{viewport:n}=r,i=mr.getAnnotations(t.metadata.toolName,n.element);for(let o=0;o!f.autoGenerated)||(s=o||s===n||c.forEach(l=>{l.autoGenerated&&(mr.removeAnnotation(l.annotationUID),a.push(l))});if(a.length){const s={annotations:a,element:t.viewport.element,viewportId:t.viewport.id,renderingEngineId:t.viewport.getRenderingEngine().id};ut(t.viewport.element,k.INTERPOLATED_ANNOTATIONS_REMOVED,s)}if(i>=0&&o{var h;const r=e.detail.annotation;if(!(r!=null&&r.metadata))return;const{toolName:n,originalToolName:i}=r.metadata;if(!fs.toolNames.includes(n)&&!fs.toolNames.includes(i))return;const o=F2(r);if(!o){console.warn("Unable to find viewport for",r);return}const a=I3(o),s={viewport:o,sliceData:a,annotation:r,interpolationUID:r.interpolationUID},c=!!r.interpolationUID;if(r.autoGenerated=!1,c){GI(s),V2(s);return}const l=[{key:"segmentIndex",value:r.data.segmentation.segmentIndex,parentKey:g=>g.data.segmentation},{key:"viewPlaneNormal",value:r.metadata.viewPlaneNormal,parentKey:g=>g.metadata},{key:"viewUp",value:r.metadata.viewUp,parentKey:g=>g.metadata}];let f=sye(s,l);const{sliceIndex:u}=r.metadata,d=new Set;f.forEach(g=>{if(g.interpolationCompleted||g.metadata.sliceIndex===u){const{interpolationUID:p}=g;d.add(p)}}),f=f.filter(g=>!d.has(g.interpolationUID)),r.interpolationUID=((h=f[0])==null?void 0:h.interpolationUID)||Iye(),s.interpolationUID=r.interpolationUID,V2(s)},fs.handleAnnotationUpdate=e=>{const r=e.detail.annotation,{changeType:n=Qt.HandlesUpdated}=e.detail;if(!(r!=null&&r.metadata))return;const{toolName:i,originalToolName:o}=r.metadata;if(!fs.toolNames.includes(i)&&!fs.toolNames.includes(o)||!Oye.includes(n))return;const a=F2(r);if(!a){console.warn("Unable to find matching viewport for annotation interpolation",r);return}r.autoGenerated&&(tu(r),r.autoGenerated=!1);const s=I3(a),c={viewport:a,sliceData:s,annotation:r,interpolationUID:r.interpolationUID,isInterpolationUpdate:n===Qt.InterpolationUpdated};V2(c)},fs.handleAnnotationDelete=e=>{const r=e.detail.annotation;if(!(r!=null&&r.metadata))return;const{toolName:n}=r.metadata;if(!fs.toolNames.includes(n)||r.autoGenerated)return;const i=F2(r);if(!i){console.warn("No viewport, can't delete interpolated results",r);return}const o=I3(i),a={viewport:i,sliceData:o,annotation:r,interpolationUID:r.interpolationUID};r.autoGenerated=!1,GI(a)};let ol=fs;function I3(t){return{numberOfSlices:t.getNumberOfSlices(),imageIndex:t.getCurrentImageIdIndex()}}function dB(t){t.forEach(e=>{const r=ni(e);if(!r){console.warn(`ToolGroup not available for ${e}`);return}r.getViewportsInfo().forEach(i=>{const{renderingEngineId:o,viewportId:a}=i,s=jr(o);if(!s){console.warn(`RenderingEngine not available for ${o}`);return}const c=s.getViewport(a);Jh(c.element)})})}function eg(t){const n=rr.getState().viewportSegRepresentations;return Object.entries(n).filter(([,o])=>o.some(a=>a.segmentationId===t)).map(([o])=>o)}function Mye(t,e){const r=Vn(t);if(!r)throw new Error(`No segmentation state found for ${t}`);const{segments:n}=r;return n[e].locked}function Pye(t,e,r=!0){const n=Vn(t);if(!n)throw new Error(`No segmentation state found for ${t}`);const{segments:i}=n;i[e].locked=r,es(t)}function zd(t){const e=Vn(t);if(!e)throw new Error(`No segmentation state found for ${t}`);const{segments:r}=e;return Object.keys(r).filter(i=>r[i].locked).map(i=>parseInt(i))}const Rye=Object.freeze(Object.defineProperty({__proto__:null,getLockedSegmentIndices:zd,isSegmentIndexLocked:Mye,setSegmentIndexLocked:Pye},Symbol.toStringTag,{value:"Module"}));function hB(){return rr.getNextColorLUTIndex()}const p5=[[0,0,0,0],[221,84,84,255],[77,228,121,255],[166,70,235,255],[189,180,116,255],[109,182,196,255],[204,101,157,255],[123,211,94,255],[93,87,218,255],[225,128,80,255],[73,232,172,255],[181,119,186,255],[176,193,112,255],[105,153,200,255],[208,97,120,255],[90,215,101,255],[135,83,222,255],[229,178,76,255],[122,183,181,255],[190,115,171,255],[149,197,108,255],[100,118,205,255],[212,108,93,255],[86,219,141,255],[183,79,226,255],[233,233,72,255],[118,167,187,255],[194,111,146,255],[116,201,104,255],[115,96,209,255],[216,147,89,255],[82,223,188,255],[230,75,224,255],[163,184,121,255],[114,143,191,255],[198,107,114,255],[99,206,122,255],[153,92,213,255],[220,192,85,255],[78,215,227,255],[234,71,173,255],[141,188,117,255],[110,113,195,255],[202,128,103,255],[95,210,157,255],[195,88,217,255],[206,224,81,255],[74,166,231,255],[185,120,139,255],[113,192,113,255],[133,106,199,255],[207,162,98,255],[91,214,198,255],[221,84,198,255],[159,228,77,255],[70,111,235,255],[189,119,116,255],[109,196,138,255],[165,101,204,255],[211,201,94,255],[87,191,218,255],[225,80,153,255],[106,232,73,255],[124,119,186,255],[193,142,112,255],[105,200,168,255],[203,97,208,255],[184,215,90,255],[83,147,222,255],[229,76,101,255],[122,183,130,255],[146,115,190,255],[197,171,108,255],[100,205,205,255],[212,93,177,255],[141,219,86,255],[79,97,226,255],[233,99,72,255],[118,187,150,255],[173,111,194,255],[197,201,104,255],[96,171,209,255],[216,89,137,255],[94,223,82,255],[107,75,230,255],[184,153,121,255],[114,191,175,255],[198,107,191,255],[166,206,99,255],[92,132,213,255],[220,85,91,255],[78,227,115,255],[159,71,234,255],[188,176,117,255],[110,185,195,255],[202,103,161,255],[129,210,95,255],[88,88,217,255],[224,123,81,255],[74,231,166,255],[177,120,185,255],[179,192,113,255],[106,156,199,255],[207,98,125,255],[91,214,96,255],[130,84,221,255],[228,171,77,255],[70,235,221,255],[189,116,174,255],[153,196,109,255],[101,123,204,255],[211,104,94,255],[87,218,136,255],[177,80,225,255],[232,225,73,255],[119,169,186,255],[193,112,149,255],[121,200,105,255],[111,97,208,255],[215,142,90,255],[83,222,181,255],[229,76,229,255],[165,183,122,255],[115,146,190,255],[197,108,119,255],[100,205,118,255],[148,93,212,255],[219,186,86,255],[79,220,226,255],[233,72,179,255],[144,187,118,255],[111,118,194,255],[201,124,104,255],[96,209,153,255],[189,89,216,255],[211,223,82,255],[75,172,230,255],[184,121,142,255],[117,191,114,255],[130,107,198,255],[206,157,99,255],[92,213,193,255],[220,85,203,255],[165,227,78,255],[71,118,234,255],[188,117,117,255],[110,195,135,255],[161,103,202,255],[210,195,95,255],[88,195,217,255],[224,81,158,255],[113,231,74,255],[123,120,185,255],[192,139,113,255],[106,199,164,255],[198,98,207,255],[188,214,91,255],[84,153,221,255],[228,77,108,255],[70,235,84,255],[143,116,189,255],[196,167,109,255],[101,204,199,255],[211,94,182,255],[147,218,87,255],[80,104,225,255],[232,93,73,255],[119,186,147,255],[170,112,193,255],[200,200,105,255],[97,175,208,255],[215,90,142,255],[100,222,83,255],[101,76,229,255],[183,150,122,255],[115,190,171,255],[197,108,194,255],[170,205,100,255],[93,138,212,255],[219,86,97,255],[79,226,110,255],[153,72,233,255],[187,173,118,255],[111,187,194,255],[201,104,165,255],[134,209,96,255],[89,95,216,255],[223,117,82,255],[75,230,159,255],[174,121,184,255],[182,191,114,255],[107,160,198,255],[206,99,130,255],[92,213,92,255],[124,85,220,255],[227,165,78,255],[71,234,214,255],[188,117,176,255],[156,195,110,255],[103,128,202,255],[210,100,95,255],[88,217,131,255],[170,81,224,255],[231,218,74,255],[120,172,185,255],[192,113,153,255],[125,199,106,255],[107,98,207,255],[214,137,91,255],[84,221,175,255],[222,77,228,255],[194,235,70,255],[116,149,189,255],[196,109,123,255],[101,204,114,255],[143,94,211,255],[218,180,87,255],[80,225,225,255],[232,73,186,255],[147,186,119,255],[112,122,193,255],[200,121,105,255],[97,208,148,255],[184,90,215,255],[216,222,83,255],[76,178,229,255],[183,122,145,255],[121,190,115,255],[126,108,197,255],[205,153,100,255],[93,212,187,255],[219,86,208,255],[171,226,79,255],[72,126,233,255],[187,118,121,255],[111,194,132,255],[157,104,201,255],[209,190,96,255],[89,200,216,255],[223,82,164,255],[120,230,75,255],[121,121,184,255],[191,136,114,255],[107,198,160,255],[192,99,206,255],[193,213,92,255],[85,158,220,255],[227,78,115,255],[71,234,78,255],[141,117,188,255],[195,163,110,255],[103,202,194,255],[210,95,186,255],[153,217,88,255],[81,111,224,255]];function Ep(t,e){const r=rr,n=e??hB();let i=[...t];if(Zt(i[0],[0,0,0,0])||(console.warn("addColorLUT: [0, 0, 0, 0] color is not provided for the background color (segmentIndex =0), automatically adding it"),i=[[0,0,0,0],...i]),i=i.map(o=>o.length===3?[o[0],o[1],o[2],255]:o),i.length<255){const o=p5.slice(i.length);i=[...i,...o]}return r.addColorLUT(i,n),n}function Lye(t,e){if(!t)throw new Error("addColorLUT: colorLUT is required");return Ep(t,e)}function Aye(t,e,r){if(!xm(r))throw new Error(`setColorLUT: could not find colorLUT with index ${r}`);const n=Ea(t,{segmentationId:e});if(!n)throw new Error(`viewport specific state for viewport ${t} does not exist`);n.forEach(i=>{i.colorLUTIndex=r}),qc(t,e)}function iu(t,e,r){const n=Ea(t,{segmentationId:e});if(!n||n.length===0)return null;const i=n[0],{colorLUTIndex:o}=i,a=xm(o);let s=a[r];if(!s){if(typeof r!="number")return console.warn(`Can't create colour for LUT index ${r}`),null;s=a[r]=[0,0,0,0]}return s}function gB(t,e,r,n){const i=iu(t,e,r);for(let o=0;oPr(c).id);dB(s)}return i}_getContourSegmentationStyle(e){const r=e.annotation,{segmentationId:n,segmentIndex:i}=r.data.segmentation,{viewportId:o}=e.styleSpecifier,a=Ea(o,{segmentationId:n});if(!(a!=null&&a.length))return{};a.length>1?a.find(v=>v.segmentationId===n&&v.type===Vt.Contour):a[0];const{autoGenerated:s}=r,l=zd(n).includes(i),{color:f,fillColor:u,lineWidth:d,fillOpacity:h,lineDash:g,visibility:p}=mB({segmentationId:n,segmentIndex:i,viewportId:o,autoGenerated:s});return{color:f,fillColor:u,lineWidth:d,fillOpacity:h,lineDash:g,textbox:{color:f},visibility:p,locked:l}}};Q8.PreviewSegmentIndex=255;let L1=Q8;function vB(t,e){const r=wt("generalSeriesModule",t);return uu(r.modality,t,e)}function uu(t,e,r){return t==="CT"?"HU":t==="PT"?kye(e,r):""}function kye(t,e){if(!e.isPreScaled)return"raw";if(e.isSuvScaled)return"SUV";const r=wt("generalSeriesModule",t);if((r==null?void 0:r.modality)==="PT"){const n=wt("petSeriesModule",t);return(n==null?void 0:n.units)||"unitless"}return"unknown"}const{pointCanProjectOnLine:WI}=Sf,{EPSILON:Vye}=wf,Fye=1-Vye,eb=class eb extends L1{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:Ki.Shift,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,makeClockWise:!0,subPixelResolution:4,smoothing:{smoothOnAdd:!1,smoothOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},interpolation:{enabled:!1,onInterpolationComplete:null},decimate:{enabled:!1,epsilon:.1},displayOnePointAsCrosshairs:!1,calculateStats:!0,getTextLines:Uye,statsCalculator:dl}}){super(e,r),this.isDrawing=!1,this.isEditingClosed=!1,this.isEditingOpen=!1,this.addNewAnnotation=n=>{const i=n.detail,{element:o}=i,a=this.createAnnotation(n);this.addAnnotation(a,o);const s=At(o,this.getToolName());return this.activateDraw(n,a,s),n.preventDefault(),Be(s),a},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,c=At(s,this.getToolName());this.activateOpenContourEndEdit(n,i,c,o)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o,s=At(a,this.getToolName());i.data.contour.closed?this.activateClosedContourEdit(n,i,s):this.activateOpenContourEdit(n,i,s),n.preventDefault()},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{polyline:l}=i.data.contour;let f=c.worldToCanvas(l[0]);for(let h=1;h{const i=this.isDrawing,o=this.isEditingOpen,a=this.isEditingClosed;i?this.cancelDrawing(n):o?this.cancelOpenContourEdit(n):a&&this.cancelClosedContourEdit(n)},this._calculateCachedStats=(n,i,o,a)=>{const{data:s}=n,{cachedStats:c}=s,{polyline:l,closed:f}=s.contour,u=Object.keys(c);for(let h=0;hi.worldToCanvas(I)),w={isPreScaled:lu(i,g),isSuvScaled:this.isSuvScaled(i,g,n.metadata.referencedImageId)},x=uu(y.Modality,n.metadata.referencedImageId,w),C=Ia(p,()=>{const I=s.contour.polyline,P=I.length,O=new Array(P);for(let ie=0;ie{const{data:s}=n,c=this.getTargetId(i),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:o.viewport.id,annotationUID:n.annotationUID},f=this.getLinkedTextBoxStyle(l,n);if(!f.visibility)return;const u=this.configuration.getTextLines(s,c);if(!u||u.length===0)return;const d=s.contour.polyline.map(x=>i.worldToCanvas(x));if(!s.handles.textBox.hasMoved){const x=Oa(d);s.handles.textBox.worldPosition=i.canvasToWorld(x)}const h=i.worldToCanvas(s.handles.textBox.worldPosition),p=ho(a,n.annotationUID??"","1",u,h,d,{},f),{x:v,y,width:m,height:w}=p;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([v,y]),topRight:i.canvasToWorld([v+m,y]),bottomLeft:i.canvasToWorld([v,y+w]),bottomRight:i.canvasToWorld([v+m,y+w])}},l2e(this),v2e(this),D2e(this),B2e(this),z2e(this),tye(this),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,r){if(!r||!r.length)return;const n=_e(e),{viewport:i}=n;let o;if(i instanceof ur){const a=i.getCamera(),{spacingInNormalDirection:s}=jh(i,a);o=this.filterAnnotationsWithinSlice(r,a,s)}else o=Dm(i,r);return o}filterAnnotationsWithinSlice(e,r,n){const{viewPlaneNormal:i}=r,o=e.filter(l=>{let f=l.metadata.viewPlaneNormal;if(!l.metadata.referencedImageId&&!f&&l.metadata.FrameOfReferenceUID){for(const d of l.data.contour.polyline){const h=Mn(Ke(),d,r.focalPoint),g=kt(h,r.viewPlaneNormal);if(!Zt(g,0))return!1}return l.metadata.viewPlaneNormal=r.viewPlaneNormal,l.metadata.cameraFocalPoint=r.focalPoint,!0}if(!f){const{referencedImageId:d}=l.metadata,{imageOrientationPatient:h}=wt("imagePlaneModule",d),g=Ft(h[0],h[1],h[2]),p=Ft(h[3],h[4],h[5]);f=Ke(),kn(f,g,p),l.metadata.viewPlaneNormal=f}const u=Math.abs(kt(i,f))>Fye;return f&&u});if(!o.length)return[];const a=n/2,{focalPoint:s}=r,c=[];for(const l of o){const u=l.data.contour.polyline[0];if(!l.isVisible)continue;const d=Ke();Mn(d,s,u);const h=kt(d,i);Math.abs(h){a.data.handles.points.length=0};return Ui(n,{data:{contour:{polyline:[[...r]]},label:"",cachedStats:{}},onInterpolationComplete:i})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:r,targetId:n,svgDrawingHelper:i}=e,o=e.annotation;let a=!1;const{viewport:s,renderingEngine:c}=r,l=this.isDrawing,f=this.isEditingOpen,u=this.isEditingClosed;if(!(l||f||u))this.configuration.displayOnePointAsCrosshairs&&o.data.contour.polyline.length===1?this.renderPointContourWithMarker(r,i,o):this.renderContour(r,i,o);else{const d=this.commonData.annotation.annotationUID;if(o.annotationUID===d)if(l)this.renderContourBeingDrawn(r,i,o);else if(u)this.renderClosedContourBeingEdited(r,i,o);else if(f)this.renderOpenContourBeingEdited(r,i,o);else throw new Error(`Unknown ${this.getToolName()} annotation rendering state`);else this.configuration.displayOnePointAsCrosshairs&&o.data.contour.polyline.length===1?this.renderPointContourWithMarker(r,i,o):this.renderContour(r,i,o);a=!0}if(this.configuration.calculateStats)return this._calculateStatsIfActive(o,n,s,c,r),this._renderStats(o,s,r,i),a}_calculateStatsIfActive(e,r,n,i,o){var s,c,l,f;const a=(s=this.commonData)==null?void 0:s.annotation.annotationUID;if(!(e.annotationUID===a&&!((c=this.commonData)!=null&&c.movingTextBox))&&!((l=this.commonData)!=null&&l.movingTextBox)){const{data:u}=e;(f=u.cachedStats[r])!=null&&f.unit?e.invalidated&&this._throttledCalculateCachedStats(e,n,i,o):(u.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,unit:null},this._calculateCachedStats(e,n,i,o))}}updateClosedCachedStats({viewport:e,points:r,imageData:n,metadata:i,cachedStats:o,targetId:a,modalityUnit:s,canvasCoordinates:c,calibratedScale:l,deltaInX:f,deltaInY:u}){var j,te,ie,he;const{scale:d,areaUnit:h,unit:g}=l,{voxelManager:p}=e.getImageData(),v=zr(n,r[0]);v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]);let y=v[0],m=v[0],w=v[1],x=v[1],C=v[2],S=v[2];for(let ue=1;ue{let Me=!0;const Ue=e.worldToCanvas(ue);return Ue[1]!=V&&(R=0,V=Ue[1],G=kU(c,Ue,[A[0],Ue[1]]),G.sort(function(be){return function(B,M){return B[be]===M[be]?0:B[be]G[0][0]&&(G.shift(),R++),R%2===0&&(Me=!1),Me},boundsIJK:P,returnPoints:this.configuration.storePointData}));const F=this.configuration.statsCalculator.getStatistics();o[a]={Modality:i.Modality,area:_,perimeter:E,mean:(j=F.mean)==null?void 0:j.value,max:(te=F.max)==null?void 0:te.value,min:(ie=F.min)==null?void 0:ie.value,stdDev:(he=F.stdDev)==null?void 0:he.value,statsArray:F.array,pointsInShape:N,areaUnit:h,modalityUnit:s,unit:g}}updateOpenCachedStats({targetId:e,metadata:r,canvasCoordinates:n,cachedStats:i,modalityUnit:o,calibratedScale:a,deltaInX:s,deltaInY:c}){const{scale:l,unit:f}=a;let u=KS(n,closed)/l;u*=Math.sqrt(Math.pow(s,2)+Math.pow(c,2)),i[e]={Modality:r.Modality,length:u,modalityUnit:o,unit:f}}};eb.toolName="PlanarFreehandROI";let hf=eb;function Uye(t,e){const r=t.cachedStats[e],{area:n,mean:i,stdDev:o,length:a,perimeter:s,max:c,min:l,isEmptyArea:f,unit:u,areaUnit:d,modalityUnit:h}=r||{},g=[];if(Ar(n)){const p=f?"Area: Oblique not supported":`Area: ${un(n)} ${d}`;g.push(p)}return Ar(i)&&g.push(`Mean: ${un(i)} ${h}`),Ar(c)&&g.push(`Max: ${un(c)} ${h}`),Ar(l)&&g.push(`Min: ${un(l)} ${h}`),Ar(o)&&g.push(`Std Dev: ${un(o)} ${h}`),Ar(s)&&g.push(`Perimeter: ${un(s)} ${u}`),Ar(a)&&g.push(`${un(a)} ${u}`),g}const tb=class tb extends hf{constructor(e){const r=Ui({configuration:{calculateStats:!1,allowOpenContours:!1}},e);super(r)}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const r=e.annotation,{invalidated:n}=r,i=super.renderAnnotationInstance(e);if(n){const{segmentationId:o}=r.data.segmentation;To(o)}return i}};tb.toolName="PlanarFreehandContourSegmentationTool";let hl=tb;const Bye={[Vt.Labelmap]:tB,[Vt.Contour]:QU,[Vt.Surface]:lU},Gv=hl.toolName;class Gye{constructor(){this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this._getAllViewports=()=>Bo().flatMap(r=>r.getViewports()),this._renderFlaggedSegmentations=()=>{this._throwIfDestroyed(),Array.from(this._needsRender).forEach(r=>{this._triggerRender(r)}),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}}renderSegmentationsForViewport(e){const r=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(r)}renderSegmentation(e){const r=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(r)}_getViewportIdsForSegmentation(e){const r=this._getAllViewports(),n=[];for(const i of r){const o=i.id;if(e){const a=Ea(o,{segmentationId:e});(a==null?void 0:a.length)>0&&n.push(o)}else{const a=Ea(o);(a==null?void 0:a.length)>0&&n.push(o)}}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(e){e.forEach(r=>{this._needsRender.add(r)}),this._render()}_render(){this._needsRender.size>0&&this._animationFrameSet===!1&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedSegmentations),this._animationFrameSet=!0)}_triggerRender(e){const r=Ea(e);if(!(r!=null&&r.length))return;const{viewport:n}=Wn(e)||{};if(!n)return;const i=[],o=r.map(a=>{a.type===Vt.Contour&&this._addPlanarFreeHandToolIfAbsent(n);const s=Bye[a.type];try{const c=s.render(n,a);i.push(c)}catch(c){console.error(c)}return Promise.resolve({segmentationId:a.segmentationId,type:a.type})});Promise.allSettled(o).then(a=>{const s=a.filter(f=>f.status==="fulfilled").map(f=>f.value);function c(f){const{element:u,viewportId:d}=f.detail;u.removeEventListener(rt.IMAGE_RENDERED,c),s.forEach(h=>{const g={viewportId:d,segmentationId:h.segmentationId,type:h.type};ut(et,k.SEGMENTATION_RENDERED,{...g})})}n.element.addEventListener(rt.IMAGE_RENDERED,c),n.render()})}_addPlanarFreeHandToolIfAbsent(e){Gv in Ye.tools||ki(hl);const r=Pr(e.id);r.hasTool(Gv)||(r.addTool(Gv),r.setToolPassive(Gv))}}function tg(t){yB.renderSegmentationsForViewport(t)}function Hw(t){yB.renderSegmentation(t)}const yB=new Gye;function Wye({modifiedSlicesToUse:t,representationData:e,type:r}){const n=$e.getVolume(e[r].volumeId);if(!n){console.warn("segmentation not found in cache");return}const{imageData:i,vtkOpenGLTexture:o}=n;let a;if((t==null?void 0:t.length)>0)a=t;else{const s=i.getDimensions()[2];a=[...Array(s).keys()]}a.forEach(s=>{o.setUpdatedFrame(s)}),i.modified()}function zye({viewportIds:t,segmentationId:e}){t.forEach(r=>{let n=Ea(r,{segmentationId:e});n=n.filter(i=>i.type===Vt.Labelmap),n.forEach(i=>{if(i.segmentationId!==e)return;const o=Wn(r);if(!o)return;const{viewport:a}=o;if(a instanceof ur)return;const s=Tp(r,e);s!=null&&s.length&&s.forEach((c,l)=>{const f=c.actor.getMapper().getInputData(),u=ru(r,e),d=$e.getImage(u[l]);f.modified(),yw(f,d)})})})}const $ye=function(t){const{segmentationId:e,modifiedSlicesToUse:r}=t.detail,{representationData:n}=Vn(e),i=eg(e),o=i.some(c=>{const{viewport:l}=Wn(c);return l instanceof ur}),a=i.some(c=>{const{viewport:l}=Wn(c);return l instanceof lr}),s=o&&a;i.forEach(c=>{const{viewport:l}=Wn(c);l instanceof ur&&Wye({modifiedSlicesToUse:s?[]:r,representationData:n,type:Vt.Labelmap}),l instanceof lr&&zye({viewportIds:i,segmentationId:e})})},wB=function(t){const{segmentationId:e}=t.detail,{representationData:r}=Vn(e);r.Labelmap&&$ye(t),Hw(e)},xB=function(t){const{segmentationId:e}=t.detail;Hw(e)};function CB(t,e){return rr.updateLabelmapSegmentationImageReferences(t,e)}const jye=function(t){if(!t)return;const e=_e(t);if(!e)return;const{viewport:r}=e;r instanceof Tr||(t.addEventListener(rt.STACK_NEW_IMAGE,A1),t.addEventListener(rt.IMAGE_RENDERED,A1))},Hye=function(t){t.removeEventListener(rt.STACK_NEW_IMAGE,A1),t.removeEventListener(rt.IMAGE_RENDERED,A1)};function A1(t){const e=t.detail,{viewportId:r,renderingEngineId:n}=e,{viewport:i}=Oi(r,n),o=Ea(r);if(!(o!=null&&o.length))return;const a=o.filter(l=>l.type===Vt.Labelmap),s=i.getActors();a.forEach(l=>{const{segmentationId:f}=l;CB(r,f)});const c=a.flatMap(l=>Tp(r,l.segmentationId)).filter(l=>l!==void 0);c.length&&(c.forEach(l=>{a.find(u=>{const d=ru(r,u.segmentationId);return d==null?void 0:d.includes(l.referencedId)})||i.removeActors([l.uid])}),a.forEach(l=>{const{segmentationId:f}=l,u=i.getCurrentImageId(),d=ru(r,f);if(!d)return;const h=g=>{const p=$e.getImage(g);if(!p){console.warn("No derived image found in the cache for segmentation representation",l);return}const v=s.find(y=>y.referencedId===g);if(v){const y=v.actor.getMapper().getInputData();y.setDerivedImage?y.setDerivedImage(p):yw(y,p)}else{const{dimensions:y,spacing:m,direction:w}=i.getImageDataMetadata(p),x=$e.getImage(u)||{imageId:u},{origin:C}=i.getImageDataMetadata(x),S=C,T=p.voxelManager.getConstructor(),_=p.voxelManager.getScalarData(),E=Bt.newInstance({name:"Pixels",numberOfComponents:1,values:new T(_)}),b=tm.newInstance();b.setDimensions(y[0],y[1],1),b.setSpacing(m),b.setDirection(w),b.setOrigin(S),b.getPointData().setScalars(E),b.modified(),i.addImages([{imageId:g,representationUID:`${f}-${Vt.Labelmap}-${p.imageId}`,callback:({imageActor:D})=>{D.getMapper().setInputData(b)}}]),tg(r);return}};d.forEach(h),i.render(),t.type===rt.IMAGE_RENDERED&&i.element.removeEventListener(rt.IMAGE_RENDERED,A1)}))}const SB={enable:jye,disable:Hye};async function Kye(t){const e=t.detail.annotation;if(!bm(e))return;const r=Xye(e),n=Yye(r,e);if(!n.length){ut(et,k.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:r.element,sourceAnnotation:e});return}const i=df(e.data.contour.polyline,r),o=XU(r,i,n);if(!o.length){ut(et,k.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:r.element,sourceAnnotation:e});return}if(o.length>1){YU(r,e,i,o);return}const{targetAnnotation:a,targetPolyline:s,isContourHole:c}=o[0];if(c){const{contourHoleProcessingEnabled:l=!1}=t.detail;if(!l)return;Uw(r,a,e)}else r8(r,a,s,e,i)}function qye(t,e=!1){const r="PlanarFreehandContourSegmentationTool",n=Pr(t.id,t.renderingEngineId);let i;return n?n.hasTool(r)?n.getToolOptions(r)||(i=`Tool ${r} must be in active/passive state in ${n.id} toolGroup`):i=`Tool ${r} not added to ${n.id} toolGroup`:i=`ToolGroup not found for viewport ${t.id}`,i&&!e&&console.warn(i),!i}function Xye(t){const e=a8(t);return e.find(n=>qye(n,!0))??e[0]}function Yye(t,e){const{annotationUID:r}=e;return mm().filter(i=>i.annotationUID&&i.annotationUID!==r&&bm(i)&&uU(i,e)&&t.isReferenceViewable(i.metadata))}function Jye(t){const e=t.detail.annotation;eu(e)}function TB(t){const e=t.detail.annotation;bm(e)&&Kye(t)}function m5(t){if(!t.detail.removed.length)return;Bo().forEach(n=>{const o=n.getViewports().map(a=>a.id);Be(o)})}function _B(t){const{viewportId:e}=t.detail;Be([e])}function Zye(t){const e=t.detail.annotation;bm(e)&&Jye(t)}const EB=function(t){Jh(t.detail.element)},Qye=function(t){t.addEventListener(rt.IMAGE_RENDERED,EB)},e5e=function(t){t.removeEventListener(rt.IMAGE_RENDERED,EB)},bB={enable:Qye,disable:e5e},{Active:t5e}=Fn;function ng(t,e,r){if(Ye.isInteractingWithTool)return!1;const{renderingEngineId:n,viewportId:i}=r.detail,o=Pr(i,n);if(!o)return!1;let a;const s=Object.keys(o.toolOptions);for(let c=0;c{for(const c of s){if(c.isLocked||!c.isVisible)continue;const l=a.getHandleNearImagePoint(t,c,r,i);if(l){o.push({tool:a,annotation:c,handle:l});break}}}),o}function Om(t,e){const r=[];for(let n=0;n0&&r.push({tool:i,annotations:o}))}return r}function g8(t,e,r,n="mouse"){const i=n==="touch"?36:6,o=[];return e.forEach(({tool:a,annotations:s})=>{for(const c of s){if(c.isLocked||!c.isVisible)continue;if(a.isPointNearTool(t,c,r,i,n)){o.push({tool:a,annotation:c});break}}}),o}const{Active:n5e}=Fn;function Kw(t){const{renderingEngineId:e,viewportId:r,event:n}=t.detail,i=Qh(n)||Xh.getModifierKey(),o=Pr(r,e);if(!o)return null;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary(),c=t.detail.buttons??(n==null?void 0:n.buttons)??s;for(let l=0;lh.mouseButton===c&&h.modifierKey===i);if(u.mode===n5e&&d)return o.getToolInstance(f)}}function Ih(t,e,r){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;cd.mouseButton===r);if(e.includes(f.mode)&&(!r||u)){const d=o.getToolInstance(l);a.push(d)}}return a}function r5e(t,e){var u;const r=new Map,{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return r;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary(),c=t.detail.event,l=(c==null?void 0:c.buttons)??s,f=Qh(c)||Xh.getModifierKey();for(let d=0;d{var w;return((w=m.bindings)==null?void 0:w.length)&&m.bindings.some(x=>x.mouseButton===l&&x.modifierKey===f)});y&&r.set(g,y)}return r}const{Active:i5e,Passive:o5e}=Fn;function a5e(t){if(Ye.isInteractingWithTool)return!1;const e=t.detail,{element:r}=e,n=_e(r),{canvas:i}=e.currentPoints;if(!n)return!1;const o=r5e(t,[i5e,o5e]),a=Array.from(o.keys()),s=Om(r,a),c=g8(r,s,i);if(c.length>0){const{tool:l,annotation:f}=c[0],u=o.get(l);return(typeof u.method=="string"?l[u.method]:u.method).call(l,t,f),!0}return!1}const{Active:s5e,Passive:c5e}=Fn;function MB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);if(e&&typeof e.preMouseDownCallback=="function"&&e.preMouseDownCallback(t))return;const r=t.detail.event.buttons===1,n=Ih(t,[s5e],t.detail.event.buttons),i=r?Ih(t,[c5e]):void 0,o=[...n||[],...i||[]];if(a5e(t))return;const s=t.detail,{element:c}=s,l=Om(c,o),f=s.currentPoints.canvas,u=OB(c,l,f,"mouse"),d=!!t.detail.event.shiftKey;if(u.length>0){const{tool:g,annotation:p,handle:v}=zI(u);$I(p.annotationUID,d),g.handleSelectedCallback(t,p,v,"Mouse");return}const h=g8(c,l,f,"mouse");if(h.length>0){const{tool:g,annotation:p}=zI(h);$I(p.annotationUID,d),g.toolSelectedCallback(t,p,"Mouse",f);return}e&&typeof e.postMouseDownCallback=="function"&&e.postMouseDownCallback(t)}function zI(t){if(t.length>1){const e=t.find(r=>{const n=!si(r.annotation.annotationUID),i=Kr(r.annotation.annotationUID);return n&&i});if(e)return e}return t[0]}function $I(t,e=!1){e?Cm(t)?na(t,!1):na(t,!0,!0):na(t,!0,!1)}function PB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);if(e&&!Ye.isMultiPartToolActive&&e.addNewAnnotation){const r=e.addNewAnnotation(t,"mouse");na(r.annotationUID)}}function RB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);!e||typeof e.mouseDragCallback!="function"||e.mouseDragCallback(t)}const{Active:l5e,Passive:u5e}=Fn;function LB(t){if(Ye.isInteractingWithTool||Ye.isMultiPartToolActive)return;const e=Ih(t,[l5e,u5e]),r=t.detail,{element:n}=r,i=Om(n,e),o=e.filter(s=>!i.some(l=>l.tool.getToolName()===s.getToolName()));let a=!1;for(const{tool:s,annotations:c}of i)typeof s.mouseMoveCallback=="function"&&(a=s.mouseMoveCallback(t,c)||a);o.forEach(s=>{typeof s.mouseMoveCallback=="function"&&s.mouseMoveCallback(t)}),a===!0&&Jh(n)}const AB=ng.bind(null,"Mouse","mouseUpCallback");function NB(t){if(Ye.isInteractingWithTool)return;t.detail.buttons=fl.Wheel|(t.detail.event.buttons||0);const e=Kw(t);if(e)return e.mouseWheelCallback(t)}const f5e=function(t){t.addEventListener(k.MOUSE_CLICK,DB),t.addEventListener(k.MOUSE_DOWN,MB),t.addEventListener(k.MOUSE_DOWN_ACTIVATE,PB),t.addEventListener(k.MOUSE_DOUBLE_CLICK,IB),t.addEventListener(k.MOUSE_DRAG,RB),t.addEventListener(k.MOUSE_MOVE,LB),t.addEventListener(k.MOUSE_UP,AB),t.addEventListener(k.MOUSE_WHEEL,NB)},d5e=function(t){t.removeEventListener(k.MOUSE_CLICK,DB),t.removeEventListener(k.MOUSE_DOWN,MB),t.removeEventListener(k.MOUSE_DOWN_ACTIVATE,PB),t.removeEventListener(k.MOUSE_DOUBLE_CLICK,IB),t.removeEventListener(k.MOUSE_DRAG,RB),t.removeEventListener(k.MOUSE_MOVE,LB),t.removeEventListener(k.MOUSE_UP,AB),t.removeEventListener(k.MOUSE_WHEEL,NB)},kB={enable:f5e,disable:d5e},{Active:h5e}=Fn;function VB(t){const{renderingEngineId:e,viewportId:r}=t.detail,n=Dpe(),i=Xh.getModifierKey(),o=Pr(r,e);if(!o)return null;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary();for(let c=0;cd.mouseButton===(n??s)&&d.modifierKey===i))return o.getToolInstance(l)}}function g5e(t,e){var c;const r=new Map,{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return r;const a=Object.keys(o.toolOptions),s=t.detail.key;for(let l=0;l{var v;return(v=p.bindings)==null?void 0:v.some(y=>y.key===s)});g&&r.set(u,g)}return r}function FB(t){const e=VB(t);if(e){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n),a=e.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const r=g5e(t,[Fn.Active]);if(r!=null&&r.size){const{element:n}=t.detail;for(const[i,o]of[...r.entries()])(typeof o.method=="function"?o.method:i[o.method]).call(i,n,o,t)}}function UB(t){const e=VB(t);if(!e)return;const{renderingEngineId:r,viewportId:n}=t.detail,i=Pr(n,r);eU();const o=e.getToolName();Object.keys(i.toolOptions).includes(o)&&i.setViewportsCursorByToolName(o)}const p5e=function(t){t.addEventListener(k.KEY_DOWN,FB),t.addEventListener(k.KEY_UP,UB)},m5e=function(t){t.removeEventListener(k.KEY_DOWN,FB),t.removeEventListener(k.KEY_UP,UB)},BB={enable:p5e,disable:m5e},{Active:v5e,Passive:y5e,Enabled:w5e}=Fn,GB=function(t){Ih(t,[v5e,y5e,w5e]).forEach(r=>{r.onCameraModified&&r.onCameraModified(t)})},x5e=function(t){t.addEventListener(rt.CAMERA_MODIFIED,GB)},C5e=function(t){t.removeEventListener(rt.CAMERA_MODIFIED,GB)},WB={enable:x5e,disable:C5e},{Active:S5e,Passive:T5e,Enabled:_5e}=Fn,zB=function(t){Ih(t,[S5e,T5e,_5e]).forEach(r=>{r.onImageSpacingCalibrated&&r.onImageSpacingCalibrated(t)})},E5e=function(t){t.addEventListener(rt.IMAGE_SPACING_CALIBRATED,zB)},b5e=function(t){t.removeEventListener(rt.IMAGE_SPACING_CALIBRATED,zB)},$B={enable:E5e,disable:b5e},{Active:D5e}=Fn;function p8(t){const{renderingEngineId:e,viewportId:r}=t.detail,n=t.detail.event,i=Pr(r,e);if(!i)return null;const o=Object.keys(i.toolOptions),a=Object.keys(n.touches).length,s=Qh(n)||Xh.getModifierKey(),c=i.getDefaultMousePrimary();for(let l=0;l(h.numTouchPoints===a||a===1&&h.mouseButton===c)&&h.modifierKey===s);if(u.mode===D5e&&d)return i.getToolInstance(f)}}function jI(t,e,r){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;cd.numTouchPoints===r);if(e.includes(f.mode)&&(!r||u)){const d=o.getToolInstance(l);a.push(d)}}return a}const{Active:I5e,Passive:O5e}=Fn;function jB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);if(e&&typeof e.preTouchStartCallback=="function"&&e.preTouchStartCallback(t))return;const r=Object.keys(t.detail.event.touches).length===1,n=jI(t,[I5e],Object.keys(t.detail.event.touches).length),i=r?jI(t,[O5e]):void 0,o=[...n||[],...i||[],e],a=t.detail,{element:s}=a,c=Om(s,o),l=a.currentPoints.canvas,f=OB(s,c,l,"touch"),u=!1;if(f.length>0){const{tool:h,annotation:g,handle:p}=HI(f);KI(g.annotationUID,u),h.handleSelectedCallback(t,g,p,"Touch");return}const d=g8(s,c,l,"touch");if(d.length>0){const{tool:h,annotation:g}=HI(d);KI(g.annotationUID,u),h.toolSelectedCallback(t,g,"Touch",l);return}e&&typeof e.postTouchStartCallback=="function"&&e.postTouchStartCallback(t)}function HI(t){return t.length>1&&t.find(e=>!si(e.annotation.annotationUID)&&Kr(e.annotation.annotationUID))||t[0]}function KI(t,e=!1){e?Cm(t)?na(t,!1):na(t,!0,!0):na(t,!0,!1)}function HB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);if(e&&!Ye.isMultiPartToolActive&&e.addNewAnnotation){const r=e.addNewAnnotation(t,"touch");na(r.annotationUID)}}function KB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);!e||typeof e.touchDragCallback!="function"||e.touchDragCallback(t)}const qB=ng.bind(null,"Touch","touchEndCallback"),M5e=ng.bind(null,"Touch","touchTapCallback"),XB=ng.bind(null,"Touch","touchPressCallback"),P5e=function(t){t.addEventListener(k.TOUCH_START,jB),t.addEventListener(k.TOUCH_START_ACTIVATE,HB),t.addEventListener(k.TOUCH_DRAG,KB),t.addEventListener(k.TOUCH_END,qB),t.addEventListener(k.TOUCH_TAP,M5e),t.addEventListener(k.TOUCH_PRESS,XB)},R5e=function(t){t.removeEventListener(k.TOUCH_START,jB),t.removeEventListener(k.TOUCH_START_ACTIVATE,HB),t.removeEventListener(k.TOUCH_DRAG,KB),t.removeEventListener(k.TOUCH_END,qB),t.removeEventListener(k.TOUCH_PRESS,XB)},YB={enable:P5e,disable:R5e},L5e=function(){et.addEventListener(k.ANNOTATION_COMPLETED,ol.handleAnnotationCompleted),et.addEventListener(k.ANNOTATION_MODIFIED,ol.handleAnnotationUpdate),et.addEventListener(k.ANNOTATION_REMOVED,ol.handleAnnotationDelete)},A5e=function(){et.removeEventListener(k.ANNOTATION_COMPLETED,ol.handleAnnotationCompleted),et.removeEventListener(k.ANNOTATION_MODIFIED,ol.handleAnnotationUpdate),et.removeEventListener(k.ANNOTATION_REMOVED,ol.handleAnnotationDelete)},JB={enable:L5e,disable:A5e},{Active:N5e,Passive:k5e,Enabled:V5e}=Fn,ZB=function(t){Ih(t,[N5e,k5e,V5e]).forEach(r=>{r.onResetCamera&&r.onResetCamera(t)})},F5e=function(t){t.addEventListener(rt.CAMERA_RESET,ZB)},U5e=function(t){t.removeEventListener(rt.CAMERA_RESET,ZB)},QB={enable:F5e,disable:U5e};function m8(t){const{element:e,viewportId:r}=t.detail,n=B5e(r);G5e(e),W5e(n,e),t8.addViewportElement(r,e),LF.enable(e),ZF.enable(e),XF.enable(e),Xh.enable(e),SB.enable(e),bB.enable(e),WB.enable(e),$B.enable(e),QB.enable(e),kB.enable(e),BB.enable(e),YB.enable(e),Ye.enabledElements.push(e)}function B5e(t){const e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg"),n=`svg-layer-${t}`;r.classList.add("svg-layer"),r.setAttribute("id",n),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",r.style.position="absolute";const i=document.createElementNS(e,"defs"),o=document.createElementNS(e,"filter"),a=document.createElementNS(e,"feOffset"),s=document.createElementNS(e,"feColorMatrix"),c=document.createElementNS(e,"feBlend");return o.setAttribute("id",`shadow-${n}`),o.setAttribute("filterUnits","userSpaceOnUse"),a.setAttribute("result","offOut"),a.setAttribute("in","SourceGraphic"),a.setAttribute("dx","0.5"),a.setAttribute("dy","0.5"),s.setAttribute("result","matrixOut"),s.setAttribute("in","offOut"),s.setAttribute("in2","matrix"),s.setAttribute("values","0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"),c.setAttribute("in","SourceGraphic"),c.setAttribute("in2","matrixOut"),c.setAttribute("mode","normal"),o.appendChild(a),o.appendChild(s),o.appendChild(c),i.appendChild(o),r.appendChild(i),r}function G5e(t){const{viewportUid:e,renderingEngineUid:r}=t.dataset,n=`${e}:${r}`;Ye.svgNodeCache[n]={}}function W5e(t,e){e.querySelector("div.viewport-element").appendChild(t)}function eG(t,e){const r=[];if(!e&&!t)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let n=0;n{const e=_e(t);if(!e)return;eG(e.viewportId,e.renderingEngineId).forEach(n=>{n.remove(e)})},j5e=t=>{const e=_e(t);if(!e)return;const{renderingEngineId:r,viewportId:n}=e,i=Pr(n,r);i&&i.removeViewports(r,n)};function H5e(t){const{viewportUid:e,renderingEngineUid:r}=t.dataset,n=`${e}:${r}`;delete Ye.svgNodeCache[n]}function K5e(t){const e=t.querySelector(`div.${z5e}`),r=e.querySelector("svg");r&&e.removeChild(r)}const q5e=function(t){const e=Ye.enabledElements.findIndex(r=>r===t);e>-1&&Ye.enabledElements.splice(e,1)};function tG(t){const e=WU(t,[Fn.Active,Fn.Passive]),r=Om(t,e);for(const{tool:n}of r){const i=n.cancel(t);if(i)return i}}class y8{constructor(e,r,n,i){this._viewportOptions={},this._onEvent=o=>{var l;if(this._ignoreFiredEvents===!0||!this._targetViewports.length)return;const a=this._eventSource==="element"?_e(o.currentTarget):Wn((l=o.detail)==null?void 0:l.viewportId);if(!a)return;const{renderingEngineId:s,viewportId:c}=a;this._sourceViewports.find(f=>f.viewportId===c)&&this.fireEvent({renderingEngineId:s,viewportId:c},o)},this._enabled=!0,this._eventName=r,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},this._eventSource=this._options.eventSource||"element",this._auxiliaryEvents=this._options.auxiliaryEvents||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e,r={}){this._viewportOptions[e]=r}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(Wv(this._sourceViewports,e))return;const{renderingEngineId:r,viewportId:n}=e,i=jr(r).getViewport(n);if(!i){console.warn(`Synchronizer.addSource: No viewport for ${r} ${n}`);return}(this._eventSource==="element"?i.element:et).addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEvents.forEach(({name:a,source:s})=>{(s==="element"?i.element:et).addEventListener(a,this._onEvent.bind(this))}),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){Wv(this._targetViewports,e)||(this._targetViewports.push(e),this._updateDisableHandlers())}getSourceViewports(){return this._sourceViewports}getTargetViewports(){return this._targetViewports}destroy(){this._sourceViewports.forEach(e=>this.removeSource(e)),this._targetViewports.forEach(e=>this.removeTarget(e))}remove(e){this.removeTarget(e),this.removeSource(e)}removeSource(e){const r=qI(this._sourceViewports,e);if(r===-1)return;const n=this._eventSource==="element"?this.getViewportElement(e):et;this._sourceViewports.splice(r,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEvents.forEach(({name:i,source:o})=>{(o==="element"?this.getViewportElement(e):et).removeEventListener(i,this._eventHandler)}),this._updateDisableHandlers()}removeTarget(e){const r=qI(this._targetViewports,e);r!==-1&&(this._targetViewports.splice(r,1),this._updateDisableHandlers())}hasSourceViewport(e,r){return Wv(this._sourceViewports,{renderingEngineId:e,viewportId:r})}hasTargetViewport(e,r){return Wv(this._targetViewports,{renderingEngineId:e,viewportId:r})}fireEvent(e,r){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i{this._ignoreFiredEvents=!1}):this._ignoreFiredEvents=!1}}_hasSourceElements(){return this._sourceViewports.length!==0}_updateDisableHandlers(){const e=X5e(this._sourceViewports,this._targetViewports),r=this.remove.bind(this),n=i=>{r(i.detail.element)};e.forEach(i=>{const o=this.getEventSource(i);o&&(o.removeEventListener(rt.ELEMENT_DISABLED,n),o.addEventListener(rt.ELEMENT_DISABLED,n))})}getEventSource(e){return this._eventSource==="element"?this.getViewportElement(e):et}getViewportElement(e){const{renderingEngineId:r,viewportId:n}=e,i=jr(r);if(!i)return null;const o=i.getViewport(n);return o?o.element:null}}function X5e(t,e){const r=[],n=t.concat(e);for(let i=0;io.renderingEngineId===a.renderingEngineId&&o.viewportId===a.viewportId)||r.push(o)}return r}function qI(t,e){return t.findIndex(r=>e.renderingEngineId===r.renderingEngineId&&e.viewportId===r.viewportId)}function Wv(t,e){return t.some(r=>r.renderingEngineId===e.renderingEngineId&&r.viewportId===e.viewportId)}function $d(t,e,r,n){if(Ye.synchronizers.some(a=>a.id===t))throw new Error(`Synchronizer with id '${t}' already exists.`);const o=new y8(t,e,r,n);return Ye.synchronizers.push(o),o}function Y5e(){for(;Ye.synchronizers.length>0;)Ye.synchronizers.pop().destroy()}function J5e(t){return Ye.synchronizers.find(e=>e.id===t)}function Z5e(){return Ye.synchronizers}function Q5e(t){const e=Ye.synchronizers.findIndex(r=>r.id===t);e>-1&&(Ye.synchronizers[e].destroy(),Ye.synchronizers.splice(e,1))}const nG=Object.freeze(Object.defineProperty({__proto__:null,createSynchronizer:$d,destroy:Y5e,destroySynchronizer:Q5e,getAllSynchronizers:Z5e,getSynchronizer:J5e,getSynchronizersForViewport:eG},Symbol.toStringTag,{value:"Module"})),ewe=Object.freeze(Object.defineProperty({__proto__:null,Synchronizer:y8,SynchronizerManager:nG,ToolGroupManager:mF,addEnabledElement:m8,addTool:ki,cancelActiveManipulations:tG,hasTool:hpe,removeEnabledElement:v8,removeTool:TF,get state(){return Ye},svgNodeCache:Sw},Symbol.toStringTag,{value:"Module"})),v5=function(t){const{viewportId:e}=t.detail;tg(e)};let XS=!1;function rG(t={}){XS||(h1e(t),nwe(),rwe(),XS=!0)}function twe(){iG(),oG(),gF(),Bhe();const t=yc(),e=rr;t.restoreAnnotations({}),e.resetState(),XS=!1}function nwe(){iG();const t=rt.ELEMENT_ENABLED,e=rt.ELEMENT_DISABLED;et.addEventListener(t,m8),et.addEventListener(e,v8),JB.enable()}function iG(){const t=rt.ELEMENT_ENABLED,e=rt.ELEMENT_DISABLED;et.removeEventListener(t,m8),et.removeEventListener(e,v8),JB.disable()}function rwe(){oG(),et.addEventListener(k.ANNOTATION_COMPLETED,TB),et.addEventListener(k.ANNOTATION_MODIFIED,_B),et.addEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.addEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.addEventListener(k.ANNOTATION_REMOVED,Zye),et.addEventListener(k.SEGMENTATION_MODIFIED,xB),et.addEventListener(k.SEGMENTATION_DATA_MODIFIED,wB),et.addEventListener(k.SEGMENTATION_REPRESENTATION_MODIFIED,v5),et.addEventListener(k.SEGMENTATION_REPRESENTATION_ADDED,v5)}function oG(){et.removeEventListener(k.ANNOTATION_COMPLETED,TB),et.removeEventListener(k.ANNOTATION_MODIFIED,_B),et.removeEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.removeEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.removeEventListener(k.SEGMENTATION_MODIFIED,xB),et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,wB),et.removeEventListener(k.SEGMENTATION_REPRESENTATION_MODIFIED,v5),et.removeEventListener(k.SEGMENTATION_REPRESENTATION_ADDED,v5)}const iwe=Object.freeze(Object.defineProperty({__proto__:null,COLOR_LUT:p5},Symbol.toStringTag,{value:"Module"})),owe="3.20.0";function awe(t,e,r,n){const{camera:i}=n.detail,o=jr(r.renderingEngineId);if(!o)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const a=o.getViewport(r.viewportId);a.setCamera(i),a.render()}const{CAMERA_MODIFIED:swe}=rt;function cwe(t){return $d(t,swe,awe)}function lwe(t,e,r,n,i){const o=jr(r.renderingEngineId);if(!o)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const a=o.getViewport(r.viewportId),c=o.getViewport(e.viewportId).getViewPresentation(i);a.setViewPresentation(c),a.render()}const{CAMERA_MODIFIED:uwe}=rt;function fwe(t,e){return $d(t,uwe,lwe,{viewPresentation:e})}function dwe(t,e,r,n,i){const o=n.detail,{volumeId:a,range:s,invertStateChanged:c,invert:l,colormap:f}=o,u=jr(r.renderingEngineId);if(!u)throw new Error(`Rendering Engine does not exist: ${r.renderingEngineId}`);const d=u.getViewport(r.viewportId),h={voiRange:s};if(i!=null&&i.syncInvertState&&c&&(h.invert=l),i!=null&&i.syncColormap&&f&&(h.colormap=f),d instanceof Tr)d._actors&&d._actors.size>1?d.setProperties(h,a):d.setProperties(h);else if(d instanceof lr)d.setProperties(h);else throw new Error("Viewport type not supported.");d.render()}function hwe(t,e){return e=Object.assign({syncInvertState:!0,syncColormap:!0},e),$d(t,rt.VOI_MODIFIED,dwe,{auxiliaryEvents:[{name:rt.COLORMAP_MODIFIED}],...e})}function gwe(t,e,r){const n=jr(r.renderingEngineId);if(!n)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const i=t.getOptions(r.viewportId),o=n.getViewport(r.viewportId),a=n.getViewport(e.viewportId);if((i==null?void 0:i.syncZoom)!==!1){const s=a.getZoom();o.setZoom(s)}if((i==null?void 0:i.syncPan)!==!1){const s=a.getPan();o.setPan(s)}o.render()}const{CAMERA_MODIFIED:pwe}=rt;function mwe(t){return $d(t,pwe,gwe)}function vwe(t,e){const{viewPlaneNormal:r}=t.getCamera(),{viewPlaneNormal:n}=e.getCamera(),i=kt(r,n);return Math.abs(i)>.9}const XI=(t,e)=>S1.get("spatialRegistrationModule",t,e);async function ywe(t,e,r){const n=jr(r.renderingEngineId);if(!n)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const i=n.getViewport(e.viewportId),o=t.getOptions(r.viewportId);if(o!=null&&o.disabled)return;const a=n.getViewport(r.viewportId),s=i.getCurrentImageId(),l=wt("imagePlaneModule",s).imagePositionPatient,f=a.getImageIds();if(!vwe(i,a))return;let u=XI(r.viewportId,e.viewportId);if(!u){const p=i.getFrameOfReferenceUID(),v=a.getFrameOfReferenceUID();if(p===v&&(o==null?void 0:o.useInitialPosition)!==!1?u=Wt(ba()):(wV(i,a),u=XI(r.viewportId,e.viewportId)),!u)return}const d=Yt(Ke(),l,u),h=wwe(d,f);let g=h.index;a instanceof ur&&(g=f.length-h.index-1),h.index!==-1&&a.getCurrentImageIdIndex()!==h.index&&await ds(a.element,{imageIndex:g})}function wwe(t,e){return e.reduce((r,n,i)=>{const{imagePositionPatient:o}=wt("imagePlaneModule",n),a=Qi(o,t);return a{i.getImageIds().includes(t)&&i.calibrateSpacing(t)})}function cG(t,e){const r=t.findIndex(([n,i])=>n===i);if(r===-1)throw new Error("3D bounding boxes not supported in an oblique plane");return t[r][0]-=e,t[r][1]+=e,t}const Mwe=Object.freeze(Object.defineProperty({__proto__:null,extend2DBoundingBoxInViewAxis:cG,getBoundingBoxAroundShape:cf,getBoundingBoxAroundShapeIJK:cf,getBoundingBoxAroundShapeWorld:rU},Symbol.toStringTag,{value:"Module"})),{transformWorldToIndex:O3}=Rn;function lG(t,e,r){const[n,i]=t,o=Ft((n[0]+i[0])/2,(n[1]+i[1])/2,(n[2]+i[2])/2),a=Qi(n,i)/2,{boundsIJK:s,topLeftWorld:c,bottomRightWorld:l}=Rwe(e,r,t,o,a);return{boundsIJK:s,centerWorld:o,radiusWorld:a,topLeftWorld:c,bottomRightWorld:l}}function uG(t,e){const r=e.getDirection(),n=Ft(r[0],r[1],r[2]),i=Ft(r[3],r[4],r[5]),o=Ft(r[6],r[7],r[8]),a=el(Ke(),o);return lG(t,e,{row:n,column:i,normal:a})}function Pwe(t,e,r){if(!r)throw new Error("viewport is required in order to calculate the sphere bounds");const n=r.getCamera(),i=Ft(n.viewUp[0],n.viewUp[1],n.viewUp[2]),o=Ft(n.viewPlaneNormal[0],n.viewPlaneNormal[1],n.viewPlaneNormal[2]),a=Ke();kn(a,i,o);const s={row:a,normal:o,column:el(Ke(),i)};return lG(t,e,s)}function Rwe(t,e,r,n,i){const o=t.getDimensions(),{row:a,column:s,normal:c}=e,l=Ke(),f=Ke();On(l,n,c,i),On(f,n,c,-i),On(l,l,s,-i),On(f,f,s,i),On(l,l,a,-i),On(f,f,a,i);const u=O3(t,l),d=O3(t,f),h=r.map(p=>O3(t,p));return{boundsIJK:cf([u,d,...h],o),topLeftWorld:l,bottomRightWorld:f}}function fG(t,e=5){return parseFloat(t[0]).toFixed(e)+","+parseFloat(t[1]).toFixed(e)+","+parseFloat(t[2]).toFixed(e)+","}class Lwe{static setStartRange(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,n)}static setEndRange(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,void 0,n)}static setRange(e,r,n,i){var c;const{metadata:o}=r;n===void 0&&(n=o.sliceIndex=n?a:e.getNumberOfSlices()-1),i=Math.max(n,i),o.sliceIndex=Math.min(n,i),o.referencedImageId=e.getCurrentImageId(o.sliceIndex),o.referencedImageURI=void 0,i===o.sliceIndex?o.multiSliceReference=void 0:i!==((c=o.multiSliceReference)==null?void 0:c.sliceIndex)&&(o.multiSliceReference={referencedImageId:e.getCurrentImageId(i),sliceIndex:i});const s={viewportId:e.id,renderingEngineId:e.renderingEngineId,changeType:Qt.MetadataReferenceModified,annotation:r};ut(et,k.ANNOTATION_MODIFIED,s),this.setViewportFrameRange(e,o)}static setSingle(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,n,n)}static getFrameRange(e){const{metadata:r}=e,{sliceIndex:n,multiSliceReference:i}=r,o=i==null?void 0:i.sliceIndex;return o?[n+1,o+1]:n+1}static getFrameRangeStr(e){const r=this.getFrameRange(e);return Array.isArray(r)?`${r[0]}-${r[1]}`:String(r)}static setViewportFrameRange(e,r){var n;e.setFrameRange&&((n=r.multiSliceReference)!=null&&n.sliceIndex)&&e.setFrameRange(r.sliceIndex+1,r.multiSliceReference.sliceIndex+1)}}function Awe(t,e){const{viewPlaneNormal:r}=t.metadata,{viewPlaneNormal:n}=e.metadata,i=kt(r,n);if(!of(1,Math.abs(i)))return!1;const{polyline:a}=t.data.contour,{polyline:s}=e.data.contour,c=kt(r,a[0]),l=kt(r,s[0]);return of(c,l)}function dG(t,e,r){let n=-1;if(e.forEach((i,o)=>{n>=0||i.a==t.b&&(n=o)}),n>=0){const i=e[n];return e.splice(n,1),r.push(i.b),r[0]==i.b?{remainingLines:e,contourPoints:r,type:"CLOSED_PLANAR"}:dG(i,e,r)}return{remainingLines:e,contourPoints:r,type:"OPEN_PLANAR"}}function w8(t){if(t.length==0)return[];const e=[],r=t.shift();e.push(r.a),e.push(r.b);const n=dG(r,t,e);if(n.remainingLines.length==0)return[{type:n.type,contourPoints:n.contourPoints}];{const i=w8(n.remainingLines);return i.push({type:n.type,contourPoints:n.contourPoints}),i}}function Nwe(t){return w8(t)}const kwe={findContours:w8,findContoursFromReducedSet:Nwe};function Vwe(t,e=!1){const r=t.getPoints(),n=t.getLines(),i=new Array(r.getNumberOfPoints()).fill(0).map((c,l)=>r.getPoint(l).slice()),o=new Array(n.getNumberOfCells()).fill(0).map((c,l)=>{const f=n.getCell(l*3).slice();return{a:f[0],b:f[1]}});if(e)return{points:i,lines:o};const a=[];for(const[c,l]of i.entries()){const f=a.findIndex(u=>u[0]===l[0]&&u[1]===l[1]&&u[2]===l[2]);if(f>=0)o.map(u=>(u.a===c&&(u.a=f),u.b===c&&(u.b=f),u));else{const u=a.length;a.push(l),o.map(d=>(d.a===c&&(d.a=u),d.b===c&&(d.b=u),d))}}const s=o.filter(c=>c.a!==c.b);return{points:a,lines:s}}const Fwe=(t,e)=>{const r=t[0],n=t[1];let i=!1;for(let o=0,a=e.length-1;on!=f>n&&r<(l-s)*(n-c)/(f-c)+s&&(i=!i)}return i};function Uwe(t,e,r){const n=[];t.contourPoints.forEach(o=>{n.push([r[o][0],r[o][1]])});let i=0;return e.contourPoints.forEach(o=>{Fwe([r[o][0],r[o][1]],n)||i++}),i===0}function Bwe(t,e,r=!0){const n=t.filter(s=>s.type!=="CLOSED_PLANAR"),i=t.filter(s=>s.type==="CLOSED_PLANAR"),o=[];let a=[];return i.forEach((s,c)=>{const l=[];i.forEach((f,u)=>{c!=u&&Uwe(s,f,e)&&l.push(u)}),l.length>0?o.push({contour:s,holes:l}):a.push(c)}),r&&(o.forEach(s=>{s.contour.type="CLOSEDPLANAR_XOR",n.push(s.contour),s.holes.forEach(c=>{i[c].type="CLOSEDPLANAR_XOR",n.push(i[c]),a=a.filter(l=>l!==c)})}),a.forEach(s=>{n.push(i[s])})),n}const Gwe={processContourHoles:Bwe};let YI=!1;function qw(){if(YI)return;YI=!0;const t=()=>new Worker(new URL("/static/dv3d/assets/computeWorker-FOqOvCDJ.js",import.meta.url),{name:"compute",type:"module"}),e=vl(),n=d1e().computeWorker,i={maxWorkerInstances:1,autoTerminateOnIdle:(n==null?void 0:n.autoTerminateOnIdle)??{enabled:!0,idleTimeThreshold:2e3}};e.registerWorker("compute",t,i)}function Xw(){return rr.getState().segmentations}function Wwe(t){const{segmentationId:e,representation:r,config:n}=t,{type:i,data:o}=r,a=o?{...o}:{};if(!a)throw new Error("Segmentation representation data may not be undefined");i===Vt.Contour&&zwe(a);const s=$we(n==null?void 0:n.segments,i,a);return n==null||delete n.segments,{segmentationId:e,label:(n==null?void 0:n.label)??null,cachedStats:(n==null?void 0:n.cachedStats)??{},segments:s,representationData:{[i]:{...a}}}}function zwe(t){t.geometryIds=t.geometryIds??[],t.annotationUIDsMap=t.annotationUIDsMap??new Map}function $we(t,e,r){const n={};return t?Object.entries(t).forEach(([i,o])=>{const{label:a,locked:s,cachedStats:c,active:l,...f}=o,u={segmentIndex:Number(i),label:a??`Segment ${i}`,locked:s??!1,cachedStats:c??{},active:l??!1,...f};n[i]=u}):e===Vt.Surface?jwe(n,r):n[1]=Hwe(),n}function jwe(t,e){const{geometryIds:r}=e;r==null||r.forEach(n=>{const i=$e.getGeometry(n);if(i!=null&&i.data){const{segmentIndex:o}=i.data;t[o]={segmentIndex:o}}})}function Hwe(){return{segmentIndex:1,label:"Segment 1",locked:!1,cachedStats:{},active:!0}}function hG(t,e){const r=rr;t.forEach(n=>{const i=Wwe(n);r.addSegmentation(i),e||es(i.segmentationId)})}function rg(t,e,r){return pG(t,e,r)}function gG(t,e,r){return pG(t,e,r)}function pG(t,e,r){const{segmentationId:n,type:i}=e;return Kwe(t,n,i,r),rr.removeSegmentationRepresentations(t,{segmentationId:n,type:i})}function mG(){rr.getAllViewportSegmentationRepresentations().forEach(({viewportId:e,representations:r})=>{r.forEach(({segmentationId:n,type:i})=>{rg(e,{segmentationId:n,type:i})})}),rr.resetState()}function vG(t,e,r){rg(t,{segmentationId:e,type:Vt.Labelmap},r)}function yG(t,e,r){rg(t,{segmentationId:e,type:Vt.Contour},r)}function wG(t,e,r){rg(t,{segmentationId:e,type:Vt.Surface},r)}function Kwe(t,e,r,n){Ea(t,{segmentationId:e,type:r}).forEach(a=>{a.type===Vt.Labelmap?tB.removeRepresentation(t,a.segmentationId,n):a.type===Vt.Contour?QU.removeRepresentation(t,a.segmentationId,n):a.type===Vt.Surface&&lU.removeRepresentation(t,a.segmentationId,n)});const{viewport:o}=Wn(t)||{};o&&o.render()}function x8(t){const e=rr;e.getAllViewportSegmentationRepresentations().filter(({representations:n})=>n.some(i=>i.segmentationId===t)).map(({viewportId:n})=>n).forEach(n=>{gG(n,{segmentationId:t})}),e.removeSegmentation(t),AE(t)}function xG(){const t=rr;t.getState().segmentations.map(n=>n.segmentationId).forEach(n=>{x8(n)}),t.resetState()}function qwe(t){rr.removeColorLUT(t)}function CG(t,e){return SG(t).map(o=>(e&&o.type===e,Vn(o.segmentationId))).filter(o=>o!==void 0)}function SG(t){return rr.getState().viewportSegRepresentations[t]}function Xwe(t,e){return rr.getStackSegmentationImageIdsForViewport(t,e)}function Ywe(){rr.resetState()}const Jwe=Object.freeze(Object.defineProperty({__proto__:null,addColorLUT:Ep,addSegmentations:hG,destroy:Ywe,getColorLUT:xm,getCurrentLabelmapImageIdForViewport:Tf,getCurrentLabelmapImageIdsForViewport:ru,getNextColorLUTIndex:hB,getSegmentation:Vn,getSegmentationRepresentation:NE,getSegmentationRepresentations:Ea,getSegmentationRepresentationsBySegmentationId:aU,getSegmentations:Xw,getStackSegmentationImageIdsForViewport:Xwe,getViewportIdsWithSegmentation:eg,getViewportSegmentationRepresentations:SG,getViewportSegmentations:CG,removeAllSegmentationRepresentations:mG,removeAllSegmentations:xG,removeColorLUT:qwe,removeContourRepresentation:yG,removeLabelmapRepresentation:vG,removeSegmentation:x8,removeSegmentationRepresentation:rg,removeSurfaceRepresentation:wG,updateLabelmapSegmentationImageReferences:CB},Symbol.toStringTag,{value:"Module"}));function TG(t){if("volumeId"in t){if(t=t,!$e.getVolume(t.volumeId))throw new Error(`volumeId of ${t.volumeId} not found in cache, you should load and cache volume before adding segmentation`)}else if("imageIds"in t){if(t=t,!t.imageIds)throw new Error("The segmentationInput.representationData.imageIds is undefined, please provide a valid representationData.imageIds for stack data")}else throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData")}function Zwe(t){if(!t.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");const e=t.representation.data;TG(e)}function Qwe(t){TG(t)}const exe=Object.freeze(Object.defineProperty({__proto__:null,validate:Qwe,validatePublic:Zwe},Symbol.toStringTag,{value:"Module"}));function _G(t){const e=$e.getVolume(t);if(!e)return null;const r=e.referencedVolumeId;let n;if(r)n=$e.getVolume(r);else{const i=e.imageIds,a=$e.getImage(i[0]).referencedImageId,s=$e.getVolumeContainingImageId(a);n=s==null?void 0:s.volume}return n}function txe({operationData:t}){const{volumeId:e}=t;if(!e){const c=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"No volume id found for the segmentation"},cancelable:!0});return et.dispatchEvent(c),null}const r=$e.getVolume(e),n=_G(e);if(!r||!n)return null;const{imageData:i}=r,{voxelManager:o}=r,{voxelManager:a,imageData:s}=n;return{segmentationImageData:i,segmentationVoxelManager:o,segmentationScalarData:null,imageScalarData:null,imageVoxelManager:a,imageData:s}}function nxe({operationData:t,viewport:e,strategy:r}){var f;const{segmentationId:n}=t;let i,o,a,s,c,l;if(r.ensureSegmentationVolumeFor3DManipulation)r.ensureSegmentationVolumeFor3DManipulation({operationData:t,viewport:e}),o=t.segmentationVoxelManager,i=t.segmentationImageData,a=null;else{const u=Tf(e.id,n);if(!u)return null;const d=Lw(e.id,n);if(!d)return null;const h=$e.getImage(u);i=d.actor.getMapper().getInputData(),o=h.voxelManager;const g=t.imageId,p=$e.getImage(g);if(!p)return null;a=(f=p.getPixelData)==null?void 0:f.call(p)}if(r.ensureImageVolumeFor3DManipulation)r.ensureImageVolumeFor3DManipulation({operationData:t,viewport:e}),c=t.imageVoxelManager,s=t.imageScalarData,l=t.imageData;else{const u=e.getCurrentImageId();if(!u)return null;const d=$e.getImage(u);l=d?null:e.getImageData(),s=(d==null?void 0:d.getPixelData())||l.getScalarData(),c=d==null?void 0:d.voxelManager}return{segmentationImageData:i,segmentationScalarData:a,imageScalarData:s,segmentationVoxelManager:o,imageVoxelManager:c,imageData:l}}function C8({operationData:t,viewport:e,strategy:r}){return t?"volumeId"in t&&t.volumeId!=null||"referencedVolumeId"in t&&t.referencedVolumeId!=null?txe({operationData:t}):nxe({operationData:t,viewport:e,strategy:r}):null}function ig(t){const{representationData:e}=Vn(t);let{volumeId:r}=e.Labelmap,n;if(r&&(n=$e.getVolume(r),n))return n;const{imageIds:i}=e.Labelmap;if(r=$e.generateVolumeId(i),!(!i||i.length===1||!Cf(i)))return n=cm(r,i),n}const EG={[Lt.EnsureSegmentationVolumeFor3DManipulation]:t=>{const{operationData:e,viewport:r}=t,{segmentationId:n,imageIds:i}=e,o=r?r.getImageIds():i.map(c=>$e.getImage(c).referencedImageId);if(!Cf(o))throw new Error("Volume is not reconstructable for sphere manipulation");const s=ig(n);s&&(e.segmentationVoxelManager=s.voxelManager,e.segmentationImageData=s.imageData)}};function Yw(t){if(!t||t.length<=1||!Cf(t))return;const r=$e.generateVolumeId(t);let n=$e.getVolume(r);return n||(n=cm(r,t),n)}const bG={[Lt.EnsureImageVolumeFor3DManipulation]:t=>{const{operationData:e,viewport:r}=t;let n;if(r){if(n=r.getImageIds(),!Cf(n))throw new Error("Volume is not reconstructable for sphere manipulation")}else n=Vn(e.segmentationId).representationData.Labelmap.imageIds.map(s=>$e.getImage(s).referencedImageId);const i=Yw(n);if(!i)throw new Error("Failed to create or get image volume");e.imageVoxelManager=i.voxelManager,e.imageData=i.imageData}},gl=(t,e)=>{ut(et,rt.WEB_WORKER_PROGRESS,{progress:e,type:t})},DG=(t,e)=>{const r=Vn(t),{representationData:n}=r,{Labelmap:i}=n;if(!i)return console.debug("No labelmap found for segmentation",t),null;const o=i.volumeId,a=i.imageIds,s={segmentationId:t,volumeId:o,imageIds:a};let c=!1;if(a){const f=a.map(u=>$e.getImage(u).referencedImageId);c=Cf(f)}let l=e;return l?Array.isArray(l)||(l=[l,255]):l=[Da(t)],{operationData:s,segVolumeId:o,segImageIds:a,reconstructableVolume:c,indices:l}},IG=t=>C8({operationData:t,strategy:{ensureSegmentationVolumeFor3DManipulation:EG.ensureSegmentationVolumeFor3DManipulation,ensureImageVolumeFor3DManipulation:bG.ensureImageVolumeFor3DManipulation}}),OG=t=>{const e=[],r=[];for(const n of t){const i=$e.getImage(n),o=i.getPixelData(),{origin:a,direction:s,spacing:c,dimensions:l}=vw(i);e.push({scalarData:o,dimensions:l,spacing:c,origin:a,direction:s});const f=i.referencedImageId;if(f){const u=$e.getImage(f);if(!u)continue;const d=u.getPixelData(),h=u.voxelManager,g=[u.rowPixelSpacing,u.columnPixelSpacing];r.push({scalarData:d,dimensions:h?h.dimensions:[u.columns,u.rows,1],spacing:g})}}return{segmentationInfo:e,imageInfo:r}},rxe=(t,e)=>{var a;let r;if(t){const c=$e.getVolume(t).imageIds,l=$e.getImage(c[0]);l&&(r=l.referencedImageId)}else e!=null&&e.length&&(r=$e.getImage(e[0]).referencedImageId);const n=$e.getImage(r),i=wt("scalingModule",r),o={isPreScaled:!!((a=n==null?void 0:n.preScale)!=null&&a.scaled),isSuvScaled:typeof(i==null?void 0:i.suvbw)=="number"};return{refImageId:r,modalityUnitOptions:o}},{Labelmap:ixe}=Vt;async function MG({segmentations:t}){qw(),gl(Xa.GENERATE_CONTOUR_SETS,0);const{representationData:e,segments:r=[0,1],segmentationId:n}=t;let{volumeId:i}=e[ixe];if(!i){const g=ig(n);g&&(i=g.volumeId)}const o=$e.getVolume(i);if(!o){console.warn(`No volume found for ${i}`);return}const c={scalarData:o.voxelManager.getCompleteScalarDataArray(),dimensions:o.dimensions,spacing:o.imageData.getSpacing(),origin:o.imageData.getOrigin(),direction:o.imageData.getDirection()},l=Array.isArray(r)?r.filter(g=>g!==null).map(g=>g.segmentIndex||g):Object.values(r).filter(g=>g!==null).map(g=>g.segmentIndex||g),f=await vl().executeTask("compute","generateContourSetsFromLabelmapVolume",{segmentation:c,indices:l,mode:"individual"}),u=o.imageIds.map(g=>{var v;const p=(v=$e.getImage(g))==null?void 0:v.referencedImageId;return p?$e.getImage(p):void 0}),d=u.map(g=>vw(g)),h=f.map(g=>{const p=r[g.segment.segmentIndex]||{};if(!g.sliceContours.length)return null;const v=g.sliceContours[0].polyData.points[0];let y;if(v){const m=d.findIndex(w=>{const{scanAxisNormal:x,origin:C}=w,S=nl(x,C);return wk(v,S)});m!==-1&&(y=u[m].imageId)}return{label:p.label,color:p.color,metadata:{FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:y},sliceContours:g.sliceContours.map(m=>({contours:m.contours,polyData:m.polyData,FrameNumber:m.sliceIndex+1,sliceIndex:m.sliceIndex,FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:y}))}}).filter(g=>g!==null);return gl(Xa.GENERATE_CONTOUR_SETS,100),h}class PG{constructor(){}static getContourSequence(e,r){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map((a,s)=>{const c=oxe(a),l=axe(o[s],r);return{NumberOfContourPoints:c.length/3,ContourImageSequence:l,ContourGeometricType:"CLOSED_PLANAR",ContourData:c}})}}PG.toolName="RectangleROIStartEndThreshold";function oxe(t){return[...t[0],...t[1],...t[3],...t[2]].flat().map(i=>i.toFixed(2))}function axe(t,e){const r=e.get("sopCommonModule",t);return{ReferencedSOPClassUID:r.sopClassUID,ReferencedSOPInstanceUID:r.sopInstanceUID}}function sxe(t){if(!(t!=null&&t.data))throw new Error("Tool data is empty");if(!t.metadata||t.metadata.referencedImageId)throw new Error("Tool data is not associated with any imageId")}const Ap=class Ap{constructor(){}static convert(e,r,n){sxe(e);const{toolName:i}=e.metadata,o=Ap.TOOL_NAMES[i];if(!o)throw new Error(`Unknown tool type: ${i}, cannot convert to RTSSReport`);const a=o.getContourSequence(e,n),s=[Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255)];return{ReferencedROINumber:r+1,ROIDisplayColor:s,ContourSequence:a}}static register(e){Ap.TOOL_NAMES[e.toolName]=e}};Ap.TOOL_NAMES={};let y5=Ap;y5.register(PG);function cxe(t,e){ol.acceptAutoGenerated(t,e)}const{isEqual:lxe}=Rn;function YS(t,e){const{polyline:r}=t.data.contour,{points:n}=t.data.handles,{length:i}=n;if(e===i)return r.length;if(e<0&&(e=(e+i)%i),e===0)return 0;const o=n[e],a=r.findIndex(c=>lxe(o,c));if(a!==-1)return a;let s=1/0;return r.reduce((c,l,f)=>{const u=FR(l,o);return u{const S=({value:O})=>{h=h+1,O>=g.lower&&O<=g.upper&&(d=d+1)},{imageData:T,dimensions:_,lower:E,upper:b}=w,D=RE(T,_,x,C);h=0,d=0,g={lower:E,upper:b};let I=!1;const{voxelManager:P}=T.get("voxelManager");return P.forEach(S,{imageData:T,boundsIJK:D}),s===0?I=d>0:s==1&&(I=d===h),I},v=(w,x)=>{const{imageData:C,lower:S,upper:T}=w,_=C.get("voxelManager").voxelManager,E=_.toIndex(x),b=_.getAtIndex(E);return!(b<=S||b>=T)},y=({index:w,pointIJK:x,pointLPS:C})=>{let S=u.length>0;for(let T=0;T{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=this.constructor.createAnnotationForViewport(l,{data:{handles:{points:[[...s],[...s],[...s],[...s]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}}});ln(f,a);const u=At(a,this.getToolName());return this.editData={annotation:f,viewportIdsToRender:u,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(u),f},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=c.worldToCanvas(f[0]),d=c.worldToCanvas(f[3]),h=this._getRectangleImageCoordinates([u,d]),g=[o[0],o[1]],{left:p,top:v,width:y,height:m}=h;return ZE([p,v,y,m],g)<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;o.worldPosition?l=!0:f=c.handles.points.findIndex(g=>g===o);const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Gt(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.doneEditMemo(),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a))},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world,{points:g}=u.handles;g.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=_e(o),{worldToCanvas:g,canvasToWorld:p}=h.viewport,v=d.world,{points:y}=u.handles;y[c]=[...v];let m,w,x,C,S,T,_,E;switch(c){case 0:case 3:m=g(y[0]),C=g(y[3]),w=[C[0],m[1]],x=[m[0],C[1]],T=p(w),_=p(x),y[1]=T,y[2]=_;break;case 1:case 2:w=g(y[1]),x=g(y[2]),m=[x[0],w[1]],C=[w[0],x[1]],S=p(m),E=p(C),y[0]=S,y[3]=E;break}a.invalidated=!0}this.editData.hasMoved=!0,_e(o),Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(F));u.annotationUID=g;const{color:w,lineWidth:x,lineDash:C}=this.getAnnotationStyle({annotation:h,styleSpecifier:u}),{viewPlaneNormal:S,viewUp:T}=a.getCamera();if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(h,S,T,f,n);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,S,T,f,n),a instanceof ur)){const{referencedImageId:F}=h.metadata;for(const j in p.cachedStats)j.startsWith("imageId")&&f.getStackViewports().find(he=>{const ue=Ur(F),ve=he.hasImageURI(ue),Me=Ur(he.getCurrentImageId());return ve&&Me!==ue})&&delete p.cachedStats[j]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let _;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(_=[m[y]]),_&&or(i,g,"0",_,{color:w});const E=`${g}-rect`;e8(i,g,"0",m,{color:w,lineDash:C,lineWidth:x},E),o=!0;const D=this.getLinkedTextBoxStyle(u,h);if(!D.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const I=this.configuration.getTextLines(p,l);if(!I||I.length===0)continue;if(!p.handles.textBox.hasMoved){const F=Oa(m);p.handles.textBox.worldPosition=a.canvasToWorld(F)}const P=a.worldToCanvas(p.handles.textBox.worldPosition),A=ho(i,g,"1",I,P,m,{},D),{x:V,y:G,width:R,height:N}=A;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([V,G]),topRight:a.canvasToWorld([V+R,G]),bottomLeft:a.canvasToWorld([V,G+N]),bottomRight:a.canvasToWorld([V+R,G+N])}}return o},this._getRectangleImageCoordinates=n=>{const[i,o]=n;return{left:Math.min(i[0],o[0]),top:Math.min(i[1],o[1]),width:Math.abs(i[0]-o[0]),height:Math.abs(i[1]-o[1])}},this._calculateCachedStats=(n,i,o,a,s)=>{var v,y,m,w;if(!this.configuration.calculateStats)return;const{data:c}=n,{viewport:l}=s,{element:f}=l,u=c.handles.points[0],d=c.handles.points[3],{cachedStats:h}=c,g=Object.keys(h);for(let x=0;xhr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}};R0.toolName="RectangleROI",R0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=R0.hydrateBase(R0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let ou=R0;function fxe(t,e){const r=t.cachedStats[e],{area:n,mean:i,max:o,stdDev:a,areaUnit:s,modalityUnit:c,min:l}=r;if(i==null)return;const f=[];return Ar(n)&&f.push(`Area: ${un(n)} ${s}`),Ar(i)&&f.push(`Mean: ${un(i)} ${c}`),Ar(o)&&f.push(`Max: ${un(o)} ${c}`),Ar(l)&&f.push(`Max: ${un(l)} ${c}`),Ar(a)&&f.push(`Std Dev: ${un(a)} ${c}`),f}const{transformWorldToIndex:Lg}=Rn;class S8 extends ou{constructor(e={},r={configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:dxe,statsCalculator:dl,showTextBox:!1,throttleTimeout:100}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u;let g,p,v;if(l instanceof lr)throw new Error("Stack Viewport Not implemented");{const T=this.getTargetId(l);v=yl(T),p=$e.getVolume(v),g=Zl(p,s,d)}const y=xf(p,d),m=this._getStartCoordinate(s,d),w=this._getEndCoordinate(s,y,d),x=l.getFrameOfReferenceUID(),C={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:c,viewUp:[...h],FrameOfReferenceUID:x,referencedImageId:g,toolName:this.getToolName(),volumeId:v,spacingInNormal:y},data:{label:"",startCoordinate:m,endCoordinate:w,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[g],statistics:[]},handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(C,p),ln(C,a);const S=At(a,this.getToolName());return this.editData={annotation:C,viewportIdsToRender:S,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),C},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const d=this.getTargetId(u.viewport),h=$e.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(a,d,h,u),Be(s),c?Un(a):cn(a,o)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;let s=hn(this.getToolName(),a.element);if(!(s!=null&&s.length))return o;s=zw(s,a.getCamera());const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let l=0;la.worldToCanvas(R));c.annotationUID=u;const w=this.getStyle("lineWidth",c,f),x=this.getStyle("lineDash",c,f),C=this.getStyle("color",c,f),S=a.getCamera().focalPoint,T=a.getCamera().viewPlaneNormal;let _=g,E=p;if(Array.isArray(g)){_=this._getCoordinateForViewplaneNormal(_,T);const R=this._getIndexOfCoordinatesForViewplaneNormal(T);d.handles.points.forEach(N=>{N[R]=_}),d.startCoordinate=_}Array.isArray(p)&&(E=this._getCoordinateForViewplaneNormal(E,T),d.endCoordinate=E,d.endCoordinate=E);const b=Bu(_),D=Bu(E),I=this._getCoordinateForViewplaneNormal(S,T),P=Bu(I);if(PMath.max(b,D))continue;f.invalidated&&this._throttledCalculateCachedStats(f,n);let O=!1;if((P===b||P===D)&&(O=!0),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let A;if(!Kr(u))continue;!si(u)&&!this.editData&&y!==null&&O&&(A=[m[y]]),A&&or(i,u,"0",A,{color:C});let V=x;if(O||(V=2),Em(i,u,"0",m[0],m[3],{color:C,lineDash:V,lineWidth:w}),o=!0,this.configuration.showTextBox){const R=this.getLinkedTextBoxStyle(c,f);if(!R.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const N=this.configuration.getTextLines(d,{metadata:h});if(!N||N.length===0)continue;if(!d.handles.textBox.hasMoved){const Me=Oa(m);d.handles.textBox.worldPosition=a.canvasToWorld(Me)}const F=a.worldToCanvas(d.handles.textBox.worldPosition),te=ho(i,u,"1",N,F,m,{},R),{x:ie,y:he,width:ue,height:ve}=te;d.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([ie,he]),topRight:a.canvasToWorld([ie+ue,he]),bottomLeft:a.canvasToWorld([ie,he+ve]),bottomRight:a.canvasToWorld([ie+ue,he+ve])}}}return o},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=Wo(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=Yh(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,r){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:s}=r,{startCoordinate:c,endCoordinate:l}=n,{points:f}=n.handles,u=Lg(s,f[0]),d=Lg(s,f[0]),h=Ke();s.indexToWorldVec3(u,h);const g=Ke();s.indexToWorldVec3(d,g),this._getIndexOfCoordinatesForViewplaneNormal(o)==2?(h[2]=c,g[2]=l):this._getIndexOfCoordinatesForViewplaneNormal(o)==0?(h[0]=c,g[0]=l):this._getIndexOfCoordinatesForViewplaneNormal(o)==1&&(h[1]=c,g[1]=l);const p=Qi(h,g),v=[];for(let y=0;y{const w=Ke();return On(w,m,o,y),Array.from(w)}));n.cachedStats.projectionPoints=v}_computePointsInsideVolume(e,r,n,i){var S,T,_;const{data:o,metadata:a}=e,{viewPlaneNormal:s,viewUp:c}=a,{viewport:l}=i,f=o.cachedStats.projectionPoints,u=[[]],d=this.getTargetImageData(r),h=o.handles.points[0],g=o.handles.points[3],{worldWidth:p,worldHeight:v}=Ww(s,c,h,g),y=Ia(d,o.habdles),m=Math.abs(p*v)/(y.scale*y.scale),w={isPreScaled:lu(l,r),isSuvScaled:this.isSuvScaled(l,r,e.metadata.referencedImageId)},x=uu(a.Modality,e.metadata.referencedImageId,w);for(let E=0;E{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getTargetId(l);let p,v;if(l instanceof lr)p=g.split("imageId:")[1];else{v=yl(g);const x=$e.getVolume(v);p=Zl(x,s,d)}const y=l.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:c,viewUp:[...h],FrameOfReferenceUID:y,referencedImageId:p,toolName:this.getToolName(),volumeId:v},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},segmentationId:null}};ln(m,a);const w=At(a,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(w),m},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(S));l.annotationUID=d;const y=this.getStyle("lineWidth",l,u),m=this.getStyle("lineDash",l,u),w=this.getStyle("color",l,u);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;cn(u,s);let x;if(!Kr(d))continue;!si(d)&&!this.editData&&p!==null&&(x=[v[p]]),x&&or(i,d,"0",x,{color:w}),Em(i,d,"0",v[0],v[3],{color:w,lineDash:m,lineWidth:y}),o=!0}return o}}}T8.toolName="RectangleROIThreshold";function LG(t,e,r={}){const n=[];return t.forEach(o=>{var h,g;const{data:a}=o,{points:s}=a.handles,{imageData:c,dimensions:l}=e;let f=s;if((h=a.cachedStats)!=null&&h.projectionPoints){const{projectionPoints:p}=a.cachedStats;f=[].concat(...p)}const u=f.map(p=>zr(c,p));let d=cf(u,l);r.numSlicesToProject&&!((g=a.cachedStats)!=null&&g.projectionPoints)&&(d=cG(d,r.numSlicesToProject)),n.push(d)}),n.length===1?n[0]:n.reduce((o,a)=>({iMin:Math.min(o.iMin,a.iMin),jMin:Math.min(o.jMin,a.jMin),kMin:Math.min(o.kMin,a.kMin),iMax:Math.max(o.iMax,a.iMax),jMax:Math.max(o.jMax,a.jMax),kMax:Math.max(o.kMax,a.kMax)}),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})}function hxe(t,e,r,n){const i=t.map(s=>mr.getAnnotation(s));gxe(i);let o;for(let s=0;s{if(!Zt(f,t[0].dimensions)||!Zt(l,t[0].direction)||!Zt(d,t[0].spacing)||!Zt(u,t[0].origin))throw new Error("labelmaps must have the same size and shape")});const n=t[0],i=n.voxelManager.getConstructor(),o=new i(n.voxelManager.getScalarDataLength());t.forEach(l=>{const f=l.voxelManager,u=f.getScalarDataLength();for(let d=0;d0;)g(f.pop());return{flooded:u};function g(_){const E=_.currentArgs,b=_.previousArgs;p(E)||(v(E),y(E)?(m(E),x(E)):w(b))}function p(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));return d.has(I)}function v(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));d.add(I)}function y(_){const E=C(_);return o?o(E,c):E===c}function m(_){u.push(_),n&&n(..._)}function w(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));h==null||h.set(I,_),i&&i(..._)}function x(_){for(let E=0;E{const{segmentIndex:e,previewSegmentIndex:r,segmentationVoxelManager:n,centerIJK:i,viewPlaneNormal:o,segmentationImageData:a,configuration:s}=t;if(!(s!=null&&s.useCenterSegmentIndex))return;let c=!1,l=!1;const f=[...n.getBoundsIJK()];Math.abs(o[0])>.8?f[0]=[i[0],i[0]]:Math.abs(o[1])>.8?f[1]=[i[1],i[1]]:Math.abs(o[2])>.8&&(f[2]=[i[2],i[2]]);const u=({value:h})=>{c||(c=h===e),l||(l=h===r)};if(n.forEach(u,{imageData:a,isInObject:t.isInObject,boundsIJK:f}),!c&&!l){t.centerSegmentIndexInfo.segmentIndex=null;return}const d=n.getAtIJKPoint(i);t.centerSegmentIndexInfo.segmentIndex=d,t.centerSegmentIndexInfo.hasSegmentIndex=c,t.centerSegmentIndexInfo.hasPreviewIndex=l}},wxe={[Lt.Initialize]:t=>{var y;const{operationName:e,centerIJK:r,segmentationVoxelManager:n,imageVoxelManager:i,configuration:o,segmentIndex:a,viewport:s}=t;if(!((y=o==null?void 0:o.threshold)!=null&&y.isDynamic)||!r||!a||e===Lt.RejectPreview||e===Lt.OnInteractionEnd)return;const c=n.getBoundsIJK(),{range:l,dynamicRadius:f=0}=o.threshold,u=l?0:f,{viewPlaneNormal:d}=s.getCamera(),h=c.map((m,w)=>{const[x,C]=m;return[Math.max(x,r[w]-u),Math.min(C,r[w]+u)]});Math.abs(d[0])>.8?h[0]=[r[0],r[0]]:Math.abs(d[1])>.8?h[1]=[r[1],r[1]]:Math.abs(d[2])>.8&&(h[2]=[r[2],r[2]]);const g=l||[1/0,-1/0],p=u*u,v=({value:m,pointIJK:w})=>{if(sS(r,w)>p)return;const C=Array.isArray(m)?yh(m):m;g[0]=Math.min(C,g[0]),g[1]=Math.max(C,g[1])};i.forEach(v,{boundsIJK:h}),o.threshold.range=g},[Lt.OnInteractionStart]:t=>{var r;const{configuration:e}=t;(r=e==null?void 0:e.threshold)!=null&&r.isDynamic&&(e.threshold.range=null)},[Lt.ComputeInnerCircleRadius]:t=>{const{configuration:e,viewport:r}=t,{dynamicRadius:n=0,isDynamic:i}=e.threshold;if(!i){e.threshold.dynamicRadiusInCanvas=0;return}if(n===0)return;const o=r.getImageData();if(!o)return;const{spacing:a}=o,s=[r.element.clientWidth/2,r.element.clientHeight/2],c=n*a[0],f=r.canvasToWorld(s).map(h=>h+c),u=r.worldToCanvas(f),d=Math.abs(s[0]-u[0]);e.threshold.dynamicRadiusInCanvas||(e.threshold.dynamicRadiusInCanvas=0),e.threshold.dynamicRadiusInCanvas=3+d}},xxe={[Lt.Initialize]:t=>{t.segmentIndex=0}},{isEqual:M3}=Rn,ZI={toIJK:t=>t,fromIJK:t=>t,type:"acquistion"},Cxe={toIJK:([t,e,r])=>[r,t,e],fromIJK:([t,e,r])=>[e,r,t],type:"jk"},Sxe={toIJK:([t,e,r])=>[t,r,e],fromIJK:([t,e,r])=>[t,r,e],type:"ik"};function NG(t,e){if(!(t instanceof Tr))return{...ZI,boundsIJKPrime:e};const{viewPlaneNormal:r}=t.getCamera(),n=M3(Math.abs(r[0]),1)&&Cxe||M3(Math.abs(r[1]),1)&&Sxe||M3(Math.abs(r[2]),1)&&ZI;return n?{...n,boundsIJKPrime:n.fromIJK(e)}:{toIJK:null,boundsIJKPrime:null,fromIJK:null,error:`Only mappings orthogonal to acquisition plane are permitted, but requested ${r}`}}const{RLEVoxelMap:Txe,VoxelManager:_xe}=Rn,Exe=65535;var po;(function(t){t[t.SEGMENT=-1]="SEGMENT",t[t.ISLAND=-2]="ISLAND",t[t.INTERIOR=-3]="INTERIOR",t[t.EXTERIOR=-4]="EXTERIOR",t[t.INTERIOR_SMALL=-5]="INTERIOR_SMALL",t[t.INTERIOR_TEST=-6]="INTERIOR_TEST"})(po||(po={}));class Pd{constructor(e){this.fillInternalEdge=!1,this.maxInternalRemove=128,this.maxInternalRemove=(e==null?void 0:e.maxInternalRemove)??this.maxInternalRemove,this.fillInternalEdge=(e==null?void 0:e.fillInternalEdge)??this.fillInternalEdge}initialize(e,r,n){const i=!!r.sourceVoxelManager,o=i?r.sourceVoxelManager:r,a=i?r:_xe.createRLEHistoryVoxelManager(o),{segmentIndex:s=1,previewSegmentIndex:c=1}=n,l=n.points||o.getPoints();if(!(l!=null&&l.length))return;const f=o.getBoundsIJK().map((x,C)=>[Math.min(x[0],...l.map(S=>S[C])),Math.max(x[1],...l.map(S=>S[C]))]);if(f.find(x=>x[0]<0||x[1]>Exe))return;const{toIJK:u,fromIJK:d,boundsIJKPrime:h,error:g}=NG(e,f);if(g){console.warn("Not performing island removal for planes not orthogonal to acquisition plane",g);return}const[p,v,y]=d(o.dimensions),m=new Txe(p,v,y),w=(x,C,S)=>{const T=o.toIndex(u([x,C,S])),_=o.getAtIndex(T);if(_===c||_===s)return po.SEGMENT};return m.fillFrom(w,h),m.normalizer={toIJK:u,fromIJK:d,boundsIJKPrime:h},this.segmentSet=m,this.previewVoxelManager=a,this.segmentIndex=s,this.previewSegmentIndex=c??s,this.selectedPoints=l,!0}floodFillSegmentIsland(){const{selectedPoints:e,segmentSet:r}=this;let n=0;const{fromIJK:i}=r.normalizer;return e.forEach(o=>{const a=i(o),s=r.toIndex(a),[c,l,f]=a;r.get(s)===po.SEGMENT&&(n+=r.floodFill(c,l,f,po.ISLAND))}),n}removeExternalIslands(){const{previewVoxelManager:e,segmentSet:r}=this,{toIJK:n}=r.normalizer,i=(o,a)=>{const[,s,c]=r.toIJK(o);if(a.value!==po.ISLAND)for(let l=a.start;l{let f;for(const u of[...l])if(u.value===po.ISLAND){if(!f){if(this.fillInternalEdge&&u.start>0)for(let d=0;d{if(l.value!==po.INTERIOR)return;const[,f,u]=e.toIJK(c),d=f>0?e.getRun(f-1,u):null,h=f+12&&(!v||!y)&&e.floodFill(l.start,f,u,po.EXTERIOR,{singlePlane:!0})}),e.forEach((c,l)=>{if(l.value!==po.INTERIOR)return;const[,f,u]=e.toIJK(c),g=e.floodFill(l.start,f,u,po.INTERIOR_TEST)>this.maxInternalRemove?po.EXTERIOR:po.INTERIOR_SMALL;e.floodFill(l.start,f,u,g)}),e.forEach((c,l)=>{if(l.value===po.INTERIOR_SMALL)for(let f=l.start;f=o.start&&n=i))return!0;return!1}}const bxe={[Lt.OnInteractionEnd]:t=>{const{previewSegmentIndex:e,segmentIndex:r,viewport:n,segmentationVoxelManager:i,activeStrategy:o,memo:a}=t;if(o!=="THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL"||r===null)return;const s=new Pd,c=(a==null?void 0:a.voxelManager)||i;if(!s.initialize(n,c,{previewSegmentIndex:e,segmentIndex:r}))return;s.floodFillSegmentIsland(),s.removeExternalIslands(),s.removeInternalIslands();const l=c.getArrayOfModifiedSlices();l&&To(t.segmentationId,l,e)}},Dxe={[Lt.Preview]:function(t){var o,a;const{previewSegmentIndex:e,configuration:r,enabledElement:n}=t;if(!e||!r)return;(o=this.onInteractionStart)==null||o.call(this,n,t);const i=this.fill(n,t);return i&&((a=this.onInteractionEnd)==null||a.call(this,n,t)),i},[Lt.Initialize]:t=>{const{segmentIndex:e,previewColor:r,previewSegmentIndex:n}=t;if(n==null||e==null)return;const i=eg(t.segmentationId);i==null||i.forEach(o=>{gB(o,t.segmentationId,n,r)})},[Lt.AcceptPreview]:t=>{const{previewSegmentIndex:e,segmentationVoxelManager:r,memo:n,segmentIndex:i,centerSegmentIndexInfo:o}=t||{},{changedIndices:a}=o||{},s=n,c=({index:l})=>{const f=r.getAtIndex(l);(a==null?void 0:a.length)>0?a.includes(l)&&s.voxelManager.setAtIndex(l,0):f===e&&s.voxelManager.setAtIndex(l,i)};r.forEach(c),To(t.segmentationId,r.getArrayOfModifiedSlices(),i),t.centerSegmentIndexInfo.changedIndices=[]},[Lt.RejectPreview]:t=>{t&&vV.undoIf(e=>{const r=e;if(!(r!=null&&r.voxelManager))return!1;const{segmentationVoxelManager:n}=r;let i=!1;const o=({value:a})=>{a===t.previewSegmentIndex&&(i=!0)};return n.forEach(o),i})}},Ixe={[Lt.Fill]:t=>{var l;const{segmentsLocked:e,segmentationImageData:r,segmentationVoxelManager:n,brushStrategy:i,centerIJK:o}=t,a=(l=i.createIsInThreshold)==null?void 0:l.call(i,t),{setValue:s}=i,c=a?f=>{const{value:u,index:d}=f;e.includes(u)||!a(d)||s(t,f)}:f=>s(t,f);n.forEach(c,{imageData:r,isInObject:t.isInObject,boundsIJK:t.isInObjectBoundsIJK}),n.addPoint(o)}};function Oxe({operationData:t,existingValue:e,index:r}){const{previewSegmentIndex:n,memo:i,centerSegmentIndexInfo:o,previewOnHover:a,segmentIndex:s}=t,{hasPreviewIndex:c,hasSegmentIndex:l,segmentIndex:f}=o;if(f===0&&l&&c){if(e===s||a)return;if(e===n){i.voxelManager.setAtIndex(r,0);return}return}if(f===0&&l&&!c){if(e===0||e!==s)return;i.voxelManager.setAtIndex(r,n),o.changedIndices.push(r);return}if(f===0&&!l&&c){if(e===s||a)return;if(e===n){i.voxelManager.setAtIndex(r,0);return}return}if(f===0&&!l&&!c){if(e===s)return;if(e===n){i.voxelManager.setAtIndex(r,n);return}return}if(f===n&&l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===n&&!l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===s&&l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===s&&l&&!c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}}const Mxe={[Lt.INTERNAL_setValue]:(t,{value:e,index:r})=>{const{segmentsLocked:n,previewSegmentIndex:i,memo:o,segmentationVoxelManager:a,centerSegmentIndexInfo:s,segmentIndex:c}=t,l=a.getAtIndex(r);if(!n.includes(e)&&!(!s&&l===c)&&!((s==null?void 0:s.segmentIndex)!==0&&l===c)){if((s==null?void 0:s.segmentIndex)===null){o.voxelManager.setAtIndex(r,i??c);return}if(!i){let f=c;s&&(f=s.segmentIndex),o.voxelManager.setAtIndex(r,f);return}Oxe({operationData:t,existingValue:l,index:r})}}},Pxe={[Lt.CreateIsInThreshold]:t=>{const{imageVoxelManager:e,segmentIndex:r,configuration:n}=t;if(!(!n||!r))return i=>{var c;const o=e.getAtIndex(i),a=Array.isArray(o)?ta(o):o,{threshold:s}=n||{};return(c=s==null?void 0:s.range)!=null&&c.length?s.range[0]<=a&&a<=s.range[1]:!0}}},QI=10;function w5(){return{maxIJKs:[]}}function kG(t,e){const{value:r}=e,{maxIJKs:n}=t,i=n.length;if(typeof r!="number"||i>=QI&&r=n[i-1].value)n.push(o);else for(let a=0;a=QI&&n.splice(0,1)}function VG(t,e,r){const{spacing:n,calibration:i}=r,{volumeUnit:o}=Ia({calibration:i,hasPixelSpacing:!0},[]),a=n?n[0]*n[1]*n[2]:1;return e.volume={value:Array.isArray(e.count.value)?e.count.value.map(s=>s*a):e.count.value*a,unit:o,name:"volume",label:"Volume"},e.maxIJKs=t.maxIJKs.filter(s=>s.pointIJK!==void 0),e.array.push(e.volume),t.maxIJKs=[],e}const nb=class nb extends dl{static statsInit(e){super.statsInit(e),this.volumetricState=w5()}static statsCallback(e){super.statsCallback(e),kG(this.volumetricState,e)}static getStatistics(e){const r={...e,unit:(e==null?void 0:e.unit)||"none",calibration:e==null?void 0:e.calibration,hasPixelSpacing:e==null?void 0:e.hasPixelSpacing},n=super.getStatistics(r);return VG(this.volumetricState,n,r)}};nb.volumetricState=w5();let hd=nb;class e7 extends MU{constructor(e){super(e),this.volumetricState=w5()}statsInit(e){super.statsInit(e),this.volumetricState=w5()}statsCallback(e){super.statsCallback(e),kG(this.volumetricState,e)}getStatistics(e){const r={...e,unit:(e==null?void 0:e.unit)||"none",calibration:e==null?void 0:e.calibration,hasPixelSpacing:e==null?void 0:e.hasPixelSpacing},n=super.getStatistics(r);return VG(this.volumetricState,n,r)}}const Rxe=Math.pow(3*1e3/(4*Math.PI),1/3);async function FG({segmentationId:t,segmentIndices:e,mode:r="collective"}){qw(),gl(Xa.COMPUTE_STATISTICS,0);const n=DG(t,e);if(!n)return;const{operationData:i,segVolumeId:o,segImageIds:a,reconstructableVolume:s,indices:c}=n,{refImageId:l,modalityUnitOptions:f}=rxe(o,a),u=vB(l,f);return s?await Lxe({operationData:i,indices:c,unit:u,mode:r}):await Axe({segImageIds:a,indices:c,unit:u,mode:r})}async function Lxe({operationData:t,indices:e,unit:r,mode:n}){var p;const i=IG(t),{segmentationVoxelManager:o,imageVoxelManager:a,segmentationImageData:s,imageData:c}=i;if(!o||!s)return;const l=s.getSpacing(),{boundsIJK:f}=o;if(!f)return hd.getStatistics({spacing:l});const d={scalarData:o.getCompleteScalarDataArray(),dimensions:s.getDimensions(),spacing:s.getSpacing(),origin:s.getOrigin(),direction:s.getDirection()},h={scalarData:a.getCompleteScalarDataArray(),dimensions:c.getDimensions(),spacing:c.getSpacing(),origin:c.getOrigin(),direction:c.getDirection()};if(!((p=h.scalarData)!=null&&p.length))return;const g=await vl().executeTask("compute","calculateSegmentsStatisticsVolume",{segmentationInfo:d,imageInfo:h,indices:e,unit:r,mode:n});if(gl(Xa.COMPUTE_STATISTICS,100),n==="collective")return x5({stats:g,unit:r,spacing:l,segmentationImageData:s,imageVoxelManager:a});{const v={};return Object.entries(g).forEach(([y,m])=>{v[y]=x5({stats:m,unit:r,spacing:l,segmentationImageData:s,imageVoxelManager:a})}),v}}const P3=(t,e)=>{if(!t.array)return;const r=t.array.findIndex(n=>n.name===e.name);r!==-1?t.array[r]=e:t.array.push(e)},x5=({stats:t,unit:e,spacing:r,segmentationImageData:n,imageVoxelManager:i})=>{if(t.mean.unit=e,t.max.unit=e,t.min.unit=e,e!=="SUV")return t;const o=r.map(a=>Math.max(1,Math.round(1.1*Rxe/a)));for(const a of t.maxIJKs){const s=Nxe(a,o,n,i,r);if(!s)continue;const{mean:c}=s;(!t.peakValue||t.peakValue.value<=c.value)&&(t.peakValue={name:"peakValue",label:"Peak Value",value:c.value,unit:e},t.peakPoint={name:"peakLPS",label:"Peak SUV Point",value:a.pointLPS?[...a.pointLPS]:null,unit:null},P3(t,t.peakValue),P3(t,t.peakPoint))}if(t.volume&&t.mean){const a=t.volume.value,s=t.mean.value;t.lesionGlycolysis={name:"lesionGlycolysis",label:"Lesion Glycolysis",value:a*s,unit:`${t.volume.unit}·${e}`},P3(t,t.lesionGlycolysis)}return t};async function Axe({segImageIds:t,indices:e,unit:r,mode:n}){gl(Xa.COMPUTE_STATISTICS,0);const{segmentationInfo:i,imageInfo:o}=OG(t),a=await vl().executeTask("compute","calculateSegmentsStatisticsStack",{segmentationInfo:i,imageInfo:o,indices:e,mode:n});gl(Xa.COMPUTE_STATISTICS,100);const s=i[0].spacing,c=i[0],l=o[0].voxelManager;if(n==="collective")return x5({stats:a,unit:r,spacing:s,segmentationImageData:c,imageVoxelManager:l});{const f={};return Object.entries(a).forEach(([u,d])=>{f[u]=x5({stats:d,unit:r,spacing:s,segmentationImageData:c,imageVoxelManager:l})}),f}}function Nxe(t,e,r,n,i){const{pointIJK:o,pointLPS:a}=t;if(!o)return;const s=o.map((f,u)=>[f-e[u],f+e[u]]),c=(f,u)=>{const d=(u[0]-o[0])/e[0],h=(u[1]-o[1])/e[1],g=(u[2]-o[2])/e[2];return d*d+h*h+g*g<=1},l=({pointIJK:f,pointLPS:u})=>{const d=n.getAtIJKPoint(f);d!==void 0&&hd.statsCallback({value:d,pointLPS:u,pointIJK:f})};return hd.statsInit({storePointData:!1}),z4(r,{pointInShapeFn:c,callback:l,boundsIJK:s}),hd.getStatistics({spacing:i})}const kxe={[Lt.GetStatistics]:function(t,e,r){const{indices:n}=r,{segmentationId:i,viewport:o}=e;FG({segmentationId:i,segmentIndices:n})}},Cn={determineSegmentIndex:yxe,dynamicThreshold:wxe,erase:xxe,islandRemoval:bxe,preview:Dxe,regionFill:Ixe,setValue:Mxe,threshold:Pxe,labelmapStatistics:kxe,ensureSegmentationVolumeFor3DManipulation:EG,ensureImageVolumeFor3DManipulation:bG},Zf=class Zf{constructor(e,...r){this._initialize=[],this._fill=[],this._onInteractionStart=[],this.fill=(n,i)=>{const o=this.initialize(n,i,Lt.Fill);if(!o)return;this._fill.forEach(c=>c(o));const{segmentationVoxelManager:a,segmentIndex:s}=o;return To(o.segmentationId,a.getArrayOfModifiedSlices(),s),o},this.onInteractionStart=(n,i)=>{const o=this.initialize(n,i);o&&this._onInteractionStart.forEach(a=>a.call(this,o))},this.addPreview=(n,i)=>{const o=this.initialize(n,i,Lt.AddPreview);if(o)return o},this.configurationName=e,this.compositions=r,r.forEach(n=>{const i=typeof n=="function"?n():n;if(i)for(const o in i){if(!Zf.childFunctions[o])throw new Error(`Didn't find ${o} as a brush strategy`);Zf.childFunctions[o](this,i[o])}}),this.strategyFunction=(n,i)=>this.fill(n,i);for(const n of Object.keys(Zf.childFunctions))this.strategyFunction[n]=this[n]}initialize(e,r,n){const{viewport:i}=e,o=C8({operationData:r,viewport:i,strategy:this});if(!o)return null;const{imageVoxelManager:a,segmentationVoxelManager:s,segmentationImageData:c}=o,l=r.createMemo(r.segmentationId,s),f={operationName:n,...r,segmentIndex:r.segmentIndex,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:s,segmentationImageData:c,viewport:i,centerWorld:null,isInObject:null,isInObjectBoundsIJK:null,brushStrategy:this,memo:l};return this._initialize.forEach(u=>u(f)),f}};Zf.COMPOSITIONS=Cn,Zf.childFunctions={[Lt.OnInteractionStart]:$s(Lt.OnInteractionStart,Lt.Initialize),[Lt.OnInteractionEnd]:$s(Lt.OnInteractionEnd,Lt.Initialize),[Lt.Fill]:$s(Lt.Fill),[Lt.Initialize]:$s(Lt.Initialize),[Lt.CreateIsInThreshold]:zv(Lt.CreateIsInThreshold),[Lt.Interpolate]:$s(Lt.Interpolate,Lt.Initialize),[Lt.AcceptPreview]:$s(Lt.AcceptPreview,Lt.Initialize),[Lt.RejectPreview]:$s(Lt.RejectPreview,Lt.Initialize),[Lt.INTERNAL_setValue]:zv(Lt.INTERNAL_setValue),[Lt.Preview]:zv(Lt.Preview,!1),[Lt.ComputeInnerCircleRadius]:$s(Lt.ComputeInnerCircleRadius),[Lt.EnsureSegmentationVolumeFor3DManipulation]:$s(Lt.EnsureSegmentationVolumeFor3DManipulation),[Lt.EnsureImageVolumeFor3DManipulation]:$s(Lt.EnsureImageVolumeFor3DManipulation),[Lt.AddPreview]:$s(Lt.AddPreview),[Lt.GetStatistics]:zv(Lt.GetStatistics),compositions:null};let pc=Zf;function $s(t,e){const r=`_${t}`;return(n,i)=>{n[r]||(n[r]=[]),n[r].push(i),n[t]||(n[t]=e?(o,a,...s)=>{const c=n[e](o,a,t);let l;return n[r].forEach(f=>{const u=f.call(n,c,...s);l||(l=u)}),l}:(o,...a)=>{n[r].forEach(s=>s.call(n,o,...a))})}}function zv(t,e=!0){return(r,n)=>{if(r[t])throw new Error(`The singleton method ${t} already exists`);r[t]=e?n:(i,o,...a)=>(o.enabledElement=i,n.call(r,o,...a))}}function UG(t,e){const{center:r,radius:n}=t,i=t.radius2||n*n;return(e[0]-r[0])*(e[0]-r[0])+(e[1]-r[1])*(e[1]-r[1])+(e[2]-r[2])*(e[2]-r[2])<=i}const{transformWorldToIndex:t7,isEqual:R3}=Rn,BG={[Lt.Initialize]:t=>{const{points:e,viewport:r,segmentationImageData:n}=t;if(!e)return;const i=Ft(0,0,0);e.forEach(d=>{ri(i,i,d)}),Ir(i,i,1/e.length),t.centerWorld=i,t.centerIJK=t7(n,i);const o=e.map(d=>r.worldToCanvas(d)),[a,s]=a5(o),c=r.canvasToWorld(a),l=r.canvasToWorld(s),f=e.map(d=>t7(n,d)),u=cf(f,n.getDimensions());t.isInObject=GG({topLeftWorld:c,bottomRightWorld:l,center:i}),t.isInObjectBoundsIJK=u}};function GG(t){const{topLeftWorld:e,bottomRightWorld:r,center:n}=t,i=Math.abs(e[0]-r[0])/2,o=Math.abs(e[1]-r[1])/2,a=Math.abs(e[2]-r[2])/2,s=Math.max(i,o,a);if(R3(i,s)&&R3(o,s)&&R3(a,s)){const f={center:n,radius:s,radius2:s*s};return u=>UG(f,u)}const c={center:n,xRadius:i,yRadius:o,zRadius:a},{precalculated:l}=jE(c,{});return l}const WG=new pc("Circle",Cn.regionFill,Cn.setValue,BG,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics),Vxe=new pc("CircleThreshold",Cn.regionFill,Cn.setValue,BG,Cn.determineSegmentIndex,Cn.dynamicThreshold,Cn.threshold,Cn.preview,Cn.islandRemoval,Cn.labelmapStatistics),Jw=WG.strategyFunction,Fxe=Vxe.strategyFunction;function Uxe(){throw new Error("Not yet implemented")}const{transformWorldToIndex:Bxe}=Rn,Gxe={[Lt.Initialize]:t=>{const{points:e,viewport:r,segmentationImageData:n}=t;if(!e)return;const i=Ft(0,0,0);e.forEach(c=>{ri(i,i,c)}),Ir(i,i,1/e.length),t.centerWorld=i,t.centerIJK=Bxe(n,i);const{boundsIJK:o,topLeftWorld:a,bottomRightWorld:s}=Pwe(e.slice(0,2),n,r);t.isInObjectBoundsIJK=o,t.isInObject=GG({topLeftWorld:a,bottomRightWorld:s,center:i})}},Zw=new pc("Sphere",Cn.regionFill,Cn.setValue,Gxe,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics,Cn.ensureSegmentationVolumeFor3DManipulation),zG=Zw.strategyFunction,Wxe=new pc("SphereThreshold",...Zw.compositions,Cn.dynamicThreshold,Cn.threshold,Cn.ensureSegmentationVolumeFor3DManipulation,Cn.ensureImageVolumeFor3DManipulation),zxe=new pc("SphereThreshold",...Zw.compositions,Cn.dynamicThreshold,Cn.threshold,Cn.islandRemoval,Cn.ensureSegmentationVolumeFor3DManipulation,Cn.ensureImageVolumeFor3DManipulation),$xe=Wxe.strategyFunction,jxe=zxe.strategyFunction,Hxe=new pc("EraseSphere",Cn.erase,...Zw.compositions),$G=Hxe.strategyFunction,Kxe=new pc("EraseCircle",Cn.erase,...WG.compositions),jG=Kxe.strategyFunction,{VoxelManager:JS,RLEVoxelMap:qxe}=Rn;function ZS(t,e){return KG(t,e)}function HG(t){const{segmentationVoxelManager:e,undoVoxelManager:r,redoVoxelManager:n}=this,i=t===!1?n:r;i.forEach(({value:a,pointIJK:s})=>{e.setAtIJKPoint(s,a)});const o=i.getArrayOfModifiedSlices();To(this.segmentationId,o)}function KG(t,e){const r=JS.createRLEHistoryVoxelManager(e);return{segmentationId:t,restoreMemo:HG,commitMemo:Xxe,segmentationVoxelManager:e,voxelManager:r,id:Pn(),operationType:"labelmap"}}function Xxe(){if(this.redoVoxelManager)return!0;if(!this.voxelManager.modifiedSlices.size)return!1;const{segmentationVoxelManager:t}=this,e=JS.createRLEHistoryVoxelManager(t);qxe.copyMap(e.map,this.voxelManager.map);for(const n of this.voxelManager.modifiedSlices.keys())e.modifiedSlices.add(n);this.undoVoxelManager=e;const r=JS.createRLEVolumeVoxelManager({dimensions:this.segmentationVoxelManager.dimensions});return this.redoVoxelManager=r,e.forEach(({index:n,pointIJK:i,value:o})=>{const a=t.getAtIJKPoint(i);a!==o&&r.setAtIndex(n,a)}),!0}const Yxe=Object.freeze(Object.defineProperty({__proto__:null,createLabelmapMemo:ZS,createRleMemo:KG,restoreMemo:HG},Symbol.toStringTag,{value:"Module"})),{isEqual:$v}=Rn,Jxe=Ft(1,0,0),Zxe=Ft(0,1,0),Qxe=Ft(0,0,1),n7=[Jxe,Zxe,Qxe];function qG(t){const e=qn(Ke(),t[0],t[1]),r=qn(Ke(),t[0],t[2]),n=r7(e,n7),i=r7(r,n7);return[...n,...i].every(a=>$v(a,0)||$v(a,90)||$v(a,180)||$v(a,270))}function r7(t,e){return e.map(r=>o4(t,r)*180/Math.PI)}const{transformWorldToIndex:XG}=Rn,YG={[Lt.Initialize]:t=>{const{points:e,imageVoxelManager:r,viewport:n,segmentationImageData:i,segmentationVoxelManager:o}=t;if(!e)return;const a=Ft(0,0,0);e.forEach(l=>{ri(a,a,l)}),Ir(a,a,1/e.length),t.centerWorld=a,t.centerIJK=XG(i,a);const{boundsIJK:s,pointInShapeFn:c}=e3e(n,e,i);t.isInObject=c,t.isInObjectBoundsIJK=s}};function e3e(t,e,r){let n=e.map(w=>XG(r,w));n=n.map(w=>w.map(x=>Math.round(x)));const i=cf(n,r.getDimensions()),a=t instanceof lr||qG(n),s=r.getDirection(),c=r.getSpacing(),{viewPlaneNormal:l}=t.getCamera(),f=xf({direction:s,spacing:c},l),u=rU(e);let[[d,h],[g,p],[v,y]]=u;return d-=f,h+=f,g-=f,p+=f,v-=f,y+=f,{boundsIJK:i,pointInShapeFn:a?()=>!0:w=>{const[x,C,S]=w,T=x>=d&&x<=h,_=C>=g&&C<=p,E=S>=v&&S<=y;return T&&_&&E}}}const t3e=new pc("Rectangle",Cn.regionFill,Cn.setValue,YG,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics),n3e=new pc("RectangleThreshold",Cn.regionFill,Cn.setValue,YG,Cn.determineSegmentIndex,Cn.dynamicThreshold,Cn.threshold,Cn.preview,Cn.islandRemoval,Cn.labelmapStatistics),E8=t3e.strategyFunction,r3e=n3e.strategyFunction,i3e=Object.freeze(Object.defineProperty({__proto__:null,fillInsideCircle:Jw,fillInsideRectangle:E8,fillOutsideCircle:Uxe,thresholdInsideRectangle:r3e},Symbol.toStringTag,{value:"Module"})),Np=class Np extends vi{constructor(e,r){super(e,r),this.memoMap=new Map,this.acceptedMemoIds=new Map,this.centerSegmentIndexInfo={segmentIndex:null,hasSegmentIndex:!1,hasPreviewIndex:!1,changedIndices:[]}}_historyRedoHandler(e){const{id:r,operationType:n}=e.detail;if(n==="labelmap"){if(this.acceptedMemoIds.has(r)){this._hoverData=null;const i=this.acceptedMemoIds.get(r),o=i==null?void 0:i.element,a=this.getOperationData(o);a.segmentIndex=i==null?void 0:i.segmentIndex,o&&this.applyActiveStrategyCallback(_e(o),a,Lt.AcceptPreview)}this._previewData.isDrag=!0}}get _previewData(){return Np.previewData}createMemo(e,r){const n=r.id;if(this.memo&&this.memo.segmentationVoxelManager===r)return this.memo;let i=this.memoMap.get(n);return i?i.redoVoxelManager&&(i=ZS(e,r),this.memoMap.set(n,i)):(i=ZS(e,r),this.memoMap.set(n,i)),this.memo=i,i}createEditData(e){const r=_e(e),{viewport:n}=r,i=Od(n.id);if(!i){const l=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"No active segmentation detected, create a segmentation representation before using the brush tool"},cancelable:!0});return et.dispatchEvent(l),null}const{segmentationId:o}=i,a=zd(o),{representationData:s}=Vn(o);return this.getEditData({viewport:n,representationData:s,segmentsLocked:a,segmentationId:o})}getEditData({viewport:e,representationData:r,segmentsLocked:n,segmentationId:i}){var o,a,s;if(e instanceof Tr){const{volumeId:c}=r[Vt.Labelmap],l=e.getActors();if(e instanceof lr){const g=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"Cannot perform brush operation on the selected viewport"},cancelable:!0});return et.dispatchEvent(g),null}const u=l.map(g=>$e.getVolume(g.referencedId)),d=$e.getVolume(c),h=((o=u.find(g=>Zt(g.dimensions,d.dimensions)))==null?void 0:o.volumeId)||((a=u[0])==null?void 0:a.volumeId);return{volumeId:c,referencedVolumeId:((s=this.configuration.threshold)==null?void 0:s.volumeId)??h,segmentsLocked:n}}else{const c=Tf(e.id,i);return c?{imageId:c,segmentsLocked:n}:void 0}}createHoverData(e,r){const n=_e(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:s}=o,c=[i.id],{segmentIndex:l,segmentationId:f,segmentColor:u}=this.getActiveSegmentationData(i)||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...s],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:u},data:{}},centerCanvas:r,segmentIndex:l,viewport:i,segmentationId:f,segmentColor:u,viewportIdsToRender:c}}getActiveSegmentationData(e){const r=e.id,n=Od(r);if(!n)return;const{segmentationId:i}=n,o=Da(i);if(!o)return;const a=iu(r,i,o);return{segmentIndex:o,segmentationId:i,segmentColor:a}}getOperationData(e){var v,y,m,w;const r=this._editData||this.createEditData(e),{segmentIndex:n,segmentationId:i,brushCursor:o}=this._hoverData||this.createHoverData(e),{data:a,metadata:s={}}=o||{},{viewPlaneNormal:c,viewUp:l}=s,f=(y=(v=this.configuration.preview)==null?void 0:v.previewColors)==null?void 0:y[n],{viewport:u}=_e(e),d=iu(u.id,i,n);if(!f&&!d)return;let h=null,g=null;return(m=this.configuration.preview)!=null&&m.enabled&&(h=f||o3e(...d),g=255),{...r,points:(w=a==null?void 0:a.handles)==null?void 0:w.points,segmentIndex:n,viewPlaneNormal:c,previewOnHover:!this._previewData.isDrag,toolGroupId:this.toolGroupId,segmentationId:i,viewUp:l,centerSegmentIndexInfo:this.centerSegmentIndexInfo,activeStrategy:this.configuration.activeStrategy,configuration:this.configuration,previewColor:h,previewSegmentIndex:g,createMemo:this.createMemo.bind(this)}}addPreview(e=this._previewData.element,r){const{_previewData:n}=this,i=r==null?void 0:r.acceptReject;i===!0?this.acceptPreview(e):i===!1&&this.rejectPreview(e);const o=_e(e),a=this.applyActiveStrategyCallback(o,this.getOperationData(e),Lt.AddPreview);return n.isDrag=!0,a}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();const r=_e(e);this.applyActiveStrategyCallback(r,this.getOperationData(e),Lt.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(e=this._previewData.element){if(!e)return;const r=this.getOperationData(e);this.memo&&this.memo.id&&this.acceptedMemoIds.set(this.memo.id,{element:e,segmentIndex:r.segmentIndex});const n=_e(e);this.applyActiveStrategyCallback(n,r,Lt.AcceptPreview),this.doneEditMemo(),this._previewData.preview=null,this._previewData.isDrag=!1}static viewportContoursToLabelmap(e,r){var v;const n=(r==null?void 0:r.removeContours)??!0,i=mm(),o=Dm(e,i);if(!(o!=null&&o.length))return;const a=o.filter(y=>{var m,w;return(w=(m=y.data.contour)==null?void 0:m.polyline)==null?void 0:w.length});if(!a.length)return;const c=new Np({},{configuration:{strategies:{FILL_INSIDE_CIRCLE:Jw},activeStrategy:"FILL_INSIDE_CIRCLE"}}).addPreview(e.element),{memo:l,segmentationId:f}=c,u=l==null?void 0:l.voxelManager,d=u.sourceVoxelManager||u,{dimensions:h}=u,g=e.getDefaultActor().actor.getMapper().getInputData();for(const y of a){const m=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]],{polyline:w}=y.data.contour;for(const I of w)g.worldToIndex(I).forEach((O,A)=>{m[A][0]=Math.min(m[A][0],O),m[A][1]=Math.max(m[A][1],O)});m.forEach((I,P)=>{I[0]=Math.round(Math.max(0,I[0])),I[1]=Math.round(Math.min(h[P]-1,I[1]))});const x=Da(f),C=((v=y.data.handles)==null?void 0:v[0])||w[0],S=g.worldToIndex(C).map(Math.round),T=d.getAtIJKPoint(S)||0;let _=!1,E=!1;for(const I of w){const P=g.worldToIndex(I).map(Math.round),O=d.getAtIJKPoint(P);O===T?_=!0:O>=0&&(E=!0)}const D=_&&E?T:T===0?x:0;for(let I=m[0][0];I<=m[0][1];I++)for(let P=m[1][0];P<=m[1][1];P++)for(let O=m[2][0];O<=m[2][1];O++){const A=g.indexToWorld([I,P,O]);JE(A,w)&&u.setAtIJK(I,P,O,D)}n&&mn(y.annotationUID)}const p=u.getArrayOfModifiedSlices();To(f,p)}};Np.previewData={preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1};let Rd=Np;function o3e(t,e,r,n,i=.4){return[Math.round(t+(255-t)*i),Math.round(e+(255-e)*i),Math.round(r+(255-r)*i),n]}class Qw extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:Jw,ERASE_INSIDE_CIRCLE:jG,FILL_INSIDE_SPHERE:zG,ERASE_INSIDE_SPHERE:$G,THRESHOLD_INSIDE_CIRCLE:Fxe,THRESHOLD_INSIDE_SPHERE:$xe,THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL:jxe},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",brushSize:25,useCenterSegmentIndex:!1,preview:{enabled:!1,previewColors:{0:[255,255,255,128]},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[Lt.AcceptPreview]:{method:Lt.AcceptPreview,bindings:[{key:"Enter"}]},[Lt.RejectPreview]:{method:Lt.RejectPreview,bindings:[{key:"Escape"}]},[Lt.Interpolate]:{method:Lt.Interpolate,bindings:[{key:"i"}],configuration:{useBallStructuringElement:!0,noUseDistanceTransform:!0,noUseExtrapolation:!0}},interpolateExtrapolation:{method:Lt.Interpolate,bindings:[{key:"e"}],configuration:{}}}}}){super(e,r),this.onSetToolPassive=n=>{this.disableCursor()},this.onSetToolEnabled=()=>{this.disableCursor()},this.onSetToolDisabled=n=>{this.disableCursor()},this.preMouseDownCallback=n=>{const i=n.detail,{element:o}=i,a=_e(o);this._editData=this.createEditData(o),this._activateDraw(o),Gt(o),n.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const s=this._hoverData||this.createHoverData(o);Be(s.viewportIdsToRender);const c=this.getOperationData(o);return this.applyActiveStrategyCallback(a,c,Lt.OnInteractionStart),!0},this.mouseMoveCallback=n=>{if(this.mode===Fn.Active){if(this.updateCursor(n),!this.configuration.preview.enabled)return;const{previewTimeMs:i,previewMoveDistance:o,dragMoveDistance:a}=this.configuration.preview,{currentPoints:s,element:c}=n.detail,{canvas:l}=s,{startPoint:f,timer:u,timerStart:d,isDrag:h}=this._previewData;if(h)return;const g=Sr(l,f),p=Date.now()-d;if((g>o||p>i&&g>a)&&(u&&(window.clearTimeout(u),this._previewData.timer=null),h||this.rejectPreview(c)),!this._previewData.timer){const v=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:v,startPoint:l,element:c})}}},this.previewCallback=()=>{if(this._previewData.isDrag){this._previewData.timer=null;return}this._previewData.timer=null;const n=this.getOperationData(this._previewData.element),i=_e(this._previewData.element);if(!i)return;const{viewport:o}=i,a=this.configuration.activeStrategy,s=C8({operationData:n,viewport:o,strategy:a});if(!n)return;const c=this.createMemo(n.segmentationId,s.segmentationVoxelManager);this._previewData.preview=this.applyActiveStrategyCallback(_e(this._previewData.element),{...n,...s,memo:c},Lt.Preview)},this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o);this.updateCursor(n);const{viewportIdsToRender:c}=this._hoverData;Be(c);const l=Sr(a.canvas,this._previewData.startPoint),{dragTimeMs:f,dragMoveDistance:u}=this.configuration.preview;!this._previewData.isDrag&&Date.now()-this._previewData.timerStart{const i=n.detail,{element:o}=i,a=_e(o),s=this.getOperationData(o);!this._previewData.preview&&!this._previewData.isDrag&&this.applyActiveStrategy(a,s),this.doneEditMemo(),this._deactivateDraw(o),Jt(o),this.updateCursor(n),this._editData=null,this.applyActiveStrategyCallback(a,s,Lt.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(o)},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}disableCursor(){this._hoverData=void 0,this.rejectPreview()}updateCursor(e){const r=e.detail,{element:n}=r,{currentPoints:i}=r,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&Be(this._hoverData.viewportIdsToRender)}_calculateCursor(e,r){const n=_e(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:s}=this.configuration,c=Ft(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=Ft(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),f=Ke();kn(f,c,l);const u=o([r[0],r[1]]),d=Ke(),h=Ke(),g=Ke(),p=Ke();for(let x=0;x<=2;x++)d[x]=u[x]-c[x]*s,h[x]=u[x]+c[x]*s,g[x]=u[x]-f[x]*s,p[x]=u[x]+f[x]*s;if(!this._hoverData)return;const{brushCursor:v}=this._hoverData,{data:y}=v;y.handles===void 0&&(y.handles={}),y.handles.points=[d,h,g,p];const m=this.configuration.activeStrategy,w=this.configuration.strategies[m];typeof(w==null?void 0:w.computeInnerCircleRadius)=="function"&&w.computeInnerCircleRadius({configuration:this.configuration,viewport:i}),y.invalidated=!1}getStatistics(e,r){if(!e)return;const n=_e(e);return this.applyActiveStrategyCallback(n,this.getOperationData(e),Lt.GetStatistics,r)}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();const r=_e(e);r&&(this.applyActiveStrategyCallback(r,this.getOperationData(e),Lt.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1)}acceptPreview(e=this._previewData.element){e&&super.acceptPreview(e)}interpolate(e,r){if(!e)return;const n=_e(e);this._previewData.preview=this.applyActiveStrategyCallback(n,this.getOperationData(e),Lt.Interpolate,r.configuration),this._previewData.isDrag=!0}invalidateBrushCursor(){if(this._hoverData===void 0)return;const{data:e}=this._hoverData.brushCursor,{viewport:r}=this._hoverData;e.invalidated=!0;const{segmentColor:n}=this.getActiveSegmentationData(r)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,r){var m,w;if(!this._hoverData)return;const{viewport:n}=e;if(!this._hoverData.viewportIdsToRender.includes(n.id))return;const o=this._hoverData.brushCursor;if(o.data.invalidated===!0){const{centerCanvas:x}=this._hoverData,{element:C}=n;this._calculateCursor(C,x)}const a=o.metadata;if(!a)return;const s=a.brushCursorUID,c=o.data,{points:l}=c.handles,f=l.map(x=>n.worldToCanvas(x)),u=f[0],d=f[1],h=[Math.floor((u[0]+d[0])/2),Math.floor((u[1]+d[1])/2)],g=Math.abs(u[1]-Math.floor((u[1]+d[1])/2)),p=`rgb(${((m=a.segmentColor)==null?void 0:m.slice(0,3))||[0,0,0]})`;if(!n.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");return}ia(r,s,"0",h,g,{color:p,lineDash:this.centerSegmentIndexInfo.segmentIndex===0?[1,2]:null});const{dynamicRadiusInCanvas:y}=((w=this.configuration)==null?void 0:w.threshold)||{dynamicRadiusInCanvas:0};y&&ia(r,s,"1",h,y,{color:p})}}Qw.toolName="Brush";function og(t,e){const r=ni(t);if(r===void 0)return;const n=r._toolInstances;return Object.keys(n).length?e&&n[e]?[n[e]]:Object.values(n).filter(o=>o instanceof Qw):void 0}function a3e(t,e,r){const n=ni(t);if(n===void 0)return;og(t,r).forEach(l=>{l.configuration.brushSize=e,l.invalidateBrushCursor()});const o=n.getViewportsInfo(),a=Object.keys(o).map(l=>o[l]);if(!a.length)return;const{renderingEngineId:s}=a[0],c=n.getViewportIds();jr(s),Be(c)}function s3e(t,e){const r=ni(t);if(r===void 0)return;const n=r._toolInstances;if(!Object.keys(n).length)return;const o=og(t,e)[0];if(o)return o.configuration.brushSize}function c3e(t,e){const r=ni(t);if(r===void 0||(og(t).forEach(a=>{a.configuration.activeStrategy.toLowerCase().includes("threshold")&&(a.configuration={...a.configuration,threshold:{...a.configuration.threshold,...e}})}),!r.getViewportsInfo().length))return;const o=r.getViewportIds();Be(o)}function l3e(t){const e=ni(t);if(e===void 0)return;const r=e._toolInstances;if(!Object.keys(r).length)return;const i=og(t)[0];if(i)return i.configuration.threshold.range}const kp=class kp{static statsInit(e){const{storePointData:r,indices:n,mode:i}=e;this.mode=i,this.indices=n,this.calculators.clear(),this.mode==="individual"?n.forEach(o=>{this.calculators.set(o,new e7({storePointData:r}))}):this.calculators.set(n,new e7({storePointData:r}))}static statsCallback(e){const{segmentIndex:r,...n}=e;if(!r)throw new Error("Segment index is required for stats calculation");const i=this.mode==="individual"?this.calculators.get(r):this.calculators.get(this.indices);if(!i)throw new Error(`No calculator found for segment ${r}`);i.statsCallback(n)}static getStatistics(e){if(this.mode==="individual"){const n={};return this.calculators.forEach((i,o)=>{n[o]=i.getStatistics(e)}),n}return this.calculators.get(this.indices).getStatistics(e)}};kp.calculators=new Map,kp.indices=[],kp.mode="collective";let QS=kp;function u3e(t,e,r,n,i){if(!i)throw new Error("Segmentation ID is required to be passed inside thresholdSegmentationByRange");const{baseVolumeIdx:o,volumeInfoList:a}=iU(t,r),{voxelManager:s}=a[o],c=s,l=t.voxelManager.getScalarDataLength(),f=t.voxelManager;return a.forEach(u=>{const{volumeSize:d}=u;d===l?d3e(f,c,e,u):f3e(f,c,e,u,a,o,n)}),To(i),t}function f3e(t,e,r,n,i,o,a){const{imageData:s,lower:c,upper:l,dimensions:f}=n;let u,d,h;const g=t.getScalarDataLength();for(let p=0;p{u=u+1,w>=h.lower&&w<=h.upper&&(d=d+1)};u=0,d=0,h={lower:c,upper:l};let m=!1;t.forEach(y,{imageData:s,boundsIJK:v}),m=a===0?d>0:d===u,t.setAtIndex(p,m?r:0)}return{total:u,range:h,overlaps:d}}function d3e(t,e,r,n){const{lower:i,upper:o}=n,a=t.getScalarDataLength();for(let s=0;s=i&&c<=o?r:0)}}function i7(t,e,r){const n=r.toIJK(t),i=r.toIJK(e),o=Ke(),{testIJK:a}=r,s=Mn(Ke(),n,i),c=Math.round(Math.max(...s.map(Math.abs)));if(c<2)return!0;const l=Ir(Ke(),s,1/c);for(let f=1;f{const l=ri(Ke(),s,c).map(v=>v/2),f=e.worldToIndex(l).map(Math.round),[u,d,h]=f,g=u+d*o+h*a,p=r.getAtIndex(g);return p===n||(i==null?void 0:i.has(p))},toIJK:s=>e.worldToIndex(s),testIJK:s=>{const[c,l,f]=s,u=Math.round(c)+Math.round(l)*o+Math.round(f)*a,d=r.getAtIndex(u);return d===n||(i==null?void 0:i.has(d))}}}function g3e(t,e,r){const n=$e.getVolume(t);if(!n){console.warn(`No volume found for ${t}`);return}return h3e({dimensions:n.dimensions,imageData:n.imageData,voxelManager:n.voxelManager,segmentIndex:e,containedSegmentIndices:r})}const Ag=.01;function p3e(t,e,r){const{sliceContours:n}=t,{segmentIndex:i,containedSegmentIndices:o}=r;let a;const s=g3e(e,i,o);for(const c of n){const l=m3e(c,s,a);l&&(a=l)}return a&&Object.assign(a,r),a}function m3e(t,e,r={maxMajor:0,maxMinor:0}){const{points:n}=t.polyData,{maxMinor:i,maxMajor:o}=r;let a=o*o,s=i*i,c;for(let v=0;vAg||e.testCenter(m,w)&&i7(m,w,e)&&(s=x,d=[v,y])}if(!d)return;s=Math.sqrt(s);const h=n[d[0]],g=n[d[1]];return{majorAxis:[l,f],minorAxis:[h,g],maxMajor:a,maxMinor:s,...t}}async function JG(t){const e=await MG({segmentations:t});if(!(e!=null&&e.length)||!e[0].sliceContours.length)return;const{segments:r=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=t,n=ig(t.segmentationId);if(!n)return;const i=r.findIndex(o=>!!o);if(i!==-1)return r[i].segmentIndex=i,p3e(e[0],n.volumeId,r[i])}function ZG(t,e){const{majorAxis:r,minorAxis:n,label:i="",sliceIndex:o}=t,[a,s]=r,[c,l]=n,f=[a,s,c,l];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...e.getViewReference({sliceIndex:o})},data:{handles:{points:f,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:i,cachedStats:{}},isLocked:!1,isVisible:!0}}const{transformWorldToIndex:jv}=Rn,L0=class L0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:v3e}}){super(e,r),this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles;let u=c.worldToCanvas(f[0]),d=c.worldToCanvas(f[1]),h={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},g=Ii([h.start.x,h.start.y],[h.end.x,h.end.y],[o[0],o[1]]);return g<=a||(u=c.worldToCanvas(f[2]),d=c.worldToCanvas(f[3]),h={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},g=Ii([h.start.x,h.start.y],[h.end.x,h.end.y],[o[0],o[1]]),g<=a)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),Gt(a),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,c=i.data;i.highlighted=!0;let l=!1,f;o.worldPosition?l=!0:f=c.handles.points.findIndex(g=>g===o);const u=At(s,this.getToolName());Gt(s),this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;this.doneEditMemo(),f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);if(this.editData.handleIndex!==void 0){const{points:d}=f.handles,h=Qi(d[0],d[1]);if(Qi(d[2],d[3])>h){const p=[[...d[2]],[...d[3]]],v=[...d[0]],y=[...d[1]],m=rn();ms(m,p[1][0]-p[0][0],p[1][1]-p[1][0]);const w=rn();ms(w,-m[1],m[0]);const x=rn();ms(x,y[0]-v[0],y[1]-v[0]);let C;a4(x,w)>0?C=[v,y]:C=[y,v],f.handles.points=[p[0],p[1],C[0],C[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c}=s,{worldToCanvas:l}=c,{annotation:f,viewportIdsToRender:u,handleIndex:d,newAnnotation:h}=this.editData;this.createMemo(a,f,{newAnnotation:h});const{data:g}=f,p=o.world;g.handles.points[d]=[...p];const v=g.handles.points.map(l),y={longLineSegment:{start:{x:v[0][0],y:v[0][1]},end:{x:v[1][0],y:v[1][1]}},shortLineSegment:{start:{x:v[2][0],y:v[2][1]},end:{x:v[3][0],y:v[3][1]}}},w=Sr(v[0],v[1])/3,x=y.longLineSegment.start.x-y.longLineSegment.end.x,C=y.longLineSegment.start.y-y.longLineSegment.end.y,S=Math.sqrt(x*x+C*C),T=x/S,_=C/S,E=(y.longLineSegment.start.x+y.longLineSegment.end.x)/2,b=(y.longLineSegment.start.y+y.longLineSegment.end.y)/2,D=E+w*_,I=b-w*T,P=E-w*_,O=b+w*T;g.handles.points[2]=c.canvasToWorld([D,I]),g.handles.points[3]=c.canvasToWorld([P,O]),f.invalidated=!0,Be(u),cn(f,a,Qt.HandlesUpdated),this.editData.hasMoved=!0},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else this._dragModifyHandle(n),a.invalidated=!0;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragModifyHandle=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c}=s,{annotation:l,handleIndex:f}=this.editData,{data:u}=l,d=o.world,h=[c.worldToCanvas(u.handles.points[0]),c.worldToCanvas(u.handles.points[1]),c.worldToCanvas(u.handles.points[2]),c.worldToCanvas(u.handles.points[3])],g={start:{x:h[0][0],y:h[0][1]},end:{x:h[1][0],y:h[1][1]}},p={start:{x:h[2][0],y:h[2][1]},end:{x:h[3][0],y:h[3][1]}},v=[...d],y=c.worldToCanvas(v);if(f===0||f===1){const w=h[f===0?1:0],x=ms(rn(),y[0]-w[0],y[1]-w[1]),C=ms(rn(),h[f][0]-w[0],h[f][1]-w[1]);Fl(x,x),Fl(C,C);const S={start:{x:w[0],y:w[1]},end:{x:y[0],y:y[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(S,p))return;const T=w,_=this._getSignedAngle(C,x);let E=h[2][0],b=h[2][1],D=h[3][0],I=h[3][1];E-=T[0],b-=T[1],D-=T[0],I-=T[1];const P=E*Math.cos(_)-b*Math.sin(_),O=E*Math.sin(_)+b*Math.cos(_),A=D*Math.cos(_)-I*Math.sin(_),V=D*Math.sin(_)+I*Math.cos(_);E=P+T[0],b=O+T[1],D=A+T[0],I=V+T[1];const G=c.canvasToWorld([E,b]),R=c.canvasToWorld([D,I]);u.handles.points[f]=v,u.handles.points[2]=G,u.handles.points[3]=R}else{const m=f===2?3:2,w={longLineSegment:{start:g.start,end:g.end},shortLineSegment:{start:p.start,end:p.end}},x=Jr(rn(),[w.longLineSegment.end.x,w.longLineSegment.end.y],[w.longLineSegment.start.x,w.longLineSegment.start.y]),C=Fl(rn(),x),S=Jr(rn(),[y[0],y[1]],[h[f][0],h[f][1]]),T=Cy(S),_=this._getSignedAngle(C,S),E=Math.cos(_)*T,b=WY(rn(),[h[m][0],h[m][1]],C,E);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:y[0],y:y[1]},end:{x:b[0],y:b[1]}},{start:{x:w.longLineSegment.start.x,y:w.longLineSegment.start.y},end:{x:w.longLineSegment.end.x,y:w.longLineSegment.end.y}})||!c5([y[0],y[1]],[b[0],b[1]],[g.start.x,g.start.y],[g.end.x,g.end.y]))return;u.handles.points[m]=c.canvasToWorld(b),u.handles.points[f]=v}},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!0;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(te));u.annotationUID=g;const{color:w,lineWidth:x,lineDash:C,shadow:S}=this.getAnnotationStyle({annotation:h,styleSpecifier:u});if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let T;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(T=[m[y]]),T&&or(i,g,"0",T,{color:w});const _=`${g}-line-1`,E=`${g}-line-2`;Sn(i,g,"0",m[0],m[1],{color:w,lineDash:C,lineWidth:x,shadow:S},_),Sn(i,g,"1",m[2],m[3],{color:w,lineDash:C,lineWidth:x,shadow:S},E),o=!0;const I=this.getLinkedTextBoxStyle(u,h);if(!I.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const P=this.configuration.getTextLines(p,l);if(!P||P.length===0)continue;let O;p.handles.textBox.hasMoved||(O=Oa(m),p.handles.textBox.worldPosition=a.canvasToWorld(O));const A=a.worldToCanvas(p.handles.textBox.worldPosition),G=ho(i,g,"1",P,A,m,{},I),{x:R,y:N,width:F,height:j}=G;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+F,N]),bottomLeft:a.canvasToWorld([R,N+j]),bottomRight:a.canvasToWorld([R+F,N+j])}}return o},this._movingLongAxisWouldPutItThroughShortAxis=(n,i)=>{const o=rn();ms(o,i.end.x-i.start.x,i.end.y-i.start.y),Fl(o,o);const a={start:{x:i.start.x-o[0]*10,y:i.start.y-o[1]*10},end:{x:i.end.x+o[0]*10,y:i.end.y+o[1]*10}};return!c5([a.start.x,a.start.y],[a.end.x,a.end.y],[n.start.x,n.start.y],[n.end.x,n.end.y])},this._calculateCachedStats=(n,i,o)=>{const{data:a}=n,{element:s}=o.viewport,c=a.handles.points[0],l=a.handles.points[1],f=a.handles.points[2],u=a.handles.points[3],{cachedStats:d}=a,h=Object.keys(d);for(let p=0;pA?O:A,G=O>A?A:O,R=O>A?D:P,N=O>A?P:D;this._isInsideVolume(x,C,S,T,w)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,d[v]={length:V,width:G,unit:R,widthUnit:N}}const g=n.invalidated;return n.invalidated=!1,g&&cn(n,s,Qt.StatsUpdated),d},this._isInsideVolume=(n,i,o,a,s)=>hr(n,s)&&hr(i,s)&&hr(o,s)&&hr(a,s),this._getSignedAngle=(n,i)=>Math.atan2(n[0]*i[1]-n[1]*i[0],n[0]*i[0]+n[1]*i[1]),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,o=n.world,a=_e(i),{viewport:s,renderingEngine:c}=a;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:f,viewUp:u}=l,d=this.getReferencedImageId(s,o,f,u),h=s.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...f],viewUp:[...u],FrameOfReferenceUID:h,referencedImageId:d,...s.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};ln(g,i);const p=At(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Gt(i),e.preventDefault(),Be(p),g}_calculateLength(e,r){const n=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return Math.sqrt(n*n+i*i+o*o)}};L0.toolName="Bidirectional",L0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=L0.hydrateBase(L0,i,r[0],n),[f,u]=r,[d,h]=f,[g,p]=u,v=[d,h,g,p],{toolInstance:y,...m}=n||{},w={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:v,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...m}};return ln(w,l.element),Be([l.id]),w};let N1=L0;function v3e(t,e){const{cachedStats:r,label:n}=t,{length:i,width:o,unit:a}=r[e],s=[];return n&&s.push(n),i===void 0||s.push(`L: ${un(i)} ${a||a}`,`W: ${un(o)} ${a}`),s}async function y3e(t,e){console.warn("Deprecation Alert: There is a new getSegmentLargestBidirectional function that handles volume, stack and individual segment cases properly. This function is deprecated and will be removed in a future version.");const{data:r}=e,n=_e(t),i=(r.getSegment||w3e)(n,r);if(!i)return;const o=n.viewport.getFrameOfReferenceUID(),a=Xw(),{segmentIndex:s,segmentationId:c}=i,l=mr.getAnnotations(this.toolName||N1.toolName,o);let f=!1;const u=l.filter(h=>{const g=h.data.segment;return g?(g.segmentationId===c&&g.segmentIndex===s&&(f=!0,h.data.segment=g),!0):!1});f||u.push({data:{segment:i}});let d;if(u.forEach(async h=>{const g=[],p=h.data.segment,{segmentIndex:v,segmentationId:y}=p;g[v]=p,mr.removeAnnotation(h.annotationUID);const m=await JG({...a.find(C=>C.segmentationId===y),segments:g});if(!m)return;const w=ZG(m,n.viewport);w.annotationUID=h.annotationUID,w.data.segment=p;const x=mr.addAnnotation(w,o);if(p.segmentIndex===i.segmentIndex&&p.segmentationId===i.segmentationId){d=m;const{style:C}=i;C&&bE.setAnnotationStyles(x,C)}}),d){const{sliceIndex:h}=d,g=n.viewport.getImageIds();ds(t,{imageIndex:g.length-1-h}),n.viewport.render()}else console.warn("No bidirectional found");return d}function w3e(t,e){var a;const r=Xw();if(!r.length)return;const n=e.segmentationId||r[0].segmentationId,i=e.segmentIndex??Da(n);if(!i)return;const o=(a=e.segmentData)==null?void 0:a.get(i);return{label:`Segment ${i}`,segmentIndex:i,segmentationId:n,...o}}function QG(t){const e=ni(t);if(e===void 0)return;og(t).forEach(a=>{a.invalidateBrushCursor()});const n=e.getViewportsInfo();if(!Object.keys(n).map(a=>n[a]).length)return;const o=e.getViewportIds();Be(o)}function b8(t,e,r={}){const n=Vn(t),i=n.representationData,o=(r==null?void 0:r.representationType)??Object.keys(i)[0];if(!o)throw new Error(`Segmentation ${t} does not have any representations`);switch(o){case Vt.Labelmap:return x3e(n,e,r);case Vt.Contour:return C3e(n,e,r);default:return}}function x3e(t,e,{viewport:r}){const n=t.representationData.Labelmap;if(r instanceof Tr){const{volumeId:h}=n,g=$e.getVolume(h);return g?g.imageData.getScalarValueFromWorld(e):void 0}const i=ru(r.id,t.segmentationId);if(i.length>1){console.warn("Segment selection for labelmaps with multiple imageIds in stack viewports is not supported yet.");return}const o=i[0];if(!$e.getImage(o))return;const s=Lw(r.id,t.segmentationId),c=s==null?void 0:s.actor.getMapper().getInputData(),l=zr(c,e),f=c.getDimensions();return(c.voxelManager||hc.createScalarVolumeVoxelManager({dimensions:f,scalarData:c.getPointData().getScalars().getData()})).getAtIJKPoint(l)}function C3e(t,e,{viewport:r}){const n=t.representationData.Contour,i=Array.from(n.annotationUIDsMap.keys()),{viewPlaneNormal:o}=r.getCamera();for(const a of i){const s=n.annotationUIDsMap.get(a);if(s)for(const c of s){const l=Hr(c);if(!l)continue;const{polyline:f}=l.data.contour;if(Zt(o,l.metadata.viewPlaneNormal)&&JE(e,f))return Number(a)}}}function eW(t,e,{viewport:r,searchRadius:n}){const o=Vn(t).representationData.Labelmap;if(r instanceof Tr){const{volumeId:p}=o,v=$e.getVolume(p);if(!v)return;const y=v.voxelManager,m=v.imageData,w=zr(m,e),x=y.getAtIJK(w[0],w[1],w[2]),C=r.worldToCanvas(e);return T3e(C,x,r,m,n)?x:void 0}const a=Tf(r.id,t);if(!$e.getImage(a))return;const c=Lw(r.id,t),l=c==null?void 0:c.actor.getMapper().getInputData(),f=zr(l,e),u=l.getDimensions(),d=l.voxelManager||hc.createScalarVolumeVoxelManager({dimensions:u,scalarData:l.getPointData().getScalars().getData()}),h=d.getAtIJKPoint(f);return S3e(f,u,d,h)?h:void 0}function tW(t,e,r=1){const n=Array.from({length:2*r+1},(i,o)=>o-r);for(const i of n)for(const o of n)for(const a of n){if(i===0&&o===0&&a===0)continue;const s=t(i,o,a);if(s!==void 0&&e!==s)return!0}return!1}function S3e(t,e,r,n,i){return tW((a,s,c)=>{const l=[t[0]+a,t[1]+s,t[2]+c];return r.getAtIJK(l[0],l[1],l[2])},n,i)}function T3e(t,e,r,n,i){return tW((a,s)=>{const c=[t[0]+a,t[1]+s],l=r.canvasToWorld(c),f=n.get("voxelManager").voxelManager,u=zr(n,l);return f.getAtIJK(u[0],u[1],u[2])},e,i)}function nW(t){const e=Vn(t),{annotationUIDsMap:r}=e.representationData.Contour;for(const[n,i]of r.entries())if(Array.from(i).find(a=>Hr(a).highlighted))return n}const _3e=` + `;return uF(c,e)}const J9=Symbol("ElementCursorsMap");function fF(t,e){I1(t)[0]=e,pm(t,e)}function pm(t,e){const r=I1(t);r[1]=r[0],r[0]=e,t.style.cursor=(e instanceof No?e:No.getDefinedCursor("auto")).getStyleProperty()}function Jt(t){pm(t,I1(t)[1])}function Gt(t){pm(t,No.getDefinedCursor("none"))}function I1(t){let e=I1[J9];e instanceof WeakMap||(e=new WeakMap,Object.defineProperty(I1,J9,{value:e}));let r=e.get(t);return r||(r=[null,null],e.set(t,r)),r}const tpe=Object.freeze(Object.defineProperty({__proto__:null,hideElementCursor:Gt,initElementCursor:fF,resetElementCursor:Jt,setElementCursor:pm},Symbol.toStringTag,{value:"Module"}));function npe(t,e){let r=th.getDefinedCursor(e,!0);r||(r=No.getDefinedCursor(e)),r||(console.log(`Cursor ${e} is not defined either as SVG or as a standard cursor.`),r=No.getDefinedCursor(e)),pm(t,r)}const rpe=[...zge,...Uge],ipe=Object.freeze(Object.defineProperty({__proto__:null,CursorNames:rpe,CursorSVG:Ew,ImageMouseCursor:D1,MouseCursor:No,SVGMouseCursor:th,elementCursor:tpe,registerCursor:Gge,setCursorForElement:npe},Symbol.toStringTag,{value:"Module"}));function ni(t){return Ye.toolGroups.find(e=>e.id===t)}const{Active:Og,Passive:wC,Enabled:xC,Disabled:CC}=Fn,ope=[{mouseButton:fl.Primary}];class DE{constructor(e){this.viewportsInfo=[],this.toolOptions={},this.currentActivePrimaryToolName=null,this.prevActivePrimaryToolName=null,this.restoreToolOptions={},this._toolInstances={},this.id=e}getViewportIds(){return this.viewportsInfo.map(({viewportId:e})=>e)}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const r=this._toolInstances[e];if(!r){console.warn(`'${e}' is not registered with this toolGroup (${this.id}).`);return}return r}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e,r={}){const n=Ye.tools[e],i=typeof e<"u"&&e!=="",o=this.toolOptions[e];if(!i){console.warn("Tool with configuration did not produce a toolName: ",r);return}if(!n){console.warn(`'${e}' is not registered with the library. You need to use cornerstoneTools.addTool to register it.`);return}if(o){console.warn(`'${e}' is already registered for ToolGroup ${this.id}.`);return}const{toolClass:a}=n,s={name:e,toolGroupId:this.id,configuration:r},c=new a(s);this._toolInstances[e]=c}addToolInstance(e,r,n={}){var o;let i=(o=Ye.tools[e])==null?void 0:o.toolClass;if(!i){const a=Ye.tools[r].toolClass;class s extends a{}s.toolName=e,i=s,Ye.tools[e]={toolClass:s}}this.addTool(i.toolName,n)}addViewport(e,r){if(typeof e!="string")throw new Error("viewportId must be defined and be a string");const n=this._findRenderingEngine(e,r);this.viewportsInfo.some(({viewportId:s})=>s===e)||this.viewportsInfo.push({viewportId:e,renderingEngineId:n});const i=this.getActivePrimaryMouseButtonTool();Cr.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(i);const a={toolGroupId:this.id,viewportId:e,renderingEngineId:n};ut(et,k.TOOLGROUP_VIEWPORT_ADDED,a)}removeViewports(e,r){const n=[];if(this.viewportsInfo.forEach((o,a)=>{let s=!1;o.renderingEngineId===e&&(s=!0,r&&o.viewportId!==r&&(s=!1)),s&&n.push(a)}),n.length)for(let o=n.length-1;o>=0;o--)this.viewportsInfo.splice(n[o],1);const i={toolGroupId:this.id,viewportId:r,renderingEngineId:e};ut(et,k.TOOLGROUP_VIEWPORT_REMOVED,i)}setActiveStrategy(e,r){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool configuration.`);return}n.setActiveStrategy(r)}setToolMode(e,r,n={}){if(!e){console.warn("setToolMode: toolName must be defined");return}if(r===Fn.Active){this.setToolActive(e,n||this.restoreToolOptions[e]);return}if(r===Fn.Passive){this.setToolPassive(e);return}if(r===Fn.Enabled){this.setToolEnabled(e);return}if(r===Fn.Disabled){this.setToolDisabled(e);return}console.warn("setToolMode: mode must be defined")}setToolActive(e,r={}){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}if(!n){console.warn(`'${e}' instance ${n} is not registered with this toolGroup, can't set tool mode.`);return}const i=this.toolOptions[e]?this.toolOptions[e].bindings:[],o=r.bindings?r.bindings:[],s={bindings:[...i,...o].reduce((u,d)=>{const h=d.numTouchPoints!==void 0,g=d.mouseButton!==void 0;return!u.some(p=>SC(p,d))&&(h||g)&&u.push(d),u},[]),mode:Og};this.toolOptions[e]=s,this._toolInstances[e].mode=Og;const l=Cr.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(r)&&l)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&l){const d=No.getDefinedCursor("default");this._setCursorForViewports(d)}this._hasMousePrimaryButtonBinding(r)&&(this.prevActivePrimaryToolName===null?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),typeof n.onSetToolActive=="function"&&n.onSetToolActive(),this._renderViewports();const f={toolGroupId:this.id,toolName:e,toolBindingsOptions:r};ut(et,k.TOOL_ACTIVATED,f),this._triggerToolModeChangedEvent(e,Og,r)}setToolPassive(e,r){const n=this._toolInstances[e];if(n===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const i=this.getToolOptions(e),o=Object.assign({bindings:i?i.bindings:[]},i,{mode:wC}),a=Array.isArray(r==null?void 0:r.removeAllBindings)?r.removeAllBindings:this.getDefaultPrimaryBindings();o.bindings=o.bindings.filter(c=>(r==null?void 0:r.removeAllBindings)!==!0&&!a.some(l=>SC(c,l)));let s=wC;o.bindings.length!==0&&(s=Og,o.mode=s),this.toolOptions[e]=o,n.mode=s,typeof n.onSetToolPassive=="function"&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,wC)}setToolEnabled(e){const r=this._toolInstances[e];if(r===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const n={bindings:[],mode:xC};this.toolOptions[e]=n,r.mode=xC,typeof r.onSetToolEnabled=="function"&&r.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,xC)}setToolDisabled(e){const r=this._toolInstances[e];if(r===void 0){console.warn(`Tool ${e} not added to toolGroup, can't set tool mode.`);return}const n={bindings:[],mode:CC};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,r.mode=CC,typeof r.onSetToolDisabled=="function"&&r.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,CC)}getToolOptions(e){const r=this.toolOptions[e];if(r!==void 0)return r}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find(e=>{const r=this.toolOptions[e];return r.mode===Og&&this._hasMousePrimaryButtonBinding(r)})}setViewportsCursorByToolName(e,r){const n=this._getCursor(e,r);this._setCursorForViewports(n)}_getCursor(e,r){let n,i;return r&&(n=`${e}.${r}`,i=th.getDefinedCursor(n,!0),i)||(n=`${e}`,i=th.getDefinedCursor(n,!0),i)||(n=e,i=th.getDefinedCursor(n,!0),i)?i:No.getDefinedCursor("default")}_setCursorForViewports(e){this.viewportsInfo.forEach(({renderingEngineId:r,viewportId:n})=>{const i=Oi(n,r);if(!i)return;const{viewport:o}=i;fF(o.element,e)})}setToolConfiguration(e,r,n){const i=this._toolInstances[e];if(i===void 0)return console.warn(`Tool ${e} not present, can't set tool configuration.`),!1;let o;return n?o=r:o=Object.assign(i.configuration,r),i.configuration=o,typeof i.onSetToolConfiguration=="function"&&i.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return fl.Primary}getDefaultPrimaryBindings(){return ope}getToolConfiguration(e,r){if(this._toolInstances[e]===void 0){console.warn(`Tool ${e} not present, can't set tool configuration.`);return}const n=Fge(this._toolInstances[e].configuration,r)||this._toolInstances[e].configuration;return vs(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}setActivePrimaryTool(e){const r=this.getCurrentActivePrimaryToolName();this.setToolDisabled(r),this.setToolActive(e,{bindings:[{mouseButton:fl.Primary}]})}getCurrentActivePrimaryToolName(){return this.currentActivePrimaryToolName}clone(e,r=null){let n=ni(e);return n?(console.debug(`ToolGroup ${e} already exists`),n):(n=new DE(e),Ye.toolGroups.push(n),r=r??(()=>!0),Object.keys(this._toolInstances).filter(r).forEach(i=>{const o=this._toolInstances[i],a=this.toolOptions[i],s=o.mode;n.addTool(i),n.setToolMode(i,s,{bindings:a.bindings??[]})}),n)}_hasMousePrimaryButtonBinding(e){var n;const r=this.getDefaultPrimaryBindings();return(n=e==null?void 0:e.bindings)==null?void 0:n.some(i=>r.some(o=>SC(i,o)))}_renderViewports(){this.viewportsInfo.forEach(({renderingEngineId:e,viewportId:r})=>{jr(e).renderViewport(r)})}_triggerToolModeChangedEvent(e,r,n){const i={toolGroupId:this.id,toolName:e,mode:r,toolBindingsOptions:n};ut(et,k.TOOL_MODE_CHANGED,i)}_findRenderingEngine(e,r){const n=Bo();if((n==null?void 0:n.length)===0)throw new Error("No rendering engines found.");if(r)return r;const i=n.filter(o=>o.getViewport(e));if(i.length===0){if(n.length===1)return n[0].id;throw new Error("No rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.")}if(i.length>1)throw new Error("Multiple rendering engines found that contain the viewport with the same viewportId, you must specify a renderingEngineId.");return i[0].id}}function SC(t,e){return t.mouseButton!==e.mouseButton||t.numTouchPoints!==e.numTouchPoints?!1:t.modifierKey===e.modifierKey}function dF(t){if(Ye.toolGroups.some(n=>n.id===t)){console.warn(`'${t}' already exists.`);return}const r=new DE(t);return Ye.toolGroups.push(r),r}function hF(t){const e=Ye.toolGroups.findIndex(r=>r.id===t);e>-1&&Ye.toolGroups.splice(e,1)}function gF(){const t=[...Ye.toolGroups];for(const e of t)hF(e.id);Ye.toolGroups=[]}function Pr(t,e){var n;e||(e=(n=Bo().find(i=>i.getViewports().find(o=>o.id===t)))==null?void 0:n.id);const r=Ye.toolGroups.filter(i=>i.viewportsInfo.some(o=>o.renderingEngineId===e&&(!o.viewportId||o.viewportId===t)));if(r.length){if(r.length>1)throw new Error(`Multiple tool groups found for renderingEngineId: ${e} and viewportId: ${t}. You should only + have one tool group per viewport in a renderingEngine.`);return r[0]}}function ape(){return Ye.toolGroups}const spe=[Fn.Active,Fn.Passive,Fn.Enabled];function pF(t){return Ye.toolGroups.filter(({toolOptions:e})=>{const r=Object.keys(e);for(let n=0;n{a.viewportsInfo.forEach(s=>{const{renderingEngineId:c,viewportId:l}=s,{FrameOfReferenceUID:f}=Oi(l,c);t.metadata.FrameOfReferenceUID===f&&n.push(s)})});const i=k.ANNOTATION_ADDED,o={annotation:t};if(!n.length){ut(et,i,o);return}n.forEach(({renderingEngineId:a,viewportId:s})=>{o.viewportId=s,o.renderingEngineId=a,ut(et,i,o)})}function bw(t){const e=k.ANNOTATION_REMOVED;ut(et,e,t)}function cn(t,e,r=Qt.HandlesUpdated){const n=e&&_e(e),{viewportId:i,renderingEngineId:o}=n||{},a=k.ANNOTATION_MODIFIED;ut(et,a,{annotation:t,viewportId:i,renderingEngineId:o,changeType:r})}function Un(t){wF({annotation:t})}function Dw(t,e=!1){wF({annotation:t,contourHoleProcessingEnabled:e})}function wF(t){const e=k.ANNOTATION_COMPLETED;ut(et,e,t)}const cpe=Object.freeze(Object.defineProperty({__proto__:null,triggerAnnotationAddedForElement:vF,triggerAnnotationAddedForFOR:yF,triggerAnnotationCompleted:Un,triggerAnnotationModified:cn,triggerAnnotationRemoved:bw,triggerContourAnnotationCompleted:Dw},Symbol.toStringTag,{value:"Module"}));let xF;function yc(){return xF}function IE(t){xF=t}function hn(t,e){const r=yc(),n=r.getGroupKey(e);return r.getAnnotations(n,t)}function Hr(t){return yc().getAnnotation(t)}function mm(){return yc().getAllAnnotations()}function Iw(t){const{annotationUID:e,parentAnnotationUID:r}=t;if(!r)return;const n=Hr(r),i=n.childAnnotationUIDs.indexOf(e);n.childAnnotationUIDs.splice(i,1),t.parentAnnotationUID=void 0}function vm(t,e){const{annotationUID:r}=t,{annotationUID:n}=e;Iw(e),t.childAnnotationUIDs||(t.childAnnotationUIDs=[]),!t.childAnnotationUIDs.includes(n)&&(t.childAnnotationUIDs.push(n),e.parentAnnotationUID=r)}function CF(t){return t.parentAnnotationUID?Hr(t.parentAnnotationUID):void 0}function ym(t){var e;return((e=t.childAnnotationUIDs)==null?void 0:e.map(r=>Hr(r)))??[]}function ln(t,e){t.annotationUID||(t.annotationUID=Pn());const r=yc();if(e instanceof HTMLDivElement){const n=r.getGroupKey(e);r.addAnnotation(t,n),vF(t,e)}else r.addAnnotation(t,void 0),yF(t);return t.annotationUID}function lpe(t,e){const r=yc(),n=r.getGroupKey(e);return r.getNumberOfAnnotations(n,t)}function mn(t){var n;if(!t)return;const e=yc(),r=e.getAnnotation(t);r&&((n=r.childAnnotationUIDs)==null||n.forEach(i=>mn(i)),e.removeAnnotation(t),bw({annotation:r,annotationManagerUID:e.uid}))}function upe(){const t=yc(),e=t.removeAllAnnotations();for(const r of e)bw({annotation:r,annotationManagerUID:t.uid})}function fpe(t,e){const r=yc(),n=r.getGroupKey(e),i=r.removeAnnotations(n,t);for(const o of i)bw({annotation:o,annotationManagerUID:r.uid})}function SF(t){let e=t;for(;e;)e.invalidated=!0,e=e.parentAnnotationUID?Hr(e.parentAnnotationUID):void 0}const dpe=Object.freeze(Object.defineProperty({__proto__:null,addAnnotation:ln,addChildAnnotation:vm,clearParentAnnotation:Iw,getAllAnnotations:mm,getAnnotation:Hr,getAnnotationManager:yc,getAnnotations:hn,getChildAnnotations:ym,getNumberOfAnnotations:lpe,getParentAnnotation:CF,invalidateAnnotation:SF,removeAllAnnotations:upe,removeAnnotation:mn,removeAnnotations:fpe,setAnnotationManager:IE},Symbol.toStringTag,{value:"Module"}));function ki(t){const e=t.toolName;if(!e)throw new Error(`No Tool Found for the ToolClass ${t.name}`);Ye.tools[e]||(Ye.tools[e]={toolClass:t})}function hpe(t){const e=t.toolName;return!!(e&&Ye.tools[e])}function Ow(t){return!!(t&&Ye.tools[t])}function TF(t){const e=t.toolName;if(!e)throw new Error(`No tool found for: ${t.name}`);if(!Ye.tools[e]!==void 0)delete Ye.tools[e];else throw new Error(`${e} cannot be removed because it has not been added`)}function Wd(t,e){const r=e||t.currentTarget,{viewport:n}=_e(r)||{};if(!n)return;const i=mpe(t),o=ppe(t),a=gpe(r,o),s=n.canvasToWorld(a);return{page:o,client:i,canvas:a,world:s}}function gpe(t,e){const r=t.getBoundingClientRect();return[e[0]-r.left-window.pageXOffset,e[1]-r.top-window.pageYOffset]}function ppe(t){return[t.pageX,t.pageY]}function mpe(t){return[t.clientX,t.clientY]}function _F(t){const e=t.currentTarget,{viewportId:r,renderingEngineId:n}=_e(e),i=Wd(t,e),o={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},a={event:t,eventName:k.MOUSE_DOUBLE_CLICK,viewportId:r,renderingEngineId:n,camera:{},element:e,startPoints:i,lastPoints:i,currentPoints:i,deltaPoints:o};!ut(e,k.MOUSE_DOUBLE_CLICK,a)&&(t.stopImmediatePropagation(),t.preventDefault())}const Z9=k.MOUSE_MOVE;function wm(t){const e=t.currentTarget,r=_e(e);if(!r)return;const{renderingEngineId:n,viewportId:i}=r,o=Wd(t);!ut(e,Z9,{renderingEngineId:n,viewportId:i,camera:{},element:e,currentPoints:o,eventName:Z9,event:t})&&(t.stopImmediatePropagation(),t.preventDefault())}const{MOUSE_DOWN:Q9,MOUSE_DOWN_ACTIVATE:vpe,MOUSE_CLICK:ype,MOUSE_UP:wpe,MOUSE_DRAG:eI}=k,xpe=400,Cpe=150,Spe=3,Tpe={mouseButton:void 0,element:null,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};let on={mouseButton:void 0,renderingEngineId:void 0,viewportId:void 0,isClickEvent:!0,clickDelay:200,element:null,preventClickTimeout:null,startPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},lastPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};const Vi={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function EF(t){if(Vi.doubleClickTimeout){if(t.buttons===Vi.mouseDownEvent.buttons)return;Vi.mouseDownEvent=t,e5();return}Vi.doubleClickTimeout=setTimeout(e5,t.buttons===1?xpe:Cpe),Vi.mouseDownEvent=t,Vi.ignoreDoubleClick=!1,on.element=t.currentTarget,on.mouseButton=t.buttons;const e=_e(on.element),{renderingEngineId:r,viewportId:n}=e;on.renderingEngineId=r,on.viewportId=n,on.preventClickTimeout=setTimeout(Epe,on.clickDelay),on.element.removeEventListener("mousemove",wm);const i=Wd(t,on.element);on.startPoints=Yu(i),on.lastPoints=Yu(i),document.addEventListener("mouseup",OE),document.addEventListener("mousemove",bF)}function _pe(t){const e=Mw(on.startPoints,on.startPoints),r={event:t,eventName:Q9,element:on.element,mouseButton:on.mouseButton,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},startPoints:on.startPoints,lastPoints:on.startPoints,currentPoints:on.startPoints,deltaPoints:e};on.lastPoints=Yu(r.lastPoints),ut(r.element,Q9,r)&&ut(r.element,vpe,r)}function bF(t){const e=_e(on.element);if(!(e!=null&&e.viewport))return;const r=Wd(t,on.element),n=MF(on.element,on.lastPoints),i=Mw(r,n);if(Vi.doubleClickTimeout)if(IF(i.canvas))e5();else return;const o={event:t,eventName:eI,mouseButton:on.mouseButton,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},element:on.element,startPoints:Yu(on.startPoints),lastPoints:Yu(n),currentPoints:r,deltaPoints:i};!ut(on.element,eI,o)&&(t.stopImmediatePropagation(),t.preventDefault()),on.lastPoints=Yu(r)}function OE(t){if(clearTimeout(on.preventClickTimeout),Vi.doubleClickTimeout)Vi.mouseUpEvent?FS():(Vi.mouseUpEvent=t,on.element.addEventListener("mousemove",DF));else{const e=on.isClickEvent?ype:wpe,r=Wd(t,on.element),n=Mw(r,on.lastPoints),i={event:t,eventName:e,mouseButton:on.mouseButton,element:on.element,renderingEngineId:on.renderingEngineId,viewportId:on.viewportId,camera:{},startPoints:Yu(on.startPoints),lastPoints:Yu(on.lastPoints),currentPoints:r,deltaPoints:n};ut(i.element,e,i),FS()}document.removeEventListener("mousemove",bF)}function DF(t){const e=Wd(t,on.element),r=MF(on.element,on.lastPoints),n=Mw(e,r);IF(n.canvas)&&(e5(),wm(t))}function IF(t){return Math.abs(t[0])+Math.abs(t[1])>Spe}function Epe(){on.isClickEvent=!1}function e5(){Vi.ignoreDoubleClick=!0;const t=Vi.mouseDownEvent,e=Vi.mouseUpEvent;OF(),_pe(t),e&&OE(e)}function OF(){Vi.doubleClickTimeout&&(clearTimeout(Vi.doubleClickTimeout),Vi.doubleClickTimeout=null),Vi.mouseDownEvent=null,Vi.mouseUpEvent=null}function FS(){var t,e;document.removeEventListener("mouseup",OE),(t=on.element)==null||t.removeEventListener("mousemove",DF),(e=on.element)==null||e.addEventListener("mousemove",wm),OF(),on=JSON.parse(JSON.stringify(Tpe))}function Yu(t){return JSON.parse(JSON.stringify(t))}function MF(t,e){const{viewport:r}=_e(t)||{};if(!r)return e;const n=r.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:n}}function Mw(t,e){return!t||!e?{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}:{page:TC(t.page,e.page),client:TC(t.client,e.client),canvas:TC(t.canvas,e.canvas),world:bpe(t.world,e.world)}}function TC(t,e){return[t[0]-e[0],t[1]-e[1]]}function bpe(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function Dpe(){return on.mouseButton}function PF(t){Vi.ignoreDoubleClick?(Vi.ignoreDoubleClick=!1,t.stopImmediatePropagation(),t.preventDefault()):FS()}function RF(t){t.removeEventListener("dblclick",_F),t.removeEventListener("mousedown",EF),t.removeEventListener("mousemove",wm),t.removeEventListener("dblclick",PF,{capture:!0})}function Ipe(t){RF(t),t.addEventListener("dblclick",_F),t.addEventListener("mousedown",EF),t.addEventListener("mousemove",wm),t.addEventListener("dblclick",PF,{capture:!0})}const LF={enable:Ipe,disable:RF},Ope=2e3,Dh={mouse:0,touch:1};let tI,nI;function AF(t,e){const r=Date.now();if(t!==tI){if(r-nI<=Ope)return e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),!1;tI=t}nI=r}const NF=AF.bind(null,Dh.mouse),kF=AF.bind(null,Dh.touch);function rI(t,e,r){const n=r?NF:kF;e.forEach(function(i){t.addEventListener(i,n,{passive:!1})})}function iI(t,e,r){const n=r?NF:kF;e.forEach(function(i){t.removeEventListener(i,n)})}const VF=["mousedown","mouseup","mousemove"],FF=["touchstart","touchend"];function UF(t){iI(t,VF,Dh.mouse),iI(t,FF,Dh.touch)}function Mpe(t){UF(t),rI(t,VF,Dh.mouse),rI(t,FF,Dh.touch)}const BF={enable:Mpe,disable:UF};function Pw(t,e){const r=e||t.currentTarget,n=t.type==="touchend"?t.changedTouches:t.touches;return Object.keys(n).map(i=>{const o=Lpe(n[i]),a=Rpe(n[i]),s=Ppe(r,a),{viewport:c}=_e(r),l=c.canvasToWorld(s);return{page:a,client:o,canvas:s,world:l,touch:{identifier:i,radiusX:n[i].radiusX,radiusY:n[i].radiusY,force:n[i].force,rotationAngle:n[i].rotationAngle}}})}function Ppe(t,e){const r=t.getBoundingClientRect();return[e[0]-r.left-window.pageXOffset,e[1]-r.top-window.pageYOffset]}function Rpe(t){return[t.pageX,t.pageY]}function Lpe(t){return[t.clientX,t.clientY]}function t5(t,e){const r=O1(t),n=O1(e);return{page:_C(r.page,n.page),client:_C(r.client,n.client),canvas:_C(r.canvas,n.canvas),world:Npe(r.world,n.world)}}function ME(t,e){const r=O1(t),n=O1(e);return{page:nh(r.page,n.page),client:nh(r.client,n.client),canvas:nh(r.canvas,n.canvas),world:GF(r.world,n.world)}}function Ape(t,e){}function n5(t,e){const r=oI(t),n=oI(e);return{page:r.page-n.page,client:r.client-n.client,canvas:r.canvas-n.canvas,world:r.world-n.world}}function il(t){return JSON.parse(JSON.stringify(t))}function US(t){return JSON.parse(JSON.stringify(t))}function O1(t){return t.reduce((e,r)=>({page:[e.page[0]+r.page[0]/t.length,e.page[1]+r.page[1]/t.length],client:[e.client[0]+r.client[0]/t.length,e.client[1]+r.client[1]/t.length],canvas:[e.canvas[0]+r.canvas[0]/t.length,e.canvas[1]+r.canvas[1]/t.length],world:[e.world[0]+r.world[0]/t.length,e.world[1]+r.world[1]/t.length,e.world[2]+r.world[2]/t.length]}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function uc(t){return t.reduce((e,r)=>({page:[e.page[0]+r.page[0]/t.length,e.page[1]+r.page[1]/t.length],client:[e.client[0]+r.client[0]/t.length,e.client[1]+r.client[1]/t.length],canvas:[e.canvas[0]+r.canvas[0]/t.length,e.canvas[1]+r.canvas[1]/t.length],world:[e.world[0]+r.world[0]/t.length,e.world[1]+r.world[1]/t.length,e.world[2]+r.world[2]/t.length],touch:{identifier:null,radiusX:e.touch.radiusX+r.touch.radiusX/t.length,radiusY:e.touch.radiusY+r.touch.radiusY/t.length,force:e.touch.force+r.touch.force/t.length,rotationAngle:e.touch.rotationAngle+r.touch.rotationAngle/t.length}}),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0],touch:{identifier:null,radiusX:0,radiusY:0,force:0,rotationAngle:0}})}function _C(t,e){return[t[0]-e[0],t[1]-e[1]]}function Npe(t,e){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function oI(t){const e=[];for(let r=0;r({page:r.page+n.page/e.length,client:r.client+n.client/e.length,canvas:r.canvas+n.canvas/e.length,world:r.world+n.world/e.length}),{page:0,client:0,canvas:0,world:0})}function nh(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2))}function GF(t,e){return Math.sqrt(Math.pow(t[0]-e[0],2)+Math.pow(t[1]-e[1],2)+Math.pow(t[2]-e[2],2))}const kpe=Object.freeze(Object.defineProperty({__proto__:null,copyPoints:US,copyPointsList:il,getDeltaDistance:ME,getDeltaDistanceBetweenIPoints:n5,getDeltaPoints:t5,getDeltaRotation:Ape,getMeanPoints:O1,getMeanTouchPoints:uc},Symbol.toStringTag,{value:"Module"}));Cr.getRuntimeSettings();const{TOUCH_START:aI,TOUCH_START_ACTIVATE:Vpe,TOUCH_PRESS:sI,TOUCH_DRAG:cI,TOUCH_END:lI,TOUCH_TAP:uI,TOUCH_SWIPE:EC}=k,M1={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},r5={page:0,client:0,canvas:0,world:0},WF={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...M1,touch:null}],lastPointsList:[{...M1,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:r5,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},zF={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...M1,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let Ut=JSON.parse(JSON.stringify(WF)),gi=JSON.parse(JSON.stringify(zF));function sf(t,e,r){return ut(t,e,r)}function $F(t){Ut.element=t.currentTarget;const e=_e(Ut.element),{renderingEngineId:r,viewportId:n}=e;Ut.renderingEngineId=r,Ut.viewportId=n,!Ut.isTouchStart&&(clearTimeout(Ut.pressTimeout),Ut.pressTimeout=setTimeout(()=>Fpe(t),Ut.pressDelay),Upe(t),document.addEventListener("touchmove",jF),document.addEventListener("touchend",HF))}function Fpe(t){if(Ut.accumulatedDistance.canvas>Ut.pressMaxDistance)return;const r={event:t,eventName:sI,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,startPointsList:il(Ut.startPointsList),lastPointsList:il(Ut.lastPointsList),startPoints:US(uc(Ut.startPointsList)),lastPoints:US(uc(Ut.lastPointsList))};sf(r.element,sI,r)}function Upe(t){Ut.isTouchStart=!0,Ut.startTime=new Date;const e=Pw(t,Ut.element),r=uc(e),n=M1,i=r5,o={event:t,eventName:aI,element:Ut.element,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},startPointsList:e,lastPointsList:e,currentPointsList:e,startPoints:r,lastPoints:r,currentPoints:r,deltaPoints:n,deltaDistance:i};Ut.startPointsList=il(o.startPointsList),Ut.lastPointsList=il(o.lastPointsList),sf(o.element,aI,o)&&sf(o.element,Vpe,o)}function jF(t){const e=Pw(t,Ut.element),r=KF(Ut.element,Ut.lastPointsList),n=e.length===r.length?t5(e,r):M1,i=e.length===r.length?n5(e,r):r5,o=e.length===r.length?ME(e,Ut.lastPointsList):r5;Ut.accumulatedDistance={page:Ut.accumulatedDistance.page+o.page,client:Ut.accumulatedDistance.client+o.client,canvas:Ut.accumulatedDistance.canvas+o.canvas,world:Ut.accumulatedDistance.world+o.world};const a={event:t,eventName:cI,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,startPoints:uc(Ut.startPointsList),lastPoints:uc(r),currentPoints:uc(e),startPointsList:il(Ut.startPointsList),lastPointsList:il(r),currentPointsList:e,deltaPoints:n,deltaDistance:i};sf(Ut.element,cI,a),Gpe(t,n),Ut.lastPointsList=il(e)}function HF(t){clearTimeout(Ut.pressTimeout);const e=Pw(t,Ut.element),r=KF(Ut.element,Ut.lastPointsList),n=e.length===r.length?t5(e,r):t5(e,e),i=e.length===r.length?n5(e,r):n5(e,e),o={event:t,eventName:lI,element:Ut.element,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},startPointsList:il(Ut.startPointsList),lastPointsList:il(r),currentPointsList:e,startPoints:uc(Ut.startPointsList),lastPoints:uc(r),currentPoints:uc(e),deltaPoints:n,deltaDistance:i};sf(o.element,lI,o),Bpe(t),Ut=JSON.parse(JSON.stringify(WF)),document.removeEventListener("touchmove",jF),document.removeEventListener("touchend",HF)}function Bpe(t){const e=new Date().getTime(),r=Ut.startTime.getTime();if(e-r>gi.tapToleranceMs||(gi.taps===0&&(gi.element=Ut.element,gi.renderingEngineId=Ut.renderingEngineId,gi.viewportId=Ut.viewportId,gi.startPointsList=Ut.startPointsList),gi.taps>0&&!(gi.element==Ut.element&&gi.renderingEngineId==Ut.renderingEngineId&&gi.viewportId==Ut.viewportId)))return;const n=Pw(t,gi.element);ME(n,gi.startPointsList).canvas>gi.tapMaxDistance||(clearTimeout(gi.tapTimeout),gi.taps+=1,gi.tapTimeout=setTimeout(()=>{const o={event:t,eventName:uI,element:gi.element,renderingEngineId:gi.renderingEngineId,viewportId:gi.viewportId,camera:{},currentPointsList:n,currentPoints:uc(n),taps:gi.taps};sf(o.element,uI,o),gi=JSON.parse(JSON.stringify(zF))},gi.tapToleranceMs))}function Gpe(t,e){const r=new Date().getTime(),n=Ut.startTime.getTime();if(Ut.swiped||r-n>Ut.swipeToleranceMs)return;const[i,o]=e.canvas,a={event:t,eventName:EC,renderingEngineId:Ut.renderingEngineId,viewportId:Ut.viewportId,camera:{},element:Ut.element,swipe:null};Math.abs(i)>Ut.swipeDistanceThreshold&&(a.swipe=i>0?od.RIGHT:od.LEFT,sf(a.element,EC,a),Ut.swiped=!0),Math.abs(o)>Ut.swipeDistanceThreshold&&(a.swipe=o>0?od.DOWN:od.UP,sf(a.element,EC,a),Ut.swiped=!0)}function KF(t,e){const{viewport:r}=_e(t);return e.map(n=>{const i=r.canvasToWorld(n.canvas);return{page:n.page,client:n.client,canvas:n.canvas,world:i,touch:n.touch}})}function qF(t){BF.disable(t),t.removeEventListener("touchstart",$F)}function Wpe(t){qF(t),BF.enable(t),t.addEventListener("touchstart",$F,{passive:!1})}const XF={enable:Wpe,disable:qF},fI=10,dI=40,hI=800;function zpe(t){let e=0,r=0,n=0,i=0;return"detail"in t&&(r=t.detail),"wheelDelta"in t&&(r=-t.wheelDelta/120),"wheelDeltaY"in t&&(r=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),n=e*fI,i=r*fI,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(n=t.deltaX),(n||i)&&t.deltaMode&&(t.deltaMode===1?(n*=dI,i*=dI):(n*=hI,i*=hI)),n&&!e&&(e=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:e,spinY:r,pixelX:n,pixelY:i}}function YF(t){const e=t.currentTarget,r=_e(e),{renderingEngineId:n,viewportId:i}=r;if(t.deltaY>-1&&t.deltaY<1)return;t.preventDefault();const{spinX:o,spinY:a,pixelX:s,pixelY:c}=zpe(t),l=a<0?-1:1,f={event:t,eventName:k.MOUSE_WHEEL,renderingEngineId:n,viewportId:i,element:e,camera:{},detail:t,wheel:{spinX:o,spinY:a,pixelX:s,pixelY:c,direction:l},points:Wd(t)};ut(e,k.MOUSE_WHEEL,f)}function $pe(t){JF(t),t.addEventListener("wheel",YF,{passive:!1})}function JF(t){t.removeEventListener("wheel",YF)}const ZF={enable:$pe,disable:JF},jpe={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let bi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Rw(t){bi.element=t.currentTarget;const e=_e(bi.element),{renderingEngineId:r,viewportId:n}=e;bi.renderingEngineId=r,bi.viewportId=n,bi.key=t.key,bi.keyCode=t.keyCode,t.preventDefault();const i={renderingEngineId:bi.renderingEngineId,viewportId:bi.viewportId,element:bi.element,key:bi.key,keyCode:bi.keyCode};ut(i.element,k.KEY_DOWN,i),document.addEventListener("keyup",QF),document.addEventListener("visibilitychange",PE),bi.element.removeEventListener("keydown",Rw)}function PE(){document.removeEventListener("visibilitychange",PE),document.visibilityState==="hidden"&&eU()}function QF(t){const e={renderingEngineId:bi.renderingEngineId,viewportId:bi.viewportId,element:bi.element,key:bi.key,keyCode:bi.keyCode};document.removeEventListener("keyup",QF),document.removeEventListener("visibilitychange",PE),bi.element.addEventListener("keydown",Rw),bi=structuredClone(jpe),ut(e.element,k.KEY_UP,e)}function Hpe(){return bi.keyCode}function eU(){bi.keyCode=void 0}function Kpe(t){tU(t),t.addEventListener("keydown",Rw)}function tU(t){t.removeEventListener("keydown",Rw)}const Xh={enable:Kpe,disable:tU,getModifierKey:Hpe},{EPSILON:n0}=wf;function nU(t,e,r=!1){var f;let n=1/0,i=r?-1/0:0,o=1/0,a=r?-1/0:0,s=1/0,c=r?-1/0:0;const l=((f=t[0])==null?void 0:f.length)===3;for(let u=0;uJSON.stringify(t)===JSON.stringify(e);function RE(t,e,r,n){const i=r[0]/2,o=r[1]/2,a=r[2]/2,s=new Array(8);s[0]=zr(t,[n[0]-i,n[1]-o,n[2]-a]);const c=[[1,-1,-1],[-1,1,-1],[1,1,-1],[-1,-1,1],[1,-1,1],[-1,1,1],[1,1,1]];for(let l=0;l<7;l++){const[f,u,d]=c[l];s[l+1]=zr(t,[n[0]+f*i,n[1]+u*o,n[2]+d*a])}return cf(s,e)}function iU(t,e){const{spacing:r}=t,n=t.voxelManager.getScalarDataLength(),i=[];let o=0;for(let a=0;a{const e=LE.get(t);e&&(e.isDirty=!0)},Ype=t=>{const e=LE.get(t);return e&&!e.isDirty?e.indices:null},Jpe=(t,e)=>{LE.set(t,{indices:e,isDirty:!1})};function To(t,e,r){const n={segmentationId:t,modifiedSlicesToUse:e,segmentIndex:r};Xpe(t),ut(et,k.SEGMENTATION_DATA_MODIFIED,n)}function es(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_MODIFIED,e)}function AE(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_REMOVED,e)}function qc(t,e,r){const n={segmentationId:e,type:r,viewportId:t};ut(et,k.SEGMENTATION_REPRESENTATION_MODIFIED,n)}function BS(t,e,r){const n={viewportId:t,segmentationId:e,type:r};ut(et,k.SEGMENTATION_REPRESENTATION_REMOVED,n)}const Zpe=Object.freeze(Object.defineProperty({__proto__:null,triggerSegmentationDataModified:To,triggerSegmentationModified:es,triggerSegmentationRemoved:AE,triggerSegmentationRepresentationModified:qc,triggerSegmentationRepresentationRemoved:BS},Symbol.toStringTag,{value:"Module"})),Qpe={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidth:1,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDash:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3};function e1e(){return Qpe}const t1e={renderOutline:!0,renderOutlineInactive:!0,outlineWidth:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.5,fillAlphaInactive:.4,outlineOpacity:1,outlineOpacityInactive:.85};function n1e(){return t1e}class r1e{constructor(){this.config={global:{},segmentations:{},viewportsStyle:{}}}setStyle(e,r){const{viewportId:n,segmentationId:i,type:o,segmentIndex:a}=e,s=this.getStyle(e);let c;if(!n&&!i?c={...s,...r}:c=this.copyActiveToInactiveIfNotProvided({...s,...r},o),!o)throw new Error("Type is required to set a style");if(n){this.config.viewportsStyle[n]||(this.config.viewportsStyle[n]={renderInactiveSegmentations:!1,representations:{}});const l=this.config.viewportsStyle[n].representations;if(i){l[i]||(l[i]={}),l[i][o]||(l[i][o]={});const f=l[i][o];a!==void 0?(f.perSegment||(f.perSegment={}),f.perSegment[a]=c):f.allSegments=c}else{const f="__allSegmentations__";l[f]||(l[f]={}),l[f][o]||(l[f][o]={}),l[f][o].allSegments=c}}else if(i){this.config.segmentations[i]||(this.config.segmentations[i]={}),this.config.segmentations[i][o]||(this.config.segmentations[i][o]={});const l=this.config.segmentations[i][o];a!==void 0?(l.perSegment||(l.perSegment={}),l.perSegment[a]=c):l.allSegments=c}else this.config.global[o]=c}copyActiveToInactiveIfNotProvided(e,r){const n={...e};if(r===Vt.Labelmap){const i=n;i.renderOutlineInactive??(i.renderOutlineInactive=i.renderOutline),i.outlineWidthInactive??(i.outlineWidthInactive=i.outlineWidth),i.renderFillInactive??(i.renderFillInactive=i.renderFill),i.fillAlphaInactive??(i.fillAlphaInactive=i.fillAlpha),i.outlineOpacityInactive??(i.outlineOpacityInactive=i.outlineOpacity)}else if(r===Vt.Contour){const i=n;i.outlineWidthInactive??(i.outlineWidthInactive=i.outlineWidth),i.outlineOpacityInactive??(i.outlineOpacityInactive=i.outlineOpacity),i.outlineDashInactive??(i.outlineDashInactive=i.outlineDash),i.renderOutlineInactive??(i.renderOutlineInactive=i.renderOutline),i.renderFillInactive??(i.renderFillInactive=i.renderFill),i.fillAlphaInactive??(i.fillAlphaInactive=i.fillAlpha)}return n}getStyle(e){var s,c,l,f,u;const{viewportId:r,segmentationId:n,type:i,segmentIndex:o}=e;let a=this.getDefaultStyle(i);if(this.config.global[i]&&(a={...a,...this.config.global[i]}),(s=this.config.segmentations[n])!=null&&s[i]&&(a={...a,...this.config.segmentations[n][i].allSegments},o!==void 0&&((c=this.config.segmentations[n][i].perSegment)!=null&&c[o])&&(a={...a,...this.config.segmentations[n][i].perSegment[o]})),r&&this.config.viewportsStyle[r]){this.config.viewportsStyle[r].renderInactiveSegmentations;const d="__allSegmentations__";(l=this.config.viewportsStyle[r].representations[d])!=null&&l[i]&&(a={...a,...this.config.viewportsStyle[r].representations[d][i].allSegments}),n&&((f=this.config.viewportsStyle[r].representations[n])!=null&&f[i])&&(a={...a,...this.config.viewportsStyle[r].representations[n][i].allSegments},o!==void 0&&((u=this.config.viewportsStyle[r].representations[n][i].perSegment)!=null&&u[o])&&(a={...a,...this.config.viewportsStyle[r].representations[n][i].perSegment[o]}))}return a}getRenderInactiveSegmentations(e){var r;return(r=this.config.viewportsStyle[e])==null?void 0:r.renderInactiveSegmentations}setRenderInactiveSegmentations(e,r){this.config.viewportsStyle[e]||(this.config.viewportsStyle[e]={renderInactiveSegmentations:!1,representations:{}}),this.config.viewportsStyle[e].renderInactiveSegmentations=r}getDefaultStyle(e){switch(e){case Vt.Labelmap:return n1e();case Vt.Contour:return e1e();case Vt.Surface:return{};default:throw new Error(`Unknown representation type: ${e}`)}}clearSegmentationStyle(e){this.config.segmentations[e]&&delete this.config.segmentations[e]}clearAllSegmentationStyles(){this.config.segmentations={}}clearViewportStyle(e){this.config.viewportsStyle[e]&&delete this.config.viewportsStyle[e]}clearAllViewportStyles(){for(const e in this.config.viewportsStyle){const n=this.config.viewportsStyle[e].renderInactiveSegmentations;this.config.viewportsStyle[e]={renderInactiveSegmentations:n,representations:{}}}}resetToGlobalStyle(){this.clearAllSegmentationStyles(),this.clearAllViewportStyles()}hasCustomStyle(e){const{type:r}=e,n=this.getStyle(e),i=this.getDefaultStyle(r);return!TV(n,i)}}const Ha=new r1e;function i1e(t){const e={segmentationId:t};ut(et,k.SEGMENTATION_ADDED,e)}const gI={colorLUT:[],segmentations:[],viewportSegRepresentations:{}};class o1e{constructor(e){this._stackLabelmapImageIdReferenceMap=new Map,this._labelmapImageIdReferenceMap=new Map,e||(e=Pn()),this.state=Object.freeze(vs(gI)),this.uid=e}getState(){return this.state}updateState(e){const r=vs(this.state);e(r),this.state=Object.freeze(r)}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this._stackLabelmapImageIdReferenceMap.clear(),this._labelmapImageIdReferenceMap.clear(),this.state=Object.freeze(vs(gI))}getSegmentation(e){return this.state.segmentations.find(r=>r.segmentationId===e)}updateSegmentation(e,r){this.updateState(n=>{const i=n.segmentations.find(o=>o.segmentationId===e);if(!i){console.warn(`Segmentation with id ${e} not found. Update aborted.`);return}Object.assign(i,r)}),es(e)}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error(`Segmentation with id ${e.segmentationId} already exists`);this.updateState(r=>{const n=vs(e);if(n.representationData.Labelmap&&"volumeId"in n.representationData.Labelmap&&!("imageIds"in n.representationData.Labelmap)){const i=this.getLabelmapImageIds(n.representationData);n.representationData.Labelmap.imageIds=i}r.segmentations.push(n)}),i1e(e.segmentationId)}removeSegmentation(e){this.updateState(r=>{const n=r.segmentations.filter(i=>i.segmentationId!==e);r.segmentations.splice(0,r.segmentations.length,...n)}),AE(e)}addSegmentationRepresentation(e,r,n,i){if(!Wn(e))return;if(this.getSegmentationRepresentations(e,{type:n,segmentationId:r}).length>0){console.debug("A segmentation representation of type",n,"already exists in viewport",e,"for segmentation",r);return}this.updateState(s=>{s.viewportSegRepresentations[e]||(s.viewportSegRepresentations[e]=[],Ha.setRenderInactiveSegmentations(e,!0)),n!==Vt.Labelmap?this.addDefaultSegmentationRepresentation(s,e,r,n,i):this.addLabelmapRepresentation(s,e,r,i)}),qc(e,r,n)}addDefaultSegmentationRepresentation(e,r,n,i,o){const a=e.segmentations.find(c=>c.segmentationId===n);if(!a)return;const s={};Object.keys(a.segments).forEach(c=>{s[Number(c)]={visible:!0}}),e.viewportSegRepresentations[r].push({segmentationId:n,type:i,active:!0,visible:!0,colorLUTIndex:(o==null?void 0:o.colorLUTIndex)||0,segments:s,config:{...pI(i),...o}}),this._setActiveSegmentation(e,r,n)}addLabelmapRepresentation(e,r,n,i=pI(Vt.Labelmap)){if(!Wn(r))return;const a=this.getSegmentation(n);if(!a)return;const{representationData:s}=a;if(!s.Labelmap)return this.addDefaultSegmentationRepresentation(e,r,n,Vt.Labelmap,i);this.processLabelmapRepresentationAddition(r,n),this.addDefaultSegmentationRepresentation(e,r,n,Vt.Labelmap,i)}async processLabelmapRepresentationAddition(e,r){const n=Wn(e);if(!n)return;const i=this.getSegmentation(r);if(!i)return;const o=n.viewport instanceof Tr,{representationData:a}=i,s="volumeId"in a.Labelmap;n.viewport,!o&&!s&&this.updateLabelmapSegmentationImageReferences(e,i.segmentationId)}_updateLabelmapSegmentationReferences(e,r,n,i){const o=r.getCurrentImageId();let a=!1;for(const s of n)r.isReferenceViewable({referencedImageId:s},{asOverlay:!0})&&(a=!0,this._stackLabelmapImageIdReferenceMap.get(e).set(o,s),this._updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:o,labelmapImageId:s}));return i&&i(r,e,n),a?this._stackLabelmapImageIdReferenceMap.get(e).get(o):void 0}updateLabelmapSegmentationImageReferences(e,r){const n=this.getSegmentation(r);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(r)||this._stackLabelmapImageIdReferenceMap.set(r,new Map);const{representationData:i}=n;if(!i.Labelmap)return;const o=this.getLabelmapImageIds(i),s=Wn(e).viewport;return this._updateLabelmapSegmentationReferences(r,s,o,null)}_updateAllLabelmapSegmentationImageReferences(e,r){const n=this.getSegmentation(r);if(!n)return;this._stackLabelmapImageIdReferenceMap.has(r)||this._stackLabelmapImageIdReferenceMap.set(r,new Map);const{representationData:i}=n;if(!i.Labelmap)return;const o=this.getLabelmapImageIds(i),s=Wn(e).viewport;this._updateLabelmapSegmentationReferences(r,s,o,(c,l,f)=>{c.getImageIds().forEach((d,h)=>{for(const g of f)c.isReferenceViewable({referencedImageId:g,sliceIndex:h},{asOverlay:!0,withNavigation:!0})&&(this._stackLabelmapImageIdReferenceMap.get(l).set(d,g),this._updateLabelmapImageIdReferenceMap({segmentationId:l,referenceImageId:d,labelmapImageId:g}))})})}getLabelmapImageIds(e){const r=e.Labelmap;let n;if(r.imageIds)n=r.imageIds;else if(!n&&r.volumeId){const i=r.volumeId;n=$e.getVolume(i).imageIds}return n}getLabelmapImageIdsForImageId(e,r){const n=this._generateMapKey({segmentationId:r,referenceImageId:e});return this._labelmapImageIdReferenceMap.get(n)}getCurrentLabelmapImageIdsForViewport(e,r){const n=Wn(e);if(!n)return;const o=n.viewport.getCurrentImageId();return this.getLabelmapImageIdsForImageId(o,r)}getCurrentLabelmapImageIdForViewport(e,r){const n=Wn(e);if(!n||!this._stackLabelmapImageIdReferenceMap.has(r))return;const o=n.viewport.getCurrentImageId();return this._stackLabelmapImageIdReferenceMap.get(r).get(o)}getStackSegmentationImageIdsForViewport(e,r){if(!this.getSegmentation(r))return[];this._updateAllLabelmapSegmentationImageReferences(e,r);const{viewport:i}=Wn(e),o=i.getImageIds(),a=this._stackLabelmapImageIdReferenceMap.get(r);return o.map(s=>a.get(s))}removeSegmentationRepresentationsInternal(e,r){const n=[];return this.updateState(i=>{if(!i.viewportSegRepresentations[e])return;const o=i.viewportSegRepresentations[e];let a=!1;if(!r||Object.values(r).every(s=>s===void 0))n.push(...o),delete i.viewportSegRepresentations[e];else{const{segmentationId:s,type:c}=r;i.viewportSegRepresentations[e]=o.filter(l=>{const f=s&&c&&l.segmentationId===s&&l.type===c||s&&!c&&l.segmentationId===s||!s&&c&&l.type===c;return f&&(n.push(l),l.active&&(a=!0)),!f}),i.viewportSegRepresentations[e].length===0?delete i.viewportSegRepresentations[e]:a&&(i.viewportSegRepresentations[e][0].active=!0)}}),n}removeSegmentationRepresentations(e,r){const n=this.removeSegmentationRepresentationsInternal(e,r);n.forEach(o=>{BS(e,o.segmentationId,o.type)});const i=this.getSegmentationRepresentations(e);return i.length>0&&i[0].active&&qc(e,i[0].segmentationId,i[0].type),n}removeSegmentationRepresentation(e,r,n){const i=this.removeSegmentationRepresentationsInternal(e,r);return n||i.forEach(({segmentationId:o,type:a})=>{BS(e,o,a)}),i}_updateLabelmapImageIdReferenceMap({segmentationId:e,referenceImageId:r,labelmapImageId:n}){const i=this._generateMapKey({segmentationId:e,referenceImageId:r});if(!this._labelmapImageIdReferenceMap.has(i)){this._labelmapImageIdReferenceMap.set(i,[n]);return}const o=this._labelmapImageIdReferenceMap.get(i),a=Array.from(new Set([...o,n]));this._labelmapImageIdReferenceMap.set(i,a)}_setActiveSegmentation(e,r,n){const i=e.viewportSegRepresentations[r];i&&i.forEach(o=>{o.active=o.segmentationId===n})}setActiveSegmentation(e,r){this.updateState(n=>{const i=n.viewportSegRepresentations[e];i&&i.forEach(o=>{o.active=o.segmentationId===r})}),qc(e,r)}getActiveSegmentation(e){if(!this.state.viewportSegRepresentations[e])return;const r=this.state.viewportSegRepresentations[e].find(n=>n.active);if(r)return this.getSegmentation(r.segmentationId)}getSegmentationRepresentations(e,r={}){const n=this.state.viewportSegRepresentations[e];return n?!r.type&&!r.segmentationId?n:n.filter(i=>{const o=r.type?i.type===r.type:!0,a=r.segmentationId?i.segmentationId===r.segmentationId:!0;return o&&a}):[]}getSegmentationRepresentation(e,r){return this.getSegmentationRepresentations(e,r)[0]}getSegmentationRepresentationVisibility(e,r){const n=this.getSegmentationRepresentation(e,r);return n==null?void 0:n.visible}setSegmentationRepresentationVisibility(e,r,n){this.updateState(i=>{const o=this.getSegmentationRepresentations(e,r);o&&o.forEach(a=>{a.visible=n,Object.entries(a.segments).forEach(([s,c])=>{c.visible=n})})}),qc(e,r.segmentationId,r.type)}addColorLUT(e,r){this.updateState(n=>{n.colorLUT[r]&&console.warn("Color LUT table already exists, overwriting"),n.colorLUT[r]=vs(e)})}removeColorLUT(e){this.updateState(r=>{delete r.colorLUT[e]})}_getStackIdForImageIds(e){return e.map(r=>r.slice(-Math.round(r.length*.15))).join("_")}getAllViewportSegmentationRepresentations(){return Object.entries(this.state.viewportSegRepresentations).map(([e,r])=>({viewportId:e,representations:r}))}getSegmentationRepresentationsBySegmentationId(e){const r=[];return Object.entries(this.state.viewportSegRepresentations).forEach(([n,i])=>{const o=i.filter(a=>a.segmentationId===e);o.length>0&&r.push({viewportId:n,representations:o})}),r}_generateMapKey({segmentationId:e,referenceImageId:r}){return`${e}-${r}`}}async function oU({imageIds:t,options:e}){const r=t,n=(e==null?void 0:e.volumeId)||Pn();return await Y4(n,r),{volumeId:n}}async function a1e({segmentationId:t,options:e}){const r=rr.getSegmentation(t),n=r.representationData.Labelmap,{volumeId:i}=await oU({imageIds:n.imageIds,options:e});r.representationData.Labelmap.volumeId=i}function pI(t){const e=Ql.newInstance(),r=Ed.newInstance();return r.addPoint(0,0),t===Vt.Labelmap?{cfun:e,ofun:r}:{}}const rr=new o1e("DEFAULT");function Ea(t,e={}){return rr.getSegmentationRepresentations(t,e)}function NE(t,e){const r=rr;if(!e.segmentationId||!e.type)throw new Error("getSegmentationRepresentation: No segmentationId or type provided, you need to provide at least one of them");const n=r.getSegmentationRepresentations(t,e);return n==null?void 0:n[0]}function aU(t){return rr.getSegmentationRepresentationsBySegmentationId(t)}function s1e(t,e){const r=_e(t),{viewport:n}=r,o=n.getActors().filter(a=>a.representationUID&&typeof a.representationUID=="string"&&a.representationUID.startsWith(e));n.removeActors(o.map(a=>a.uid))}function sU(t,e,r){const n=Wn(t);if(!n)return;const{renderingEngine:i,viewport:o}=n;if(!i||!o)return;const s=o.getActors().filter(r);return s.length>0?s[0]:void 0}function c1e(t,e){const r=Wn(t);if(!r)return;const{renderingEngine:n,viewport:i}=r;if(!n||!i)return;const a=i.getActors().filter(e);return a.length>0?a:void 0}function l1e(t,e){const r=Lw(t,e);return r==null?void 0:r.uid}function Tp(t,e){return c1e(t,r=>{var n;return(n=r.representationUID)==null?void 0:n.startsWith(`${e}-${Vt.Labelmap}`)})}function Lw(t,e){return sU(t,e,r=>{var n;return(n=r.representationUID)==null?void 0:n.startsWith(`${e}-${Vt.Labelmap}`)})}function u1e(t,e,r){return sU(t,e,n=>n.representationUID===cU(e,r))}function cU(t,e){return`${t}-${Vt.Surface}-${e}`}function f1e(t,e,r){const n=_e(t),{viewport:i}=n,o=u1e(i.id,r,e.segmentIndex),a=o==null?void 0:o.actor,s=e.visible;if(a){if(a.setVisibility(s),!s)return;const y=a.getMapper(),m=y.getInputData(),w=e.points,x=e.polys,C=m.getPoints().getData(),S=m.getPolys().getData();if(w.length===C.length&&x.length===S.length)return;const T=Br.newInstance();T.getPoints().setData(w,3);const _=_d.newInstance({values:Float32Array.from(x)});T.setPolys(_),y.setInputData(T),y.modified(),i.getRenderer().resetCameraClippingRange();return}const c=e.points,l=e.polys,f=e.color,u=Br.newInstance();u.getPoints().setData(c,3);const d=_d.newInstance({values:Float32Array.from(l)});u.setPolys(d);const h=wa.newInstance({});let g;h.setInputData(u);const p=dc.newInstance();p.setMapper(h),p.getProperty().setColor(f[0]/255,f[1]/255,f[2]/255),p.getProperty().setLineWidth(2);const v=cU(r,e.segmentIndex);i.addActor({uid:Pn(),actor:p,clippingFilter:g,representationUID:v}),i.resetCamera(),i.getRenderer().resetCameraClippingRange(),i.render()}function Vn(t){return rr.getSegmentation(t)}function xm(t){return rr.getColorLUT(t)}let i5={};function d1e(){return i5}function h1e(t){i5=t}let mI=!1;function jl(){var e;if(!((e=i5.addons)!=null&&e.polySeg))return console.warn("PolySeg add-on not configured. This will prevent automatic conversion between segmentation representations (labelmap, contour, surface). To enable these features, install @cornerstonejs/polymorphic-segmentation and register it during initialization: cornerstoneTools.init({ addons: { polySeg } })."),null;const t=i5.addons.polySeg;return mI||(t.init(),mI=!0),t}function kE({segmentationId:t,type:e,data:r}){const n=Vn(t);if(!n)throw new Error(`Segmentation ${t} not found`);switch(n.representationData[e]&&console.warn(`Representation data of type ${e} already exists for segmentation ${t}, overwriting it.`),e){case Vt.Labelmap:r&&(n.representationData[e]=r);break;case Vt.Contour:r&&(n.representationData[e]=r);break;case Vt.Surface:r&&(n.representationData[e]=r);break;default:throw new Error(`Invalid representation type ${e}`)}}function VE(t){const e=typeof t;return t!==null&&(e==="object"||e==="function")}function Yh(t,e,r){let n,i,o,a,s,c,l=0,f=!1,u=!1,d=!0;const h=!e&&e!==0&&typeof window.requestAnimationFrame=="function";if(typeof t!="function")throw new TypeError("Expected a function");e=Number(e)||0,VE(r)&&(f=!!r.leading,u="maxWait"in r,o=u?Math.max(Number(r.maxWait)||0,e):o,d="trailing"in r?!!r.trailing:d);function g(b){const D=n,I=i;return n=i=void 0,l=b,a=t.apply(I,D),a}function p(b,D){return h?window.requestAnimationFrame(b):setTimeout(b,D)}function v(b){if(h)return window.cancelAnimationFrame(b);clearTimeout(b)}function y(b){return l=b,s=p(x,e),f?g(b):a}function m(b){const D=b-c,I=b-l,P=e-D;return u?Math.min(P,o-I):P}function w(b){const D=b-c,I=b-l;return c===void 0||D>=e||D<0||u&&I>=o}function x(){const b=Date.now();if(w(b))return C(b);s=p(x,m(b))}function C(b){return s=void 0,d&&n?g(b):(n=i=void 0,a)}function S(){s!==void 0&&v(s),l=0,n=c=i=s=void 0}function T(){return s===void 0?a:C(Date.now())}function _(){return s!==void 0}function E(...b){const D=Date.now(),I=w(D);if(n=b,i=this,c=D,I){if(s===void 0)return y(c);if(u)return s=p(x,e),g(c)}return s===void 0&&(s=p(x,e)),a}return E.cancel=S,E.flush=T,E.pending=_,E}const A2=new Map;async function FE(t,e,r,n,i){const o=await r();kE({segmentationId:t,type:e,data:o}),i==null||i(),A2.has(t)||A2.set(t,[]);const a=A2.get(t);return a.includes(e)||a.push(e),g1e(n),es(t),o}function g1e(t){const e=r=>{p1e(r,t)};t._debouncedUpdateFunction=e,et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction),et.addEventListener(k.SEGMENTATION_DATA_MODIFIED,t._debouncedUpdateFunction)}const p1e=Yh((t,e)=>{const r=t.detail.segmentationId,n=A2.get(r);!n||!n.length||(e(r),n.length&&es(r))},300);function UE(t,e){const r=NE(t,e);return r?Object.entries(r.segments).reduce((i,[o,a])=>(a.visible||i.add(Number(o)),i),new Set):new Set}function m1e(t,e,r=!1){const n=Wn(t);if(!n)return;const{viewport:i}=n;s1e(i.element,e),r&&i.render()}async function v1e(t,e){var l;const{segmentationId:r,type:n}=e,i=Vn(r);if(!i)return;let o=i.representationData[Vt.Surface];if(!o&&((l=jl())!=null&&l.canComputeRequestedRepresentation(r,Vt.Surface))){const f=jl();if(o=await FE(r,Vt.Surface,()=>f.computeSurfaceData(r,{viewport:t}),()=>f.updateSurfaceData(r,{viewport:t})),!o)throw new Error(`No Surface data found for segmentationId ${r} even we tried to compute it`)}else!o&&!jl()&&console.debug(`No surface data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to surface. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(!o){console.warn(`No Surface data found for segmentationId ${r}. Skipping render.`);return}const{geometryIds:a}=o;a!=null&&a.size||console.warn(`No Surfaces found for segmentationId ${r}. Skipping render.`);const{colorLUTIndex:s}=e,c=xm(s);a.forEach(f=>{const u=$e.getGeometry(f);if(!(u!=null&&u.data)){console.warn(`No Surfaces found for geometryId ${f}. Skipping render.`);return}const{segmentIndex:d}=u.data,g=UE(t.id,{segmentationId:r,type:n}).has(d),p=u.data,v=c[d];p.color=v.slice(0,3),p.visible=!g,f1e(t.element,p,r)}),t.render()}const lU={render:v1e,removeRepresentation:m1e};function y1e(t,e,r,n){const i=t.getViewReference(),{viewPlaneNormal:o,FrameOfReferenceUID:a}=i,s={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:e,viewPlaneNormal:o,FrameOfReferenceUID:a,referencedImageId:w1e(t,r[0],o),...n}};return ln(s,t.element),s}function w1e(t,e,r){let n;if(t instanceof lr)n=BE(t,e,r);else if(t instanceof Tr){const i=x1e(t),o=yl(i),a=$e.getVolume(o);n=Zl(a,e,r)}else throw new Error("getReferencedImageId: viewport must be a StackViewport or BaseVolumeViewport");return n}function x1e(t){var r;const e=(r=t.getViewReferenceId)==null?void 0:r.call(t);if(e)return e;if(t instanceof Tr)return`volumeId:${C1e(t)}`;throw new Error("getTargetId: viewport must have a getTargetId method")}function C1e(t){var r;const e=t.getActors();if(e)return(r=e.find(n=>n.actor.getClassName()==="vtkVolume"))==null?void 0:r.uid}function BE(t,e,r){const n=t.getImageIds();if(!n||!n.length)return;const i=n.map(o=>{const{imagePositionPatient:a}=wt("imagePlaneModule",o),s=S1e(e,a,r);return{imageId:o,distance:s}});return i.sort((o,a)=>o.distance-a.distance),i[0].imageId}function S1e(t,e,r){const n=Ke();Mn(n,t,e);const i=kt(n,r);return Math.abs(i)}function uU(t,e){const{segmentation:r}=t.data,{segmentation:n}=e.data;return r.segmentationId===n.segmentationId&&r.segmentIndex===n.segmentIndex}class fU{constructor(e){this.getGroupKey=r=>{if(typeof r=="string")return r;const i=_e(r);if(!i)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return i.FrameOfReferenceUID},this._imageVolumeModifiedHandler=r=>{const n=r.detail,{FrameOfReferenceUID:i}=n,a=this.annotations[i];a&&Object.keys(a).forEach(s=>{a[s].forEach(l=>{l.invalidated!==void 0&&(l.invalidated=!0)})})},this.getFramesOfReference=()=>Object.keys(this.annotations),this.getAnnotations=(r,n)=>{const i=this.annotations;return i[r]?n?i[r][n]?i[r][n]:[]:i[r]:[]},this.getAnnotation=r=>{const n=this.annotations;for(const i in n){const o=n[i];for(const a in o){const s=o[a];for(const c of s)if(r===c.annotationUID)return c}}},this.getNumberOfAnnotations=(r,n)=>{const i=this.getAnnotations(r,n);if(!i.length)return 0;if(n)return i.length;let o=0;for(const a in i)o+=i[a].length;return o},this.addAnnotation=(r,n)=>{const{metadata:i}=r,{FrameOfReferenceUID:o,toolName:a}=i;n=n||o;const s=this.annotations;let c=s[n];c||(s[n]={},c=s[n]);let l=c[a];l||(c[a]=[],l=c[a]),this.preprocessingFn&&(r=this.preprocessingFn(r)),l.push(r)},this.removeAnnotation=r=>{const{annotations:n}=this;for(const i in n){const o=n[i];for(const a in o){const s=o[a],c=s.findIndex(l=>l.annotationUID===r);c!==-1&&(s.splice(c,1),s.length===0&&delete o[a])}Object.keys(o).length===0&&delete n[i]}},this.removeAnnotations=(r,n)=>{const i=this.annotations,o=[];if(!i[r])return o;if(n){const a=i[r][n];for(const s of a)this.removeAnnotation(s.annotationUID),o.push(s)}else for(const a in i[r]){const s=i[r][a];for(const c of s)this.removeAnnotation(c.annotationUID),o.push(c)}return o},this.saveAnnotations=(r,n)=>{const i=this.annotations;if(r&&n){const o=i[r];if(!o)return;const a=o[n];return structuredClone(a)}else if(r){const o=i[r];return structuredClone(o)}return structuredClone(i)},this.restoreAnnotations=(r,n,i)=>{const o=this.annotations;if(n&&i){let a=o[n];a||(o[n]={},a=o[n]),a[i]=r}else n?o[n]=r:this.annotations=structuredClone(r)},this.getAllAnnotations=()=>Object.values(this.annotations).map(r=>Object.values(r)).flat(2),this.getNumberOfAllAnnotations=()=>{let r=0;const n=this.annotations;for(const i in n){const o=n[i];for(const a in o){const s=o[a];r+=s.length}}return r},this.removeAllAnnotations=()=>{const r=[];for(const n of this.getAllAnnotations())this.removeAnnotation(n.annotationUID),r.push(n);return r},e||(e=Pn()),this.annotations={},this.uid=e,et.addEventListener(rt.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}setPreprocessingFn(e){this.preprocessingFn=e}}const T1e=new fU("DEFAULT"),Ju=new Set;function dU(t,e=!0){const r=gU();t&&(e?D1e(t,Ju,r):pU(t,Ju,r)),mU(r,Ju)}function _1e(){const t=gU();I1e(Ju,t),mU(t,Ju)}function E1e(){return Array.from(Ju)}function si(t){return Ju.has(t)}function b1e(){return Ju.size}function hU(t){const e=si(t);return dU(t,e),e}function gU(){return Object.freeze({added:[],removed:[],locked:[]})}function D1e(t,e,r){if(!e.has(t)){e.add(t),r.added.push(t);const n=Hr(t);n&&(n.isLocked=!0)}}function pU(t,e,r){if(e.delete(t)){r.removed.push(t);const n=Hr(t);n&&(n.isLocked=!1)}}function I1e(t,e){t.forEach(r=>{pU(r,t,e)})}function mU(t,e){(t.added.length>0||t.removed.length>0)&&(e.forEach(r=>void t.locked.push(r)),ut(et,k.ANNOTATION_LOCK_CHANGE,t))}const O1e=Object.freeze(Object.defineProperty({__proto__:null,checkAndSetAnnotationLocked:hU,getAnnotationsLocked:E1e,getAnnotationsLockedCount:b1e,isAnnotationLocked:si,setAnnotationLocked:dU,unlockAllAnnotations:_1e},Symbol.toStringTag,{value:"Module"})),Xc=new Set;function na(t,e=!0,r=!1){e?M1e(t,r):GE(t)}function M1e(t,e=!1){const r=yU();if(!e){wU(Xc,r);const n=Hr(t);n&&(n.isSelected=!0)}if(t&&!Xc.has(t)){Xc.add(t),r.added.push(t);const n=Hr(t);n&&(n.isSelected=!0)}xU(r,Xc)}function GE(t){const e=yU();if(t){if(Xc.delete(t)){e.removed.push(t);const r=Hr(t);r.isSelected=!1}}else wU(Xc,e);xU(e,Xc)}function vU(){return Array.from(Xc)}function P1e(t){return vU().filter(e=>{var n;const r=Hr(e);return((n=r==null?void 0:r.metadata)==null?void 0:n.toolName)===t})}function Cm(t){return Xc.has(t)}function R1e(){return Xc.size}function yU(){return Object.freeze({added:[],removed:[],selection:[]})}function wU(t,e){t.forEach(r=>{if(t.delete(r)){e.removed.push(r);const n=Hr(r);n&&(n.isSelected=!1)}})}function xU(t,e){(t.added.length>0||t.removed.length>0)&&(e.forEach(r=>void t.selection.push(r)),ut(et,k.ANNOTATION_SELECTION_CHANGE,t))}const L1e=Object.freeze(Object.defineProperty({__proto__:null,deselectAnnotation:GE,getAnnotationsSelected:vU,getAnnotationsSelectedByToolName:P1e,getAnnotationsSelectedCount:R1e,isAnnotationSelected:Cm,setAnnotationSelected:na},Symbol.toStringTag,{value:"Module"})),A1e=t=>(t.data||(t.data={}),t.data.handles||(t.data.handles={}),t.data.handles.textBox||(t.data.handles.textBox={}),t),N1e=t=>(t.data||(t.data={}),t.data.cachedStats||(t.data.cachedStats={}),t),Id=new Set;function CU(t,e=!0){const r=SU();t&&(e?TU(t,Id,r):V1e(t,Id,r)),_U(r)}function k1e(){const t=SU();Id.forEach(e=>{TU(e,Id,t)}),_U(t)}function Kr(t){if(Hr(t))return!Id.has(t)}function SU(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function TU(t,e,r){if(e.delete(t)){r.lastVisible.push(t);const n=Hr(t);n.isVisible=!0}}function V1e(t,e,r){e.has(t)||(e.add(t),Cm(t)&&GE(t),r.lastHidden.push(t))}function _U(t){(t.lastHidden.length>0||t.lastVisible.length>0)&&(Id.forEach(e=>void t.hidden.push(e)),ut(et,k.ANNOTATION_VISIBILITY_CHANGE,t))}function EU(t){const e=!Id.has(t);return CU(t,e),e}const F1e=Object.freeze(Object.defineProperty({__proto__:null,checkAndSetAnnotationVisibility:EU,isAnnotationVisible:Kr,setAnnotationVisibility:CU,showAllAnnotations:k1e},Symbol.toStringTag,{value:"Module"})),WE=T1e,U1e=t=>{t=A1e(t),t=N1e(t);const e=t.annotationUID,r=hU(e);t.isLocked=r;const n=EU(e);return t.isVisible=n,t};WE.setPreprocessingFn(U1e);IE(WE);function B1e(){IE(WE)}function eu(t){if(!t.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:e,segmentIndex:r}=t.data.segmentation,n=Vn(e),{annotationUIDsMap:i}=(n==null?void 0:n.representationData.Contour)||{},o=i==null?void 0:i.get(r);o&&(o.delete(t.annotationUID),o.size||i.delete(r))}function tu(t){if(t.parentAnnotationUID)return;if(!t.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:e,segmentIndex:r}=t.data.segmentation,n=Vn(e);n.representationData.Contour||(n.representationData.Contour={annotationUIDsMap:new Map});let{annotationUIDsMap:i}=n.representationData.Contour;i||(i=new Map);let o=i==null?void 0:i.get(r);o||(o=new Set,i.set(r,o)),i.set(r,o.add(t.annotationUID))}const G1e="PlanarFreehandContourSegmentationTool";function zE(t){var o;const{polyline:e}=((o=t.data)==null?void 0:o.contour)||{};if(!e||e.length<3){console.warn("Skipping creation of new annotation due to invalid polyline:",e);return}mn(t.annotationUID),eu(t);const r=e[0],n=e[e.length-1],i={metadata:{...t.metadata,toolName:G1e,originalToolName:t.metadata.originalToolName||t.metadata.toolName},data:{cachedStats:{},handles:{points:[r,n],textBox:t.data.handles.textBox?{...t.data.handles.textBox}:void 0},contour:{...t.data.contour},spline:t.data.spline,segmentation:{...t.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};return ln(i,t.metadata.FrameOfReferenceUID),tu(i),i}var ra;(function(t){t[t.CounterClockwise=-1]="CounterClockwise",t[t.Unknown=0]="Unknown",t[t.Clockwise=1]="Clockwise"})(ra||(ra={}));function $E(t,e){return t.minX<=e.maxX&&t.maxX>=e.minX&&t.minY<=e.maxY&&t.maxY>=e.minY}function o5(t,e){const r=t.maxX-t.minX,n=t.maxY-t.minY,i=[r,n],o=[t.minX+r/2,t.minY+n/2],a=[Math.abs(e[0]-o[0]),Math.abs(e[1]-o[1])],s=a[0]-i[0]*.5,c=a[1]-i[1]*.5;if(s>0&&c>0)return s*s+c*c;const l=Math.max(s,0)+Math.max(c,0);return l*l}function W1e(t,e){return Math.sqrt(o5(t,e))}const z1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:W1e,distanceToPointSquared:o5,intersectAABB:$E},Symbol.toStringTag,{value:"Module"}));class bU{}class DU{constructor(e){this.storePointData=e.storePointData}getStatistics(){console.debug("InstanceCalculator getStatistics called")}}const{PointsManager:$1e}=Rn;function P1(t){return{max:[-1/0],min:[1/0],sum:[0],count:0,maxIJK:null,maxLPS:null,minIJK:null,minLPS:null,runMean:[0],m2:[0],m3:[0],m4:[0],allValues:[[]],pointsInShape:t?$1e.create3(1024):null,sumLPS:[0,0,0]}}function IU(t,e,r=null,n=null){Array.isArray(e)&&e.length>1&&t.max.length===1&&(t.max.push(t.max[0],t.max[0]),t.min.push(t.min[0],t.min[0]),t.sum.push(t.sum[0],t.sum[0]),t.runMean.push(0,0),t.m2.push(t.m2[0],t.m2[0]),t.m3.push(t.m3[0],t.m3[0]),t.m4.push(t.m4[0],t.m4[0]),t.allValues.push([],[])),t!=null&&t.pointsInShape&&r&&t.pointsInShape.push(r);const i=Array.isArray(e)?e:[e];t.count+=1,r&&(t.sumLPS[0]+=r[0],t.sumLPS[1]+=r[1],t.sumLPS[2]+=r[2]),t.max.forEach((o,a)=>{const s=i[a];t.allValues[a].push(s);const c=t.count,l=s-t.runMean[a],f=l/c,u=l*f*(c-1);t.sum[a]+=s,t.runMean[a]+=f,t.m4[a]+=u*f*f*(c*c-3*c+3)+6*f*f*t.m2[a]-4*f*t.m3[a],t.m3[a]+=u*f*(c-2)-3*f*t.m2[a],t.m2[a]+=u,st.max[a]&&(t.max[a]=s,a===0&&(t.maxIJK=n?[...n]:null,t.maxLPS=r?[...r]:null))})}function j1e(t){if(t.length===0)return 0;const e=[...t].sort((n,i)=>n-i),r=Math.floor(e.length/2);return e.length%2===0?(e[r-1]+e[r])/2:e[r]}function OU(t,e){const r=t.sum.map(u=>u/t.count),n=t.m2.map(u=>Math.sqrt(u/t.count)),i=t.sumLPS.map(u=>u/t.count),o=t.m3.map((u,d)=>{const h=t.m2[d]/t.count;return h===0?0:u/(t.count*Math.pow(h,1.5))}),a=t.m4.map((u,d)=>{const h=t.m2[d]/t.count;return h===0?0:u/(t.count*h*h)-3}),s=t.allValues.map(u=>j1e(u)),c={max:{name:"max",label:"Max Pixel",value:t.max.length===1?t.max[0]:t.max,unit:e,pointIJK:t.maxIJK?[...t.maxIJK]:null,pointLPS:t.maxLPS?[...t.maxLPS]:null},min:{name:"min",label:"Min Pixel",value:t.min.length===1?t.min[0]:t.min,unit:e,pointIJK:t.minIJK?[...t.minIJK]:null,pointLPS:t.minLPS?[...t.minLPS]:null},mean:{name:"mean",label:"Mean Pixel",value:r.length===1?r[0]:r,unit:e},stdDev:{name:"stdDev",label:"Standard Deviation",value:n.length===1?n[0]:n,unit:e},count:{name:"count",label:"Voxel Count",value:t.count,unit:null},median:{name:"median",label:"Median",value:s.length===1?s[0]:s,unit:e},skewness:{name:"skewness",label:"Skewness",value:o.length===1?o[0]:o,unit:null},kurtosis:{name:"kurtosis",label:"Kurtosis",value:a.length===1?a[0]:a,unit:null},maxLPS:{name:"maxLPS",label:"Max LPS",value:t.maxLPS?Array.from(t.maxLPS):null,unit:null},minLPS:{name:"minLPS",label:"Min LPS",value:t.minLPS?Array.from(t.minLPS):null,unit:null},pointsInShape:t.pointsInShape,center:{name:"center",label:"Center",value:i?[...i]:null,unit:null},array:[]};c.array.push(c.min,c.max,c.mean,c.stdDev,c.median,c.skewness,c.kurtosis,c.count,c.maxLPS,c.minLPS),c.center.value&&c.array.push(c.center);const l=t.pointsInShape!==null,f=P1(l);return t.max=f.max,t.min=f.min,t.sum=f.sum,t.count=f.count,t.maxIJK=f.maxIJK,t.maxLPS=f.maxLPS,t.minIJK=f.minIJK,t.minLPS=f.minLPS,t.runMean=f.runMean,t.m2=f.m2,t.m3=f.m3,t.m4=f.m4,t.allValues=f.allValues,t.pointsInShape=f.pointsInShape,t.sumLPS=f.sumLPS,c}const Jf=class Jf extends bU{static statsInit(e){e.storePointData||(this.state.pointsInShape=null),this.state=P1(e.storePointData)}};Jf.state=P1(!0),Jf.statsCallback=({value:e,pointLPS:r=null,pointIJK:n=null})=>{IU(Jf.state,e,r,n)},Jf.getStatistics=e=>OU(Jf.state,e==null?void 0:e.unit);let dl=Jf;class MU extends DU{constructor(e){super(e),this.state=P1(e.storePointData)}statsInit(e){this.state=P1(e.storePointData)}statsCallback(e){IU(this.state,e.value,e.pointLPS,e.pointIJK)}getStatistics(e){return OU(this.state,e==null?void 0:e.unit)}}const H1e=Object.freeze(Object.defineProperty({__proto__:null,BasicStatsCalculator:dl,Calculator:bU,InstanceBasicStatsCalculator:MU,InstanceCalculator:DU},Symbol.toStringTag,{value:"Module"}));function nu(t,e){if(t.length!==e.length)throw Error("Both points should have the same dimensionality");const[r,n,i=0]=t,[o,a,s=0]=e,c=o-r,l=a-n,f=s-i;return c*c+l*l+f*f}function ko(t,e){return Math.sqrt(nu(t,e))}function GS(t,e){const[r,n]=t,[i,o]=e,a=2*i-r,s=2*o-n;return[a,s]}const K1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:ko,distanceToPointSquared:nu,mirror:GS},Symbol.toStringTag,{value:"Module"}));function Zu(t){const[e,r]=t;return ko(e,r)}function rh(t){const[e,r]=t,n=ko(e,r),i=[e[0]-n,e[1]-n],o=[e[0]+n,e[1]+n];return[i,o]}const q1e=Object.freeze(Object.defineProperty({__proto__:null,getCanvasCircleCorners:rh,getCanvasCircleRadius:Zu},Symbol.toStringTag,{value:"Module"}));function Aw(t,e,r={}){return r.precalculated||jE(t,r),r.precalculated(e)}const jE=(t,e={})=>{const{xRadius:r,yRadius:n,zRadius:i}=t;(e.invXRadiusSq===void 0||e.invYRadiusSq===void 0||e.invZRadiusSq===void 0)&&(e.invXRadiusSq=r!==0?1/r**2:0,e.invYRadiusSq=n!==0?1/n**2:0,e.invZRadiusSq=i!==0?1/i**2:0);const{invXRadiusSq:o,invYRadiusSq:a,invZRadiusSq:s}=e,{center:c}=t,[l,f,u]=c;return e.precalculated=d=>{const h=d[0]-l;let g=h*h*o;if(g>1)return!1;const p=d[1]-f;if(g+=p*p*a,g>1)return!1;const v=d[2]-u;return g+=v*v*s,g<=1},e};function a5(t){const[e,r,n,i]=t,o=[n[0],r[1]],a=[i[0],e[1]];return[o,a]}const X1e=Object.freeze(Object.defineProperty({__proto__:null,getCanvasEllipseCorners:a5,pointInEllipse:Aw,precalculatePointInEllipse:jE},Symbol.toStringTag,{value:"Module"}));function s5(t,e,r){let n;const i=nu(t,e);if(t[0]===e[0]&&t[1]===e[1]&&(n=t),!n){const o=((r[0]-t[0])*(e[0]-t[0])+(r[1]-t[1])*(e[1]-t[1]))/i;o<0?n=t:o>1?n=e:n=[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]}return{point:[...n],distanceSquared:nu(r,n)}}function Sm(t,e,r){return s5(t,e,r).distanceSquared}function Ii(t,e,r){if(t.length!==2||e.length!==2||r.length!==2)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(Sm(t,e,r))}function Av(t){return typeof t=="number"?t?t<0?-1:1:t===t?0:NaN:NaN}function c5(t,e,r,n,i=!1){const[o,a]=t,[s,c]=e,[l,f]=r,[u,d]=n;if(i){const I=(o-s)*(f-d)-(a-c)*(l-u);if(Math.abs(I)<1e-10)return;const P=((o-l)*(f-d)-(a-f)*(l-u))/I,O=o+P*(s-o),A=a+P*(c-a);return[O,A]}const h=c-a,g=o-s,p=s*a-o*c,v=h*l+g*f+p,y=h*u+g*d+p;if(v!==0&&y!==0&&Av(v)===Av(y))return;const m=d-f,w=l-u,x=u*f-l*d,C=m*o+w*a+x,S=m*s+w*c+x;if(C!==0&&S!==0&&Av(C)===Av(S))return;const T=h*w-m*g;let _;_=g*x-w*p;const E=_/T;_=m*p-h*x;const b=_/T;return[E,b]}const Mg=.01;function N2(t,e,r){const n=t[0]<=e[0]?t[0]:e[0],i=t[0]>=e[0]?t[0]:e[0],o=t[1]<=e[1]?t[1]:e[1],a=t[1]>=e[1]?t[1]:e[1];if(!(r[0]>=n-Mg&&r[0]<=i+Mg&&r[1]>=o-Mg&&r[1]<=a+Mg))return!1;const c=(e[1]-t[1])*(r[0]-e[0])-(e[0]-t[0])*(r[1]-e[1]);return(c>=0?c:-c)<=Mg}const Y1e=Object.freeze(Object.defineProperty({__proto__:null,distanceToPoint:Ii,distanceToPointSquared:Sm,distanceToPointSquaredInfo:s5,intersectLine:c5,isPointOnLineSegment:N2},Symbol.toStringTag,{value:"Module"}));function PU(t){if(t.length<3)return!1;const e=t.length,r=t[0],n=t[e-1],i=nu(r,n);return of(0,i)}function lf(t,e,r={closed:void 0}){if(t.length<3)return!1;const n=t.length;let i=0;const{closed:o,holes:a}=r;if(a!=null&&a.length){for(const l of a)if(lf(l,e))return!1}const s=!(o===void 0?PU(t):o),c=t.length-(s?1:2);for(let l=0;l<=c;l++){const f=t[l],u=l===n-1?0:l+1,d=t[u],h=f[0]>=d[0]?f[0]:d[0],g=f[1]>=d[1]?f[1]:d[1],p=f[1]<=d[1]?f[1]:d[1];if(e[0]<=h&&e[1]>=p&&e[1]h?s:h,c=c>g?c:g,i&&(l=lp?f:p)}return i?{minX:o,maxX:s,minY:a,maxY:c,minZ:l,maxZ:f}:{minX:o,maxX:s,minY:a,maxY:c}}function _m(t){const e=t.length;let r=0,n=e-1;for(let i=0;i=0?1:-1}function J1e(t){const e=Ke(),r=t[0];for(let n=0,i=t.length;ne[0]?t[0]:e[0],c=t[1]>e[1]?t[1]:e[1],l=r[0]n[0]?r[0]:n[0],d=r[1]>n[1]?r[1]:n[1];if(o>u||sd||c0?1:2}function kv(t,e,r){return e[0]<=Math.max(t[0],r[0])&&e[0]>=Math.min(t[0],r[0])&&e[1]<=Math.max(t[1],r[1])&&e[1]>=Math.min(t[1],r[1])}function qE(t,e,r,n=!0){const i=[],o=t.length,a=o-(n?1:2);for(let s=0;s<=a;s++){const c=t[s],l=s===o-1?0:s+1,f=t[l];KE(e,r,c,f)&&i.push([s,l])}return i}const Q1e=.01;function RU(t,e,r,n){const i=[e[0]-t[0],e[1]-t[1]],o=[n[0]-r[0],n[1]-r[1]],a=o[1]*i[0]-o[0]*i[1];if((a>=0?a:-a)e[0]?t[0]:e[0],t[1]e[1]?t[1]:e[1]],p=[r[0]n[0]?r[0]:n[0],r[1]n[1]?r[1]:n[1]];if(!(g[0]<=p[1]&&g[1]>=p[0]&&g[2]<=p[3]&&g[3]>=p[2])||!(N2(t,e,r)||N2(t,e,n)||N2(r,n,t)))return;const m=g[0]>p[0]?g[0]:p[0],w=g[1]p[2]?g[2]:p[2],C=g[3]{const p=g[0],v=e[g[0]],y=e[g[1]],m=RU(l,d,v,y),w=nu(l,m);return{sourceLineSegmentId:p,coordinate:m,targetStartPointDistSquared:w}});h.sort((g,p)=>g.targetStartPointDistSquared-p.targetStartPointDistSquared),h.forEach(g=>{const{sourceLineSegmentId:p,coordinate:v}=g,y={type:dd.Intersection,coordinates:v,position:ih.Edge,direction:a,visited:!1,next:null},m={...y,direction:E0.Unknown,cloned:!0};a===E0.Entering?y.next=m:m.next=y;let w=i.get(p);w||(w=[],i.set(p,w)),r.push(y),w.push(m),a*=-1})}for(let s=0,c=e.length;s({intersectionPoint:h,lineSegStartDistSquared:nu(f,h.coordinates)})).sort((h,g)=>h.lineSegStartDistSquared-g.lineSegStartDistSquared).map(({intersectionPoint:h})=>h).forEach(h=>n.push(h))}return vI(r),vI(n),{targetPolylinePoints:r,sourcePolylinePoints:n}}function AU(t){for(let e=0,r=t.length;e=f&&console.warn("Maximum iterations reached in mergePolylines, possible infinite loop detected"),s}function kw(t,e){const r=R1(t),n=R1(e),i=kt(n,r);of(-1,i)||(e=e.slice().reverse());const{targetPolylinePoints:o}=LU(t,e);let a=null;const s=[];let c=0;const l=t.length*2;for(;(a=AU(o))&&c=h&&console.warn("Maximum inner iterations reached in subtractPolylines, possible infinite loop detected"),s.push(f)}return c>=l&&console.warn("Maximum outer iterations reached in subtractPolylines, possible infinite loop detected"),s}function NU(t,e,r,n=!0){let i,o;n?(o=t.length-1,i=0):(o=0,i=1);for(let a=i;ad&&(d=v,h=g)}d{const u=[t[f[0]],t[f[1]]],d=[(u[0][0]+u[1][0])/2,(u[0][1]+u[1][1])/2];s.push(Sr(d,e))});const c=Math.min(...s),l=s.indexOf(c);return{segment:a[l],distance:c}}const r0=.001,nme=(t,e)=>{let r,n,i;if(t instanceof lr){const a=t.getImageData();if(!a)return;n=a.direction.slice(0,3),i=a.direction.slice(3,6),r=a.spacing}else{const a=t.getImageData(),{direction:s,spacing:c}=a,{viewPlaneNormal:l,viewUp:f}=t.getCamera(),u=s.slice(0,3),d=s.slice(3,6),h=s.slice(6,9),g=Ke();kn(g,f,l);const p=Math.abs(kt(g,u)),v=Math.abs(kt(g,d)),y=Math.abs(kt(g,h));let m;if(Math.abs(1-p)s4(t,e){const{xDir:i,yDir:o,spacing:a}=n,s=_e(t),{viewport:c}=s;if(!e.length)return e.push(r),console.log(">>>>> !canvasPoints. :: RETURN"),1;const l=c.canvasToWorld(e[e.length-1]),f=c.canvasToWorld(r),u=Ke();qn(u,f,l);const d=Math.abs(kt(u,i)),h=Math.abs(kt(u,o)),g=Math.max(Math.floor(d/a[0]),Math.floor(h/a[0]));if(g>1){const p=e[e.length-1],v=s4(p,r),y=rn();Jr(y,r,p),ms(y,y[0]/v,y[1]/v);const m=v/g;for(let w=1;w<=g;w++)e.push([p[0]+m*y[0]*w,p[1]+m*y[1]*w])}else e.push(r);return g},ome=(t,e,r,n)=>{const i=[t[0]-e[0],t[1]-e[1]],o=[r[0]-e[0],r[1]-e[1]],a=i[0]*o[0]+i[1]*o[1];if(a<0)return!1;const s=Math.sqrt(o[0]*o[0]+o[1]*o[1]);if(s===0)return!1;const c=a/s,l=[o[0]/s,o[1]/s],f=[l[0]*c,l[1]*c],u=[e[0]+f[0],e[1]+f[1]];return!(Sr(t,u)>n||Sr(e,u)>Sr(e,r))},ame=1e-6;function VU(t){let e;const r=gE(t,50);for(let a=0;a<3;a++)if(r.every((s,c,l)=>Math.abs(s[a]-l[0][a])[o[0],o[1]]).sort((o,a)=>o[0]===a[0]?o[1]-a[1]:o[0]-a[0]);function r(o,a,s){return(a[0]-o[0])*(s[1]-o[1])-(a[1]-o[1])*(s[0]-o[0])}const n=[];for(const o of e){for(;n.length>=2&&r(n[n.length-2],n[n.length-1],o)<=0;)n.pop();n.push(o)}const i=[];for(let o=e.length-1;o>=0;o--){const a=e[o];for(;i.length>=2&&r(i[i.length-2],i[i.length-1],a)<=0;)i.pop();i.push(a)}return n.pop(),i.pop(),n.concat(i)}const Sf=Object.freeze(Object.defineProperty({__proto__:null,addCanvasPointsToArray:ime,containsPoint:lf,containsPoints:Tm,convexHull:FU,decimate:YE,getAABB:uf,getArea:_m,getClosestLineSegmentIntersection:tme,getFirstLineSegmentIntersectionIndexes:NU,getLineSegmentIntersectionsCoordinates:kU,getLineSegmentIntersectionsIndexes:qE,getNormal2:R1,getNormal3:Z1e,getSignedArea:HE,getSubPixelSpacingAndXYDirections:nme,getWindingDirection:k2,intersectPolyline:XE,isClosed:PU,isPointInsidePolyline3D:JE,mergePolylines:Nw,pointCanProjectOnLine:ome,pointsAreWithinCloseContourProximity:rme,projectTo2D:VU,subtractPolylines:kw},Symbol.toStringTag,{value:"Module"}));function sme(t,e,r,n){const i=[t,e],o=[t+r,e],a=[t+r,e],s=[t+r,e+n],c=[t+r,e+n],l=[t,e+n],f=[t,e+n];return{top:[i,o],right:[a,s],bottom:[c,l],left:[f,[t,e]]}}function ZE(t,e){if(t.length!==4||e.length!==2)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[r,n,i,o]=t;let a=655535;const s=sme(r,n,i,o);return Object.keys(s).forEach(c=>{const[l,f]=s[c],u=Ii(l,f,e);u0){if(o>i)return 0;o>n&&(r[0]=o)}else{if(o=r[0]&&o<=r[2]&&a>=r[1]&&a<=r[3])return yI;const u=[0,1];if(Vv(r[0]-o,l,u)&&Vv(o-r[2],-l,u)&&Vv(r[1]-a,f,u)&&Vv(a-r[3],-f,u)){const[d,h]=u;return h<1&&(i[0]=o+h*l,i[1]=a+h*f),d>0&&(n[0]+=d*l,n[1]+=d*f),yI}return ume}const fme=Object.freeze(Object.defineProperty({__proto__:null,findClosestPoint:WS,liangBarksyClip:ep},Symbol.toStringTag,{value:"Module"}));function dme(t,e){const[r,n]=t,[i,o]=e,a=Mn(Ke(),n,r),s=Mn(Ke(),i,o),c=kt(a,s),l=ta(a),f=ta(s),u=c/(l*f);return Math.acos(u)*180/Math.PI}function hme(t,e){const[r,n]=t,[i,o]=e,a=xs(rn(),n,r),s=xs(rn(),i,o),c=a4(a,s),l=Cy(a),f=Cy(s),u=c/(l*f);return Math.acos(u)*(180/Math.PI)}function oh(t,e){return t[0].length===3?dme(t,e):hme(t,e)}const gme=Object.freeze(Object.defineProperty({__proto__:null,angleBetweenLines:oh},Symbol.toStringTag,{value:"Module"})),pme=Object.freeze(Object.defineProperty({__proto__:null,BasicStatsCalculator:H1e,aabb:z1e,angle:gme,circle:q1e,ellipse:X1e,lineSegment:Y1e,point:K1e,polyline:Sf,rectangle:cme,vec2:fme},Symbol.toStringTag,{value:"Module"}));function wc(t,e,r,n){var g,p,v;const{canvasToWorld:i,worldToCanvas:o}=r,{data:a}=t,{targetWindingDirection:s}=e;let{points:c}=e,l=k2(c);(g=n==null?void 0:n.decimate)!=null&&g.enabled&&(c=YE(e.points,(p=n==null?void 0:n.decimate)==null?void 0:p.epsilon));let{closed:f}=e;const u=c.length,d=new Array(u);k2(c);const h=CF(t);if(f===void 0){let y=!1;if(c.length>3){const m=nu(c[0],c[u-1]);y=Zt(0,m)}f=y}if((n==null?void 0:n.updateWindingDirection)!==!1){let y=h?h.data.contour.windingDirection*-1:s;y===void 0&&(y=l),y!==l&&c.reverse();const m=(((v=a.handles)==null?void 0:v.points)??[]).map(o);m.length>2&&k2(m)!==y&&a.handles.points.reverse(),l=y}for(let y=0;y{Ye.svgNodeCache[i][a].touched=!1}),{svgLayerElement:o,svgNodeCacheForCanvas:Ye.svgNodeCache,getSvgNode:wme.bind(this,i),appendNode:xme.bind(this,o,i),setNodeTouched:Cme.bind(this,i),clearUntouched:Sme.bind(this,o,i)}}function yme(t){const e=`.${mme}`,r=t.querySelector(e);return r==null?void 0:r.querySelector(":scope > .svg-layer")}function wme(t,e){if(Ye.svgNodeCache[t]&&Ye.svgNodeCache[t][e])return Ye.svgNodeCache[t][e].domRef}function xme(t,e,r,n){if(!Ye.svgNodeCache[e])return null;Ye.svgNodeCache[e][n]={touched:!0,domRef:r},t.appendChild(r)}function Cme(t,e){Ye.svgNodeCache[t]&&Ye.svgNodeCache[t][e]&&(Ye.svgNodeCache[t][e].touched=!0)}function Sme(t,e){Ye.svgNodeCache[e]&&Object.keys(Ye.svgNodeCache[e]).forEach(r=>{const n=Ye.svgNodeCache[e][r];!n.touched&&n.domRef&&(t.removeChild(n.domRef),delete Ye.svgNodeCache[e][r])})}function UU(t,e){const r=vme(t);e(r),r.clearUntouched()}function wl(t,e,r){return`${t}::${e}::${r}`}function Ya(t,e){Object.keys(t).forEach(r=>{const n=e.getAttribute(r),i=t[r];i===void 0||i===""?e.removeAttribute(r):n!==i&&e.setAttribute(r,i)})}function xl(t,e){Object.keys(t).forEach(r=>{const n=t[r];n!==void 0&&n!==""&&e.setAttribute(r,n)})}function ia(t,e,r,n,i,o={},a=""){const{color:s,fill:c,width:l,lineWidth:f,lineDash:u,fillOpacity:d,strokeOpacity:h}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},o),g=f||l,p="http://www.w3.org/2000/svg",v=wl(e,"circle",r),y=t.getSvgNode(v),m={cx:`${n[0]}`,cy:`${n[1]}`,r:`${i}`,stroke:s,fill:c,"stroke-width":g,"stroke-dasharray":u,"fill-opacity":d,"stroke-opacity":h};if(y)Ya(m,y),t.setNodeTouched(v);else{const w=document.createElementNS(p,"circle");a!==""&&w.setAttribute("data-id",a),xl(m,w),t.appendNode(w,v)}}function QE(t,e,r,n,i={},o=""){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"ellipse",r),h=t.getSvgNode(d),[g,p,v,y]=n,m=Math.hypot(v[0]-y[0],v[1]-y[1]),w=Math.hypot(p[0]-g[0],p[1]-g[1]),x=Math.atan2(v[1]-y[1],v[0]-y[0])*180/Math.PI,C=[(v[0]+y[0])/2,(p[1]+g[1])/2],S=m/2,T=w/2,_={cx:`${C[0]}`,cy:`${C[1]}`,rx:`${S}`,ry:`${T}`,stroke:a,fill:"transparent",transform:`rotate(${x} ${C[0]} ${C[1]})`,"stroke-width":f,"stroke-dasharray":l};if(h)Ya(_,h),t.setNodeTouched(d);else{const E=document.createElementNS(u,"ellipse");o!==""&&E.setAttribute("data-id",o),xl(_,E),t.appendNode(E,d)}}function Tme(t,e,r,n,i,o={},a=""){const s=[(n[0]+i[0])/2,n[1]],c=[(n[0]+i[0])/2,i[1]],l=[n[0],(n[1]+i[1])/2],f=[i[0],(n[1]+i[1])/2];QE(t,e,r,[c,s,l,f],o={},a="")}function l5(t,e,r,n,i={},o){const{color:a,handleRadius:s,width:c,lineWidth:l,fill:f,type:u,opacity:d}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},i),h=l||c,g="http://www.w3.org/2000/svg",p=wl(e,"handle",`hg-${r}-index-${o}`);let v;if(u==="circle")v={cx:`${n[0]}`,cy:`${n[1]}`,r:s,stroke:a,fill:f,"stroke-width":h,opacity:d};else if(u==="rect"){const w=parseFloat(s)*1.5,x=n[0]-w*.5,C=n[1]-w*.5;v={x:`${x}`,y:`${C}`,width:`${w}`,height:`${w}`,stroke:a,fill:f,"stroke-width":h,rx:`${w*.1}`,opacity:d}}else throw new Error(`Unsupported handle type: ${u}`);const y=t.getSvgNode(p);if(y)Ya(v,y),t.setNodeTouched(p);else{const m=document.createElementNS(g,u);xl(v,m),t.appendNode(m,p)}}function or(t,e,r,n,i={}){n.forEach((o,a)=>{l5(t,e,r,o,i,a)})}function Sn(t,e,r,n,i,o={},a=""){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:s="rgb(0, 255, 0)",width:c=10,lineWidth:l,lineDash:f,markerStartId:u=null,markerEndId:d=null,shadow:h=!1,strokeOpacity:g=1}=o,p=l||c,v="http://www.w3.org/2000/svg",y=wl(e,"line",r),m=t.getSvgNode(y),w=t.svgLayerElement.id,x=h?`filter:url(#shadow-${w});`:"",C={x1:`${n[0]}`,y1:`${n[1]}`,x2:`${i[0]}`,y2:`${i[1]}`,stroke:s,style:x,"stroke-width":p,"stroke-dasharray":f,"marker-start":u?`url(#${u})`:"","marker-end":d?`url(#${d})`:"","stroke-opacity":g};if(m)Ya(C,m),t.setNodeTouched(y);else{const S=document.createElementNS(v,"line");a!==""&&S.setAttribute("data-id",a),xl(C,S),t.appendNode(S,y)}}function BU(t,e,r,n,i,o={}){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),f=i[0]+(n[0]-i[0])/2,u=[f,n[1]],d=[f,i[1]],h={start:n,end:u},g={start:u,end:d},p={start:d,end:i};Sn(t,e,"1",h.start,h.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"2",g.start,g.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"3",p.start,p.end,{color:a,width:s,lineWidth:c,lineDash:l})}function gc(t,e,r,n,i){if(n.length<2)return;const{color:o="rgb(0, 255, 0)",width:a=10,fillColor:s="none",fillOpacity:c=0,lineWidth:l,lineDash:f,closePath:u=!1,markerStartId:d=null,markerEndId:h=null}=i,g=l||a,p="http://www.w3.org/2000/svg",v=wl(e,"polyline",r),y=t.getSvgNode(v);let m="";for(const x of n)m+=`${x[0].toFixed(1)}, ${x[1].toFixed(1)} `;if(u){const x=n[0];m+=`${x[0]}, ${x[1]}`}const w={points:m,stroke:o,fill:s,"fill-opacity":c,"stroke-width":g,"stroke-dasharray":f,"marker-start":d?`url(#${d})`:"","marker-end":h?`url(#${h})`:""};if(y)Ya(w,y),t.setNodeTouched(v);else{const x=document.createElementNS(p,"polyline");xl(w,x),t.appendNode(x,v)}}function Hl(t,e,r,n,i){const a=n.length&&n[0].length&&Array.isArray(n[0][0])?n:[n],{color:s="rgb(0, 255, 0)",width:c=10,fillColor:l="none",fillOpacity:f=0,lineWidth:u,lineDash:d,closePath:h=!1}=i,g=u||c,p="http://www.w3.org/2000/svg",v=wl(e,"path",r),y=t.getSvgNode(v);let m="";for(let x=0,C=a.length;xm.length){for(let C=0;C0?WS(n,i):i,c=Dme(o),l=WS(c,s),f=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},a);Sn(t,e,`link-${r}`,s,l,f)}function Dme(t){const{x:e,y:r,height:n,width:i}=t,o=i/2,a=n/2,s=[e+o,r],c=[e,r+a],l=[e+o,r+n],f=[e+i,r+a];return[s,c,l,f]}function ho(t,e,r,n,i,o,a,s={}){const c=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),l=ff(t,e,r,n,i,c);return bme(t,e,r,o,i,l,c),l}function e8(t,e,r,n,i={},o=""){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"rect",r),h=t.getSvgNode(d),[g,p,v,y]=n,m=Math.hypot(g[0]-p[0],g[1]-p[1]),w=Math.hypot(g[0]-v[0],g[1]-v[1]),x=[(y[0]+g[0])/2,(y[1]+g[1])/2],C=[(v[0]+g[0])/2,(v[1]+g[1])/2],S=Math.atan2(x[1]-C[1],x[0]-C[0])*180/Math.PI,T={x:`${x[0]-m/2}`,y:`${x[1]-w/2}`,width:`${m}`,height:`${w}`,stroke:a,fill:"transparent",transform:`rotate(${S} ${x[0]} ${x[1]})`,"stroke-width":f,"stroke-dasharray":l};if(h)Ya(T,h),t.setNodeTouched(d);else{const _=document.createElementNS(u,"rect");o!==""&&_.setAttribute("data-id",o),xl(T,_),t.appendNode(_,d)}}function Em(t,e,r,n,i,o={},a=""){const s=[n[0],n[1]],c=[i[0],n[1]],l=[n[0],i[1]],f=[i[0],i[1]];e8(t,e,r,[s,c,l,f],o,a)}const CI="http://www.w3.org/2000/svg";function u5(t,e,r,n,i,o={}){if(isNaN(n[0])||isNaN(n[1])||isNaN(i[0])||isNaN(i[1]))return;const{viaMarker:a=!1,color:s="rgb(0, 255, 0)",markerSize:c=10}=o;if(!a){Ime(t,e,r,n,i,o);return}const l=t.svgLayerElement.id,u=`${`arrow-${e}`}-${l}`,d=t.svgLayerElement.querySelector("defs");let h=d.querySelector(`#${u}`);if(h){h.setAttribute("markerWidth",`${c}`),h.setAttribute("markerHeight",`${c}`);const g=h.querySelector("path");g&&g.setAttribute("fill",s)}else{h=document.createElementNS(CI,"marker"),h.setAttribute("id",u),h.setAttribute("viewBox","0 0 10 10"),h.setAttribute("refX","8"),h.setAttribute("refY","5"),h.setAttribute("markerWidth",`${c}`),h.setAttribute("markerHeight",`${c}`),h.setAttribute("orient","auto");const g=document.createElementNS(CI,"path");g.setAttribute("d","M 0 0 L 10 5 L 0 10 z"),g.setAttribute("fill",s),h.appendChild(g),d.appendChild(h)}o.markerEndId=u,Sn(t,e,r,n,i,o)}function Ime(t,e,r,n,i,o={}){const{color:a="rgb(0, 255, 0)",width:s=2,lineWidth:c,lineDash:l}=o,f=10,u=Math.atan2(i[1]-n[1],i[0]-n[0]),d={start:[i[0]-f*Math.cos(u-Math.PI/7),i[1]-f*Math.sin(u-Math.PI/7)],end:i},h={start:[i[0]-f*Math.cos(u+Math.PI/7),i[1]-f*Math.sin(u+Math.PI/7)],end:i};Sn(t,e,r,n,i,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"2",d.start,d.end,{color:a,width:s,lineWidth:c,lineDash:l}),Sn(t,e,"3",h.start,h.end,{color:a,width:s,lineWidth:c,lineDash:l})}function GU(t,e,r,n,i,o={}){const{color:a,width:s,lineWidth:c,lineDash:l}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},o),f=c||s,u="http://www.w3.org/2000/svg",d=wl(e,"rect",r),h=t.getSvgNode(d),g=[Math.min(n[0],i[0]),Math.min(n[1],i[1])],p=Math.abs(n[0]-i[0]),v=Math.abs(n[1]-i[1]),y={x:`${g[0]}`,y:`${g[1]}`,width:`${p}`,height:`${v}`,stroke:a,fill:"black","stroke-width":f,"stroke-dasharray":l};if(h)Ya(y,h),t.setNodeTouched(d);else{const m=document.createElementNS(u,"rect");xl(y,m),t.appendNode(m,d)}}const Ome=Object.freeze(Object.defineProperty({__proto__:null,draw:UU,drawArrow:u5,drawCircle:ia,drawEllipse:Tme,drawEllipseByCoordinates:QE,drawFan:$S,drawHandle:l5,drawHandles:or,drawHeight:BU,drawLine:Sn,drawLinkedTextBox:ho,drawPath:Hl,drawPolyline:gc,drawRect:Em,drawRectByCoordinates:e8,drawRedactionRect:GU,drawTextBox:ff,setAttributesIfNecessary:Ya,setNewAttributesIfValid:xl},Symbol.toStringTag,{value:"Module"}));function WU(t,e){const r=_e(t),{renderingEngineId:n,viewportId:i}=r,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;c{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let r=0;r{this._needsRender.add(r)}),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const r=[...this._viewportElements.values()];e.forEach(n=>{r.indexOf(n)!==-1&&this._needsRender.add(n)}),this._render()}_render(){this._needsRender.size>0&&this._animationFrameSet===!1&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const r=_e(e);if(!r)return;if(!jr(r.renderingEngineId)){console.warn("rendering Engine has been destroyed");return}const i=WU(e,[Mme,Pme,Rme]),{renderingEngineId:o,viewportId:a}=r,s={element:e,renderingEngineId:o,viewportId:a};UU(e,c=>{let l=!1;const f=u=>{if(u.renderAnnotation){const d=u.renderAnnotation(r,c);l=l||d}};i.forEach(f),l&&ut(e,k.ANNOTATION_RENDERED,{...s})})}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}}const t8=new Lme;function Jh(t){t8.renderViewport(t)}function Be(t){t.length&&t.forEach(e=>{const r=Wn(e);if(!r){console.warn(`Viewport not available for ${e}`);return}const{viewport:n}=r;if(!n){console.warn(`Viewport not available for ${e}`);return}const i=n.element;Jh(i)})}function zU(t,e){const r=t.length,n=[];for(let i=0;i{const i=n.getCamera();return Math.abs(kt(i.viewPlaneNormal,e.viewPlaneNormal))>r})}function At(t,e,r=!0){const n=_e(t),{renderingEngine:i,FrameOfReferenceUID:o}=n;let a=i.getViewports();a=zU(a,o),a=Vw(a,e);const s=i.getViewport(n.viewportId);return r&&(a=$U(a,s.getCamera())),a.map(l=>l.id)}const Fme=Object.freeze(Object.defineProperty({__proto__:null,filterViewportsWithFrameOfReferenceUID:zU,filterViewportsWithParallelNormals:$U,filterViewportsWithToolEnabled:Vw,getViewportIdsWithToolToRender:At},Symbol.toStringTag,{value:"Module"})),f5="PlanarFreehandContourSegmentationTool";function df(t,e){const r=t.length,n=new Array(r);for(let i=0;i{const n=r,i=df(n.data.contour.polyline,t);return{annotation:n,polyline:i}})}function Uw(t,e,r){vm(e,r),eu(r);const{contour:n}=r.data,i=df(n.polyline,t);wc(r,{points:i,closed:n.closed,targetWindingDirection:e.data.contour.windingDirection===ra.Clockwise?ra.CounterClockwise:ra.Clockwise},t);const{element:o}=t;i8(t,[e,r])}function r8(t,e,r,n,i){var m;if(!Ow(f5)){console.warn(`${f5} is not registered in cornerstone. Cannot combine polylines.`);return}const o=i[0],a=lf(r,o),s=jU(t,e),c=new Set(s),l=new Map,f=(w,x)=>{let C=l.get(w);C||(C=[],l.set(w,C)),C.push(x),c.delete(x)},u=[];if(a){const w=Nw(r,i);u.push(w),Array.from(c.keys()).forEach(x=>f(w,x))}else kw(r,i).forEach(x=>{u.push(x),Array.from(c.keys()).forEach(C=>{Tm(x,C.polyline)&&f(x,C)})});Array.from(l.values()).forEach(w=>w.forEach(x=>Iw(x.annotation)));const{element:d}=t,{metadata:h,data:g}=e,{handles:p,segmentation:v}=g,{textBox:y}=p;mn(n.annotationUID),mn(e.annotationUID),eu(n),eu(e);for(let w=0;wvm(C,S.annotation))}i8(t,[e,n])}function HU(t,e,r){const n=t.canvasToWorld(r[0]),i=t.canvasToWorld(r[r.length-1]),o={metadata:{...e.metadata,toolName:f5,originalToolName:e.metadata.originalToolName||e.metadata.toolName},data:{cachedStats:{},handles:{points:[n,i],textBox:e.data.handles.textBox?{...e.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:e.data.spline,segmentation:{...e.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:e.interpolationUID,interpolationCompleted:e.interpolationCompleted};return wc(o,{points:r,closed:!0,targetWindingDirection:ra.Clockwise},t),o}function i8(t,e){const{element:r}=t,n=new Set([f5]);e.forEach(i=>{n.add(i.metadata.toolName)});for(const i of n.values())if(Ow(i)){const o=At(r,i);Be(o)}}function Bw(t,e){const r=[],n=new Set,i=new Set;for(let o=0;o[...r]);let e=t[0].map(r=>[...r]);for(let r=1;rd5(o.data.contour.polyline,r)),i=e.map(o=>d5(o.data.contour.polyline,r));return Bw(n,i)}function d5(t,e){const r=t.length,n=new Array(r);for(let i=0;i[...n]);let r=t.map(n=>[...n]);for(let n=0;nd5(o.data.contour.polyline,r)),i=e.map(o=>d5(o.data.contour.polyline,r));return Gw(n,i)}const zme="PlanarFreehandContourSegmentationTool";function KU(t,e,r,n){const i=new Map;return r.forEach(o=>{if(o.length<3)return;const a={annotationUID:Pn(),data:{contour:{closed:!0,polyline:o},segmentation:{segmentationId:e,segmentIndex:n},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:zme,...t.getViewReference()}};ln(a,t.element);const s=(i==null?void 0:i.get(n))||new Set;s.add(a.annotationUID),i.set(n,s)}),i}function SI(t,e){const r=[],{annotationUIDsMap:n}=t,i=n.get(e);for(const o of i){const a=Hr(o),{polyline:s}=a.data.contour;r.push(s)}return r}function qU(t,e,r,n){if(!e||!e.representationData.Contour)return;const i=e.representationData.Contour,{annotationUIDsMap:o}=i;if(!o||!o.get(r)||!o.get(n))return;const a=SI(i,r),s=SI(i,n),c=a.map(f=>df(f,t)),l=s.map(f=>df(f,t));return{polyLinesCanvas1:c,polyLinesCanvas2:l}}function $me(t,e,r,n,{name:i,segmentIndex:o,color:a}){const{polyLinesCanvas1:s,polyLinesCanvas2:c}=qU(t,e,r,n)||{};if(!s||c)return;const f=Bw(s,c).map(g=>n8(g,t)),u=KU(t,e.segmentationId,f,o),d=e.representationData.Contour,{annotationUIDsMap:h}=d;h&&h.set(o,u.get(o))}function jme(t,e,r,n,{name:i,segmentIndex:o,color:a}){const{polyLinesCanvas1:s,polyLinesCanvas2:c}=qU(t,e,r,n)||{};if(!s||c)return;const f=Gw(s,c).map(g=>n8(g,t)),u=KU(t,e.segmentationId,f,o),d=e.representationData.Contour,{annotationUIDsMap:h}=d;h&&h.set(o,u.get(o))}function bm(t){var e;return!!((e=t.data)!=null&&e.segmentation)}function XU(t,e,r){const n=[],i=uf(e);for(let o=0;oa.isContourHole),o=n.filter(a=>!a.isContourHole);if(i.length>0){const a=i[0];Jme(t,a.targetAnnotation,e),JU(t,[e,a.targetAnnotation]);return}if(o.length!==0){if(!Ow(h5)){console.warn(`${h5} is not registered in cornerstone. Cannot process multiple intersections.`);return}Kme(t,e,r,o)}}function Kme(t,e,r,n){const{element:i}=t,o=[e],a=[],s=[];n.forEach(({targetAnnotation:d})=>{const h=Yme(t,d);s.push(...h),o.push(d)});const c=r[0];if(n.some(({targetPolyline:d})=>lf(d,c))){let d=r;n.forEach(({targetPolyline:h})=>{d=Nw(d,h)}),a.push(d)}else n.forEach(({targetPolyline:d})=>{const h=kw(d,r);a.push(...h)});o.forEach(d=>{mn(d.annotationUID),eu(d)}),s.forEach(d=>Iw(d.annotation));const f=n[0].targetAnnotation,u=[];a.forEach(d=>{if(!d||d.length<3){console.warn("Skipping creation of new annotation due to invalid polyline:",d);return}const h=qme(t,f,d);ln(h,i),tu(h),cn(h,t.element),u.push(h)}),Xme(t,s,u),JU(t,o)}function qme(t,e,r){const n=t.canvasToWorld(r[0]),i=t.canvasToWorld(r[r.length-1]),o={metadata:{...e.metadata,toolName:h5,originalToolName:e.metadata.originalToolName||e.metadata.toolName},data:{cachedStats:{},handles:{points:[n,i],textBox:e.data.handles.textBox?{...e.data.handles.textBox}:void 0},contour:{polyline:[],closed:!0},spline:e.data.spline,segmentation:{...e.data.segmentation}},annotationUID:Pn(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:e.interpolationUID,interpolationCompleted:e.interpolationCompleted};return wc(o,{points:r,closed:!0,targetWindingDirection:ra.Clockwise},t),o}function Xme(t,e,r){e.forEach(n=>{const i=r.find(o=>{const a=o8(o.data.contour.polyline,t);return Tm(a,n.polyline)});i&&vm(i,n.annotation)})}function Yme(t,e){return ym(e).map(r=>{const n=r,i=o8(n.data.contour.polyline,t);return{annotation:n,polyline:i}})}function Jme(t,e,r){vm(e,r),eu(r);const{contour:n}=r.data,i=o8(n.polyline,t);wc(r,{points:i,closed:n.closed,targetWindingDirection:e.data.contour.windingDirection===ra.Clockwise?ra.CounterClockwise:ra.Clockwise},t)}function o8(t,e){const r=t.length,n=new Array(r);for(let i=0;i{n.add(i.metadata.toolName)});for(const i of n.values())if(Ow(i)){const o=At(r,i);Be(o)}}const{isEqual:TI}=Rn;function a8(t){const{metadata:e}=t;return xV().filter(r=>{if(r.FrameOfReferenceUID===e.FrameOfReferenceUID){const n=r.viewport,{viewPlaneNormal:i,viewUp:o}=n.getCamera();return TI(i,e.viewPlaneNormal)&&(!e.viewUp||TI(o,e.viewUp))}}).map(r=>r.viewport)}async function Zme(t,e,r,n=!0){const i=typeof t=="string"?Hr(t):t,o=typeof e=="string"?Hr(e):e;if(!i||!o)throw new Error("Both source and target annotations must be valid");r||(r=Qme(i));const a=df(i.data.contour.polyline,r),s=df(o.data.contour.polyline,r),c=Fw(a,s);if(!c.hasIntersection){console.warn("No intersection found between the two annotations");return}if(c.isContourHole){if(!n){console.warn("Hole processing is disabled");return}Uw(r,o,i)}else r8(r,o,s,i,a)}function Qme(t){const e=a8(t);if(!e.length)throw new Error("No viewport found for the annotation");return e[0]}const eve=Object.freeze(Object.defineProperty({__proto__:null,addContourSegmentationAnnotation:tu,addition:$me,areSameSegment:uU,checkIntersection:Fw,combinePolylines:r8,contourSegmentationOperation:Zme,convertContourPolylineToCanvasSpace:df,convertContourPolylineToWorld:n8,convertContourSegmentationAnnotation:zE,createNewAnnotationFromPolyline:HU,createPolylineHole:Uw,findAllIntersectingContours:XU,getContourHolesData:jU,isContourSegmentationAnnotation:bm,processMultipleIntersections:YU,removeContourSegmentationAnnotation:eu,subtractAnnotationPolylines:Wme,subtractMultiplePolylineSets:Gme,subtractPolylineSets:Gw,subtraction:jme,unifyAnnotationPolylines:Bme,unifyMultiplePolylineSets:Ume,unifyPolylineSets:Bw,updateViewportsForAnnotations:i8},Symbol.toStringTag,{value:"Module"}));function tve(t){if(!t)throw new Error(`No contours found for geometryId ${t.id}`);const e=t.id;if(t.type!==Qc.CONTOUR)throw new Error(`Geometry type ${t.type} not supported for rendering.`);if(!t.data){console.warn(`No contours found for geometryId ${e}. Skipping render.`);return}}function nve(t,e,r,n){r.size?t.render():rve(t,e,n)}function rve(t,e,r){const{segmentationId:n}=r,i=new Map;e.forEach(o=>{const a=$e.getGeometry(o);if(!a){console.warn(`No geometry found for geometryId ${o}. Skipping render.`);return}const s=a.data.segmentIndex;tve(a);const c=Ha.getStyle({viewportId:t.id,segmentationId:n,type:Vt.Contour,segmentIndex:s}),l=a.data,f=t.getCamera().viewPlaneNormal;l.contours.forEach(u=>{const{points:d,color:h,id:g}=u,p=BE(t,d[0],f),v={annotationUID:Pn(),data:{contour:{closed:!0,polyline:d},segmentation:{segmentationId:n,segmentIndex:s,color:h,id:g},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!0,isVisible:!0,metadata:{referencedImageId:p,toolName:"PlanarFreehandContourSegmentationTool",FrameOfReferenceUID:t.getFrameOfReferenceUID(),viewPlaneNormal:t.getCamera().viewPlaneNormal}},y=t.element;ln(v,y),tu(v)}),c&&i.set(s,c)}),t.render()}function ive(t,e,r=!1){const n=Vn(e),{annotationUIDsMap:i}=n.representationData.Contour;i.forEach(o=>{o.forEach(a=>{mn(a)})})}function ZU(t){const e=Ype(t);if(e)return e;const r=Vn(t);if(!r)throw new Error(`No segmentation found for segmentationId ${t}`);let n;if(r.representationData.Labelmap)n=ove(r,t);else if(r.representationData.Contour)n=cve(r);else if(r.representationData.Surface)n=lve(r);else throw new Error(`Unsupported segmentation type: ${r.representationData}`);return Jpe(t,n),n}function ove(t,e){const r=t.representationData[Vt.Labelmap],n=new Set;return r.imageIds?sve(n,r.imageIds):ave(n,e),Array.from(n).map(Number).sort((i,o)=>i-o)}function ave(t,e){$e.getVolume(e).voxelManager.forEach(({value:n})=>{n!==0&&t.add(n)})}function sve(t,e){e.forEach(r=>{$e.getImage(r).voxelManager.getScalarData().forEach(o=>{o!==0&&t.add(o)})})}function cve(t){const{annotationUIDsMap:e,geometryIds:r}=t.representationData.Contour||{};if(!r)throw new Error(`No geometryIds found for segmentationId ${t.segmentationId}`);const n=new Set([...e.keys()]);return r.forEach(i=>{const o=$e.getGeometry(i);n.add(o.data.segmentIndex)}),Array.from(n).sort((i,o)=>i-o)}function lve(t){var r;const e=((r=t.representationData.Surface)==null?void 0:r.geometryIds)??[];return Array.from(e.keys()).map(Number).sort((n,i)=>n-i)}const i0=new Map,_I=new Map;function uve(t,e,r=!1){const n=Wn(t);if(!n)return;const{viewport:i}=n;ive(t,e),r&&i.render()}async function fve(t,e){var l,f;const{segmentationId:r}=e,n=Vn(r);if(!n)return;let i=n.representationData[Vt.Contour];const o=jl();if(!i&&((l=jl())!=null&&l.canComputeRequestedRepresentation(r,Vt.Contour))&&!i0.get(t.id)?(i0.set(t.id,!0),i=await FE(r,Vt.Contour,()=>o.computeContourData(r,{viewport:t}),()=>{}),i0.set(t.id,!1)):!i&&!jl()&&console.debug(`No contour data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to contour. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`),!i||!((f=i.geometryIds)!=null&&f.length))return;let a=!1;const s=t.getCamera().viewPlaneNormal;i.annotationUIDsMap&&(a=!hve(i.annotationUIDsMap,s)),i.geometryIds.length>0&&(a=!dve(i.geometryIds,s));const c=_I.get(t.id)||new Set;if(a&&!i0.get(t.id)&&!c.has(r)&&t.viewportStatus===Lo.RENDERED){i0.set(t.id,!0);const u=ZU(r),h=(await o.computeSurfaceData(r,{segmentIndices:u,viewport:t})).geometryIds,g=[];for(const m of h.values()){const x=$e.getGeometry(m).data;g.push({points:x.points,polys:x.polys,segmentIndex:x.segmentIndex,id:x.segmentIndex})}const p=await o.clipAndCacheSurfacesForViewport(g,t),v=o.extractContourData(p),y=o.createAndAddContourSegmentationsFromClippedSurfaces(v,t,r);i.annotationUIDsMap=new Map([...i.annotationUIDsMap,...y]),c.add(r),_I.set(t.id,c),i0.set(t.id,!1)}nve(t,i.geometryIds,i.annotationUIDsMap,e)}function dve(t,e){var u,d,h;let r=null,n=null;for(const g of t){const p=$e.getGeometry(g);if(!p)continue;const v=p.data;if(((h=(d=(u=v.contours)==null?void 0:u[0])==null?void 0:d.points)==null?void 0:h.length)>=3){r=p,n=v;break}}if(!r||!n)return!1;const o=n.contours[0].points,a=o[0],s=o[1],c=o[2];let l=kn(Ke(),Mn(Ke(),s,a),Mn(Ke(),c,a));l=Qn(Ke(),l);const f=kt(l,e);return Math.abs(f)>.9}function hve(t,e){const r=Array.from(t.values()).flat().map(i=>Array.from(i)).flat(),n=gE(r,3);for(const i of n){const o=Hr(i);if(o!=null&&o.metadata){if(!o.metadata.viewPlaneNormal)continue;const a=o.metadata.viewPlaneNormal,s=Math.abs(e[0]*a[0]+e[1]*a[1]+e[2]*a[2]);if(Math.abs(s-1)>.01)return!1}}return!0}const QU={render:fve,removeRepresentation:uve};function Tf(t,e){return ru(t,e)[0]}function ru(t,e){return rr.getCurrentLabelmapImageIdsForViewport(t,e)}function gve(t,e){return rr.getLabelmapImageIdsForImageId(t,e)}const EI=new Map,pve=({cfun:t,ofun:e,actor:r})=>{r.getProperty().setRGBTransferFunction(1,t),r.getProperty().setScalarOpacity(1,e)};async function mve({viewport:t,volumeInputs:e,segmentationId:r}){var E;const n=t.getDefaultActor(),{actor:i}=n,{uid:o,callback:a}=n,s=t.getVolumeId();if((E=EI.get(o))!=null&&E.added)return{uid:o,actor:i};const c=e,l=$e.getVolume(c[0].volumeId);if(!l)throw new Error(`imageVolume with id: ${l.volumeId} does not exist`);const{volumeId:f}=c[0],u=await X4(f);if(!u)throw new Error(`segImageVolume with id: ${u.volumeId} does not exist`);const h=u.voxelManager.getCompleteScalarDataArray(),{imageData:g}=u,p=$e.getVolume(s),y=p.voxelManager.getCompleteScalarDataArray(),m=2,w=new Float32Array(m*p.voxelManager.getScalarDataLength()),x=g.getDimensions();for(let b=0;bie);for(const te of j)for(let ie=0;ie{et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,_);const D=t.getActor(o),{element:I,id:P}=t;t.removeActors([o]);const O=await Uy({volumeId:o,blendMode:Zc.MAXIMUM_INTENSITY_BLEND,callback:({volumeActor:A})=>{D.callback&&D.callback({volumeActor:A,volumeId:f})}},I,P);t.addActor({actor:O,uid:o}),t.render()}),{uid:o,actor:i}}const{uuidv4:eB}=Rn;async function vve(t,e,r,n){const i=_e(t),{renderingEngine:o,viewport:a}=i,{id:s}=a,c=!0,l=!1,f=!0;if(a instanceof Tr){const d=yve(e,r);$e.getVolume(d)||await wve(e);let h=(n==null?void 0:n.blendMode)??Zc.MAXIMUM_INTENSITY_BLEND,g=h===Zc.LABELMAP_EDGE_PROJECTION_BLEND;if(g){const v=a.getVolumeId(),y=$e.getVolume(v),w=$e.getVolume(d).dimensions,x=y.dimensions;(w[0]!==x[0]||w[1]!==x[1]||w[2]!==x[2])&&(g=!1,h=Zc.MAXIMUM_INTENSITY_BLEND,console.debug("Dimensions mismatch - falling back to regular volume addition"))}const p=[{volumeId:d,visibility:c,representationUID:`${r}-${Vt.Labelmap}`,useIndependentComponents:g,blendMode:h}];if(!p[0].useIndependentComponents)await Uk(o,p,[s],l,f);else return await mve({viewport:a,volumeInputs:p,segmentationId:r})}else{const d=ru(a.id,r).map(h=>({imageId:h,representationUID:`${r}-${Vt.Labelmap}-${h}`}));Bk(o,d,[s])}To(r)}function yve(t,e){let{volumeId:r}=t;if(!r){r=eB();const n=Vn(e);n.representationData.Labelmap={...n.representationData.Labelmap,volumeId:r},t.volumeId=r,es(e)}return r}async function wve(t){const e=t;if(!(e.imageIds.length>0))throw new Error("cannot create labelmap, no imageIds found for the volume labelmap");return await Y4(t.volumeId||eB(),e.imageIds)}function xve(t,e){const r=_e(t),{viewport:n}=r;n.removeActors([l1e(n.id,e)])}function Od(t){return rr.getActiveSegmentation(t)}function Cve(t,e){rr.setActiveSegmentation(t,e)}function cu(t){return Od(t)}function Sve(t,e){Cve(t,e)}const Tve=Object.freeze(Object.defineProperty({__proto__:null,getActiveSegmentation:cu,setActiveSegmentation:Sve},Symbol.toStringTag,{value:"Module"}));function Da(t){const e=Vn(t);if(e){const r=Object.keys(e.segments).find(n=>e.segments[n].active);return r?Number(r):void 0}}const bC=255,_p=new Map;let DC=!1;function _ve(t,e,r=!1){const n=Wn(t);if(_p.forEach((o,a)=>{a.includes(e)&&_p.delete(a)}),!n)return;const{viewport:i}=n;xve(i.element,e),r&&i.render()}async function Eve(t,e){var s;const{segmentationId:r,config:n}=e,i=Vn(r);if(!i){console.warn("No segmentation found for segmentationId: ",r);return}let o=i.representationData[Vt.Labelmap],a=Tp(t.id,r);if(!o&&((s=jl())!=null&&s.canComputeRequestedRepresentation(r,Vt.Labelmap))&&!DC){DC=!0;const c=jl();if(o=await FE(r,Vt.Labelmap,()=>c.computeLabelmapData(r,{viewport:t}),()=>null,()=>{rr.processLabelmapRepresentationAddition(t.id,r),setTimeout(()=>{To(r)},0)}),!o)throw new Error(`No labelmap data found for segmentationId ${r}.`);DC=!1}else!o&&!jl()&&console.debug(`No labelmap data found for segmentationId ${r} and PolySeg add-on is not configured. Unable to convert from other representations to labelmap. Please register PolySeg using cornerstoneTools.init({ addons: { polySeg } }) to enable automatic conversion.`);if(o){if(t instanceof ur)a!=null&&a.length||await DI(t,o,r,n),a=Tp(t.id,r);else{const c=ru(t.id,r);if(!(c!=null&&c.length))return;a||await DI(t,o,r,n),a=Tp(t.id,r)}if(a!=null&&a.length)for(const c of a)bve(t.id,c,e)}}function bve(t,e,r){var C;const{segmentationId:n}=r,{cfun:i,ofun:o}=r.config,{colorLUTIndex:a}=r,s=cu(t),c=(s==null?void 0:s.segmentationId)===n,l=Ha.getStyle({viewportId:t,type:Vt.Labelmap,segmentationId:n}),f=Ha.getRenderInactiveSegmentations(t),u=xm(a),d=Math.min(256,u.length),{outlineWidth:h,renderOutline:g,outlineOpacity:p,activeSegmentOutlineWidthDelta:v}=bI(l,c),y=UE(t,{segmentationId:n,type:Vt.Labelmap});for(let S=0;So.getCurrentImageId()===r),!i||!i.length)?void 0:i[0].getImageData()}else if(e.startsWith("volumeId:")){const r=yl(e),n=sm(r);return!n||!n.length?void 0:n[0].getImageData()}else if(e.startsWith("videoId:")){const r=Ur(e),n=zy(r);return!n||!n.length?void 0:n[0].getImageData()}else throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){var n;const r=(n=e.getViewReferenceId)==null?void 0:n.call(e);if(r)return r;throw new Error("getTargetId: viewport must have a getViewReferenceId method")}undo(){this.doneEditMemo(),Fv.undo()}redo(){Fv.redo()}static createZoomPanMemo(e){const r={pan:e.getPan(),zoom:e.getZoom()},n={restoreMemo:()=>{const i=e.getPan(),o=e.getZoom();e.setZoom(r.zoom),e.setPan(r.pan),e.render(),r.pan=i,r.zoom=o}};return Fv.push(n),n}doneEditMemo(){var e,r;(r=(e=this.memo)==null?void 0:e.commitMemo)!=null&&r.call(e)&&Fv.push(this.memo),this.memo=null}};Lp.defaults={configuration:{strategies:{},defaultStrategy:void 0,activeStrategy:void 0,strategyOptions:{}}};let vi=Lp;vi.toolName="BaseTool";const{isEqual:Ive}=Rn,{EPSILON:Ove}=wf,Mve=1-Ove;function s8(t,e,r){var c;const{viewPlaneNormal:n}=e,i=t.filter(l=>{let f=l.metadata.viewPlaneNormal;if(!l.metadata.referencedImageId&&!f&&l.metadata.FrameOfReferenceUID){for(const d of l.data.handles.points){const h=Mn(Ke(),d,e.focalPoint),g=kt(h,e.viewPlaneNormal);if(!Ive(g,0))return!1}return l.metadata.viewPlaneNormal=e.viewPlaneNormal,l.metadata.cameraFocalPoint=e.focalPoint,!0}if(!f){const{referencedImageId:d}=l.metadata,{imageOrientationPatient:h}=wt("imagePlaneModule",d),g=Ft(h[0],h[1],h[2]),p=Ft(h[3],h[4],h[5]);f=Ke(),kn(f,g,p),l.metadata.viewPlaneNormal=f}const u=Math.abs(kt(n,f))>Mve;return f&&u});if(!i.length)return[];const o=r/2,{focalPoint:a}=e,s=[];for(const l of i){const f=l.data,u=f.handles.points[0]||((c=f.contour)==null?void 0:c.polyline[0]);if(!l.isVisible)continue;const d=Ke();if(!u){s.push(l);continue}Mn(d,a,u);const h=kt(d,n);Math.abs(h)n.isVisible?n.data.isCanvasAnnotation?!0:t.isReferenceViewable(n.metadata,r):!1)}function nB(t){if(t){if(t.data&&t.highlighted)return rc.Highlighted;if(Cm(t.annotationUID))return rc.Selected;if(si(t.annotationUID))return rc.Locked;if(t.data&&t.autoGenerated)return rc.AutoGenerated}return rc.Default}function Pve(t,e,r){const n=bh("textBoxFontSize",t,e,r),i=bh("textBoxFontFamily",t,e,r);return`${n}px ${i}`}const Rve=Object.freeze(Object.defineProperty({__proto__:null,getFont:Pve,getState:nB,style:bE},Symbol.toStringTag,{value:"Module"}));class _f extends vi{constructor(){super(...arguments),this.onImageSpacingCalibrated=e=>{const{element:r,imageId:n}=e.detail,i=Ur(n),o=yc();o.getFramesOfReference().forEach(s=>{const l=o.getAnnotations(s)[this.getToolName()];!l||!l.length||(l.forEach(f=>{var d;if(!((d=f.metadata)!=null&&d.referencedImageId))return;Ur(f.metadata.referencedImageId)===i&&(f.invalidated=!0,f.data.cachedStats={})}),Jh(r))})}}filterInteractableAnnotationsForElement(e,r){if(!(r!=null&&r.length))return[];const n=_e(e),{viewport:i}=n;return Dm(i,r)}createAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n,a=_e(i),{viewport:s}=a,c=s.getCamera(),{viewPlaneNormal:l,viewUp:f,position:u}=c,d=this.getReferencedImageId(s,o,l,f),h=s.getViewReference({points:[o]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...h,referencedImageId:d,viewUp:f,cameraPosition:u},data:{cachedStats:{},handles:{points:[],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}}}getReferencedImageId(e,r,n,i){const o=this.getTargetId(e);let a=o.split(/^[a-zA-Z]+:/)[1];if(e instanceof Tr){const s=yl(o),c=$e.getVolume(s);a=Zl(c,r,n)}return a}getStyle(e,r,n){return bh(e,r,nB(n),this.mode)}}_f.toolName="AnnotationDisplayTool";const{DefaultHistoryMemo:Lve}=fE,{PointsManager:Ave}=Rn;class cr extends _f{static createAnnotation(...e){let r={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.toolName},data:{text:"",handles:{points:new Array,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};for(const n of e)r=Ui(r,n);return r}static createAnnotationForViewport(e,...r){return this.createAnnotation({metadata:e.getViewReference()},...r)}static createAndAddAnnotation(e,...r){const n=this.createAnnotationForViewport(e,...r);ln(n,e.element),cn(n,e.element)}constructor(e,r){var n,i;super(e,r),this.mouseMoveCallback=(o,a)=>{if(!a)return!1;const{element:s,currentPoints:c}=o.detail,l=c.canvas;let f=!1;for(const u of a){if(si(u.annotationUID)||!Kr(u.annotationUID))continue;const{data:d}=u,h=d.handles?d.handles.activeHandleIndex:void 0,g=this._imagePointNearToolOrHandle(s,u,l,6),p=g&&!u.highlighted,v=!g&&u.highlighted;p||v?(u.highlighted=!u.highlighted,f=!0):d.handles&&d.handles.activeHandleIndex!==h&&(f=!0)}return f},this.isSuvScaled=cr.isSuvScaled,(n=e.configuration)!=null&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),(i=e.configuration)!=null&&i.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,r,n,i){const o=_e(e),{viewport:a}=o,{data:s}=r,{isCanvasAnnotation:c}=s,{points:l,textBox:f}=s.handles;if(f){const{worldBoundingBox:u}=f;if(u){const d={topLeft:a.worldToCanvas(u.topLeft),topRight:a.worldToCanvas(u.topRight),bottomLeft:a.worldToCanvas(u.bottomLeft),bottomRight:a.worldToCanvas(u.bottomRight)};if(n[0]>=d.topLeft[0]&&n[0]<=d.bottomRight[0]&&n[1]>=d.topLeft[1]&&n[1]<=d.bottomRight[1])return s.handles.activeHandleIndex=null,f}}for(let u=0;u<(l==null?void 0:l.length);u++){const d=l[u],h=c?d.slice(0,2):a.worldToCanvas(d);if(Sr(n,h)this.getStyle(p,n,r),{annotationUID:o}=r,a=Kr(o),s=si(o),c=i("lineWidth"),l=i("lineDash"),f=i("angleArcLineDash"),u=i("color"),d=i("markerSize"),h=i("shadow"),g=this.getLinkedTextBoxStyle(n,r);return{visibility:a,locked:s,color:u,lineWidth:c,lineDash:l,lineOpacity:1,fillColor:u,fillOpacity:0,shadow:h,textbox:g,markerSize:d,angleArcLineDash:f}}_imagePointNearToolOrHandle(e,r,n,i){if(this.getHandleNearImagePoint(e,r,n,i)||this.isPointNearTool(e,r,n,i,"mouse"))return!0}static createAnnotationState(e,r){const{data:n,annotationUID:i}=e,o={...n,cachedStats:{}};delete o.contour,delete o.spline;const a={annotationUID:i,data:structuredClone(o),deleting:r},s=n.contour;return s&&(a.data.contour={...s,polyline:null,pointsManager:Ave.create3(s.polyline.length,s.polyline)}),a}static createAnnotationMemo(e,r,n){if(!r)return;const{newAnnotation:i,deleting:o=i?!1:void 0}=n||{},{annotationUID:a}=r,s=cr.createAnnotationState(r,o),c={restoreMemo:()=>{const l=cr.createAnnotationState(r,o),{viewport:f}=_e(e)||{};if(f==null||f.setViewReference(r.metadata),s.deleting===!0){if(s.deleting=!1,Object.assign(r.data,s.data),r.data.contour){const d=r.data;d.contour.polyline=s.data.contour.pointsManager.points,delete s.data.contour.pointsManager,d.segmentation&&tu(r)}s.data=l.data,ln(r,e),na(r.annotationUID,!0),f==null||f.render();return}if(s.deleting===!1){s.deleting=!0,s.data=l.data,na(r.annotationUID),mn(r.annotationUID),f==null||f.render();return}const u=Hr(a);if(!u){console.warn("No current annotation");return}Object.assign(u.data,s.data),u.data.contour&&(u.data.contour.polyline=s.data.contour.pointsManager.points),s.data=l.data,u.invalidated=!0,cn(u,e,Qt.History)},id:a,operationType:"annotation"};return Lve.push(c),c}createMemo(e,r,n){this.memo||(this.memo=cr.createAnnotationMemo(e,r,n))}static hydrateBase(e,r,n,i={}){if(!r)return null;const{viewport:o}=r,a=o.getFrameOfReferenceUID(),s=o.getCamera(),c=i.viewplaneNormal??s.viewPlaneNormal,l=i.viewUp??s.viewUp,f=i.toolInstance||new e;let u,d=c,h=l;if(i.referencedImageId)u=i.referencedImageId,d=void 0,h=void 0;else if(o instanceof lr){const g=dE(n[0],o);g!==void 0&&(u=o.getImageIds()[g])}else if(o instanceof Tr)u=f.getReferencedImageId(o,n[0],c,l);else throw new Error("Unsupported viewport type");return{FrameOfReferenceUID:a,referencedImageId:u,viewPlaneNormal:d,viewUp:h,instance:f,viewport:o}}}cr.toolName="AnnotationTool";const{CalibrationTypes:kf}=Qa,Vf="px",Uv="voxels",rB=[1,2,3,4],Nve=["3,3","4,7"],kve=["4,3","4,7"],jS={0:"px",1:"percent",2:"dB",3:"cm",4:"seconds",5:"hertz",6:"dB/seconds",7:"cm/sec",8:"cm²",9:"cm²/s",12:"degrees"},Vve=.001,Pg="²",Ia=(t,e)=>{const{calibration:r,hasPixelSpacing:n}=t;let i=n?"mm":Vf;const o=n?"mm³":Uv;let a=i+Pg,s=1,c="";if(!r||!r.type&&!r.sequenceOfUltrasoundRegions)return{unit:i,areaUnit:a,scale:s,volumeUnit:o};if(r.type===kf.UNCALIBRATED)return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv};if(r.sequenceOfUltrasoundRegions){let f,u;if(Array.isArray(e)&&e.length===2)[f,u]=e;else if(typeof e=="function"){const y=e();f=y[0],u=y[1]}let d=r.sequenceOfUltrasoundRegions.filter(y=>f[0]>=y.regionLocationMinX0&&f[0]<=y.regionLocationMaxX1&&f[1]>=y.regionLocationMinY0&&f[1]<=y.regionLocationMaxY1&&u[0]>=y.regionLocationMinX0&&u[0]<=y.regionLocationMaxX1&&u[1]>=y.regionLocationMinY0&&u[1]<=y.regionLocationMaxY1);if(!(d!=null&&d.length))return{unit:i,areaUnit:a,scale:s,volumeUnit:o};if(d=d.filter(y=>rB.includes(y.regionDataType)&&Nve.includes(`${y.physicalUnitsXDirection},${y.physicalUnitsYDirection}`)),!d.length)return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv};const h=d[0],g=Math.abs(h.physicalDeltaX),p=Math.abs(h.physicalDeltaY);if(Zt(g,p,Vve))s=1/g,c="US Region",i=jS[h.physicalUnitsXDirection]||"unknown",a=i+Pg;else return{unit:Vf,areaUnit:Vf+Pg,scale:s,volumeUnit:Uv}}else r.scale&&(s=r.scale);return[kf.ERMF,kf.USER,kf.ERROR,kf.PROJECTION,kf.CALIBRATED,kf.UNKNOWN].includes(r==null?void 0:r.type)&&(c=r.type),{unit:i+(c?` ${c}`:""),areaUnit:a+(c?` ${c}`:""),scale:s,volumeUnit:o+(c?` ${c}`:"")}},g5=(t,e)=>{const[r]=e,{calibration:n}=t;let i=["raw"],o=[null],a="";if(!n||!n.type&&!n.sequenceOfUltrasoundRegions)return{units:i,values:o};if(n.sequenceOfUltrasoundRegions){const s=n.sequenceOfUltrasoundRegions.filter(p=>rB.includes(p.regionDataType)&&kve.includes(`${p.physicalUnitsXDirection},${p.physicalUnitsYDirection}`));if(!(s!=null&&s.length))return{units:i,values:o};const c=s.find(p=>r[0]>=p.regionLocationMinX0&&r[0]<=p.regionLocationMaxX1&&r[1]>=p.regionLocationMinY0&&r[1]<=p.regionLocationMaxY1);if(!c)return{units:i,values:o};const{referencePixelX0:l=0,referencePixelY0:f=0}=c,{physicalDeltaX:u,physicalDeltaY:d}=c,h=(r[1]-c.regionLocationMinY0-f)*d,g=(r[0]-c.regionLocationMinX0-l)*u;a="US Region",o=[g,h],i=[jS[c.physicalUnitsXDirection],jS[c.physicalUnitsYDirection]]}return{units:i,values:o,calibrationType:a}},c8=t=>{var e;return((e=t.calibration)==null?void 0:e.aspect)||1};function Ww(t,e,r,n){const i=Ke();kn(i,e,t);const o=Ft(...r),a=Ft(...n),s=Ke();qn(s,o,a);const c=ta(s);if(c<1e-4)return{worldWidth:0,worldHeight:0};const l=kt(s,i)/(c*ta(i)),u=Math.sqrt(1-l*l)*c,d=l*c;return{worldWidth:u,worldHeight:d}}function Zh(t,e,r,n){const i=Ke();kn(i,e,t);const o=Ft(...r),a=Ft(...n),s=Ke();qn(s,o,a);const c=ta(s);if(c<1e-4)return{worldWidth:0,worldHeight:0};const l=kt(s,i)/(c*ta(i)),u=Math.sqrt(1-l*l)*c,d=l*c;return{worldWidth:u,worldHeight:d}}function l8(t,e,r,n,i=.25){const o=u8(t,e,{targetVolumeId:r,stepSize:i});let a;for(const s of o){const c=t.getIntensityFromWorld(s),l=n(c,s);l&&(a=l)}return a}function u8(t,e,{targetVolumeId:r,stepSize:n}){const i=t.getCamera(),{viewPlaneNormal:o}=i,{spacingInNormalDirection:a}=jh(t,i,r),s=a*n||1,c=t.getBounds(),l=[];let f=[...e];for(;II(f,c);)l.push([...f]),f[0]+=o[0]*s,f[1]+=o[1]*s,f[2]+=o[2]*s;for(f=[...e];II(f,c);)l.push([...f]),f[0]-=o[0]*s,f[1]-=o[1]*s,f[2]-=o[2]*s;return l}const II=function(t,e){const[r,n,i,o,a,s]=e,c=10;return t[0]>r+c&&t[0]i+c&&t[1]a+c&&t[2]{const c=[Ft(r,n,i),Ft(o,n,i),Ft(r,a,i),Ft(o,a,i),Ft(r,n,s),Ft(o,n,s),Ft(r,a,s),Ft(o,a,s)],l=Ft(e[0],e[1],e[2]),f=Ft(t[0],t[1],t[2]),u=-kt(l,f);let d=null;for(const h of c){const g=kt(l,h)+u;if(d===null)d=Math.sign(g);else if(Math.sign(g)!==d)return!0}return!1},{EPSILON:Fve}=wf,Uve=1-Fve;function zw(t,e){const{viewPlaneNormal:r}=e,n=t.filter(i=>{let o=i.metadata.viewPlaneNormal;if(!o){const{referencedImageId:s}=i.metadata,{imageOrientationPatient:c}=wt("imagePlaneModule",s),l=Ft(c[0],c[1],c[2]),f=Ft(c[3],c[4],c[5]);o=Ke(),kn(o,l,f),i.metadata.viewPlaneNormal=o}const a=Math.abs(kt(r,o))>Uve;return o&&a});return n.length?n:[]}const Bve={filterAnnotationsWithinSlice:s8,getWorldWidthAndHeightFromCorners:Ww,getWorldWidthAndHeightFromTwoPoints:Zh,filterAnnotationsForDisplay:Dm,getPointInLineOfSightWithCriteria:l8,isPlaneIntersectingAABB:iB,filterAnnotationsWithinSamePlane:zw,getPointsInLineOfSight:u8},Gve=Object.freeze(Object.defineProperty({__proto__:null,default:Bve,filterAnnotationsForDisplay:Dm,filterAnnotationsWithinSamePlane:zw,filterAnnotationsWithinSlice:s8,getPointInLineOfSightWithCriteria:l8,getPointsInLineOfSight:u8,getWorldWidthAndHeightFromCorners:Ww,getWorldWidthAndHeightFromTwoPoints:Zh,isPlaneIntersectingAABB:iB},Symbol.toStringTag,{value:"Module"}));function Wo(t,e,r){let n=!0,i=!0;if(typeof t!="function")throw new TypeError("Expected a function");return VE(r)&&(n="leading"in r?!!r.leading:n,i="trailing"in r?!!r.trailing:i),Yh(t,e,{leading:n,trailing:i,maxWait:e})}function Wve(t){var e;return((e=t[0])==null?void 0:e.length)===3}function zve(t,e){if(!e||e.length===0||e.length===t.length)return t;const r=e[e.length-1]-e[0]+1,n=dC(e.map(o=>t[o][0])),i=dC(e.map(o=>t[o][1]));if(Wve(t)){const o=dC(e.map(a=>t[a][2]));return x9(Ig(n,r),Ig(i,r),Ig(o,r))}else return x9(Ig(n,r),Ig(i,r))}function $ve(t,e){const r=[],[n,i]=e,o=i-n+1,a=Math.floor(o/t);let s=0,c=Math.round((o-1)/(a-1)*s)+n;for(;c<=i;)r.push(c),s++,c=Math.round((o-1)/(a-1)*s)+n;return r}function HS(t,e,r,n){const i=r-e+1,o=Math.floor(n/100*i)??1,a=Math.floor(i/o)??1;if(isNaN(i)||!i||!a||i/a<2)return t;const s=Math.max(0,e),c=Math.min(t.length-1,r),l=t.slice(0,s),f=t.slice(c+1,t.length),u=$ve(a,[s,c]),d=zve(t,u);return[...l,...d,...f]}function $w(t,e){var n,i;return e!=null&&e.autoGenerated?!1:((n=t==null?void 0:t.smoothing)==null?void 0:n.smoothOnAdd)===!0||((i=t==null?void 0:t.smoothing)==null?void 0:i.smoothOnEdit)===!0}function jve(t,e){return ko(t,e)<.001}function Hve(t,e){return ko(t,e)===0}function Kve(t,e){for(let r=0;rjve(c,l)===!1,[o,a]=OI([b0(r,t.length,1),r,t],[b0(n,e.length,1),n,e],i,1),[s]=OI([b0(o,t.length,-1),o,t],[b0(a,e.length,-1),a,e],i,-1);return[o,s]}function jw(t,e,r){const{interpolation:n,smoothing:i}=t,o=e;if(n){const{knotsRatioPercentageOnAdd:a,knotsRatioPercentageOnEdit:s,smoothOnAdd:c=!1,smoothOnEdit:l=!1}=i,f=r?s:a;if(r?l:c){const[d,h]=r?qve(e,r):[0,e.length-1];return!e[d]||!e[h]?e:HS(e,d,h,f)}}return o}const Qh=t=>{if(t.shiftKey)return t.ctrlKey?Ki.ShiftCtrl:t.altKey?Ki.ShiftAlt:t.metaKey?Ki.ShiftMeta:Ki.Shift;if(t.ctrlKey)return t.altKey?Ki.CtrlAlt:t.metaKey?Ki.CtrlMeta:Ki.Ctrl;if(t.altKey)return t.metaKey&&Ki.AltMeta||Ki.Alt;if(t.metaKey)return Ki.Meta};function f8(t,e){const r=t[0],n=t[t.length-1],i=rn();ms(i,n[0]-r[0],n[1]-r[1]),Fl(i,i);const o=rn(),a=rn();ms(o,-i[1],i[0]),ms(a,i[1],-i[0]);const s=[(r[0]+n[0])/2,(r[1]+n[1])/2],c={dist:0,index:null};for(let u=0;uc.dist&&(c.dist=h,c.index=u)}return[t[c.index],s].map(e.canvasToWorld)}function Xve(t,e){const{viewport:r}=t,n=e.data.contour.polyline.map(r.worldToCanvas);return f8(n,r)}const{addCanvasPointsToArray:d8,pointsAreWithinCloseContourProximity:oB,getFirstLineSegmentIntersectionIndexes:aB,getSubPixelSpacingAndXYDirections:Yve}=Sf;function Jve(t,e,r){this.isDrawing=!0;const n=t.detail,{currentPoints:i,element:o}=n,a=i.canvas,s=_e(o),{viewport:c}=s,l=Qh(t.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:f,xDir:u,yDir:d}=Yve(c,this.configuration.subPixelResolution)||{};!f||!u||!d||(this.drawData={canvasPoints:[a],polylineIndex:0,contourHoleProcessingEnabled:l,newAnnotation:!0},this.commonData={annotation:e,viewportIdsToRender:r,spacing:f,xDir:u,yDir:d,movingTextBox:!1},Ye.isInteractingWithTool=!0,o.addEventListener(k.MOUSE_UP,this.mouseUpDrawCallback),o.addEventListener(k.MOUSE_DRAG,this.mouseDragDrawCallback),o.addEventListener(k.MOUSE_CLICK,this.mouseUpDrawCallback),o.addEventListener(k.TOUCH_END,this.mouseUpDrawCallback),o.addEventListener(k.TOUCH_DRAG,this.mouseDragDrawCallback),o.addEventListener(k.TOUCH_TAP,this.mouseUpDrawCallback),Gt(o))}function Zve(t){Ye.isInteractingWithTool=!1,t.removeEventListener(k.MOUSE_UP,this.mouseUpDrawCallback),t.removeEventListener(k.MOUSE_DRAG,this.mouseDragDrawCallback),t.removeEventListener(k.MOUSE_CLICK,this.mouseUpDrawCallback),t.removeEventListener(k.TOUCH_END,this.mouseUpDrawCallback),t.removeEventListener(k.TOUCH_DRAG,this.mouseDragDrawCallback),t.removeEventListener(k.TOUCH_TAP,this.mouseUpDrawCallback),Jt(t)}function Qve(t){const e=t.detail,{currentPoints:r,element:n}=e,i=r.world,o=r.canvas,a=_e(n),{viewport:s}=a,{annotation:c,viewportIdsToRender:l,xDir:f,yDir:u,spacing:d,movingTextBox:h}=this.commonData,{polylineIndex:g,canvasPoints:p,newAnnotation:v}=this.drawData;this.createMemo(n,c,{newAnnotation:v});const y=p[p.length-1],m=s.canvasToWorld(y),w=Ke();qn(w,i,m);const x=Math.abs(kt(w,f)),C=Math.abs(kt(w,u));if(!(x<=d[0]&&C<=d[1])){if(h){this.isDrawing=!1;const{deltaPoints:S}=e,T=S.world,{textBox:_}=c.data.handles,{worldPosition:E}=_;E[0]+=T[0],E[1]+=T[1],E[2]+=T[2],_.hasMoved=!0}else{const S=this.findCrossingIndexDuringCreate(t);if(S!==void 0)this.applyCreateOnCross(t,S);else{const T=d8(n,p,o,this.commonData);this.drawData.polylineIndex=g+T}c.invalidated=!0}Be(l),c.invalidated&&cn(c,n,Qt.HandlesUpdated)}}function e2e(t){const{allowOpenContours:e}=this.configuration,{canvasPoints:r,contourHoleProcessingEnabled:n}=this.drawData,i=r[0],o=r[r.length-1],a=t.detail,{element:s}=a;this.doneEditMemo(),this.drawData.newAnnotation=!1,e&&!oB(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:n}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:n})}function t2e(t,e){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:r}=this.drawData,{contourHoleProcessingEnabled:n,minPointsToSave:i}=e??{};if(i&&r.length=2)if(c.length>this.configuration.checkCanvasEditFallbackProximity){const u=c[0],d=[];for(let p=0;pp.distance-v.distance);const h=[d[0],d[1]],g=Math.min(h[0].index,h[1].index);this.editData.startCrossingIndex=g}else{const u=rn();Jr(u,c[1],c[0]),Fl(u,u);const d=6,h=[c[0][0]-u[0]*d,c[0][1]-u[1]*d],g=Md(l,h,c[0],e);if(g){const p=[h];u2e(n,p,c[0],this.commonData),c.unshift(...p),this.removePointsUpUntilFirstCrossing(e),this.editData.editIndex=c.length-1,this.editData.startCrossingIndex=g[0]}}}function d2e(t){const{editCanvasPoints:e,prevCanvasPoints:r}=this.editData;let n=0;for(let i=0;i0;n--){const i=[r[n],r[n-1]],o=!!Md(e,i[0],i[1],t);if(r.pop(),o)break}}function p2e(){const{editCanvasPoints:t,prevCanvasPoints:e,startCrossingIndex:r}=this.editData;if(r===void 0)return;const n=t[t.length-1],i=[];for(let a=0;aa.distance-s.distance);const o=t.slice(0,-1);for(let a=0;a1&&this.checkForFirstCrossing(t,!0),this.editData.snapIndex=this.findSnapIndex(),this.editData.snapIndex===-1){this.finishEditAndStartNewEdit(t);return}this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(t),g!==void 0&&this.checkForSecondCrossing(t,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(t)),Be(c)}function S2e(t){const e=t.detail,{element:r}=e,n=_e(r),{viewport:i,renderingEngine:o}=n,{annotation:a,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:c,editCanvasPoints:l}=this.editData;wc(a,{points:c,closed:!0,targetWindingDirection:ra.Clockwise},i),a.autoGenerated&&(a.autoGenerated=!1),cn(a,r);const f=l.pop();this.editData={prevCanvasPoints:c,editCanvasPoints:[f],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0,annotation:a},Be(s)}function T2e(t){const{prevCanvasPoints:e,editCanvasPoints:r,startCrossingIndex:n,snapIndex:i}=this.editData;if(n===void 0||i===void 0)return;const o=t.detail,{element:a}=o,s=[...r];sB(a,s,e[i],this.commonData),s.length>r.length&&s.pop();let c,l;n>i?(c=i,l=n):(c=n,l=i);const f=Sr(e[c],s[0]),u=Sr(e[c],s[s.length-1]),d=Sr(e[l],s[0]),h=Sr(e[l],s[s.length-1]),g=[];for(let C=0;C=0;C--){const S=s[C];g.push([S[0],S[1]])}for(let C=l;C=0;C--){const S=s[C];y.push([S[0],S[1]])}const m=MI(g),w=MI(y);return m>w?g:y}function _2e(t){const e=t.detail,{element:r}=e;this.completeClosedContourEdit(r)}function E2e(t){var s;const e=_e(t),{viewport:r}=e,{annotation:n,viewportIdsToRender:i}=this.commonData;this.doneEditMemo();const{fusedCanvasPoints:o,prevCanvasPoints:a}=this.editData;if(o){const c=$w(this.configuration,n)?jw(this.configuration,o,a):o,l=((s=this.configuration)==null?void 0:s.decimate)||{};wc(n,{points:c,closed:!0,targetWindingDirection:ra.Clockwise},r,{decimate:{enabled:!!l.enabled,epsilon:l.epsilon}}),n.autoGenerated&&(n.autoGenerated=!1),cn(n,t)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,Be(i),this.deactivateClosedContourEdit(t)}function b2e(t){this.completeClosedContourEdit(t)}function D2e(t){t.activateClosedContourEdit=w2e.bind(t),t.deactivateClosedContourEdit=x2e.bind(t),t.mouseDragClosedContourEditCallback=C2e.bind(t),t.mouseUpClosedContourEditCallback=_2e.bind(t),t.finishEditAndStartNewEdit=S2e.bind(t),t.fuseEditPointsWithClosedContour=T2e.bind(t),t.cancelClosedContourEdit=b2e.bind(t),t.completeClosedContourEdit=E2e.bind(t)}const{addCanvasPointsToArray:cB,getSubPixelSpacingAndXYDirections:I2e}=Sf;function O2e(t,e,r){this.isEditingOpen=!0;const n=t.detail,{currentPoints:i,element:o}=n,a=i.canvas,s=_e(o),{viewport:c}=s;this.doneEditMemo();const l=e.data.contour.polyline.map(c.worldToCanvas),{spacing:f,xDir:u,yDir:d}=I2e(c,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:l,editCanvasPoints:[a],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:e,viewportIdsToRender:r,spacing:f,xDir:u,yDir:d,movingTextBox:!1},Ye.isInteractingWithTool=!0,o.addEventListener(k.MOUSE_UP,this.mouseUpOpenContourEditCallback),o.addEventListener(k.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),o.addEventListener(k.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),o.addEventListener(k.TOUCH_END,this.mouseUpOpenContourEditCallback),o.addEventListener(k.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),o.addEventListener(k.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Gt(o)}function M2e(t){Ye.isInteractingWithTool=!1,t.removeEventListener(k.MOUSE_UP,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(k.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.TOUCH_END,this.mouseUpOpenContourEditCallback),t.removeEventListener(k.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),t.removeEventListener(k.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Jt(t)}function P2e(t){const e=t.detail,{currentPoints:r,element:n}=e,i=r.world,o=r.canvas,a=_e(n),{viewport:s}=a,{viewportIdsToRender:c,xDir:l,yDir:f,spacing:u}=this.commonData,{editIndex:d,editCanvasPoints:h,startCrossingIndex:g}=this.editData,p=h[h.length-1],v=s.canvasToWorld(p),y=Ke();this.createMemo(n,this.commonData.annotation),qn(y,i,v);const m=Math.abs(kt(y,l)),w=Math.abs(kt(y,f));if(m<=u[0]&&w<=u[1])return;g!==void 0&&this.checkAndRemoveCrossesOnEditLine(t);const x=cB(n,h,o,this.commonData),C=d+x;this.editData.editIndex=C,g===void 0&&h.length>1&&this.checkForFirstCrossing(t,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(t),g!==void 0&&this.checkForSecondCrossing(t,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(t)):this.checkIfShouldOverwriteAnEnd(t)&&this.openContourEditOverwriteEnd(t),Be(c)}function R2e(t){const e=t.detail,{element:r}=e,n=_e(r),{viewport:i}=n,{annotation:o,viewportIdsToRender:a}=this.commonData,s=this.fuseEditPointsForOpenContourEndEdit();wc(o,{points:s,closed:!1},i);const c=o.data.contour.polyline;o.data.handles.points=[c[0],c[c.length-1]],o.data.handles.activeHandleIndex=1,cn(o,r),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.doneEditMemo(),this.deactivateOpenContourEdit(r),this.activateOpenContourEndEdit(t,o,a,null)}function L2e(t){const e=t.detail,{currentPoints:r,lastPoints:n}=e,i=r.canvas,o=n.canvas,{snapIndex:a,prevCanvasPoints:s,startCrossingIndex:c}=this.editData;if(c===void 0||a===void 0)return!1;if(a===-1)return!0;if(a!==0&&a!==s.length-1)return!1;const l=i,f=o,u=s[a],d=rn(),h=rn();ms(d,l[0]-f[0],l[1]-f[1]),ms(h,l[0]-u[0],l[1]-u[1]);const g=a4(d,h),p=Math.sqrt(d[0]*d[0]+d[1]*d[1]),v=Math.sqrt(h[0]*h[0]+h[1]*h[1]);return Math.acos(g/(p*v))=n;s--){const c=e[s];i.push([c[0],c[1]])}else for(let s=0;s=0;s--){const c=r[s];i.push([c[0],c[1]])}return i}function N2e(t){const{prevCanvasPoints:e,editCanvasPoints:r,startCrossingIndex:n,snapIndex:i}=this.editData;if(n===void 0||i===void 0)return;const o=t.detail,{element:a}=o,s=[...r];cB(a,s,e[i],this.commonData),s.length>r.length&&s.pop();let c,l;n>i?(c=i,l=n):(c=n,l=i);const f=Sr(e[c],s[0]),u=Sr(e[c],s[s.length-1]),d=Sr(e[l],s[0]),h=Sr(e[l],s[s.length-1]),g=[];for(let y=0;y=0;y--){const m=s[y];g.push([m[0],m[1]])}for(let y=l;yHr(r).data.contour.polyline)}function Im(t,e){const r=lB(t),n=[];return r.forEach(i=>{const o=i.length,a=new Array(o);for(let s=0;sn.worldToCanvas(l)),a=Im(r,n),s=[o,...a];Hl(e,r.annotationUID,"1",s,i)}function X2e(t,e,r){var c;const{viewport:n}=t,i=this._getRenderingOptions(t,r),o=r.data.contour.polyline.map(l=>n.worldToCanvas(l));gc(e,r.annotationUID,"1",o,i);const s=r.data.handles.activeHandleIndex;if(((c=this.configuration.alwaysRenderOpenContourHandles)==null?void 0:c.enabled)===!0){const l=this.configuration.alwaysRenderOpenContourHandles.radius,f="0",u=[o[0],o[o.length-1]];s===0?u.shift():s===1&&u.pop(),or(e,r.annotationUID,f,u,{color:i.color,handleRadius:l})}if(s!==null){const l="1",f=s===0?0:o.length-1,u=o[f];or(e,r.annotationUID,l,[u],{color:i.color})}}function Y2e(t,e,r){const{viewport:n}=t,{openUShapeContourVectorToPeak:i}=r.data,{polyline:o}=r.data.contour;if(this.renderOpenContour(t,e,r),!i)return;const a=n.worldToCanvas(o[0]),s=n.worldToCanvas(o[o.length-1]),c=[n.worldToCanvas(i[0]),n.worldToCanvas(i[1])],l=this._getRenderingOptions(t,r);gc(e,r.annotationUID,"first-to-last",[a,s],{color:l.color,width:l.width,closePath:!1,lineDash:"2,2"}),gc(e,r.annotationUID,"midpoint-to-open-contour",[c[0],c[1]],{color:l.color,width:l.width,closePath:!1,lineDash:"2,2"})}function J2e(t,e,r){const n=this._getRenderingOptions(t,r),{allowOpenContours:i}=this.configuration,{canvasPoints:o}=this.drawData;if(n.closePath=!1,gc(e,r.annotationUID,"1",o,n),i){const a=o[0],s=o[o.length-1];$2e(a,s,this.configuration.closeContourProximity)?gc(e,r.annotationUID,"2",[s,a],n):or(e,r.annotationUID,"0",[a],{color:n.color,handleRadius:2})}}function Z2e(t,e,r){const{viewport:n}=t,{fusedCanvasPoints:i}=this.editData;if(i===void 0){this.renderClosedContour(t,e,r);return}const o=Im(r,n),a=[i,...o],s=this._getRenderingOptions(t,r),c="preview-1";r.parentAnnotationUID&&s.fillOpacity&&(s.fillOpacity=0),Hl(e,r.annotationUID,c,a,s)}function Q2e(t,e,r){const{fusedCanvasPoints:n}=this.editData;if(n===void 0){this.renderOpenContour(t,e,r);return}const i=this._getRenderingOptions(t,r);gc(e,r.annotationUID,"preview-1",n,i)}function eye(t,e,r){if(r.parentAnnotationUID)return;const{viewport:n}=t,i=this._getRenderingOptions(t,r),o=r.data.contour.polyline.map(g=>n.worldToCanvas(g)),a=Im(r,n),s="1",c=o[0],l=6,f=100,u=[];for(let g=0;g0}else if(t instanceof lr){const{preScale:r}=t.getImageData()||{};return!!(r!=null&&r.scaled)}else return!1}function KS(t,e){let r=0;for(let n=0;nthis.moveAnnotation(i,r))}updateContourPolyline(e,r,n,i){var a;const o=((a=this.configuration)==null?void 0:a.decimate)||{};wc(e,r,n,{decimate:{enabled:!!o.enabled,epsilon:o.epsilon},updateWindingDirection:i==null?void 0:i.updateWindingDirection})}getPolylinePoints(e){var r;return((r=e.data.contour)==null?void 0:r.polyline)??e.data.polyline}renderAnnotationInstance(e){const{enabledElement:r,annotationStyle:n,svgDrawingHelper:i}=e,o=e.annotation;if(o.parentAnnotationUID)return;const{annotationUID:a}=o,{viewport:s}=r,{worldToCanvas:c}=s,l=this.getPolylinePoints(o).map(y=>c(y)),{lineWidth:f,lineDash:u,color:d,fillColor:h,fillOpacity:g}=n,p=Im(o,s),v=[l,...p];return Hl(i,a,"contourPolyline",v,{color:d,lineDash:u,lineWidth:Math.max(.1,f),fillColor:h,fillOpacity:g}),!0}}class oye{constructor(){this.annotationUIDs=new Set,this._isVisible=!0,this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(e=!0,r,n){this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach(i=>{const o=Hr(i);if(!o){this.annotationUIDs.delete(i);return}if(o.isVisible===e||!e&&(n==null?void 0:n(i))===!1)return;o.isVisible=e;const a={...r,annotation:o};ut(et,k.ANNOTATION_MODIFIED,a)}))}get isVisible(){return this._isVisible}findNearby(e,r){const n=[...this.annotationUIDs];if(n.length===0)return null;if(!e)return n[r===1?0:n.length-1];const i=n.indexOf(e);return i===-1||i+r<0||i+r>=n.length?null:n[i+r]}add(...e){e.forEach(r=>this.annotationUIDs.add(r))}remove(...e){e.forEach(r=>this.annotationUIDs.delete(r))}clear(){this.annotationUIDs.clear()}}const mr={...dpe,...cpe,resetAnnotationManager:B1e},aye=Object.freeze(Object.defineProperty({__proto__:null,AnnotationGroup:oye,FrameOfReferenceSpecificAnnotationManager:fU,config:Rve,locking:O1e,selection:L1e,state:mr,visibility:F1e},Symbol.toStringTag,{value:"Module"})),PI="PlanarFreehandContourSegmentationTool";function h8(t,e=[]){const{viewport:r,sliceData:n,annotation:i}=t,o=new Map,{toolName:a,originalToolName:s}=i.metadata,c=s||a,l=(hn(c,r.element)||[]).filter(f=>!f.metadata.originalToolName||f.metadata.originalToolName===c);if(c!==PI){const f=hn(PI,r.element);f!=null&&f.length&&f.forEach(u=>{const{metadata:d}=u;d.originalToolName===c&&d.originalToolName!==d.toolName&&l.push(u)})}if(!(l!=null&&l.length))return o;for(let f=0;fh.metadata.sliceIndex===f);if(!(u!=null&&u.length))continue;const d=u.filter(h=>e.every(g=>{const p=g.parentKey?g.parentKey(h):h,v=p==null?void 0:p[g.key];return Array.isArray(v)?v.every((y,m)=>y===g.value[m]):v===g.value}));d.length&&o.set(f,d)}return o}function sye(t,e){const r=h8(t,e),n=[];if(!(r!=null&&r.size))return n;for(const i of r.values())i.forEach(o=>{n.push(o)});return n}function uB(t,e,r){const n=Ui({data:{},metadata:{}},r);return Object.assign(n,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(n.data,{handles:{points:e.points||e||[],interpolationSources:e.sources,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},contour:{...r.data.contour,polyline:t}}),n}function cye(t,e){const r=h8(e,[{key:"interpolationUID",value:e.interpolationUID}]),n=lye(r);if(!n){console.warn("No annotations found to interpolate",r);return}const i=uye(r,t.annotationUID),o=[];for(let a=n[0]+1;a=e[0];o--){const a=r.get(o);if(a!=null&&a.length){if(a[0].autoGenerated)continue;a.length>1&&(i=!1),n.push(o);break}}if(!(!i||!n.length)){for(let o=t+1;o<=e[1];o++){const a=r.get(o);if(a!=null&&a.length){if(a[0].autoGenerated)continue;a.length>1&&(i=!1),n.push(o);break}}if(!(!i||n.length<2))return n}}const{PointsManager:RI}=Rn;function gye(t,e=12){const r=RI.create3(e);r.sources=[];const{sources:n}=r,{length:i,sources:o=[]}=t,a=5;if(in.push(RI.create3(e)));const c=pye(t,a),l=mye(c,e),f=[];if((l==null?void 0:l.length)>2){let u=-1;const d=s/3;l.forEach(p=>{const[v,,y]=p,m=Math.ceil((v+y)/2);y-u2*d?(o0(f,u,v,s,i),u=o0(f,v,m,s,i)):u=o0(f,u,m,s,i),y-u>d&&(u=o0(f,u,y,s,i)))});const h=f[0];qS(h+i-u,i)>2*d&&o0(f,u,h-d,s,i)}else{const u=Math.floor(i/e);o0(f,-1,i-u,u,i)}return f.forEach(u=>{const d=t.getPointArray(u);r.push(d),o.forEach((h,g)=>n[g].push(h.getPoint(u)))}),r}function pye(t,e=6){const{length:r}=t,n=Ke(),i=Ke(),o=new Float32Array(r);for(let a=0;a{try{e&&(r.isInterpolationUpdate=!0,r.autoGenerated=!1),wye(t)}finally{e&&(r.autoGenerated=!0)}})}function wye(t){const{annotation:e}=t;yye(e);const{interpolationData:r,interpolationList:n}=cye(e,t)||{};if(!r||!n)return;const i={toolName:e.metadata.toolName,toolType:e.metadata.toolName,viewport:t.viewport};for(let l=0;ls.x.length,n)})}function Cye(t,e,r,n,i,o,a){const[s,c]=n,l=(r-s)/(c-s),f=i.get(s)[0],u=i.get(c)[0],d=_ye(t,e,l,o),h=l>.5?u:f,g=gye(d);i.has(r)?Tye(d,g,r,h,a):Sye(d,g,r,h,a)}function Sye(t,e,r,n,i){var f;const o=t.points,{viewport:a}=i,s=uB(o,e,n),c=a.getViewReference({sliceIndex:r});if(!c)throw new Error(`Can't find slice ${r}`);Object.assign(s.metadata,c),mr.addAnnotation(s,a.element),(f=n.onInterpolationComplete)==null||f.call(n,s,n);const{parentAnnotationUID:l}=n;if(l){const u=mr.getAnnotation(l),d=fB(u,r,i);Uw(a,d,s)}}function fB(t,e,r){const{viewport:n}=r,i=mr.getAnnotations(t.metadata.toolName,n.element);for(let o=0;o!f.autoGenerated)||(s=o||s===n||c.forEach(l=>{l.autoGenerated&&(mr.removeAnnotation(l.annotationUID),a.push(l))});if(a.length){const s={annotations:a,element:t.viewport.element,viewportId:t.viewport.id,renderingEngineId:t.viewport.getRenderingEngine().id};ut(t.viewport.element,k.INTERPOLATED_ANNOTATIONS_REMOVED,s)}if(i>=0&&o{var h;const r=e.detail.annotation;if(!(r!=null&&r.metadata))return;const{toolName:n,originalToolName:i}=r.metadata;if(!fs.toolNames.includes(n)&&!fs.toolNames.includes(i))return;const o=F2(r);if(!o){console.warn("Unable to find viewport for",r);return}const a=IC(o),s={viewport:o,sliceData:a,annotation:r,interpolationUID:r.interpolationUID},c=!!r.interpolationUID;if(r.autoGenerated=!1,c){GI(s),V2(s);return}const l=[{key:"segmentIndex",value:r.data.segmentation.segmentIndex,parentKey:g=>g.data.segmentation},{key:"viewPlaneNormal",value:r.metadata.viewPlaneNormal,parentKey:g=>g.metadata},{key:"viewUp",value:r.metadata.viewUp,parentKey:g=>g.metadata}];let f=sye(s,l);const{sliceIndex:u}=r.metadata,d=new Set;f.forEach(g=>{if(g.interpolationCompleted||g.metadata.sliceIndex===u){const{interpolationUID:p}=g;d.add(p)}}),f=f.filter(g=>!d.has(g.interpolationUID)),r.interpolationUID=((h=f[0])==null?void 0:h.interpolationUID)||Iye(),s.interpolationUID=r.interpolationUID,V2(s)},fs.handleAnnotationUpdate=e=>{const r=e.detail.annotation,{changeType:n=Qt.HandlesUpdated}=e.detail;if(!(r!=null&&r.metadata))return;const{toolName:i,originalToolName:o}=r.metadata;if(!fs.toolNames.includes(i)&&!fs.toolNames.includes(o)||!Oye.includes(n))return;const a=F2(r);if(!a){console.warn("Unable to find matching viewport for annotation interpolation",r);return}r.autoGenerated&&(tu(r),r.autoGenerated=!1);const s=IC(a),c={viewport:a,sliceData:s,annotation:r,interpolationUID:r.interpolationUID,isInterpolationUpdate:n===Qt.InterpolationUpdated};V2(c)},fs.handleAnnotationDelete=e=>{const r=e.detail.annotation;if(!(r!=null&&r.metadata))return;const{toolName:n}=r.metadata;if(!fs.toolNames.includes(n)||r.autoGenerated)return;const i=F2(r);if(!i){console.warn("No viewport, can't delete interpolated results",r);return}const o=IC(i),a={viewport:i,sliceData:o,annotation:r,interpolationUID:r.interpolationUID};r.autoGenerated=!1,GI(a)};let ol=fs;function IC(t){return{numberOfSlices:t.getNumberOfSlices(),imageIndex:t.getCurrentImageIdIndex()}}function dB(t){t.forEach(e=>{const r=ni(e);if(!r){console.warn(`ToolGroup not available for ${e}`);return}r.getViewportsInfo().forEach(i=>{const{renderingEngineId:o,viewportId:a}=i,s=jr(o);if(!s){console.warn(`RenderingEngine not available for ${o}`);return}const c=s.getViewport(a);Jh(c.element)})})}function eg(t){const n=rr.getState().viewportSegRepresentations;return Object.entries(n).filter(([,o])=>o.some(a=>a.segmentationId===t)).map(([o])=>o)}function Mye(t,e){const r=Vn(t);if(!r)throw new Error(`No segmentation state found for ${t}`);const{segments:n}=r;return n[e].locked}function Pye(t,e,r=!0){const n=Vn(t);if(!n)throw new Error(`No segmentation state found for ${t}`);const{segments:i}=n;i[e].locked=r,es(t)}function zd(t){const e=Vn(t);if(!e)throw new Error(`No segmentation state found for ${t}`);const{segments:r}=e;return Object.keys(r).filter(i=>r[i].locked).map(i=>parseInt(i))}const Rye=Object.freeze(Object.defineProperty({__proto__:null,getLockedSegmentIndices:zd,isSegmentIndexLocked:Mye,setSegmentIndexLocked:Pye},Symbol.toStringTag,{value:"Module"}));function hB(){return rr.getNextColorLUTIndex()}const p5=[[0,0,0,0],[221,84,84,255],[77,228,121,255],[166,70,235,255],[189,180,116,255],[109,182,196,255],[204,101,157,255],[123,211,94,255],[93,87,218,255],[225,128,80,255],[73,232,172,255],[181,119,186,255],[176,193,112,255],[105,153,200,255],[208,97,120,255],[90,215,101,255],[135,83,222,255],[229,178,76,255],[122,183,181,255],[190,115,171,255],[149,197,108,255],[100,118,205,255],[212,108,93,255],[86,219,141,255],[183,79,226,255],[233,233,72,255],[118,167,187,255],[194,111,146,255],[116,201,104,255],[115,96,209,255],[216,147,89,255],[82,223,188,255],[230,75,224,255],[163,184,121,255],[114,143,191,255],[198,107,114,255],[99,206,122,255],[153,92,213,255],[220,192,85,255],[78,215,227,255],[234,71,173,255],[141,188,117,255],[110,113,195,255],[202,128,103,255],[95,210,157,255],[195,88,217,255],[206,224,81,255],[74,166,231,255],[185,120,139,255],[113,192,113,255],[133,106,199,255],[207,162,98,255],[91,214,198,255],[221,84,198,255],[159,228,77,255],[70,111,235,255],[189,119,116,255],[109,196,138,255],[165,101,204,255],[211,201,94,255],[87,191,218,255],[225,80,153,255],[106,232,73,255],[124,119,186,255],[193,142,112,255],[105,200,168,255],[203,97,208,255],[184,215,90,255],[83,147,222,255],[229,76,101,255],[122,183,130,255],[146,115,190,255],[197,171,108,255],[100,205,205,255],[212,93,177,255],[141,219,86,255],[79,97,226,255],[233,99,72,255],[118,187,150,255],[173,111,194,255],[197,201,104,255],[96,171,209,255],[216,89,137,255],[94,223,82,255],[107,75,230,255],[184,153,121,255],[114,191,175,255],[198,107,191,255],[166,206,99,255],[92,132,213,255],[220,85,91,255],[78,227,115,255],[159,71,234,255],[188,176,117,255],[110,185,195,255],[202,103,161,255],[129,210,95,255],[88,88,217,255],[224,123,81,255],[74,231,166,255],[177,120,185,255],[179,192,113,255],[106,156,199,255],[207,98,125,255],[91,214,96,255],[130,84,221,255],[228,171,77,255],[70,235,221,255],[189,116,174,255],[153,196,109,255],[101,123,204,255],[211,104,94,255],[87,218,136,255],[177,80,225,255],[232,225,73,255],[119,169,186,255],[193,112,149,255],[121,200,105,255],[111,97,208,255],[215,142,90,255],[83,222,181,255],[229,76,229,255],[165,183,122,255],[115,146,190,255],[197,108,119,255],[100,205,118,255],[148,93,212,255],[219,186,86,255],[79,220,226,255],[233,72,179,255],[144,187,118,255],[111,118,194,255],[201,124,104,255],[96,209,153,255],[189,89,216,255],[211,223,82,255],[75,172,230,255],[184,121,142,255],[117,191,114,255],[130,107,198,255],[206,157,99,255],[92,213,193,255],[220,85,203,255],[165,227,78,255],[71,118,234,255],[188,117,117,255],[110,195,135,255],[161,103,202,255],[210,195,95,255],[88,195,217,255],[224,81,158,255],[113,231,74,255],[123,120,185,255],[192,139,113,255],[106,199,164,255],[198,98,207,255],[188,214,91,255],[84,153,221,255],[228,77,108,255],[70,235,84,255],[143,116,189,255],[196,167,109,255],[101,204,199,255],[211,94,182,255],[147,218,87,255],[80,104,225,255],[232,93,73,255],[119,186,147,255],[170,112,193,255],[200,200,105,255],[97,175,208,255],[215,90,142,255],[100,222,83,255],[101,76,229,255],[183,150,122,255],[115,190,171,255],[197,108,194,255],[170,205,100,255],[93,138,212,255],[219,86,97,255],[79,226,110,255],[153,72,233,255],[187,173,118,255],[111,187,194,255],[201,104,165,255],[134,209,96,255],[89,95,216,255],[223,117,82,255],[75,230,159,255],[174,121,184,255],[182,191,114,255],[107,160,198,255],[206,99,130,255],[92,213,92,255],[124,85,220,255],[227,165,78,255],[71,234,214,255],[188,117,176,255],[156,195,110,255],[103,128,202,255],[210,100,95,255],[88,217,131,255],[170,81,224,255],[231,218,74,255],[120,172,185,255],[192,113,153,255],[125,199,106,255],[107,98,207,255],[214,137,91,255],[84,221,175,255],[222,77,228,255],[194,235,70,255],[116,149,189,255],[196,109,123,255],[101,204,114,255],[143,94,211,255],[218,180,87,255],[80,225,225,255],[232,73,186,255],[147,186,119,255],[112,122,193,255],[200,121,105,255],[97,208,148,255],[184,90,215,255],[216,222,83,255],[76,178,229,255],[183,122,145,255],[121,190,115,255],[126,108,197,255],[205,153,100,255],[93,212,187,255],[219,86,208,255],[171,226,79,255],[72,126,233,255],[187,118,121,255],[111,194,132,255],[157,104,201,255],[209,190,96,255],[89,200,216,255],[223,82,164,255],[120,230,75,255],[121,121,184,255],[191,136,114,255],[107,198,160,255],[192,99,206,255],[193,213,92,255],[85,158,220,255],[227,78,115,255],[71,234,78,255],[141,117,188,255],[195,163,110,255],[103,202,194,255],[210,95,186,255],[153,217,88,255],[81,111,224,255]];function Ep(t,e){const r=rr,n=e??hB();let i=[...t];if(Zt(i[0],[0,0,0,0])||(console.warn("addColorLUT: [0, 0, 0, 0] color is not provided for the background color (segmentIndex =0), automatically adding it"),i=[[0,0,0,0],...i]),i=i.map(o=>o.length===3?[o[0],o[1],o[2],255]:o),i.length<255){const o=p5.slice(i.length);i=[...i,...o]}return r.addColorLUT(i,n),n}function Lye(t,e){if(!t)throw new Error("addColorLUT: colorLUT is required");return Ep(t,e)}function Aye(t,e,r){if(!xm(r))throw new Error(`setColorLUT: could not find colorLUT with index ${r}`);const n=Ea(t,{segmentationId:e});if(!n)throw new Error(`viewport specific state for viewport ${t} does not exist`);n.forEach(i=>{i.colorLUTIndex=r}),qc(t,e)}function iu(t,e,r){const n=Ea(t,{segmentationId:e});if(!n||n.length===0)return null;const i=n[0],{colorLUTIndex:o}=i,a=xm(o);let s=a[r];if(!s){if(typeof r!="number")return console.warn(`Can't create colour for LUT index ${r}`),null;s=a[r]=[0,0,0,0]}return s}function gB(t,e,r,n){const i=iu(t,e,r);for(let o=0;oPr(c).id);dB(s)}return i}_getContourSegmentationStyle(e){const r=e.annotation,{segmentationId:n,segmentIndex:i}=r.data.segmentation,{viewportId:o}=e.styleSpecifier,a=Ea(o,{segmentationId:n});if(!(a!=null&&a.length))return{};a.length>1?a.find(v=>v.segmentationId===n&&v.type===Vt.Contour):a[0];const{autoGenerated:s}=r,l=zd(n).includes(i),{color:f,fillColor:u,lineWidth:d,fillOpacity:h,lineDash:g,visibility:p}=mB({segmentationId:n,segmentIndex:i,viewportId:o,autoGenerated:s});return{color:f,fillColor:u,lineWidth:d,fillOpacity:h,lineDash:g,textbox:{color:f},visibility:p,locked:l}}};Q8.PreviewSegmentIndex=255;let L1=Q8;function vB(t,e){const r=wt("generalSeriesModule",t);return uu(r.modality,t,e)}function uu(t,e,r){return t==="CT"?"HU":t==="PT"?kye(e,r):""}function kye(t,e){if(!e.isPreScaled)return"raw";if(e.isSuvScaled)return"SUV";const r=wt("generalSeriesModule",t);if((r==null?void 0:r.modality)==="PT"){const n=wt("petSeriesModule",t);return(n==null?void 0:n.units)||"unitless"}return"unknown"}const{pointCanProjectOnLine:WI}=Sf,{EPSILON:Vye}=wf,Fye=1-Vye,eb=class eb extends L1{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:Ki.Shift,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,makeClockWise:!0,subPixelResolution:4,smoothing:{smoothOnAdd:!1,smoothOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},interpolation:{enabled:!1,onInterpolationComplete:null},decimate:{enabled:!1,epsilon:.1},displayOnePointAsCrosshairs:!1,calculateStats:!0,getTextLines:Uye,statsCalculator:dl}}){super(e,r),this.isDrawing=!1,this.isEditingClosed=!1,this.isEditingOpen=!1,this.addNewAnnotation=n=>{const i=n.detail,{element:o}=i,a=this.createAnnotation(n);this.addAnnotation(a,o);const s=At(o,this.getToolName());return this.activateDraw(n,a,s),n.preventDefault(),Be(s),a},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,c=At(s,this.getToolName());this.activateOpenContourEndEdit(n,i,c,o)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o,s=At(a,this.getToolName());i.data.contour.closed?this.activateClosedContourEdit(n,i,s):this.activateOpenContourEdit(n,i,s),n.preventDefault()},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{polyline:l}=i.data.contour;let f=c.worldToCanvas(l[0]);for(let h=1;h{const i=this.isDrawing,o=this.isEditingOpen,a=this.isEditingClosed;i?this.cancelDrawing(n):o?this.cancelOpenContourEdit(n):a&&this.cancelClosedContourEdit(n)},this._calculateCachedStats=(n,i,o,a)=>{const{data:s}=n,{cachedStats:c}=s,{polyline:l,closed:f}=s.contour,u=Object.keys(c);for(let h=0;hi.worldToCanvas(I)),w={isPreScaled:lu(i,g),isSuvScaled:this.isSuvScaled(i,g,n.metadata.referencedImageId)},x=uu(y.Modality,n.metadata.referencedImageId,w),C=Ia(p,()=>{const I=s.contour.polyline,P=I.length,O=new Array(P);for(let ie=0;ie{const{data:s}=n,c=this.getTargetId(i),l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:o.viewport.id,annotationUID:n.annotationUID},f=this.getLinkedTextBoxStyle(l,n);if(!f.visibility)return;const u=this.configuration.getTextLines(s,c);if(!u||u.length===0)return;const d=s.contour.polyline.map(x=>i.worldToCanvas(x));if(!s.handles.textBox.hasMoved){const x=Oa(d);s.handles.textBox.worldPosition=i.canvasToWorld(x)}const h=i.worldToCanvas(s.handles.textBox.worldPosition),p=ho(a,n.annotationUID??"","1",u,h,d,{},f),{x:v,y,width:m,height:w}=p;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([v,y]),topRight:i.canvasToWorld([v+m,y]),bottomLeft:i.canvasToWorld([v,y+w]),bottomRight:i.canvasToWorld([v+m,y+w])}},l2e(this),v2e(this),D2e(this),B2e(this),z2e(this),tye(this),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,r){if(!r||!r.length)return;const n=_e(e),{viewport:i}=n;let o;if(i instanceof ur){const a=i.getCamera(),{spacingInNormalDirection:s}=jh(i,a);o=this.filterAnnotationsWithinSlice(r,a,s)}else o=Dm(i,r);return o}filterAnnotationsWithinSlice(e,r,n){const{viewPlaneNormal:i}=r,o=e.filter(l=>{let f=l.metadata.viewPlaneNormal;if(!l.metadata.referencedImageId&&!f&&l.metadata.FrameOfReferenceUID){for(const d of l.data.contour.polyline){const h=Mn(Ke(),d,r.focalPoint),g=kt(h,r.viewPlaneNormal);if(!Zt(g,0))return!1}return l.metadata.viewPlaneNormal=r.viewPlaneNormal,l.metadata.cameraFocalPoint=r.focalPoint,!0}if(!f){const{referencedImageId:d}=l.metadata,{imageOrientationPatient:h}=wt("imagePlaneModule",d),g=Ft(h[0],h[1],h[2]),p=Ft(h[3],h[4],h[5]);f=Ke(),kn(f,g,p),l.metadata.viewPlaneNormal=f}const u=Math.abs(kt(i,f))>Fye;return f&&u});if(!o.length)return[];const a=n/2,{focalPoint:s}=r,c=[];for(const l of o){const u=l.data.contour.polyline[0];if(!l.isVisible)continue;const d=Ke();Mn(d,s,u);const h=kt(d,i);Math.abs(h){a.data.handles.points.length=0};return Ui(n,{data:{contour:{polyline:[[...r]]},label:"",cachedStats:{}},onInterpolationComplete:i})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:r,targetId:n,svgDrawingHelper:i}=e,o=e.annotation;let a=!1;const{viewport:s,renderingEngine:c}=r,l=this.isDrawing,f=this.isEditingOpen,u=this.isEditingClosed;if(!(l||f||u))this.configuration.displayOnePointAsCrosshairs&&o.data.contour.polyline.length===1?this.renderPointContourWithMarker(r,i,o):this.renderContour(r,i,o);else{const d=this.commonData.annotation.annotationUID;if(o.annotationUID===d)if(l)this.renderContourBeingDrawn(r,i,o);else if(u)this.renderClosedContourBeingEdited(r,i,o);else if(f)this.renderOpenContourBeingEdited(r,i,o);else throw new Error(`Unknown ${this.getToolName()} annotation rendering state`);else this.configuration.displayOnePointAsCrosshairs&&o.data.contour.polyline.length===1?this.renderPointContourWithMarker(r,i,o):this.renderContour(r,i,o);a=!0}if(this.configuration.calculateStats)return this._calculateStatsIfActive(o,n,s,c,r),this._renderStats(o,s,r,i),a}_calculateStatsIfActive(e,r,n,i,o){var s,c,l,f;const a=(s=this.commonData)==null?void 0:s.annotation.annotationUID;if(!(e.annotationUID===a&&!((c=this.commonData)!=null&&c.movingTextBox))&&!((l=this.commonData)!=null&&l.movingTextBox)){const{data:u}=e;(f=u.cachedStats[r])!=null&&f.unit?e.invalidated&&this._throttledCalculateCachedStats(e,n,i,o):(u.cachedStats[r]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,unit:null},this._calculateCachedStats(e,n,i,o))}}updateClosedCachedStats({viewport:e,points:r,imageData:n,metadata:i,cachedStats:o,targetId:a,modalityUnit:s,canvasCoordinates:c,calibratedScale:l,deltaInX:f,deltaInY:u}){var j,te,ie,he;const{scale:d,areaUnit:h,unit:g}=l,{voxelManager:p}=e.getImageData(),v=zr(n,r[0]);v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]);let y=v[0],m=v[0],w=v[1],x=v[1],C=v[2],S=v[2];for(let ue=1;ue{let Me=!0;const Ue=e.worldToCanvas(ue);return Ue[1]!=V&&(R=0,V=Ue[1],G=kU(c,Ue,[A[0],Ue[1]]),G.sort(function(be){return function(B,M){return B[be]===M[be]?0:B[be]G[0][0]&&(G.shift(),R++),R%2===0&&(Me=!1),Me},boundsIJK:P,returnPoints:this.configuration.storePointData}));const F=this.configuration.statsCalculator.getStatistics();o[a]={Modality:i.Modality,area:_,perimeter:E,mean:(j=F.mean)==null?void 0:j.value,max:(te=F.max)==null?void 0:te.value,min:(ie=F.min)==null?void 0:ie.value,stdDev:(he=F.stdDev)==null?void 0:he.value,statsArray:F.array,pointsInShape:N,areaUnit:h,modalityUnit:s,unit:g}}updateOpenCachedStats({targetId:e,metadata:r,canvasCoordinates:n,cachedStats:i,modalityUnit:o,calibratedScale:a,deltaInX:s,deltaInY:c}){const{scale:l,unit:f}=a;let u=KS(n,closed)/l;u*=Math.sqrt(Math.pow(s,2)+Math.pow(c,2)),i[e]={Modality:r.Modality,length:u,modalityUnit:o,unit:f}}};eb.toolName="PlanarFreehandROI";let hf=eb;function Uye(t,e){const r=t.cachedStats[e],{area:n,mean:i,stdDev:o,length:a,perimeter:s,max:c,min:l,isEmptyArea:f,unit:u,areaUnit:d,modalityUnit:h}=r||{},g=[];if(Ar(n)){const p=f?"Area: Oblique not supported":`Area: ${un(n)} ${d}`;g.push(p)}return Ar(i)&&g.push(`Mean: ${un(i)} ${h}`),Ar(c)&&g.push(`Max: ${un(c)} ${h}`),Ar(l)&&g.push(`Min: ${un(l)} ${h}`),Ar(o)&&g.push(`Std Dev: ${un(o)} ${h}`),Ar(s)&&g.push(`Perimeter: ${un(s)} ${u}`),Ar(a)&&g.push(`${un(a)} ${u}`),g}const tb=class tb extends hf{constructor(e){const r=Ui({configuration:{calculateStats:!1,allowOpenContours:!1}},e);super(r)}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const r=e.annotation,{invalidated:n}=r,i=super.renderAnnotationInstance(e);if(n){const{segmentationId:o}=r.data.segmentation;To(o)}return i}};tb.toolName="PlanarFreehandContourSegmentationTool";let hl=tb;const Bye={[Vt.Labelmap]:tB,[Vt.Contour]:QU,[Vt.Surface]:lU},Gv=hl.toolName;class Gye{constructor(){this._needsRender=new Set,this._animationFrameSet=!1,this._animationFrameHandle=null,this._getAllViewports=()=>Bo().flatMap(r=>r.getViewports()),this._renderFlaggedSegmentations=()=>{this._throwIfDestroyed(),Array.from(this._needsRender).forEach(r=>{this._triggerRender(r)}),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}}renderSegmentationsForViewport(e){const r=e?[e]:this._getViewportIdsForSegmentation();this._setViewportsToBeRenderedNextFrame(r)}renderSegmentation(e){const r=this._getViewportIdsForSegmentation(e);this._setViewportsToBeRenderedNextFrame(r)}_getViewportIdsForSegmentation(e){const r=this._getAllViewports(),n=[];for(const i of r){const o=i.id;if(e){const a=Ea(o,{segmentationId:e});(a==null?void 0:a.length)>0&&n.push(o)}else{const a=Ea(o);(a==null?void 0:a.length)>0&&n.push(o)}}return n}_throwIfDestroyed(){if(this.hasBeenDestroyed)throw new Error("this.destroy() has been manually called to free up memory, can not longer use this instance. Instead make a new one.")}_setViewportsToBeRenderedNextFrame(e){e.forEach(r=>{this._needsRender.add(r)}),this._render()}_render(){this._needsRender.size>0&&this._animationFrameSet===!1&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedSegmentations),this._animationFrameSet=!0)}_triggerRender(e){const r=Ea(e);if(!(r!=null&&r.length))return;const{viewport:n}=Wn(e)||{};if(!n)return;const i=[],o=r.map(a=>{a.type===Vt.Contour&&this._addPlanarFreeHandToolIfAbsent(n);const s=Bye[a.type];try{const c=s.render(n,a);i.push(c)}catch(c){console.error(c)}return Promise.resolve({segmentationId:a.segmentationId,type:a.type})});Promise.allSettled(o).then(a=>{const s=a.filter(f=>f.status==="fulfilled").map(f=>f.value);function c(f){const{element:u,viewportId:d}=f.detail;u.removeEventListener(rt.IMAGE_RENDERED,c),s.forEach(h=>{const g={viewportId:d,segmentationId:h.segmentationId,type:h.type};ut(et,k.SEGMENTATION_RENDERED,{...g})})}n.element.addEventListener(rt.IMAGE_RENDERED,c),n.render()})}_addPlanarFreeHandToolIfAbsent(e){Gv in Ye.tools||ki(hl);const r=Pr(e.id);r.hasTool(Gv)||(r.addTool(Gv),r.setToolPassive(Gv))}}function tg(t){yB.renderSegmentationsForViewport(t)}function Hw(t){yB.renderSegmentation(t)}const yB=new Gye;function Wye({modifiedSlicesToUse:t,representationData:e,type:r}){const n=$e.getVolume(e[r].volumeId);if(!n){console.warn("segmentation not found in cache");return}const{imageData:i,vtkOpenGLTexture:o}=n;let a;if((t==null?void 0:t.length)>0)a=t;else{const s=i.getDimensions()[2];a=[...Array(s).keys()]}a.forEach(s=>{o.setUpdatedFrame(s)}),i.modified()}function zye({viewportIds:t,segmentationId:e}){t.forEach(r=>{let n=Ea(r,{segmentationId:e});n=n.filter(i=>i.type===Vt.Labelmap),n.forEach(i=>{if(i.segmentationId!==e)return;const o=Wn(r);if(!o)return;const{viewport:a}=o;if(a instanceof ur)return;const s=Tp(r,e);s!=null&&s.length&&s.forEach((c,l)=>{const f=c.actor.getMapper().getInputData(),u=ru(r,e),d=$e.getImage(u[l]);f.modified(),yw(f,d)})})})}const $ye=function(t){const{segmentationId:e,modifiedSlicesToUse:r}=t.detail,{representationData:n}=Vn(e),i=eg(e),o=i.some(c=>{const{viewport:l}=Wn(c);return l instanceof ur}),a=i.some(c=>{const{viewport:l}=Wn(c);return l instanceof lr}),s=o&&a;i.forEach(c=>{const{viewport:l}=Wn(c);l instanceof ur&&Wye({modifiedSlicesToUse:s?[]:r,representationData:n,type:Vt.Labelmap}),l instanceof lr&&zye({viewportIds:i,segmentationId:e})})},wB=function(t){const{segmentationId:e}=t.detail,{representationData:r}=Vn(e);r.Labelmap&&$ye(t),Hw(e)},xB=function(t){const{segmentationId:e}=t.detail;Hw(e)};function CB(t,e){return rr.updateLabelmapSegmentationImageReferences(t,e)}const jye=function(t){if(!t)return;const e=_e(t);if(!e)return;const{viewport:r}=e;r instanceof Tr||(t.addEventListener(rt.STACK_NEW_IMAGE,A1),t.addEventListener(rt.IMAGE_RENDERED,A1))},Hye=function(t){t.removeEventListener(rt.STACK_NEW_IMAGE,A1),t.removeEventListener(rt.IMAGE_RENDERED,A1)};function A1(t){const e=t.detail,{viewportId:r,renderingEngineId:n}=e,{viewport:i}=Oi(r,n),o=Ea(r);if(!(o!=null&&o.length))return;const a=o.filter(l=>l.type===Vt.Labelmap),s=i.getActors();a.forEach(l=>{const{segmentationId:f}=l;CB(r,f)});const c=a.flatMap(l=>Tp(r,l.segmentationId)).filter(l=>l!==void 0);c.length&&(c.forEach(l=>{a.find(u=>{const d=ru(r,u.segmentationId);return d==null?void 0:d.includes(l.referencedId)})||i.removeActors([l.uid])}),a.forEach(l=>{const{segmentationId:f}=l,u=i.getCurrentImageId(),d=ru(r,f);if(!d)return;const h=g=>{const p=$e.getImage(g);if(!p){console.warn("No derived image found in the cache for segmentation representation",l);return}const v=s.find(y=>y.referencedId===g);if(v){const y=v.actor.getMapper().getInputData();y.setDerivedImage?y.setDerivedImage(p):yw(y,p)}else{const{dimensions:y,spacing:m,direction:w}=i.getImageDataMetadata(p),x=$e.getImage(u)||{imageId:u},{origin:C}=i.getImageDataMetadata(x),S=C,T=p.voxelManager.getConstructor(),_=p.voxelManager.getScalarData(),E=Bt.newInstance({name:"Pixels",numberOfComponents:1,values:new T(_)}),b=tm.newInstance();b.setDimensions(y[0],y[1],1),b.setSpacing(m),b.setDirection(w),b.setOrigin(S),b.getPointData().setScalars(E),b.modified(),i.addImages([{imageId:g,representationUID:`${f}-${Vt.Labelmap}-${p.imageId}`,callback:({imageActor:D})=>{D.getMapper().setInputData(b)}}]),tg(r);return}};d.forEach(h),i.render(),t.type===rt.IMAGE_RENDERED&&i.element.removeEventListener(rt.IMAGE_RENDERED,A1)}))}const SB={enable:jye,disable:Hye};async function Kye(t){const e=t.detail.annotation;if(!bm(e))return;const r=Xye(e),n=Yye(r,e);if(!n.length){ut(et,k.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:r.element,sourceAnnotation:e});return}const i=df(e.data.contour.polyline,r),o=XU(r,i,n);if(!o.length){ut(et,k.ANNOTATION_CUT_MERGE_PROCESS_COMPLETED,{element:r.element,sourceAnnotation:e});return}if(o.length>1){YU(r,e,i,o);return}const{targetAnnotation:a,targetPolyline:s,isContourHole:c}=o[0];if(c){const{contourHoleProcessingEnabled:l=!1}=t.detail;if(!l)return;Uw(r,a,e)}else r8(r,a,s,e,i)}function qye(t,e=!1){const r="PlanarFreehandContourSegmentationTool",n=Pr(t.id,t.renderingEngineId);let i;return n?n.hasTool(r)?n.getToolOptions(r)||(i=`Tool ${r} must be in active/passive state in ${n.id} toolGroup`):i=`Tool ${r} not added to ${n.id} toolGroup`:i=`ToolGroup not found for viewport ${t.id}`,i&&!e&&console.warn(i),!i}function Xye(t){const e=a8(t);return e.find(n=>qye(n,!0))??e[0]}function Yye(t,e){const{annotationUID:r}=e;return mm().filter(i=>i.annotationUID&&i.annotationUID!==r&&bm(i)&&uU(i,e)&&t.isReferenceViewable(i.metadata))}function Jye(t){const e=t.detail.annotation;eu(e)}function TB(t){const e=t.detail.annotation;bm(e)&&Kye(t)}function m5(t){if(!t.detail.removed.length)return;Bo().forEach(n=>{const o=n.getViewports().map(a=>a.id);Be(o)})}function _B(t){const{viewportId:e}=t.detail;Be([e])}function Zye(t){const e=t.detail.annotation;bm(e)&&Jye(t)}const EB=function(t){Jh(t.detail.element)},Qye=function(t){t.addEventListener(rt.IMAGE_RENDERED,EB)},e5e=function(t){t.removeEventListener(rt.IMAGE_RENDERED,EB)},bB={enable:Qye,disable:e5e},{Active:t5e}=Fn;function ng(t,e,r){if(Ye.isInteractingWithTool)return!1;const{renderingEngineId:n,viewportId:i}=r.detail,o=Pr(i,n);if(!o)return!1;let a;const s=Object.keys(o.toolOptions);for(let c=0;c{for(const c of s){if(c.isLocked||!c.isVisible)continue;const l=a.getHandleNearImagePoint(t,c,r,i);if(l){o.push({tool:a,annotation:c,handle:l});break}}}),o}function Om(t,e){const r=[];for(let n=0;n0&&r.push({tool:i,annotations:o}))}return r}function g8(t,e,r,n="mouse"){const i=n==="touch"?36:6,o=[];return e.forEach(({tool:a,annotations:s})=>{for(const c of s){if(c.isLocked||!c.isVisible)continue;if(a.isPointNearTool(t,c,r,i,n)){o.push({tool:a,annotation:c});break}}}),o}const{Active:n5e}=Fn;function Kw(t){const{renderingEngineId:e,viewportId:r,event:n}=t.detail,i=Qh(n)||Xh.getModifierKey(),o=Pr(r,e);if(!o)return null;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary(),c=t.detail.buttons??(n==null?void 0:n.buttons)??s;for(let l=0;lh.mouseButton===c&&h.modifierKey===i);if(u.mode===n5e&&d)return o.getToolInstance(f)}}function Ih(t,e,r){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;cd.mouseButton===r);if(e.includes(f.mode)&&(!r||u)){const d=o.getToolInstance(l);a.push(d)}}return a}function r5e(t,e){var u;const r=new Map,{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return r;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary(),c=t.detail.event,l=(c==null?void 0:c.buttons)??s,f=Qh(c)||Xh.getModifierKey();for(let d=0;d{var w;return((w=m.bindings)==null?void 0:w.length)&&m.bindings.some(x=>x.mouseButton===l&&x.modifierKey===f)});y&&r.set(g,y)}return r}const{Active:i5e,Passive:o5e}=Fn;function a5e(t){if(Ye.isInteractingWithTool)return!1;const e=t.detail,{element:r}=e,n=_e(r),{canvas:i}=e.currentPoints;if(!n)return!1;const o=r5e(t,[i5e,o5e]),a=Array.from(o.keys()),s=Om(r,a),c=g8(r,s,i);if(c.length>0){const{tool:l,annotation:f}=c[0],u=o.get(l);return(typeof u.method=="string"?l[u.method]:u.method).call(l,t,f),!0}return!1}const{Active:s5e,Passive:c5e}=Fn;function MB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);if(e&&typeof e.preMouseDownCallback=="function"&&e.preMouseDownCallback(t))return;const r=t.detail.event.buttons===1,n=Ih(t,[s5e],t.detail.event.buttons),i=r?Ih(t,[c5e]):void 0,o=[...n||[],...i||[]];if(a5e(t))return;const s=t.detail,{element:c}=s,l=Om(c,o),f=s.currentPoints.canvas,u=OB(c,l,f,"mouse"),d=!!t.detail.event.shiftKey;if(u.length>0){const{tool:g,annotation:p,handle:v}=zI(u);$I(p.annotationUID,d),g.handleSelectedCallback(t,p,v,"Mouse");return}const h=g8(c,l,f,"mouse");if(h.length>0){const{tool:g,annotation:p}=zI(h);$I(p.annotationUID,d),g.toolSelectedCallback(t,p,"Mouse",f);return}e&&typeof e.postMouseDownCallback=="function"&&e.postMouseDownCallback(t)}function zI(t){if(t.length>1){const e=t.find(r=>{const n=!si(r.annotation.annotationUID),i=Kr(r.annotation.annotationUID);return n&&i});if(e)return e}return t[0]}function $I(t,e=!1){e?Cm(t)?na(t,!1):na(t,!0,!0):na(t,!0,!1)}function PB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);if(e&&!Ye.isMultiPartToolActive&&e.addNewAnnotation){const r=e.addNewAnnotation(t,"mouse");na(r.annotationUID)}}function RB(t){if(Ye.isInteractingWithTool)return;const e=Kw(t);!e||typeof e.mouseDragCallback!="function"||e.mouseDragCallback(t)}const{Active:l5e,Passive:u5e}=Fn;function LB(t){if(Ye.isInteractingWithTool||Ye.isMultiPartToolActive)return;const e=Ih(t,[l5e,u5e]),r=t.detail,{element:n}=r,i=Om(n,e),o=e.filter(s=>!i.some(l=>l.tool.getToolName()===s.getToolName()));let a=!1;for(const{tool:s,annotations:c}of i)typeof s.mouseMoveCallback=="function"&&(a=s.mouseMoveCallback(t,c)||a);o.forEach(s=>{typeof s.mouseMoveCallback=="function"&&s.mouseMoveCallback(t)}),a===!0&&Jh(n)}const AB=ng.bind(null,"Mouse","mouseUpCallback");function NB(t){if(Ye.isInteractingWithTool)return;t.detail.buttons=fl.Wheel|(t.detail.event.buttons||0);const e=Kw(t);if(e)return e.mouseWheelCallback(t)}const f5e=function(t){t.addEventListener(k.MOUSE_CLICK,DB),t.addEventListener(k.MOUSE_DOWN,MB),t.addEventListener(k.MOUSE_DOWN_ACTIVATE,PB),t.addEventListener(k.MOUSE_DOUBLE_CLICK,IB),t.addEventListener(k.MOUSE_DRAG,RB),t.addEventListener(k.MOUSE_MOVE,LB),t.addEventListener(k.MOUSE_UP,AB),t.addEventListener(k.MOUSE_WHEEL,NB)},d5e=function(t){t.removeEventListener(k.MOUSE_CLICK,DB),t.removeEventListener(k.MOUSE_DOWN,MB),t.removeEventListener(k.MOUSE_DOWN_ACTIVATE,PB),t.removeEventListener(k.MOUSE_DOUBLE_CLICK,IB),t.removeEventListener(k.MOUSE_DRAG,RB),t.removeEventListener(k.MOUSE_MOVE,LB),t.removeEventListener(k.MOUSE_UP,AB),t.removeEventListener(k.MOUSE_WHEEL,NB)},kB={enable:f5e,disable:d5e},{Active:h5e}=Fn;function VB(t){const{renderingEngineId:e,viewportId:r}=t.detail,n=Dpe(),i=Xh.getModifierKey(),o=Pr(r,e);if(!o)return null;const a=Object.keys(o.toolOptions),s=o.getDefaultMousePrimary();for(let c=0;cd.mouseButton===(n??s)&&d.modifierKey===i))return o.getToolInstance(l)}}function g5e(t,e){var c;const r=new Map,{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return r;const a=Object.keys(o.toolOptions),s=t.detail.key;for(let l=0;l{var v;return(v=p.bindings)==null?void 0:v.some(y=>y.key===s)});g&&r.set(u,g)}return r}function FB(t){const e=VB(t);if(e){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n),a=e.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const r=g5e(t,[Fn.Active]);if(r!=null&&r.size){const{element:n}=t.detail;for(const[i,o]of[...r.entries()])(typeof o.method=="function"?o.method:i[o.method]).call(i,n,o,t)}}function UB(t){const e=VB(t);if(!e)return;const{renderingEngineId:r,viewportId:n}=t.detail,i=Pr(n,r);eU();const o=e.getToolName();Object.keys(i.toolOptions).includes(o)&&i.setViewportsCursorByToolName(o)}const p5e=function(t){t.addEventListener(k.KEY_DOWN,FB),t.addEventListener(k.KEY_UP,UB)},m5e=function(t){t.removeEventListener(k.KEY_DOWN,FB),t.removeEventListener(k.KEY_UP,UB)},BB={enable:p5e,disable:m5e},{Active:v5e,Passive:y5e,Enabled:w5e}=Fn,GB=function(t){Ih(t,[v5e,y5e,w5e]).forEach(r=>{r.onCameraModified&&r.onCameraModified(t)})},x5e=function(t){t.addEventListener(rt.CAMERA_MODIFIED,GB)},C5e=function(t){t.removeEventListener(rt.CAMERA_MODIFIED,GB)},WB={enable:x5e,disable:C5e},{Active:S5e,Passive:T5e,Enabled:_5e}=Fn,zB=function(t){Ih(t,[S5e,T5e,_5e]).forEach(r=>{r.onImageSpacingCalibrated&&r.onImageSpacingCalibrated(t)})},E5e=function(t){t.addEventListener(rt.IMAGE_SPACING_CALIBRATED,zB)},b5e=function(t){t.removeEventListener(rt.IMAGE_SPACING_CALIBRATED,zB)},$B={enable:E5e,disable:b5e},{Active:D5e}=Fn;function p8(t){const{renderingEngineId:e,viewportId:r}=t.detail,n=t.detail.event,i=Pr(r,e);if(!i)return null;const o=Object.keys(i.toolOptions),a=Object.keys(n.touches).length,s=Qh(n)||Xh.getModifierKey(),c=i.getDefaultMousePrimary();for(let l=0;l(h.numTouchPoints===a||a===1&&h.mouseButton===c)&&h.modifierKey===s);if(u.mode===D5e&&d)return i.getToolInstance(f)}}function jI(t,e,r){const{renderingEngineId:n,viewportId:i}=t.detail,o=Pr(i,n);if(!o)return[];const a=[],s=Object.keys(o.toolOptions);for(let c=0;cd.numTouchPoints===r);if(e.includes(f.mode)&&(!r||u)){const d=o.getToolInstance(l);a.push(d)}}return a}const{Active:I5e,Passive:O5e}=Fn;function jB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);if(e&&typeof e.preTouchStartCallback=="function"&&e.preTouchStartCallback(t))return;const r=Object.keys(t.detail.event.touches).length===1,n=jI(t,[I5e],Object.keys(t.detail.event.touches).length),i=r?jI(t,[O5e]):void 0,o=[...n||[],...i||[],e],a=t.detail,{element:s}=a,c=Om(s,o),l=a.currentPoints.canvas,f=OB(s,c,l,"touch"),u=!1;if(f.length>0){const{tool:h,annotation:g,handle:p}=HI(f);KI(g.annotationUID,u),h.handleSelectedCallback(t,g,p,"Touch");return}const d=g8(s,c,l,"touch");if(d.length>0){const{tool:h,annotation:g}=HI(d);KI(g.annotationUID,u),h.toolSelectedCallback(t,g,"Touch",l);return}e&&typeof e.postTouchStartCallback=="function"&&e.postTouchStartCallback(t)}function HI(t){return t.length>1&&t.find(e=>!si(e.annotation.annotationUID)&&Kr(e.annotation.annotationUID))||t[0]}function KI(t,e=!1){e?Cm(t)?na(t,!1):na(t,!0,!0):na(t,!0,!1)}function HB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);if(e&&!Ye.isMultiPartToolActive&&e.addNewAnnotation){const r=e.addNewAnnotation(t,"touch");na(r.annotationUID)}}function KB(t){if(Ye.isInteractingWithTool)return;const e=p8(t);!e||typeof e.touchDragCallback!="function"||e.touchDragCallback(t)}const qB=ng.bind(null,"Touch","touchEndCallback"),M5e=ng.bind(null,"Touch","touchTapCallback"),XB=ng.bind(null,"Touch","touchPressCallback"),P5e=function(t){t.addEventListener(k.TOUCH_START,jB),t.addEventListener(k.TOUCH_START_ACTIVATE,HB),t.addEventListener(k.TOUCH_DRAG,KB),t.addEventListener(k.TOUCH_END,qB),t.addEventListener(k.TOUCH_TAP,M5e),t.addEventListener(k.TOUCH_PRESS,XB)},R5e=function(t){t.removeEventListener(k.TOUCH_START,jB),t.removeEventListener(k.TOUCH_START_ACTIVATE,HB),t.removeEventListener(k.TOUCH_DRAG,KB),t.removeEventListener(k.TOUCH_END,qB),t.removeEventListener(k.TOUCH_PRESS,XB)},YB={enable:P5e,disable:R5e},L5e=function(){et.addEventListener(k.ANNOTATION_COMPLETED,ol.handleAnnotationCompleted),et.addEventListener(k.ANNOTATION_MODIFIED,ol.handleAnnotationUpdate),et.addEventListener(k.ANNOTATION_REMOVED,ol.handleAnnotationDelete)},A5e=function(){et.removeEventListener(k.ANNOTATION_COMPLETED,ol.handleAnnotationCompleted),et.removeEventListener(k.ANNOTATION_MODIFIED,ol.handleAnnotationUpdate),et.removeEventListener(k.ANNOTATION_REMOVED,ol.handleAnnotationDelete)},JB={enable:L5e,disable:A5e},{Active:N5e,Passive:k5e,Enabled:V5e}=Fn,ZB=function(t){Ih(t,[N5e,k5e,V5e]).forEach(r=>{r.onResetCamera&&r.onResetCamera(t)})},F5e=function(t){t.addEventListener(rt.CAMERA_RESET,ZB)},U5e=function(t){t.removeEventListener(rt.CAMERA_RESET,ZB)},QB={enable:F5e,disable:U5e};function m8(t){const{element:e,viewportId:r}=t.detail,n=B5e(r);G5e(e),W5e(n,e),t8.addViewportElement(r,e),LF.enable(e),ZF.enable(e),XF.enable(e),Xh.enable(e),SB.enable(e),bB.enable(e),WB.enable(e),$B.enable(e),QB.enable(e),kB.enable(e),BB.enable(e),YB.enable(e),Ye.enabledElements.push(e)}function B5e(t){const e="http://www.w3.org/2000/svg",r=document.createElementNS(e,"svg"),n=`svg-layer-${t}`;r.classList.add("svg-layer"),r.setAttribute("id",n),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),r.style.width="100%",r.style.height="100%",r.style.pointerEvents="none",r.style.position="absolute";const i=document.createElementNS(e,"defs"),o=document.createElementNS(e,"filter"),a=document.createElementNS(e,"feOffset"),s=document.createElementNS(e,"feColorMatrix"),c=document.createElementNS(e,"feBlend");return o.setAttribute("id",`shadow-${n}`),o.setAttribute("filterUnits","userSpaceOnUse"),a.setAttribute("result","offOut"),a.setAttribute("in","SourceGraphic"),a.setAttribute("dx","0.5"),a.setAttribute("dy","0.5"),s.setAttribute("result","matrixOut"),s.setAttribute("in","offOut"),s.setAttribute("in2","matrix"),s.setAttribute("values","0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0"),c.setAttribute("in","SourceGraphic"),c.setAttribute("in2","matrixOut"),c.setAttribute("mode","normal"),o.appendChild(a),o.appendChild(s),o.appendChild(c),i.appendChild(o),r.appendChild(i),r}function G5e(t){const{viewportUid:e,renderingEngineUid:r}=t.dataset,n=`${e}:${r}`;Ye.svgNodeCache[n]={}}function W5e(t,e){e.querySelector("div.viewport-element").appendChild(t)}function eG(t,e){const r=[];if(!e&&!t)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let n=0;n{const e=_e(t);if(!e)return;eG(e.viewportId,e.renderingEngineId).forEach(n=>{n.remove(e)})},j5e=t=>{const e=_e(t);if(!e)return;const{renderingEngineId:r,viewportId:n}=e,i=Pr(n,r);i&&i.removeViewports(r,n)};function H5e(t){const{viewportUid:e,renderingEngineUid:r}=t.dataset,n=`${e}:${r}`;delete Ye.svgNodeCache[n]}function K5e(t){const e=t.querySelector(`div.${z5e}`),r=e.querySelector("svg");r&&e.removeChild(r)}const q5e=function(t){const e=Ye.enabledElements.findIndex(r=>r===t);e>-1&&Ye.enabledElements.splice(e,1)};function tG(t){const e=WU(t,[Fn.Active,Fn.Passive]),r=Om(t,e);for(const{tool:n}of r){const i=n.cancel(t);if(i)return i}}class y8{constructor(e,r,n,i){this._viewportOptions={},this._onEvent=o=>{var l;if(this._ignoreFiredEvents===!0||!this._targetViewports.length)return;const a=this._eventSource==="element"?_e(o.currentTarget):Wn((l=o.detail)==null?void 0:l.viewportId);if(!a)return;const{renderingEngineId:s,viewportId:c}=a;this._sourceViewports.find(f=>f.viewportId===c)&&this.fireEvent({renderingEngineId:s,viewportId:c},o)},this._enabled=!0,this._eventName=r,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},this._eventSource=this._options.eventSource||"element",this._auxiliaryEvents=this._options.auxiliaryEvents||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e,r={}){this._viewportOptions[e]=r}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(Wv(this._sourceViewports,e))return;const{renderingEngineId:r,viewportId:n}=e,i=jr(r).getViewport(n);if(!i){console.warn(`Synchronizer.addSource: No viewport for ${r} ${n}`);return}(this._eventSource==="element"?i.element:et).addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEvents.forEach(({name:a,source:s})=>{(s==="element"?i.element:et).addEventListener(a,this._onEvent.bind(this))}),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){Wv(this._targetViewports,e)||(this._targetViewports.push(e),this._updateDisableHandlers())}getSourceViewports(){return this._sourceViewports}getTargetViewports(){return this._targetViewports}destroy(){this._sourceViewports.forEach(e=>this.removeSource(e)),this._targetViewports.forEach(e=>this.removeTarget(e))}remove(e){this.removeTarget(e),this.removeSource(e)}removeSource(e){const r=qI(this._sourceViewports,e);if(r===-1)return;const n=this._eventSource==="element"?this.getViewportElement(e):et;this._sourceViewports.splice(r,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEvents.forEach(({name:i,source:o})=>{(o==="element"?this.getViewportElement(e):et).removeEventListener(i,this._eventHandler)}),this._updateDisableHandlers()}removeTarget(e){const r=qI(this._targetViewports,e);r!==-1&&(this._targetViewports.splice(r,1),this._updateDisableHandlers())}hasSourceViewport(e,r){return Wv(this._sourceViewports,{renderingEngineId:e,viewportId:r})}hasTargetViewport(e,r){return Wv(this._targetViewports,{renderingEngineId:e,viewportId:r})}fireEvent(e,r){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i{this._ignoreFiredEvents=!1}):this._ignoreFiredEvents=!1}}_hasSourceElements(){return this._sourceViewports.length!==0}_updateDisableHandlers(){const e=X5e(this._sourceViewports,this._targetViewports),r=this.remove.bind(this),n=i=>{r(i.detail.element)};e.forEach(i=>{const o=this.getEventSource(i);o&&(o.removeEventListener(rt.ELEMENT_DISABLED,n),o.addEventListener(rt.ELEMENT_DISABLED,n))})}getEventSource(e){return this._eventSource==="element"?this.getViewportElement(e):et}getViewportElement(e){const{renderingEngineId:r,viewportId:n}=e,i=jr(r);if(!i)return null;const o=i.getViewport(n);return o?o.element:null}}function X5e(t,e){const r=[],n=t.concat(e);for(let i=0;io.renderingEngineId===a.renderingEngineId&&o.viewportId===a.viewportId)||r.push(o)}return r}function qI(t,e){return t.findIndex(r=>e.renderingEngineId===r.renderingEngineId&&e.viewportId===r.viewportId)}function Wv(t,e){return t.some(r=>r.renderingEngineId===e.renderingEngineId&&r.viewportId===e.viewportId)}function $d(t,e,r,n){if(Ye.synchronizers.some(a=>a.id===t))throw new Error(`Synchronizer with id '${t}' already exists.`);const o=new y8(t,e,r,n);return Ye.synchronizers.push(o),o}function Y5e(){for(;Ye.synchronizers.length>0;)Ye.synchronizers.pop().destroy()}function J5e(t){return Ye.synchronizers.find(e=>e.id===t)}function Z5e(){return Ye.synchronizers}function Q5e(t){const e=Ye.synchronizers.findIndex(r=>r.id===t);e>-1&&(Ye.synchronizers[e].destroy(),Ye.synchronizers.splice(e,1))}const nG=Object.freeze(Object.defineProperty({__proto__:null,createSynchronizer:$d,destroy:Y5e,destroySynchronizer:Q5e,getAllSynchronizers:Z5e,getSynchronizer:J5e,getSynchronizersForViewport:eG},Symbol.toStringTag,{value:"Module"})),ewe=Object.freeze(Object.defineProperty({__proto__:null,Synchronizer:y8,SynchronizerManager:nG,ToolGroupManager:mF,addEnabledElement:m8,addTool:ki,cancelActiveManipulations:tG,hasTool:hpe,removeEnabledElement:v8,removeTool:TF,get state(){return Ye},svgNodeCache:Sw},Symbol.toStringTag,{value:"Module"})),v5=function(t){const{viewportId:e}=t.detail;tg(e)};let XS=!1;function rG(t={}){XS||(h1e(t),nwe(),rwe(),XS=!0)}function twe(){iG(),oG(),gF(),Bhe();const t=yc(),e=rr;t.restoreAnnotations({}),e.resetState(),XS=!1}function nwe(){iG();const t=rt.ELEMENT_ENABLED,e=rt.ELEMENT_DISABLED;et.addEventListener(t,m8),et.addEventListener(e,v8),JB.enable()}function iG(){const t=rt.ELEMENT_ENABLED,e=rt.ELEMENT_DISABLED;et.removeEventListener(t,m8),et.removeEventListener(e,v8),JB.disable()}function rwe(){oG(),et.addEventListener(k.ANNOTATION_COMPLETED,TB),et.addEventListener(k.ANNOTATION_MODIFIED,_B),et.addEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.addEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.addEventListener(k.ANNOTATION_REMOVED,Zye),et.addEventListener(k.SEGMENTATION_MODIFIED,xB),et.addEventListener(k.SEGMENTATION_DATA_MODIFIED,wB),et.addEventListener(k.SEGMENTATION_REPRESENTATION_MODIFIED,v5),et.addEventListener(k.SEGMENTATION_REPRESENTATION_ADDED,v5)}function oG(){et.removeEventListener(k.ANNOTATION_COMPLETED,TB),et.removeEventListener(k.ANNOTATION_MODIFIED,_B),et.removeEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.removeEventListener(k.ANNOTATION_SELECTION_CHANGE,m5),et.removeEventListener(k.SEGMENTATION_MODIFIED,xB),et.removeEventListener(k.SEGMENTATION_DATA_MODIFIED,wB),et.removeEventListener(k.SEGMENTATION_REPRESENTATION_MODIFIED,v5),et.removeEventListener(k.SEGMENTATION_REPRESENTATION_ADDED,v5)}const iwe=Object.freeze(Object.defineProperty({__proto__:null,COLOR_LUT:p5},Symbol.toStringTag,{value:"Module"})),owe="3.20.0";function awe(t,e,r,n){const{camera:i}=n.detail,o=jr(r.renderingEngineId);if(!o)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const a=o.getViewport(r.viewportId);a.setCamera(i),a.render()}const{CAMERA_MODIFIED:swe}=rt;function cwe(t){return $d(t,swe,awe)}function lwe(t,e,r,n,i){const o=jr(r.renderingEngineId);if(!o)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const a=o.getViewport(r.viewportId),c=o.getViewport(e.viewportId).getViewPresentation(i);a.setViewPresentation(c),a.render()}const{CAMERA_MODIFIED:uwe}=rt;function fwe(t,e){return $d(t,uwe,lwe,{viewPresentation:e})}function dwe(t,e,r,n,i){const o=n.detail,{volumeId:a,range:s,invertStateChanged:c,invert:l,colormap:f}=o,u=jr(r.renderingEngineId);if(!u)throw new Error(`Rendering Engine does not exist: ${r.renderingEngineId}`);const d=u.getViewport(r.viewportId),h={voiRange:s};if(i!=null&&i.syncInvertState&&c&&(h.invert=l),i!=null&&i.syncColormap&&f&&(h.colormap=f),d instanceof Tr)d._actors&&d._actors.size>1?d.setProperties(h,a):d.setProperties(h);else if(d instanceof lr)d.setProperties(h);else throw new Error("Viewport type not supported.");d.render()}function hwe(t,e){return e=Object.assign({syncInvertState:!0,syncColormap:!0},e),$d(t,rt.VOI_MODIFIED,dwe,{auxiliaryEvents:[{name:rt.COLORMAP_MODIFIED}],...e})}function gwe(t,e,r){const n=jr(r.renderingEngineId);if(!n)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const i=t.getOptions(r.viewportId),o=n.getViewport(r.viewportId),a=n.getViewport(e.viewportId);if((i==null?void 0:i.syncZoom)!==!1){const s=a.getZoom();o.setZoom(s)}if((i==null?void 0:i.syncPan)!==!1){const s=a.getPan();o.setPan(s)}o.render()}const{CAMERA_MODIFIED:pwe}=rt;function mwe(t){return $d(t,pwe,gwe)}function vwe(t,e){const{viewPlaneNormal:r}=t.getCamera(),{viewPlaneNormal:n}=e.getCamera(),i=kt(r,n);return Math.abs(i)>.9}const XI=(t,e)=>S1.get("spatialRegistrationModule",t,e);async function ywe(t,e,r){const n=jr(r.renderingEngineId);if(!n)throw new Error(`No RenderingEngine for Id: ${r.renderingEngineId}`);const i=n.getViewport(e.viewportId),o=t.getOptions(r.viewportId);if(o!=null&&o.disabled)return;const a=n.getViewport(r.viewportId),s=i.getCurrentImageId(),l=wt("imagePlaneModule",s).imagePositionPatient,f=a.getImageIds();if(!vwe(i,a))return;let u=XI(r.viewportId,e.viewportId);if(!u){const p=i.getFrameOfReferenceUID(),v=a.getFrameOfReferenceUID();if(p===v&&(o==null?void 0:o.useInitialPosition)!==!1?u=Wt(ba()):(wV(i,a),u=XI(r.viewportId,e.viewportId)),!u)return}const d=Yt(Ke(),l,u),h=wwe(d,f);let g=h.index;a instanceof ur&&(g=f.length-h.index-1),h.index!==-1&&a.getCurrentImageIdIndex()!==h.index&&await ds(a.element,{imageIndex:g})}function wwe(t,e){return e.reduce((r,n,i)=>{const{imagePositionPatient:o}=wt("imagePlaneModule",n),a=Qi(o,t);return a{i.getImageIds().includes(t)&&i.calibrateSpacing(t)})}function cG(t,e){const r=t.findIndex(([n,i])=>n===i);if(r===-1)throw new Error("3D bounding boxes not supported in an oblique plane");return t[r][0]-=e,t[r][1]+=e,t}const Mwe=Object.freeze(Object.defineProperty({__proto__:null,extend2DBoundingBoxInViewAxis:cG,getBoundingBoxAroundShape:cf,getBoundingBoxAroundShapeIJK:cf,getBoundingBoxAroundShapeWorld:rU},Symbol.toStringTag,{value:"Module"})),{transformWorldToIndex:OC}=Rn;function lG(t,e,r){const[n,i]=t,o=Ft((n[0]+i[0])/2,(n[1]+i[1])/2,(n[2]+i[2])/2),a=Qi(n,i)/2,{boundsIJK:s,topLeftWorld:c,bottomRightWorld:l}=Rwe(e,r,t,o,a);return{boundsIJK:s,centerWorld:o,radiusWorld:a,topLeftWorld:c,bottomRightWorld:l}}function uG(t,e){const r=e.getDirection(),n=Ft(r[0],r[1],r[2]),i=Ft(r[3],r[4],r[5]),o=Ft(r[6],r[7],r[8]),a=el(Ke(),o);return lG(t,e,{row:n,column:i,normal:a})}function Pwe(t,e,r){if(!r)throw new Error("viewport is required in order to calculate the sphere bounds");const n=r.getCamera(),i=Ft(n.viewUp[0],n.viewUp[1],n.viewUp[2]),o=Ft(n.viewPlaneNormal[0],n.viewPlaneNormal[1],n.viewPlaneNormal[2]),a=Ke();kn(a,i,o);const s={row:a,normal:o,column:el(Ke(),i)};return lG(t,e,s)}function Rwe(t,e,r,n,i){const o=t.getDimensions(),{row:a,column:s,normal:c}=e,l=Ke(),f=Ke();On(l,n,c,i),On(f,n,c,-i),On(l,l,s,-i),On(f,f,s,i),On(l,l,a,-i),On(f,f,a,i);const u=OC(t,l),d=OC(t,f),h=r.map(p=>OC(t,p));return{boundsIJK:cf([u,d,...h],o),topLeftWorld:l,bottomRightWorld:f}}function fG(t,e=5){return parseFloat(t[0]).toFixed(e)+","+parseFloat(t[1]).toFixed(e)+","+parseFloat(t[2]).toFixed(e)+","}class Lwe{static setStartRange(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,n)}static setEndRange(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,void 0,n)}static setRange(e,r,n,i){var c;const{metadata:o}=r;n===void 0&&(n=o.sliceIndex=n?a:e.getNumberOfSlices()-1),i=Math.max(n,i),o.sliceIndex=Math.min(n,i),o.referencedImageId=e.getCurrentImageId(o.sliceIndex),o.referencedImageURI=void 0,i===o.sliceIndex?o.multiSliceReference=void 0:i!==((c=o.multiSliceReference)==null?void 0:c.sliceIndex)&&(o.multiSliceReference={referencedImageId:e.getCurrentImageId(i),sliceIndex:i});const s={viewportId:e.id,renderingEngineId:e.renderingEngineId,changeType:Qt.MetadataReferenceModified,annotation:r};ut(et,k.ANNOTATION_MODIFIED,s),this.setViewportFrameRange(e,o)}static setSingle(e,r,n=e.getCurrentImageIdIndex()){this.setRange(e,r,n,n)}static getFrameRange(e){const{metadata:r}=e,{sliceIndex:n,multiSliceReference:i}=r,o=i==null?void 0:i.sliceIndex;return o?[n+1,o+1]:n+1}static getFrameRangeStr(e){const r=this.getFrameRange(e);return Array.isArray(r)?`${r[0]}-${r[1]}`:String(r)}static setViewportFrameRange(e,r){var n;e.setFrameRange&&((n=r.multiSliceReference)!=null&&n.sliceIndex)&&e.setFrameRange(r.sliceIndex+1,r.multiSliceReference.sliceIndex+1)}}function Awe(t,e){const{viewPlaneNormal:r}=t.metadata,{viewPlaneNormal:n}=e.metadata,i=kt(r,n);if(!of(1,Math.abs(i)))return!1;const{polyline:a}=t.data.contour,{polyline:s}=e.data.contour,c=kt(r,a[0]),l=kt(r,s[0]);return of(c,l)}function dG(t,e,r){let n=-1;if(e.forEach((i,o)=>{n>=0||i.a==t.b&&(n=o)}),n>=0){const i=e[n];return e.splice(n,1),r.push(i.b),r[0]==i.b?{remainingLines:e,contourPoints:r,type:"CLOSED_PLANAR"}:dG(i,e,r)}return{remainingLines:e,contourPoints:r,type:"OPEN_PLANAR"}}function w8(t){if(t.length==0)return[];const e=[],r=t.shift();e.push(r.a),e.push(r.b);const n=dG(r,t,e);if(n.remainingLines.length==0)return[{type:n.type,contourPoints:n.contourPoints}];{const i=w8(n.remainingLines);return i.push({type:n.type,contourPoints:n.contourPoints}),i}}function Nwe(t){return w8(t)}const kwe={findContours:w8,findContoursFromReducedSet:Nwe};function Vwe(t,e=!1){const r=t.getPoints(),n=t.getLines(),i=new Array(r.getNumberOfPoints()).fill(0).map((c,l)=>r.getPoint(l).slice()),o=new Array(n.getNumberOfCells()).fill(0).map((c,l)=>{const f=n.getCell(l*3).slice();return{a:f[0],b:f[1]}});if(e)return{points:i,lines:o};const a=[];for(const[c,l]of i.entries()){const f=a.findIndex(u=>u[0]===l[0]&&u[1]===l[1]&&u[2]===l[2]);if(f>=0)o.map(u=>(u.a===c&&(u.a=f),u.b===c&&(u.b=f),u));else{const u=a.length;a.push(l),o.map(d=>(d.a===c&&(d.a=u),d.b===c&&(d.b=u),d))}}const s=o.filter(c=>c.a!==c.b);return{points:a,lines:s}}const Fwe=(t,e)=>{const r=t[0],n=t[1];let i=!1;for(let o=0,a=e.length-1;on!=f>n&&r<(l-s)*(n-c)/(f-c)+s&&(i=!i)}return i};function Uwe(t,e,r){const n=[];t.contourPoints.forEach(o=>{n.push([r[o][0],r[o][1]])});let i=0;return e.contourPoints.forEach(o=>{Fwe([r[o][0],r[o][1]],n)||i++}),i===0}function Bwe(t,e,r=!0){const n=t.filter(s=>s.type!=="CLOSED_PLANAR"),i=t.filter(s=>s.type==="CLOSED_PLANAR"),o=[];let a=[];return i.forEach((s,c)=>{const l=[];i.forEach((f,u)=>{c!=u&&Uwe(s,f,e)&&l.push(u)}),l.length>0?o.push({contour:s,holes:l}):a.push(c)}),r&&(o.forEach(s=>{s.contour.type="CLOSEDPLANAR_XOR",n.push(s.contour),s.holes.forEach(c=>{i[c].type="CLOSEDPLANAR_XOR",n.push(i[c]),a=a.filter(l=>l!==c)})}),a.forEach(s=>{n.push(i[s])})),n}const Gwe={processContourHoles:Bwe};let YI=!1;function qw(){if(YI)return;YI=!0;const t=()=>new Worker(new URL("/static/dv3d/assets/computeWorker-FOqOvCDJ.js",import.meta.url),{name:"compute",type:"module"}),e=vl(),n=d1e().computeWorker,i={maxWorkerInstances:1,autoTerminateOnIdle:(n==null?void 0:n.autoTerminateOnIdle)??{enabled:!0,idleTimeThreshold:2e3}};e.registerWorker("compute",t,i)}function Xw(){return rr.getState().segmentations}function Wwe(t){const{segmentationId:e,representation:r,config:n}=t,{type:i,data:o}=r,a=o?{...o}:{};if(!a)throw new Error("Segmentation representation data may not be undefined");i===Vt.Contour&&zwe(a);const s=$we(n==null?void 0:n.segments,i,a);return n==null||delete n.segments,{segmentationId:e,label:(n==null?void 0:n.label)??null,cachedStats:(n==null?void 0:n.cachedStats)??{},segments:s,representationData:{[i]:{...a}}}}function zwe(t){t.geometryIds=t.geometryIds??[],t.annotationUIDsMap=t.annotationUIDsMap??new Map}function $we(t,e,r){const n={};return t?Object.entries(t).forEach(([i,o])=>{const{label:a,locked:s,cachedStats:c,active:l,...f}=o,u={segmentIndex:Number(i),label:a??`Segment ${i}`,locked:s??!1,cachedStats:c??{},active:l??!1,...f};n[i]=u}):e===Vt.Surface?jwe(n,r):n[1]=Hwe(),n}function jwe(t,e){const{geometryIds:r}=e;r==null||r.forEach(n=>{const i=$e.getGeometry(n);if(i!=null&&i.data){const{segmentIndex:o}=i.data;t[o]={segmentIndex:o}}})}function Hwe(){return{segmentIndex:1,label:"Segment 1",locked:!1,cachedStats:{},active:!0}}function hG(t,e){const r=rr;t.forEach(n=>{const i=Wwe(n);r.addSegmentation(i),e||es(i.segmentationId)})}function rg(t,e,r){return pG(t,e,r)}function gG(t,e,r){return pG(t,e,r)}function pG(t,e,r){const{segmentationId:n,type:i}=e;return Kwe(t,n,i,r),rr.removeSegmentationRepresentations(t,{segmentationId:n,type:i})}function mG(){rr.getAllViewportSegmentationRepresentations().forEach(({viewportId:e,representations:r})=>{r.forEach(({segmentationId:n,type:i})=>{rg(e,{segmentationId:n,type:i})})}),rr.resetState()}function vG(t,e,r){rg(t,{segmentationId:e,type:Vt.Labelmap},r)}function yG(t,e,r){rg(t,{segmentationId:e,type:Vt.Contour},r)}function wG(t,e,r){rg(t,{segmentationId:e,type:Vt.Surface},r)}function Kwe(t,e,r,n){Ea(t,{segmentationId:e,type:r}).forEach(a=>{a.type===Vt.Labelmap?tB.removeRepresentation(t,a.segmentationId,n):a.type===Vt.Contour?QU.removeRepresentation(t,a.segmentationId,n):a.type===Vt.Surface&&lU.removeRepresentation(t,a.segmentationId,n)});const{viewport:o}=Wn(t)||{};o&&o.render()}function x8(t){const e=rr;e.getAllViewportSegmentationRepresentations().filter(({representations:n})=>n.some(i=>i.segmentationId===t)).map(({viewportId:n})=>n).forEach(n=>{gG(n,{segmentationId:t})}),e.removeSegmentation(t),AE(t)}function xG(){const t=rr;t.getState().segmentations.map(n=>n.segmentationId).forEach(n=>{x8(n)}),t.resetState()}function qwe(t){rr.removeColorLUT(t)}function CG(t,e){return SG(t).map(o=>(e&&o.type===e,Vn(o.segmentationId))).filter(o=>o!==void 0)}function SG(t){return rr.getState().viewportSegRepresentations[t]}function Xwe(t,e){return rr.getStackSegmentationImageIdsForViewport(t,e)}function Ywe(){rr.resetState()}const Jwe=Object.freeze(Object.defineProperty({__proto__:null,addColorLUT:Ep,addSegmentations:hG,destroy:Ywe,getColorLUT:xm,getCurrentLabelmapImageIdForViewport:Tf,getCurrentLabelmapImageIdsForViewport:ru,getNextColorLUTIndex:hB,getSegmentation:Vn,getSegmentationRepresentation:NE,getSegmentationRepresentations:Ea,getSegmentationRepresentationsBySegmentationId:aU,getSegmentations:Xw,getStackSegmentationImageIdsForViewport:Xwe,getViewportIdsWithSegmentation:eg,getViewportSegmentationRepresentations:SG,getViewportSegmentations:CG,removeAllSegmentationRepresentations:mG,removeAllSegmentations:xG,removeColorLUT:qwe,removeContourRepresentation:yG,removeLabelmapRepresentation:vG,removeSegmentation:x8,removeSegmentationRepresentation:rg,removeSurfaceRepresentation:wG,updateLabelmapSegmentationImageReferences:CB},Symbol.toStringTag,{value:"Module"}));function TG(t){if("volumeId"in t){if(t=t,!$e.getVolume(t.volumeId))throw new Error(`volumeId of ${t.volumeId} not found in cache, you should load and cache volume before adding segmentation`)}else if("imageIds"in t){if(t=t,!t.imageIds)throw new Error("The segmentationInput.representationData.imageIds is undefined, please provide a valid representationData.imageIds for stack data")}else throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData")}function Zwe(t){if(!t.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");const e=t.representation.data;TG(e)}function Qwe(t){TG(t)}const exe=Object.freeze(Object.defineProperty({__proto__:null,validate:Qwe,validatePublic:Zwe},Symbol.toStringTag,{value:"Module"}));function _G(t){const e=$e.getVolume(t);if(!e)return null;const r=e.referencedVolumeId;let n;if(r)n=$e.getVolume(r);else{const i=e.imageIds,a=$e.getImage(i[0]).referencedImageId,s=$e.getVolumeContainingImageId(a);n=s==null?void 0:s.volume}return n}function txe({operationData:t}){const{volumeId:e}=t;if(!e){const c=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"No volume id found for the segmentation"},cancelable:!0});return et.dispatchEvent(c),null}const r=$e.getVolume(e),n=_G(e);if(!r||!n)return null;const{imageData:i}=r,{voxelManager:o}=r,{voxelManager:a,imageData:s}=n;return{segmentationImageData:i,segmentationVoxelManager:o,segmentationScalarData:null,imageScalarData:null,imageVoxelManager:a,imageData:s}}function nxe({operationData:t,viewport:e,strategy:r}){var f;const{segmentationId:n}=t;let i,o,a,s,c,l;if(r.ensureSegmentationVolumeFor3DManipulation)r.ensureSegmentationVolumeFor3DManipulation({operationData:t,viewport:e}),o=t.segmentationVoxelManager,i=t.segmentationImageData,a=null;else{const u=Tf(e.id,n);if(!u)return null;const d=Lw(e.id,n);if(!d)return null;const h=$e.getImage(u);i=d.actor.getMapper().getInputData(),o=h.voxelManager;const g=t.imageId,p=$e.getImage(g);if(!p)return null;a=(f=p.getPixelData)==null?void 0:f.call(p)}if(r.ensureImageVolumeFor3DManipulation)r.ensureImageVolumeFor3DManipulation({operationData:t,viewport:e}),c=t.imageVoxelManager,s=t.imageScalarData,l=t.imageData;else{const u=e.getCurrentImageId();if(!u)return null;const d=$e.getImage(u);l=d?null:e.getImageData(),s=(d==null?void 0:d.getPixelData())||l.getScalarData(),c=d==null?void 0:d.voxelManager}return{segmentationImageData:i,segmentationScalarData:a,imageScalarData:s,segmentationVoxelManager:o,imageVoxelManager:c,imageData:l}}function C8({operationData:t,viewport:e,strategy:r}){return t?"volumeId"in t&&t.volumeId!=null||"referencedVolumeId"in t&&t.referencedVolumeId!=null?txe({operationData:t}):nxe({operationData:t,viewport:e,strategy:r}):null}function ig(t){const{representationData:e}=Vn(t);let{volumeId:r}=e.Labelmap,n;if(r&&(n=$e.getVolume(r),n))return n;const{imageIds:i}=e.Labelmap;if(r=$e.generateVolumeId(i),!(!i||i.length===1||!Cf(i)))return n=cm(r,i),n}const EG={[Lt.EnsureSegmentationVolumeFor3DManipulation]:t=>{const{operationData:e,viewport:r}=t,{segmentationId:n,imageIds:i}=e,o=r?r.getImageIds():i.map(c=>$e.getImage(c).referencedImageId);if(!Cf(o))throw new Error("Volume is not reconstructable for sphere manipulation");const s=ig(n);s&&(e.segmentationVoxelManager=s.voxelManager,e.segmentationImageData=s.imageData)}};function Yw(t){if(!t||t.length<=1||!Cf(t))return;const r=$e.generateVolumeId(t);let n=$e.getVolume(r);return n||(n=cm(r,t),n)}const bG={[Lt.EnsureImageVolumeFor3DManipulation]:t=>{const{operationData:e,viewport:r}=t;let n;if(r){if(n=r.getImageIds(),!Cf(n))throw new Error("Volume is not reconstructable for sphere manipulation")}else n=Vn(e.segmentationId).representationData.Labelmap.imageIds.map(s=>$e.getImage(s).referencedImageId);const i=Yw(n);if(!i)throw new Error("Failed to create or get image volume");e.imageVoxelManager=i.voxelManager,e.imageData=i.imageData}},gl=(t,e)=>{ut(et,rt.WEB_WORKER_PROGRESS,{progress:e,type:t})},DG=(t,e)=>{const r=Vn(t),{representationData:n}=r,{Labelmap:i}=n;if(!i)return console.debug("No labelmap found for segmentation",t),null;const o=i.volumeId,a=i.imageIds,s={segmentationId:t,volumeId:o,imageIds:a};let c=!1;if(a){const f=a.map(u=>$e.getImage(u).referencedImageId);c=Cf(f)}let l=e;return l?Array.isArray(l)||(l=[l,255]):l=[Da(t)],{operationData:s,segVolumeId:o,segImageIds:a,reconstructableVolume:c,indices:l}},IG=t=>C8({operationData:t,strategy:{ensureSegmentationVolumeFor3DManipulation:EG.ensureSegmentationVolumeFor3DManipulation,ensureImageVolumeFor3DManipulation:bG.ensureImageVolumeFor3DManipulation}}),OG=t=>{const e=[],r=[];for(const n of t){const i=$e.getImage(n),o=i.getPixelData(),{origin:a,direction:s,spacing:c,dimensions:l}=vw(i);e.push({scalarData:o,dimensions:l,spacing:c,origin:a,direction:s});const f=i.referencedImageId;if(f){const u=$e.getImage(f);if(!u)continue;const d=u.getPixelData(),h=u.voxelManager,g=[u.rowPixelSpacing,u.columnPixelSpacing];r.push({scalarData:d,dimensions:h?h.dimensions:[u.columns,u.rows,1],spacing:g})}}return{segmentationInfo:e,imageInfo:r}},rxe=(t,e)=>{var a;let r;if(t){const c=$e.getVolume(t).imageIds,l=$e.getImage(c[0]);l&&(r=l.referencedImageId)}else e!=null&&e.length&&(r=$e.getImage(e[0]).referencedImageId);const n=$e.getImage(r),i=wt("scalingModule",r),o={isPreScaled:!!((a=n==null?void 0:n.preScale)!=null&&a.scaled),isSuvScaled:typeof(i==null?void 0:i.suvbw)=="number"};return{refImageId:r,modalityUnitOptions:o}},{Labelmap:ixe}=Vt;async function MG({segmentations:t}){qw(),gl(Xa.GENERATE_CONTOUR_SETS,0);const{representationData:e,segments:r=[0,1],segmentationId:n}=t;let{volumeId:i}=e[ixe];if(!i){const g=ig(n);g&&(i=g.volumeId)}const o=$e.getVolume(i);if(!o){console.warn(`No volume found for ${i}`);return}const c={scalarData:o.voxelManager.getCompleteScalarDataArray(),dimensions:o.dimensions,spacing:o.imageData.getSpacing(),origin:o.imageData.getOrigin(),direction:o.imageData.getDirection()},l=Array.isArray(r)?r.filter(g=>g!==null).map(g=>g.segmentIndex||g):Object.values(r).filter(g=>g!==null).map(g=>g.segmentIndex||g),f=await vl().executeTask("compute","generateContourSetsFromLabelmapVolume",{segmentation:c,indices:l,mode:"individual"}),u=o.imageIds.map(g=>{var v;const p=(v=$e.getImage(g))==null?void 0:v.referencedImageId;return p?$e.getImage(p):void 0}),d=u.map(g=>vw(g)),h=f.map(g=>{const p=r[g.segment.segmentIndex]||{};if(!g.sliceContours.length)return null;const v=g.sliceContours[0].polyData.points[0];let y;if(v){const m=d.findIndex(w=>{const{scanAxisNormal:x,origin:C}=w,S=nl(x,C);return wk(v,S)});m!==-1&&(y=u[m].imageId)}return{label:p.label,color:p.color,metadata:{FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:y},sliceContours:g.sliceContours.map(m=>({contours:m.contours,polyData:m.polyData,FrameNumber:m.sliceIndex+1,sliceIndex:m.sliceIndex,FrameOfReferenceUID:o.metadata.FrameOfReferenceUID,referencedImageId:y}))}}).filter(g=>g!==null);return gl(Xa.GENERATE_CONTOUR_SETS,100),h}class PG{constructor(){}static getContourSequence(e,r){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map((a,s)=>{const c=oxe(a),l=axe(o[s],r);return{NumberOfContourPoints:c.length/3,ContourImageSequence:l,ContourGeometricType:"CLOSED_PLANAR",ContourData:c}})}}PG.toolName="RectangleROIStartEndThreshold";function oxe(t){return[...t[0],...t[1],...t[3],...t[2]].flat().map(i=>i.toFixed(2))}function axe(t,e){const r=e.get("sopCommonModule",t);return{ReferencedSOPClassUID:r.sopClassUID,ReferencedSOPInstanceUID:r.sopInstanceUID}}function sxe(t){if(!(t!=null&&t.data))throw new Error("Tool data is empty");if(!t.metadata||t.metadata.referencedImageId)throw new Error("Tool data is not associated with any imageId")}const Ap=class Ap{constructor(){}static convert(e,r,n){sxe(e);const{toolName:i}=e.metadata,o=Ap.TOOL_NAMES[i];if(!o)throw new Error(`Unknown tool type: ${i}, cannot convert to RTSSReport`);const a=o.getContourSequence(e,n),s=[Math.floor(Math.random()*255),Math.floor(Math.random()*255),Math.floor(Math.random()*255)];return{ReferencedROINumber:r+1,ROIDisplayColor:s,ContourSequence:a}}static register(e){Ap.TOOL_NAMES[e.toolName]=e}};Ap.TOOL_NAMES={};let y5=Ap;y5.register(PG);function cxe(t,e){ol.acceptAutoGenerated(t,e)}const{isEqual:lxe}=Rn;function YS(t,e){const{polyline:r}=t.data.contour,{points:n}=t.data.handles,{length:i}=n;if(e===i)return r.length;if(e<0&&(e=(e+i)%i),e===0)return 0;const o=n[e],a=r.findIndex(c=>lxe(o,c));if(a!==-1)return a;let s=1/0;return r.reduce((c,l,f)=>{const u=FR(l,o);return u{const S=({value:O})=>{h=h+1,O>=g.lower&&O<=g.upper&&(d=d+1)},{imageData:T,dimensions:_,lower:E,upper:b}=w,D=RE(T,_,x,C);h=0,d=0,g={lower:E,upper:b};let I=!1;const{voxelManager:P}=T.get("voxelManager");return P.forEach(S,{imageData:T,boundsIJK:D}),s===0?I=d>0:s==1&&(I=d===h),I},v=(w,x)=>{const{imageData:C,lower:S,upper:T}=w,_=C.get("voxelManager").voxelManager,E=_.toIndex(x),b=_.getAtIndex(E);return!(b<=S||b>=T)},y=({index:w,pointIJK:x,pointLPS:C})=>{let S=u.length>0;for(let T=0;T{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=this.constructor.createAnnotationForViewport(l,{data:{handles:{points:[[...s],[...s],[...s],[...s]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}}});ln(f,a);const u=At(a,this.getToolName());return this.editData={annotation:f,viewportIdsToRender:u,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(u),f},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=c.worldToCanvas(f[0]),d=c.worldToCanvas(f[3]),h=this._getRectangleImageCoordinates([u,d]),g=[o[0],o[1]],{left:p,top:v,width:y,height:m}=h;return ZE([p,v,y,m],g)<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;o.worldPosition?l=!0:f=c.handles.points.findIndex(g=>g===o);const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Gt(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.doneEditMemo(),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a))},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world,{points:g}=u.handles;g.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=_e(o),{worldToCanvas:g,canvasToWorld:p}=h.viewport,v=d.world,{points:y}=u.handles;y[c]=[...v];let m,w,x,C,S,T,_,E;switch(c){case 0:case 3:m=g(y[0]),C=g(y[3]),w=[C[0],m[1]],x=[m[0],C[1]],T=p(w),_=p(x),y[1]=T,y[2]=_;break;case 1:case 2:w=g(y[1]),x=g(y[2]),m=[x[0],w[1]],C=[w[0],x[1]],S=p(m),E=p(C),y[0]=S,y[3]=E;break}a.invalidated=!0}this.editData.hasMoved=!0,_e(o),Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(F));u.annotationUID=g;const{color:w,lineWidth:x,lineDash:C}=this.getAnnotationStyle({annotation:h,styleSpecifier:u}),{viewPlaneNormal:S,viewUp:T}=a.getCamera();if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(h,S,T,f,n);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,S,T,f,n),a instanceof ur)){const{referencedImageId:F}=h.metadata;for(const j in p.cachedStats)j.startsWith("imageId")&&f.getStackViewports().find(he=>{const ue=Ur(F),ve=he.hasImageURI(ue),Me=Ur(he.getCurrentImageId());return ve&&Me!==ue})&&delete p.cachedStats[j]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let _;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(_=[m[y]]),_&&or(i,g,"0",_,{color:w});const E=`${g}-rect`;e8(i,g,"0",m,{color:w,lineDash:C,lineWidth:x},E),o=!0;const D=this.getLinkedTextBoxStyle(u,h);if(!D.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const I=this.configuration.getTextLines(p,l);if(!I||I.length===0)continue;if(!p.handles.textBox.hasMoved){const F=Oa(m);p.handles.textBox.worldPosition=a.canvasToWorld(F)}const P=a.worldToCanvas(p.handles.textBox.worldPosition),A=ho(i,g,"1",I,P,m,{},D),{x:V,y:G,width:R,height:N}=A;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([V,G]),topRight:a.canvasToWorld([V+R,G]),bottomLeft:a.canvasToWorld([V,G+N]),bottomRight:a.canvasToWorld([V+R,G+N])}}return o},this._getRectangleImageCoordinates=n=>{const[i,o]=n;return{left:Math.min(i[0],o[0]),top:Math.min(i[1],o[1]),width:Math.abs(i[0]-o[0]),height:Math.abs(i[1]-o[1])}},this._calculateCachedStats=(n,i,o,a,s)=>{var v,y,m,w;if(!this.configuration.calculateStats)return;const{data:c}=n,{viewport:l}=s,{element:f}=l,u=c.handles.points[0],d=c.handles.points[3],{cachedStats:h}=c,g=Object.keys(h);for(let x=0;xhr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}};R0.toolName="RectangleROI",R0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=R0.hydrateBase(R0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let ou=R0;function fxe(t,e){const r=t.cachedStats[e],{area:n,mean:i,max:o,stdDev:a,areaUnit:s,modalityUnit:c,min:l}=r;if(i==null)return;const f=[];return Ar(n)&&f.push(`Area: ${un(n)} ${s}`),Ar(i)&&f.push(`Mean: ${un(i)} ${c}`),Ar(o)&&f.push(`Max: ${un(o)} ${c}`),Ar(l)&&f.push(`Max: ${un(l)} ${c}`),Ar(a)&&f.push(`Std Dev: ${un(a)} ${c}`),f}const{transformWorldToIndex:Lg}=Rn;class S8 extends ou{constructor(e={},r={configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:dxe,statsCalculator:dl,showTextBox:!1,throttleTimeout:100}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u;let g,p,v;if(l instanceof lr)throw new Error("Stack Viewport Not implemented");{const T=this.getTargetId(l);v=yl(T),p=$e.getVolume(v),g=Zl(p,s,d)}const y=xf(p,d),m=this._getStartCoordinate(s,d),w=this._getEndCoordinate(s,y,d),x=l.getFrameOfReferenceUID(),C={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:c,viewUp:[...h],FrameOfReferenceUID:x,referencedImageId:g,toolName:this.getToolName(),volumeId:v,spacingInNormal:y},data:{label:"",startCoordinate:m,endCoordinate:w,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[g],statistics:[]},handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(C,p),ln(C,a);const S=At(a,this.getToolName());return this.editData={annotation:C,viewportIdsToRender:S,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),C},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const d=this.getTargetId(u.viewport),h=$e.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(a,d,h,u),Be(s),c?Un(a):cn(a,o)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;let s=hn(this.getToolName(),a.element);if(!(s!=null&&s.length))return o;s=zw(s,a.getCamera());const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let l=0;la.worldToCanvas(R));c.annotationUID=u;const w=this.getStyle("lineWidth",c,f),x=this.getStyle("lineDash",c,f),C=this.getStyle("color",c,f),S=a.getCamera().focalPoint,T=a.getCamera().viewPlaneNormal;let _=g,E=p;if(Array.isArray(g)){_=this._getCoordinateForViewplaneNormal(_,T);const R=this._getIndexOfCoordinatesForViewplaneNormal(T);d.handles.points.forEach(N=>{N[R]=_}),d.startCoordinate=_}Array.isArray(p)&&(E=this._getCoordinateForViewplaneNormal(E,T),d.endCoordinate=E,d.endCoordinate=E);const b=Bu(_),D=Bu(E),I=this._getCoordinateForViewplaneNormal(S,T),P=Bu(I);if(PMath.max(b,D))continue;f.invalidated&&this._throttledCalculateCachedStats(f,n);let O=!1;if((P===b||P===D)&&(O=!0),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let A;if(!Kr(u))continue;!si(u)&&!this.editData&&y!==null&&O&&(A=[m[y]]),A&&or(i,u,"0",A,{color:C});let V=x;if(O||(V=2),Em(i,u,"0",m[0],m[3],{color:C,lineDash:V,lineWidth:w}),o=!0,this.configuration.showTextBox){const R=this.getLinkedTextBoxStyle(c,f);if(!R.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const N=this.configuration.getTextLines(d,{metadata:h});if(!N||N.length===0)continue;if(!d.handles.textBox.hasMoved){const Me=Oa(m);d.handles.textBox.worldPosition=a.canvasToWorld(Me)}const F=a.worldToCanvas(d.handles.textBox.worldPosition),te=ho(i,u,"1",N,F,m,{},R),{x:ie,y:he,width:ue,height:ve}=te;d.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([ie,he]),topRight:a.canvasToWorld([ie+ue,he]),bottomLeft:a.canvasToWorld([ie,he+ve]),bottomRight:a.canvasToWorld([ie+ue,he+ve])}}}return o},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=Wo(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=Yh(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,r){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:s}=r,{startCoordinate:c,endCoordinate:l}=n,{points:f}=n.handles,u=Lg(s,f[0]),d=Lg(s,f[0]),h=Ke();s.indexToWorldVec3(u,h);const g=Ke();s.indexToWorldVec3(d,g),this._getIndexOfCoordinatesForViewplaneNormal(o)==2?(h[2]=c,g[2]=l):this._getIndexOfCoordinatesForViewplaneNormal(o)==0?(h[0]=c,g[0]=l):this._getIndexOfCoordinatesForViewplaneNormal(o)==1&&(h[1]=c,g[1]=l);const p=Qi(h,g),v=[];for(let y=0;y{const w=Ke();return On(w,m,o,y),Array.from(w)}));n.cachedStats.projectionPoints=v}_computePointsInsideVolume(e,r,n,i){var S,T,_;const{data:o,metadata:a}=e,{viewPlaneNormal:s,viewUp:c}=a,{viewport:l}=i,f=o.cachedStats.projectionPoints,u=[[]],d=this.getTargetImageData(r),h=o.handles.points[0],g=o.handles.points[3],{worldWidth:p,worldHeight:v}=Ww(s,c,h,g),y=Ia(d,o.habdles),m=Math.abs(p*v)/(y.scale*y.scale),w={isPreScaled:lu(l,r),isSuvScaled:this.isSuvScaled(l,r,e.metadata.referencedImageId)},x=uu(a.Modality,e.metadata.referencedImageId,w);for(let E=0;E{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getTargetId(l);let p,v;if(l instanceof lr)p=g.split("imageId:")[1];else{v=yl(g);const x=$e.getVolume(v);p=Zl(x,s,d)}const y=l.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:c,viewUp:[...h],FrameOfReferenceUID:y,referencedImageId:p,toolName:this.getToolName(),volumeId:v},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},segmentationId:null}};ln(m,a);const w=At(a,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(w),m},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(S));l.annotationUID=d;const y=this.getStyle("lineWidth",l,u),m=this.getStyle("lineDash",l,u),w=this.getStyle("color",l,u);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;cn(u,s);let x;if(!Kr(d))continue;!si(d)&&!this.editData&&p!==null&&(x=[v[p]]),x&&or(i,d,"0",x,{color:w}),Em(i,d,"0",v[0],v[3],{color:w,lineDash:m,lineWidth:y}),o=!0}return o}}}T8.toolName="RectangleROIThreshold";function LG(t,e,r={}){const n=[];return t.forEach(o=>{var h,g;const{data:a}=o,{points:s}=a.handles,{imageData:c,dimensions:l}=e;let f=s;if((h=a.cachedStats)!=null&&h.projectionPoints){const{projectionPoints:p}=a.cachedStats;f=[].concat(...p)}const u=f.map(p=>zr(c,p));let d=cf(u,l);r.numSlicesToProject&&!((g=a.cachedStats)!=null&&g.projectionPoints)&&(d=cG(d,r.numSlicesToProject)),n.push(d)}),n.length===1?n[0]:n.reduce((o,a)=>({iMin:Math.min(o.iMin,a.iMin),jMin:Math.min(o.jMin,a.jMin),kMin:Math.min(o.kMin,a.kMin),iMax:Math.max(o.iMax,a.iMax),jMax:Math.max(o.jMax,a.jMax),kMax:Math.max(o.kMax,a.kMax)}),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})}function hxe(t,e,r,n){const i=t.map(s=>mr.getAnnotation(s));gxe(i);let o;for(let s=0;s{if(!Zt(f,t[0].dimensions)||!Zt(l,t[0].direction)||!Zt(d,t[0].spacing)||!Zt(u,t[0].origin))throw new Error("labelmaps must have the same size and shape")});const n=t[0],i=n.voxelManager.getConstructor(),o=new i(n.voxelManager.getScalarDataLength());t.forEach(l=>{const f=l.voxelManager,u=f.getScalarDataLength();for(let d=0;d0;)g(f.pop());return{flooded:u};function g(_){const E=_.currentArgs,b=_.previousArgs;p(E)||(v(E),y(E)?(m(E),x(E)):w(b))}function p(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));return d.has(I)}function v(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));d.add(I)}function y(_){const E=C(_);return o?o(E,c):E===c}function m(_){u.push(_),n&&n(..._)}function w(_){const[E,b,D=0]=_,I=E+32768+65536*(b+32768+65536*(D+32768));h==null||h.set(I,_),i&&i(..._)}function x(_){for(let E=0;E{const{segmentIndex:e,previewSegmentIndex:r,segmentationVoxelManager:n,centerIJK:i,viewPlaneNormal:o,segmentationImageData:a,configuration:s}=t;if(!(s!=null&&s.useCenterSegmentIndex))return;let c=!1,l=!1;const f=[...n.getBoundsIJK()];Math.abs(o[0])>.8?f[0]=[i[0],i[0]]:Math.abs(o[1])>.8?f[1]=[i[1],i[1]]:Math.abs(o[2])>.8&&(f[2]=[i[2],i[2]]);const u=({value:h})=>{c||(c=h===e),l||(l=h===r)};if(n.forEach(u,{imageData:a,isInObject:t.isInObject,boundsIJK:f}),!c&&!l){t.centerSegmentIndexInfo.segmentIndex=null;return}const d=n.getAtIJKPoint(i);t.centerSegmentIndexInfo.segmentIndex=d,t.centerSegmentIndexInfo.hasSegmentIndex=c,t.centerSegmentIndexInfo.hasPreviewIndex=l}},wxe={[Lt.Initialize]:t=>{var y;const{operationName:e,centerIJK:r,segmentationVoxelManager:n,imageVoxelManager:i,configuration:o,segmentIndex:a,viewport:s}=t;if(!((y=o==null?void 0:o.threshold)!=null&&y.isDynamic)||!r||!a||e===Lt.RejectPreview||e===Lt.OnInteractionEnd)return;const c=n.getBoundsIJK(),{range:l,dynamicRadius:f=0}=o.threshold,u=l?0:f,{viewPlaneNormal:d}=s.getCamera(),h=c.map((m,w)=>{const[x,C]=m;return[Math.max(x,r[w]-u),Math.min(C,r[w]+u)]});Math.abs(d[0])>.8?h[0]=[r[0],r[0]]:Math.abs(d[1])>.8?h[1]=[r[1],r[1]]:Math.abs(d[2])>.8&&(h[2]=[r[2],r[2]]);const g=l||[1/0,-1/0],p=u*u,v=({value:m,pointIJK:w})=>{if(sS(r,w)>p)return;const C=Array.isArray(m)?yh(m):m;g[0]=Math.min(C,g[0]),g[1]=Math.max(C,g[1])};i.forEach(v,{boundsIJK:h}),o.threshold.range=g},[Lt.OnInteractionStart]:t=>{var r;const{configuration:e}=t;(r=e==null?void 0:e.threshold)!=null&&r.isDynamic&&(e.threshold.range=null)},[Lt.ComputeInnerCircleRadius]:t=>{const{configuration:e,viewport:r}=t,{dynamicRadius:n=0,isDynamic:i}=e.threshold;if(!i){e.threshold.dynamicRadiusInCanvas=0;return}if(n===0)return;const o=r.getImageData();if(!o)return;const{spacing:a}=o,s=[r.element.clientWidth/2,r.element.clientHeight/2],c=n*a[0],f=r.canvasToWorld(s).map(h=>h+c),u=r.worldToCanvas(f),d=Math.abs(s[0]-u[0]);e.threshold.dynamicRadiusInCanvas||(e.threshold.dynamicRadiusInCanvas=0),e.threshold.dynamicRadiusInCanvas=3+d}},xxe={[Lt.Initialize]:t=>{t.segmentIndex=0}},{isEqual:MC}=Rn,ZI={toIJK:t=>t,fromIJK:t=>t,type:"acquistion"},Cxe={toIJK:([t,e,r])=>[r,t,e],fromIJK:([t,e,r])=>[e,r,t],type:"jk"},Sxe={toIJK:([t,e,r])=>[t,r,e],fromIJK:([t,e,r])=>[t,r,e],type:"ik"};function NG(t,e){if(!(t instanceof Tr))return{...ZI,boundsIJKPrime:e};const{viewPlaneNormal:r}=t.getCamera(),n=MC(Math.abs(r[0]),1)&&Cxe||MC(Math.abs(r[1]),1)&&Sxe||MC(Math.abs(r[2]),1)&&ZI;return n?{...n,boundsIJKPrime:n.fromIJK(e)}:{toIJK:null,boundsIJKPrime:null,fromIJK:null,error:`Only mappings orthogonal to acquisition plane are permitted, but requested ${r}`}}const{RLEVoxelMap:Txe,VoxelManager:_xe}=Rn,Exe=65535;var po;(function(t){t[t.SEGMENT=-1]="SEGMENT",t[t.ISLAND=-2]="ISLAND",t[t.INTERIOR=-3]="INTERIOR",t[t.EXTERIOR=-4]="EXTERIOR",t[t.INTERIOR_SMALL=-5]="INTERIOR_SMALL",t[t.INTERIOR_TEST=-6]="INTERIOR_TEST"})(po||(po={}));class Pd{constructor(e){this.fillInternalEdge=!1,this.maxInternalRemove=128,this.maxInternalRemove=(e==null?void 0:e.maxInternalRemove)??this.maxInternalRemove,this.fillInternalEdge=(e==null?void 0:e.fillInternalEdge)??this.fillInternalEdge}initialize(e,r,n){const i=!!r.sourceVoxelManager,o=i?r.sourceVoxelManager:r,a=i?r:_xe.createRLEHistoryVoxelManager(o),{segmentIndex:s=1,previewSegmentIndex:c=1}=n,l=n.points||o.getPoints();if(!(l!=null&&l.length))return;const f=o.getBoundsIJK().map((x,C)=>[Math.min(x[0],...l.map(S=>S[C])),Math.max(x[1],...l.map(S=>S[C]))]);if(f.find(x=>x[0]<0||x[1]>Exe))return;const{toIJK:u,fromIJK:d,boundsIJKPrime:h,error:g}=NG(e,f);if(g){console.warn("Not performing island removal for planes not orthogonal to acquisition plane",g);return}const[p,v,y]=d(o.dimensions),m=new Txe(p,v,y),w=(x,C,S)=>{const T=o.toIndex(u([x,C,S])),_=o.getAtIndex(T);if(_===c||_===s)return po.SEGMENT};return m.fillFrom(w,h),m.normalizer={toIJK:u,fromIJK:d,boundsIJKPrime:h},this.segmentSet=m,this.previewVoxelManager=a,this.segmentIndex=s,this.previewSegmentIndex=c??s,this.selectedPoints=l,!0}floodFillSegmentIsland(){const{selectedPoints:e,segmentSet:r}=this;let n=0;const{fromIJK:i}=r.normalizer;return e.forEach(o=>{const a=i(o),s=r.toIndex(a),[c,l,f]=a;r.get(s)===po.SEGMENT&&(n+=r.floodFill(c,l,f,po.ISLAND))}),n}removeExternalIslands(){const{previewVoxelManager:e,segmentSet:r}=this,{toIJK:n}=r.normalizer,i=(o,a)=>{const[,s,c]=r.toIJK(o);if(a.value!==po.ISLAND)for(let l=a.start;l{let f;for(const u of[...l])if(u.value===po.ISLAND){if(!f){if(this.fillInternalEdge&&u.start>0)for(let d=0;d{if(l.value!==po.INTERIOR)return;const[,f,u]=e.toIJK(c),d=f>0?e.getRun(f-1,u):null,h=f+12&&(!v||!y)&&e.floodFill(l.start,f,u,po.EXTERIOR,{singlePlane:!0})}),e.forEach((c,l)=>{if(l.value!==po.INTERIOR)return;const[,f,u]=e.toIJK(c),g=e.floodFill(l.start,f,u,po.INTERIOR_TEST)>this.maxInternalRemove?po.EXTERIOR:po.INTERIOR_SMALL;e.floodFill(l.start,f,u,g)}),e.forEach((c,l)=>{if(l.value===po.INTERIOR_SMALL)for(let f=l.start;f=o.start&&n=i))return!0;return!1}}const bxe={[Lt.OnInteractionEnd]:t=>{const{previewSegmentIndex:e,segmentIndex:r,viewport:n,segmentationVoxelManager:i,activeStrategy:o,memo:a}=t;if(o!=="THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL"||r===null)return;const s=new Pd,c=(a==null?void 0:a.voxelManager)||i;if(!s.initialize(n,c,{previewSegmentIndex:e,segmentIndex:r}))return;s.floodFillSegmentIsland(),s.removeExternalIslands(),s.removeInternalIslands();const l=c.getArrayOfModifiedSlices();l&&To(t.segmentationId,l,e)}},Dxe={[Lt.Preview]:function(t){var o,a;const{previewSegmentIndex:e,configuration:r,enabledElement:n}=t;if(!e||!r)return;(o=this.onInteractionStart)==null||o.call(this,n,t);const i=this.fill(n,t);return i&&((a=this.onInteractionEnd)==null||a.call(this,n,t)),i},[Lt.Initialize]:t=>{const{segmentIndex:e,previewColor:r,previewSegmentIndex:n}=t;if(n==null||e==null)return;const i=eg(t.segmentationId);i==null||i.forEach(o=>{gB(o,t.segmentationId,n,r)})},[Lt.AcceptPreview]:t=>{const{previewSegmentIndex:e,segmentationVoxelManager:r,memo:n,segmentIndex:i,centerSegmentIndexInfo:o}=t||{},{changedIndices:a}=o||{},s=n,c=({index:l})=>{const f=r.getAtIndex(l);(a==null?void 0:a.length)>0?a.includes(l)&&s.voxelManager.setAtIndex(l,0):f===e&&s.voxelManager.setAtIndex(l,i)};r.forEach(c),To(t.segmentationId,r.getArrayOfModifiedSlices(),i),t.centerSegmentIndexInfo.changedIndices=[]},[Lt.RejectPreview]:t=>{t&&vV.undoIf(e=>{const r=e;if(!(r!=null&&r.voxelManager))return!1;const{segmentationVoxelManager:n}=r;let i=!1;const o=({value:a})=>{a===t.previewSegmentIndex&&(i=!0)};return n.forEach(o),i})}},Ixe={[Lt.Fill]:t=>{var l;const{segmentsLocked:e,segmentationImageData:r,segmentationVoxelManager:n,brushStrategy:i,centerIJK:o}=t,a=(l=i.createIsInThreshold)==null?void 0:l.call(i,t),{setValue:s}=i,c=a?f=>{const{value:u,index:d}=f;e.includes(u)||!a(d)||s(t,f)}:f=>s(t,f);n.forEach(c,{imageData:r,isInObject:t.isInObject,boundsIJK:t.isInObjectBoundsIJK}),n.addPoint(o)}};function Oxe({operationData:t,existingValue:e,index:r}){const{previewSegmentIndex:n,memo:i,centerSegmentIndexInfo:o,previewOnHover:a,segmentIndex:s}=t,{hasPreviewIndex:c,hasSegmentIndex:l,segmentIndex:f}=o;if(f===0&&l&&c){if(e===s||a)return;if(e===n){i.voxelManager.setAtIndex(r,0);return}return}if(f===0&&l&&!c){if(e===0||e!==s)return;i.voxelManager.setAtIndex(r,n),o.changedIndices.push(r);return}if(f===0&&!l&&c){if(e===s||a)return;if(e===n){i.voxelManager.setAtIndex(r,0);return}return}if(f===0&&!l&&!c){if(e===s)return;if(e===n){i.voxelManager.setAtIndex(r,n);return}return}if(f===n&&l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===n&&!l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===s&&l&&c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}if(f===s&&l&&!c){if(e===s)return;i.voxelManager.setAtIndex(r,n);return}}const Mxe={[Lt.INTERNAL_setValue]:(t,{value:e,index:r})=>{const{segmentsLocked:n,previewSegmentIndex:i,memo:o,segmentationVoxelManager:a,centerSegmentIndexInfo:s,segmentIndex:c}=t,l=a.getAtIndex(r);if(!n.includes(e)&&!(!s&&l===c)&&!((s==null?void 0:s.segmentIndex)!==0&&l===c)){if((s==null?void 0:s.segmentIndex)===null){o.voxelManager.setAtIndex(r,i??c);return}if(!i){let f=c;s&&(f=s.segmentIndex),o.voxelManager.setAtIndex(r,f);return}Oxe({operationData:t,existingValue:l,index:r})}}},Pxe={[Lt.CreateIsInThreshold]:t=>{const{imageVoxelManager:e,segmentIndex:r,configuration:n}=t;if(!(!n||!r))return i=>{var c;const o=e.getAtIndex(i),a=Array.isArray(o)?ta(o):o,{threshold:s}=n||{};return(c=s==null?void 0:s.range)!=null&&c.length?s.range[0]<=a&&a<=s.range[1]:!0}}},QI=10;function w5(){return{maxIJKs:[]}}function kG(t,e){const{value:r}=e,{maxIJKs:n}=t,i=n.length;if(typeof r!="number"||i>=QI&&r=n[i-1].value)n.push(o);else for(let a=0;a=QI&&n.splice(0,1)}function VG(t,e,r){const{spacing:n,calibration:i}=r,{volumeUnit:o}=Ia({calibration:i,hasPixelSpacing:!0},[]),a=n?n[0]*n[1]*n[2]:1;return e.volume={value:Array.isArray(e.count.value)?e.count.value.map(s=>s*a):e.count.value*a,unit:o,name:"volume",label:"Volume"},e.maxIJKs=t.maxIJKs.filter(s=>s.pointIJK!==void 0),e.array.push(e.volume),t.maxIJKs=[],e}const nb=class nb extends dl{static statsInit(e){super.statsInit(e),this.volumetricState=w5()}static statsCallback(e){super.statsCallback(e),kG(this.volumetricState,e)}static getStatistics(e){const r={...e,unit:(e==null?void 0:e.unit)||"none",calibration:e==null?void 0:e.calibration,hasPixelSpacing:e==null?void 0:e.hasPixelSpacing},n=super.getStatistics(r);return VG(this.volumetricState,n,r)}};nb.volumetricState=w5();let hd=nb;class e7 extends MU{constructor(e){super(e),this.volumetricState=w5()}statsInit(e){super.statsInit(e),this.volumetricState=w5()}statsCallback(e){super.statsCallback(e),kG(this.volumetricState,e)}getStatistics(e){const r={...e,unit:(e==null?void 0:e.unit)||"none",calibration:e==null?void 0:e.calibration,hasPixelSpacing:e==null?void 0:e.hasPixelSpacing},n=super.getStatistics(r);return VG(this.volumetricState,n,r)}}const Rxe=Math.pow(3*1e3/(4*Math.PI),1/3);async function FG({segmentationId:t,segmentIndices:e,mode:r="collective"}){qw(),gl(Xa.COMPUTE_STATISTICS,0);const n=DG(t,e);if(!n)return;const{operationData:i,segVolumeId:o,segImageIds:a,reconstructableVolume:s,indices:c}=n,{refImageId:l,modalityUnitOptions:f}=rxe(o,a),u=vB(l,f);return s?await Lxe({operationData:i,indices:c,unit:u,mode:r}):await Axe({segImageIds:a,indices:c,unit:u,mode:r})}async function Lxe({operationData:t,indices:e,unit:r,mode:n}){var p;const i=IG(t),{segmentationVoxelManager:o,imageVoxelManager:a,segmentationImageData:s,imageData:c}=i;if(!o||!s)return;const l=s.getSpacing(),{boundsIJK:f}=o;if(!f)return hd.getStatistics({spacing:l});const d={scalarData:o.getCompleteScalarDataArray(),dimensions:s.getDimensions(),spacing:s.getSpacing(),origin:s.getOrigin(),direction:s.getDirection()},h={scalarData:a.getCompleteScalarDataArray(),dimensions:c.getDimensions(),spacing:c.getSpacing(),origin:c.getOrigin(),direction:c.getDirection()};if(!((p=h.scalarData)!=null&&p.length))return;const g=await vl().executeTask("compute","calculateSegmentsStatisticsVolume",{segmentationInfo:d,imageInfo:h,indices:e,unit:r,mode:n});if(gl(Xa.COMPUTE_STATISTICS,100),n==="collective")return x5({stats:g,unit:r,spacing:l,segmentationImageData:s,imageVoxelManager:a});{const v={};return Object.entries(g).forEach(([y,m])=>{v[y]=x5({stats:m,unit:r,spacing:l,segmentationImageData:s,imageVoxelManager:a})}),v}}const PC=(t,e)=>{if(!t.array)return;const r=t.array.findIndex(n=>n.name===e.name);r!==-1?t.array[r]=e:t.array.push(e)},x5=({stats:t,unit:e,spacing:r,segmentationImageData:n,imageVoxelManager:i})=>{if(t.mean.unit=e,t.max.unit=e,t.min.unit=e,e!=="SUV")return t;const o=r.map(a=>Math.max(1,Math.round(1.1*Rxe/a)));for(const a of t.maxIJKs){const s=Nxe(a,o,n,i,r);if(!s)continue;const{mean:c}=s;(!t.peakValue||t.peakValue.value<=c.value)&&(t.peakValue={name:"peakValue",label:"Peak Value",value:c.value,unit:e},t.peakPoint={name:"peakLPS",label:"Peak SUV Point",value:a.pointLPS?[...a.pointLPS]:null,unit:null},PC(t,t.peakValue),PC(t,t.peakPoint))}if(t.volume&&t.mean){const a=t.volume.value,s=t.mean.value;t.lesionGlycolysis={name:"lesionGlycolysis",label:"Lesion Glycolysis",value:a*s,unit:`${t.volume.unit}·${e}`},PC(t,t.lesionGlycolysis)}return t};async function Axe({segImageIds:t,indices:e,unit:r,mode:n}){gl(Xa.COMPUTE_STATISTICS,0);const{segmentationInfo:i,imageInfo:o}=OG(t),a=await vl().executeTask("compute","calculateSegmentsStatisticsStack",{segmentationInfo:i,imageInfo:o,indices:e,mode:n});gl(Xa.COMPUTE_STATISTICS,100);const s=i[0].spacing,c=i[0],l=o[0].voxelManager;if(n==="collective")return x5({stats:a,unit:r,spacing:s,segmentationImageData:c,imageVoxelManager:l});{const f={};return Object.entries(a).forEach(([u,d])=>{f[u]=x5({stats:d,unit:r,spacing:s,segmentationImageData:c,imageVoxelManager:l})}),f}}function Nxe(t,e,r,n,i){const{pointIJK:o,pointLPS:a}=t;if(!o)return;const s=o.map((f,u)=>[f-e[u],f+e[u]]),c=(f,u)=>{const d=(u[0]-o[0])/e[0],h=(u[1]-o[1])/e[1],g=(u[2]-o[2])/e[2];return d*d+h*h+g*g<=1},l=({pointIJK:f,pointLPS:u})=>{const d=n.getAtIJKPoint(f);d!==void 0&&hd.statsCallback({value:d,pointLPS:u,pointIJK:f})};return hd.statsInit({storePointData:!1}),z4(r,{pointInShapeFn:c,callback:l,boundsIJK:s}),hd.getStatistics({spacing:i})}const kxe={[Lt.GetStatistics]:function(t,e,r){const{indices:n}=r,{segmentationId:i,viewport:o}=e;FG({segmentationId:i,segmentIndices:n})}},Cn={determineSegmentIndex:yxe,dynamicThreshold:wxe,erase:xxe,islandRemoval:bxe,preview:Dxe,regionFill:Ixe,setValue:Mxe,threshold:Pxe,labelmapStatistics:kxe,ensureSegmentationVolumeFor3DManipulation:EG,ensureImageVolumeFor3DManipulation:bG},Zf=class Zf{constructor(e,...r){this._initialize=[],this._fill=[],this._onInteractionStart=[],this.fill=(n,i)=>{const o=this.initialize(n,i,Lt.Fill);if(!o)return;this._fill.forEach(c=>c(o));const{segmentationVoxelManager:a,segmentIndex:s}=o;return To(o.segmentationId,a.getArrayOfModifiedSlices(),s),o},this.onInteractionStart=(n,i)=>{const o=this.initialize(n,i);o&&this._onInteractionStart.forEach(a=>a.call(this,o))},this.addPreview=(n,i)=>{const o=this.initialize(n,i,Lt.AddPreview);if(o)return o},this.configurationName=e,this.compositions=r,r.forEach(n=>{const i=typeof n=="function"?n():n;if(i)for(const o in i){if(!Zf.childFunctions[o])throw new Error(`Didn't find ${o} as a brush strategy`);Zf.childFunctions[o](this,i[o])}}),this.strategyFunction=(n,i)=>this.fill(n,i);for(const n of Object.keys(Zf.childFunctions))this.strategyFunction[n]=this[n]}initialize(e,r,n){const{viewport:i}=e,o=C8({operationData:r,viewport:i,strategy:this});if(!o)return null;const{imageVoxelManager:a,segmentationVoxelManager:s,segmentationImageData:c}=o,l=r.createMemo(r.segmentationId,s),f={operationName:n,...r,segmentIndex:r.segmentIndex,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:s,segmentationImageData:c,viewport:i,centerWorld:null,isInObject:null,isInObjectBoundsIJK:null,brushStrategy:this,memo:l};return this._initialize.forEach(u=>u(f)),f}};Zf.COMPOSITIONS=Cn,Zf.childFunctions={[Lt.OnInteractionStart]:$s(Lt.OnInteractionStart,Lt.Initialize),[Lt.OnInteractionEnd]:$s(Lt.OnInteractionEnd,Lt.Initialize),[Lt.Fill]:$s(Lt.Fill),[Lt.Initialize]:$s(Lt.Initialize),[Lt.CreateIsInThreshold]:zv(Lt.CreateIsInThreshold),[Lt.Interpolate]:$s(Lt.Interpolate,Lt.Initialize),[Lt.AcceptPreview]:$s(Lt.AcceptPreview,Lt.Initialize),[Lt.RejectPreview]:$s(Lt.RejectPreview,Lt.Initialize),[Lt.INTERNAL_setValue]:zv(Lt.INTERNAL_setValue),[Lt.Preview]:zv(Lt.Preview,!1),[Lt.ComputeInnerCircleRadius]:$s(Lt.ComputeInnerCircleRadius),[Lt.EnsureSegmentationVolumeFor3DManipulation]:$s(Lt.EnsureSegmentationVolumeFor3DManipulation),[Lt.EnsureImageVolumeFor3DManipulation]:$s(Lt.EnsureImageVolumeFor3DManipulation),[Lt.AddPreview]:$s(Lt.AddPreview),[Lt.GetStatistics]:zv(Lt.GetStatistics),compositions:null};let pc=Zf;function $s(t,e){const r=`_${t}`;return(n,i)=>{n[r]||(n[r]=[]),n[r].push(i),n[t]||(n[t]=e?(o,a,...s)=>{const c=n[e](o,a,t);let l;return n[r].forEach(f=>{const u=f.call(n,c,...s);l||(l=u)}),l}:(o,...a)=>{n[r].forEach(s=>s.call(n,o,...a))})}}function zv(t,e=!0){return(r,n)=>{if(r[t])throw new Error(`The singleton method ${t} already exists`);r[t]=e?n:(i,o,...a)=>(o.enabledElement=i,n.call(r,o,...a))}}function UG(t,e){const{center:r,radius:n}=t,i=t.radius2||n*n;return(e[0]-r[0])*(e[0]-r[0])+(e[1]-r[1])*(e[1]-r[1])+(e[2]-r[2])*(e[2]-r[2])<=i}const{transformWorldToIndex:t7,isEqual:RC}=Rn,BG={[Lt.Initialize]:t=>{const{points:e,viewport:r,segmentationImageData:n}=t;if(!e)return;const i=Ft(0,0,0);e.forEach(d=>{ri(i,i,d)}),Ir(i,i,1/e.length),t.centerWorld=i,t.centerIJK=t7(n,i);const o=e.map(d=>r.worldToCanvas(d)),[a,s]=a5(o),c=r.canvasToWorld(a),l=r.canvasToWorld(s),f=e.map(d=>t7(n,d)),u=cf(f,n.getDimensions());t.isInObject=GG({topLeftWorld:c,bottomRightWorld:l,center:i}),t.isInObjectBoundsIJK=u}};function GG(t){const{topLeftWorld:e,bottomRightWorld:r,center:n}=t,i=Math.abs(e[0]-r[0])/2,o=Math.abs(e[1]-r[1])/2,a=Math.abs(e[2]-r[2])/2,s=Math.max(i,o,a);if(RC(i,s)&&RC(o,s)&&RC(a,s)){const f={center:n,radius:s,radius2:s*s};return u=>UG(f,u)}const c={center:n,xRadius:i,yRadius:o,zRadius:a},{precalculated:l}=jE(c,{});return l}const WG=new pc("Circle",Cn.regionFill,Cn.setValue,BG,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics),Vxe=new pc("CircleThreshold",Cn.regionFill,Cn.setValue,BG,Cn.determineSegmentIndex,Cn.dynamicThreshold,Cn.threshold,Cn.preview,Cn.islandRemoval,Cn.labelmapStatistics),Jw=WG.strategyFunction,Fxe=Vxe.strategyFunction;function Uxe(){throw new Error("Not yet implemented")}const{transformWorldToIndex:Bxe}=Rn,Gxe={[Lt.Initialize]:t=>{const{points:e,viewport:r,segmentationImageData:n}=t;if(!e)return;const i=Ft(0,0,0);e.forEach(c=>{ri(i,i,c)}),Ir(i,i,1/e.length),t.centerWorld=i,t.centerIJK=Bxe(n,i);const{boundsIJK:o,topLeftWorld:a,bottomRightWorld:s}=Pwe(e.slice(0,2),n,r);t.isInObjectBoundsIJK=o,t.isInObject=GG({topLeftWorld:a,bottomRightWorld:s,center:i})}},Zw=new pc("Sphere",Cn.regionFill,Cn.setValue,Gxe,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics,Cn.ensureSegmentationVolumeFor3DManipulation),zG=Zw.strategyFunction,Wxe=new pc("SphereThreshold",...Zw.compositions,Cn.dynamicThreshold,Cn.threshold,Cn.ensureSegmentationVolumeFor3DManipulation,Cn.ensureImageVolumeFor3DManipulation),zxe=new pc("SphereThreshold",...Zw.compositions,Cn.dynamicThreshold,Cn.threshold,Cn.islandRemoval,Cn.ensureSegmentationVolumeFor3DManipulation,Cn.ensureImageVolumeFor3DManipulation),$xe=Wxe.strategyFunction,jxe=zxe.strategyFunction,Hxe=new pc("EraseSphere",Cn.erase,...Zw.compositions),$G=Hxe.strategyFunction,Kxe=new pc("EraseCircle",Cn.erase,...WG.compositions),jG=Kxe.strategyFunction,{VoxelManager:JS,RLEVoxelMap:qxe}=Rn;function ZS(t,e){return KG(t,e)}function HG(t){const{segmentationVoxelManager:e,undoVoxelManager:r,redoVoxelManager:n}=this,i=t===!1?n:r;i.forEach(({value:a,pointIJK:s})=>{e.setAtIJKPoint(s,a)});const o=i.getArrayOfModifiedSlices();To(this.segmentationId,o)}function KG(t,e){const r=JS.createRLEHistoryVoxelManager(e);return{segmentationId:t,restoreMemo:HG,commitMemo:Xxe,segmentationVoxelManager:e,voxelManager:r,id:Pn(),operationType:"labelmap"}}function Xxe(){if(this.redoVoxelManager)return!0;if(!this.voxelManager.modifiedSlices.size)return!1;const{segmentationVoxelManager:t}=this,e=JS.createRLEHistoryVoxelManager(t);qxe.copyMap(e.map,this.voxelManager.map);for(const n of this.voxelManager.modifiedSlices.keys())e.modifiedSlices.add(n);this.undoVoxelManager=e;const r=JS.createRLEVolumeVoxelManager({dimensions:this.segmentationVoxelManager.dimensions});return this.redoVoxelManager=r,e.forEach(({index:n,pointIJK:i,value:o})=>{const a=t.getAtIJKPoint(i);a!==o&&r.setAtIndex(n,a)}),!0}const Yxe=Object.freeze(Object.defineProperty({__proto__:null,createLabelmapMemo:ZS,createRleMemo:KG,restoreMemo:HG},Symbol.toStringTag,{value:"Module"})),{isEqual:$v}=Rn,Jxe=Ft(1,0,0),Zxe=Ft(0,1,0),Qxe=Ft(0,0,1),n7=[Jxe,Zxe,Qxe];function qG(t){const e=qn(Ke(),t[0],t[1]),r=qn(Ke(),t[0],t[2]),n=r7(e,n7),i=r7(r,n7);return[...n,...i].every(a=>$v(a,0)||$v(a,90)||$v(a,180)||$v(a,270))}function r7(t,e){return e.map(r=>o4(t,r)*180/Math.PI)}const{transformWorldToIndex:XG}=Rn,YG={[Lt.Initialize]:t=>{const{points:e,imageVoxelManager:r,viewport:n,segmentationImageData:i,segmentationVoxelManager:o}=t;if(!e)return;const a=Ft(0,0,0);e.forEach(l=>{ri(a,a,l)}),Ir(a,a,1/e.length),t.centerWorld=a,t.centerIJK=XG(i,a);const{boundsIJK:s,pointInShapeFn:c}=eCe(n,e,i);t.isInObject=c,t.isInObjectBoundsIJK=s}};function eCe(t,e,r){let n=e.map(w=>XG(r,w));n=n.map(w=>w.map(x=>Math.round(x)));const i=cf(n,r.getDimensions()),a=t instanceof lr||qG(n),s=r.getDirection(),c=r.getSpacing(),{viewPlaneNormal:l}=t.getCamera(),f=xf({direction:s,spacing:c},l),u=rU(e);let[[d,h],[g,p],[v,y]]=u;return d-=f,h+=f,g-=f,p+=f,v-=f,y+=f,{boundsIJK:i,pointInShapeFn:a?()=>!0:w=>{const[x,C,S]=w,T=x>=d&&x<=h,_=C>=g&&C<=p,E=S>=v&&S<=y;return T&&_&&E}}}const tCe=new pc("Rectangle",Cn.regionFill,Cn.setValue,YG,Cn.determineSegmentIndex,Cn.preview,Cn.labelmapStatistics),nCe=new pc("RectangleThreshold",Cn.regionFill,Cn.setValue,YG,Cn.determineSegmentIndex,Cn.dynamicThreshold,Cn.threshold,Cn.preview,Cn.islandRemoval,Cn.labelmapStatistics),E8=tCe.strategyFunction,rCe=nCe.strategyFunction,iCe=Object.freeze(Object.defineProperty({__proto__:null,fillInsideCircle:Jw,fillInsideRectangle:E8,fillOutsideCircle:Uxe,thresholdInsideRectangle:rCe},Symbol.toStringTag,{value:"Module"})),Np=class Np extends vi{constructor(e,r){super(e,r),this.memoMap=new Map,this.acceptedMemoIds=new Map,this.centerSegmentIndexInfo={segmentIndex:null,hasSegmentIndex:!1,hasPreviewIndex:!1,changedIndices:[]}}_historyRedoHandler(e){const{id:r,operationType:n}=e.detail;if(n==="labelmap"){if(this.acceptedMemoIds.has(r)){this._hoverData=null;const i=this.acceptedMemoIds.get(r),o=i==null?void 0:i.element,a=this.getOperationData(o);a.segmentIndex=i==null?void 0:i.segmentIndex,o&&this.applyActiveStrategyCallback(_e(o),a,Lt.AcceptPreview)}this._previewData.isDrag=!0}}get _previewData(){return Np.previewData}createMemo(e,r){const n=r.id;if(this.memo&&this.memo.segmentationVoxelManager===r)return this.memo;let i=this.memoMap.get(n);return i?i.redoVoxelManager&&(i=ZS(e,r),this.memoMap.set(n,i)):(i=ZS(e,r),this.memoMap.set(n,i)),this.memo=i,i}createEditData(e){const r=_e(e),{viewport:n}=r,i=Od(n.id);if(!i){const l=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"No active segmentation detected, create a segmentation representation before using the brush tool"},cancelable:!0});return et.dispatchEvent(l),null}const{segmentationId:o}=i,a=zd(o),{representationData:s}=Vn(o);return this.getEditData({viewport:n,representationData:s,segmentsLocked:a,segmentationId:o})}getEditData({viewport:e,representationData:r,segmentsLocked:n,segmentationId:i}){var o,a,s;if(e instanceof Tr){const{volumeId:c}=r[Vt.Labelmap],l=e.getActors();if(e instanceof lr){const g=new CustomEvent(rt.ERROR_EVENT,{detail:{type:"Segmentation",message:"Cannot perform brush operation on the selected viewport"},cancelable:!0});return et.dispatchEvent(g),null}const u=l.map(g=>$e.getVolume(g.referencedId)),d=$e.getVolume(c),h=((o=u.find(g=>Zt(g.dimensions,d.dimensions)))==null?void 0:o.volumeId)||((a=u[0])==null?void 0:a.volumeId);return{volumeId:c,referencedVolumeId:((s=this.configuration.threshold)==null?void 0:s.volumeId)??h,segmentsLocked:n}}else{const c=Tf(e.id,i);return c?{imageId:c,segmentsLocked:n}:void 0}}createHoverData(e,r){const n=_e(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:s}=o,c=[i.id],{segmentIndex:l,segmentationId:f,segmentColor:u}=this.getActiveSegmentationData(i)||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...s],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:u},data:{}},centerCanvas:r,segmentIndex:l,viewport:i,segmentationId:f,segmentColor:u,viewportIdsToRender:c}}getActiveSegmentationData(e){const r=e.id,n=Od(r);if(!n)return;const{segmentationId:i}=n,o=Da(i);if(!o)return;const a=iu(r,i,o);return{segmentIndex:o,segmentationId:i,segmentColor:a}}getOperationData(e){var v,y,m,w;const r=this._editData||this.createEditData(e),{segmentIndex:n,segmentationId:i,brushCursor:o}=this._hoverData||this.createHoverData(e),{data:a,metadata:s={}}=o||{},{viewPlaneNormal:c,viewUp:l}=s,f=(y=(v=this.configuration.preview)==null?void 0:v.previewColors)==null?void 0:y[n],{viewport:u}=_e(e),d=iu(u.id,i,n);if(!f&&!d)return;let h=null,g=null;return(m=this.configuration.preview)!=null&&m.enabled&&(h=f||oCe(...d),g=255),{...r,points:(w=a==null?void 0:a.handles)==null?void 0:w.points,segmentIndex:n,viewPlaneNormal:c,previewOnHover:!this._previewData.isDrag,toolGroupId:this.toolGroupId,segmentationId:i,viewUp:l,centerSegmentIndexInfo:this.centerSegmentIndexInfo,activeStrategy:this.configuration.activeStrategy,configuration:this.configuration,previewColor:h,previewSegmentIndex:g,createMemo:this.createMemo.bind(this)}}addPreview(e=this._previewData.element,r){const{_previewData:n}=this,i=r==null?void 0:r.acceptReject;i===!0?this.acceptPreview(e):i===!1&&this.rejectPreview(e);const o=_e(e),a=this.applyActiveStrategyCallback(o,this.getOperationData(e),Lt.AddPreview);return n.isDrag=!0,a}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();const r=_e(e);this.applyActiveStrategyCallback(r,this.getOperationData(e),Lt.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(e=this._previewData.element){if(!e)return;const r=this.getOperationData(e);this.memo&&this.memo.id&&this.acceptedMemoIds.set(this.memo.id,{element:e,segmentIndex:r.segmentIndex});const n=_e(e);this.applyActiveStrategyCallback(n,r,Lt.AcceptPreview),this.doneEditMemo(),this._previewData.preview=null,this._previewData.isDrag=!1}static viewportContoursToLabelmap(e,r){var v;const n=(r==null?void 0:r.removeContours)??!0,i=mm(),o=Dm(e,i);if(!(o!=null&&o.length))return;const a=o.filter(y=>{var m,w;return(w=(m=y.data.contour)==null?void 0:m.polyline)==null?void 0:w.length});if(!a.length)return;const c=new Np({},{configuration:{strategies:{FILL_INSIDE_CIRCLE:Jw},activeStrategy:"FILL_INSIDE_CIRCLE"}}).addPreview(e.element),{memo:l,segmentationId:f}=c,u=l==null?void 0:l.voxelManager,d=u.sourceVoxelManager||u,{dimensions:h}=u,g=e.getDefaultActor().actor.getMapper().getInputData();for(const y of a){const m=[[1/0,-1/0],[1/0,-1/0],[1/0,-1/0]],{polyline:w}=y.data.contour;for(const I of w)g.worldToIndex(I).forEach((O,A)=>{m[A][0]=Math.min(m[A][0],O),m[A][1]=Math.max(m[A][1],O)});m.forEach((I,P)=>{I[0]=Math.round(Math.max(0,I[0])),I[1]=Math.round(Math.min(h[P]-1,I[1]))});const x=Da(f),C=((v=y.data.handles)==null?void 0:v[0])||w[0],S=g.worldToIndex(C).map(Math.round),T=d.getAtIJKPoint(S)||0;let _=!1,E=!1;for(const I of w){const P=g.worldToIndex(I).map(Math.round),O=d.getAtIJKPoint(P);O===T?_=!0:O>=0&&(E=!0)}const D=_&&E?T:T===0?x:0;for(let I=m[0][0];I<=m[0][1];I++)for(let P=m[1][0];P<=m[1][1];P++)for(let O=m[2][0];O<=m[2][1];O++){const A=g.indexToWorld([I,P,O]);JE(A,w)&&u.setAtIJK(I,P,O,D)}n&&mn(y.annotationUID)}const p=u.getArrayOfModifiedSlices();To(f,p)}};Np.previewData={preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1};let Rd=Np;function oCe(t,e,r,n,i=.4){return[Math.round(t+(255-t)*i),Math.round(e+(255-e)*i),Math.round(r+(255-r)*i),n]}class Qw extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:Jw,ERASE_INSIDE_CIRCLE:jG,FILL_INSIDE_SPHERE:zG,ERASE_INSIDE_SPHERE:$G,THRESHOLD_INSIDE_CIRCLE:Fxe,THRESHOLD_INSIDE_SPHERE:$xe,THRESHOLD_INSIDE_SPHERE_WITH_ISLAND_REMOVAL:jxe},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",brushSize:25,useCenterSegmentIndex:!1,preview:{enabled:!1,previewColors:{0:[255,255,255,128]},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[Lt.AcceptPreview]:{method:Lt.AcceptPreview,bindings:[{key:"Enter"}]},[Lt.RejectPreview]:{method:Lt.RejectPreview,bindings:[{key:"Escape"}]},[Lt.Interpolate]:{method:Lt.Interpolate,bindings:[{key:"i"}],configuration:{useBallStructuringElement:!0,noUseDistanceTransform:!0,noUseExtrapolation:!0}},interpolateExtrapolation:{method:Lt.Interpolate,bindings:[{key:"e"}],configuration:{}}}}}){super(e,r),this.onSetToolPassive=n=>{this.disableCursor()},this.onSetToolEnabled=()=>{this.disableCursor()},this.onSetToolDisabled=n=>{this.disableCursor()},this.preMouseDownCallback=n=>{const i=n.detail,{element:o}=i,a=_e(o);this._editData=this.createEditData(o),this._activateDraw(o),Gt(o),n.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const s=this._hoverData||this.createHoverData(o);Be(s.viewportIdsToRender);const c=this.getOperationData(o);return this.applyActiveStrategyCallback(a,c,Lt.OnInteractionStart),!0},this.mouseMoveCallback=n=>{if(this.mode===Fn.Active){if(this.updateCursor(n),!this.configuration.preview.enabled)return;const{previewTimeMs:i,previewMoveDistance:o,dragMoveDistance:a}=this.configuration.preview,{currentPoints:s,element:c}=n.detail,{canvas:l}=s,{startPoint:f,timer:u,timerStart:d,isDrag:h}=this._previewData;if(h)return;const g=Sr(l,f),p=Date.now()-d;if((g>o||p>i&&g>a)&&(u&&(window.clearTimeout(u),this._previewData.timer=null),h||this.rejectPreview(c)),!this._previewData.timer){const v=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:v,startPoint:l,element:c})}}},this.previewCallback=()=>{if(this._previewData.isDrag){this._previewData.timer=null;return}this._previewData.timer=null;const n=this.getOperationData(this._previewData.element),i=_e(this._previewData.element);if(!i)return;const{viewport:o}=i,a=this.configuration.activeStrategy,s=C8({operationData:n,viewport:o,strategy:a});if(!n)return;const c=this.createMemo(n.segmentationId,s.segmentationVoxelManager);this._previewData.preview=this.applyActiveStrategyCallback(_e(this._previewData.element),{...n,...s,memo:c},Lt.Preview)},this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o);this.updateCursor(n);const{viewportIdsToRender:c}=this._hoverData;Be(c);const l=Sr(a.canvas,this._previewData.startPoint),{dragTimeMs:f,dragMoveDistance:u}=this.configuration.preview;!this._previewData.isDrag&&Date.now()-this._previewData.timerStart{const i=n.detail,{element:o}=i,a=_e(o),s=this.getOperationData(o);!this._previewData.preview&&!this._previewData.isDrag&&this.applyActiveStrategy(a,s),this.doneEditMemo(),this._deactivateDraw(o),Jt(o),this.updateCursor(n),this._editData=null,this.applyActiveStrategyCallback(a,s,Lt.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(o)},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}disableCursor(){this._hoverData=void 0,this.rejectPreview()}updateCursor(e){const r=e.detail,{element:n}=r,{currentPoints:i}=r,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&Be(this._hoverData.viewportIdsToRender)}_calculateCursor(e,r){const n=_e(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:s}=this.configuration,c=Ft(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=Ft(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),f=Ke();kn(f,c,l);const u=o([r[0],r[1]]),d=Ke(),h=Ke(),g=Ke(),p=Ke();for(let x=0;x<=2;x++)d[x]=u[x]-c[x]*s,h[x]=u[x]+c[x]*s,g[x]=u[x]-f[x]*s,p[x]=u[x]+f[x]*s;if(!this._hoverData)return;const{brushCursor:v}=this._hoverData,{data:y}=v;y.handles===void 0&&(y.handles={}),y.handles.points=[d,h,g,p];const m=this.configuration.activeStrategy,w=this.configuration.strategies[m];typeof(w==null?void 0:w.computeInnerCircleRadius)=="function"&&w.computeInnerCircleRadius({configuration:this.configuration,viewport:i}),y.invalidated=!1}getStatistics(e,r){if(!e)return;const n=_e(e);return this.applyActiveStrategyCallback(n,this.getOperationData(e),Lt.GetStatistics,r)}rejectPreview(e=this._previewData.element){if(!e)return;this.doneEditMemo();const r=_e(e);r&&(this.applyActiveStrategyCallback(r,this.getOperationData(e),Lt.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1)}acceptPreview(e=this._previewData.element){e&&super.acceptPreview(e)}interpolate(e,r){if(!e)return;const n=_e(e);this._previewData.preview=this.applyActiveStrategyCallback(n,this.getOperationData(e),Lt.Interpolate,r.configuration),this._previewData.isDrag=!0}invalidateBrushCursor(){if(this._hoverData===void 0)return;const{data:e}=this._hoverData.brushCursor,{viewport:r}=this._hoverData;e.invalidated=!0;const{segmentColor:n}=this.getActiveSegmentationData(r)||{};this._hoverData.brushCursor.metadata.segmentColor=n}renderAnnotation(e,r){var m,w;if(!this._hoverData)return;const{viewport:n}=e;if(!this._hoverData.viewportIdsToRender.includes(n.id))return;const o=this._hoverData.brushCursor;if(o.data.invalidated===!0){const{centerCanvas:x}=this._hoverData,{element:C}=n;this._calculateCursor(C,x)}const a=o.metadata;if(!a)return;const s=a.brushCursorUID,c=o.data,{points:l}=c.handles,f=l.map(x=>n.worldToCanvas(x)),u=f[0],d=f[1],h=[Math.floor((u[0]+d[0])/2),Math.floor((u[1]+d[1])/2)],g=Math.abs(u[1]-Math.floor((u[1]+d[1])/2)),p=`rgb(${((m=a.segmentColor)==null?void 0:m.slice(0,3))||[0,0,0]})`;if(!n.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");return}ia(r,s,"0",h,g,{color:p,lineDash:this.centerSegmentIndexInfo.segmentIndex===0?[1,2]:null});const{dynamicRadiusInCanvas:y}=((w=this.configuration)==null?void 0:w.threshold)||{dynamicRadiusInCanvas:0};y&&ia(r,s,"1",h,y,{color:p})}}Qw.toolName="Brush";function og(t,e){const r=ni(t);if(r===void 0)return;const n=r._toolInstances;return Object.keys(n).length?e&&n[e]?[n[e]]:Object.values(n).filter(o=>o instanceof Qw):void 0}function aCe(t,e,r){const n=ni(t);if(n===void 0)return;og(t,r).forEach(l=>{l.configuration.brushSize=e,l.invalidateBrushCursor()});const o=n.getViewportsInfo(),a=Object.keys(o).map(l=>o[l]);if(!a.length)return;const{renderingEngineId:s}=a[0],c=n.getViewportIds();jr(s),Be(c)}function sCe(t,e){const r=ni(t);if(r===void 0)return;const n=r._toolInstances;if(!Object.keys(n).length)return;const o=og(t,e)[0];if(o)return o.configuration.brushSize}function cCe(t,e){const r=ni(t);if(r===void 0||(og(t).forEach(a=>{a.configuration.activeStrategy.toLowerCase().includes("threshold")&&(a.configuration={...a.configuration,threshold:{...a.configuration.threshold,...e}})}),!r.getViewportsInfo().length))return;const o=r.getViewportIds();Be(o)}function lCe(t){const e=ni(t);if(e===void 0)return;const r=e._toolInstances;if(!Object.keys(r).length)return;const i=og(t)[0];if(i)return i.configuration.threshold.range}const kp=class kp{static statsInit(e){const{storePointData:r,indices:n,mode:i}=e;this.mode=i,this.indices=n,this.calculators.clear(),this.mode==="individual"?n.forEach(o=>{this.calculators.set(o,new e7({storePointData:r}))}):this.calculators.set(n,new e7({storePointData:r}))}static statsCallback(e){const{segmentIndex:r,...n}=e;if(!r)throw new Error("Segment index is required for stats calculation");const i=this.mode==="individual"?this.calculators.get(r):this.calculators.get(this.indices);if(!i)throw new Error(`No calculator found for segment ${r}`);i.statsCallback(n)}static getStatistics(e){if(this.mode==="individual"){const n={};return this.calculators.forEach((i,o)=>{n[o]=i.getStatistics(e)}),n}return this.calculators.get(this.indices).getStatistics(e)}};kp.calculators=new Map,kp.indices=[],kp.mode="collective";let QS=kp;function uCe(t,e,r,n,i){if(!i)throw new Error("Segmentation ID is required to be passed inside thresholdSegmentationByRange");const{baseVolumeIdx:o,volumeInfoList:a}=iU(t,r),{voxelManager:s}=a[o],c=s,l=t.voxelManager.getScalarDataLength(),f=t.voxelManager;return a.forEach(u=>{const{volumeSize:d}=u;d===l?dCe(f,c,e,u):fCe(f,c,e,u,a,o,n)}),To(i),t}function fCe(t,e,r,n,i,o,a){const{imageData:s,lower:c,upper:l,dimensions:f}=n;let u,d,h;const g=t.getScalarDataLength();for(let p=0;p{u=u+1,w>=h.lower&&w<=h.upper&&(d=d+1)};u=0,d=0,h={lower:c,upper:l};let m=!1;t.forEach(y,{imageData:s,boundsIJK:v}),m=a===0?d>0:d===u,t.setAtIndex(p,m?r:0)}return{total:u,range:h,overlaps:d}}function dCe(t,e,r,n){const{lower:i,upper:o}=n,a=t.getScalarDataLength();for(let s=0;s=i&&c<=o?r:0)}}function i7(t,e,r){const n=r.toIJK(t),i=r.toIJK(e),o=Ke(),{testIJK:a}=r,s=Mn(Ke(),n,i),c=Math.round(Math.max(...s.map(Math.abs)));if(c<2)return!0;const l=Ir(Ke(),s,1/c);for(let f=1;f{const l=ri(Ke(),s,c).map(v=>v/2),f=e.worldToIndex(l).map(Math.round),[u,d,h]=f,g=u+d*o+h*a,p=r.getAtIndex(g);return p===n||(i==null?void 0:i.has(p))},toIJK:s=>e.worldToIndex(s),testIJK:s=>{const[c,l,f]=s,u=Math.round(c)+Math.round(l)*o+Math.round(f)*a,d=r.getAtIndex(u);return d===n||(i==null?void 0:i.has(d))}}}function gCe(t,e,r){const n=$e.getVolume(t);if(!n){console.warn(`No volume found for ${t}`);return}return hCe({dimensions:n.dimensions,imageData:n.imageData,voxelManager:n.voxelManager,segmentIndex:e,containedSegmentIndices:r})}const Ag=.01;function pCe(t,e,r){const{sliceContours:n}=t,{segmentIndex:i,containedSegmentIndices:o}=r;let a;const s=gCe(e,i,o);for(const c of n){const l=mCe(c,s,a);l&&(a=l)}return a&&Object.assign(a,r),a}function mCe(t,e,r={maxMajor:0,maxMinor:0}){const{points:n}=t.polyData,{maxMinor:i,maxMajor:o}=r;let a=o*o,s=i*i,c;for(let v=0;vAg||e.testCenter(m,w)&&i7(m,w,e)&&(s=x,d=[v,y])}if(!d)return;s=Math.sqrt(s);const h=n[d[0]],g=n[d[1]];return{majorAxis:[l,f],minorAxis:[h,g],maxMajor:a,maxMinor:s,...t}}async function JG(t){const e=await MG({segmentations:t});if(!(e!=null&&e.length)||!e[0].sliceContours.length)return;const{segments:r=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=t,n=ig(t.segmentationId);if(!n)return;const i=r.findIndex(o=>!!o);if(i!==-1)return r[i].segmentIndex=i,pCe(e[0],n.volumeId,r[i])}function ZG(t,e){const{majorAxis:r,minorAxis:n,label:i="",sliceIndex:o}=t,[a,s]=r,[c,l]=n,f=[a,s,c,l];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...e.getViewReference({sliceIndex:o})},data:{handles:{points:f,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:i,cachedStats:{}},isLocked:!1,isVisible:!0}}const{transformWorldToIndex:jv}=Rn,L0=class L0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:vCe}}){super(e,r),this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles;let u=c.worldToCanvas(f[0]),d=c.worldToCanvas(f[1]),h={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},g=Ii([h.start.x,h.start.y],[h.end.x,h.end.y],[o[0],o[1]]);return g<=a||(u=c.worldToCanvas(f[2]),d=c.worldToCanvas(f[3]),h={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},g=Ii([h.start.x,h.start.y],[h.end.x,h.end.y],[o[0],o[1]]),g<=a)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),Gt(a),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,c=i.data;i.highlighted=!0;let l=!1,f;o.worldPosition?l=!0:f=c.handles.points.findIndex(g=>g===o);const u=At(s,this.getToolName());Gt(s),this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;this.doneEditMemo(),f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);if(this.editData.handleIndex!==void 0){const{points:d}=f.handles,h=Qi(d[0],d[1]);if(Qi(d[2],d[3])>h){const p=[[...d[2]],[...d[3]]],v=[...d[0]],y=[...d[1]],m=rn();ms(m,p[1][0]-p[0][0],p[1][1]-p[1][0]);const w=rn();ms(w,-m[1],m[0]);const x=rn();ms(x,y[0]-v[0],y[1]-v[0]);let C;a4(x,w)>0?C=[v,y]:C=[y,v],f.handles.points=[p[0],p[1],C[0],C[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c}=s,{worldToCanvas:l}=c,{annotation:f,viewportIdsToRender:u,handleIndex:d,newAnnotation:h}=this.editData;this.createMemo(a,f,{newAnnotation:h});const{data:g}=f,p=o.world;g.handles.points[d]=[...p];const v=g.handles.points.map(l),y={longLineSegment:{start:{x:v[0][0],y:v[0][1]},end:{x:v[1][0],y:v[1][1]}},shortLineSegment:{start:{x:v[2][0],y:v[2][1]},end:{x:v[3][0],y:v[3][1]}}},w=Sr(v[0],v[1])/3,x=y.longLineSegment.start.x-y.longLineSegment.end.x,C=y.longLineSegment.start.y-y.longLineSegment.end.y,S=Math.sqrt(x*x+C*C),T=x/S,_=C/S,E=(y.longLineSegment.start.x+y.longLineSegment.end.x)/2,b=(y.longLineSegment.start.y+y.longLineSegment.end.y)/2,D=E+w*_,I=b-w*T,P=E-w*_,O=b+w*T;g.handles.points[2]=c.canvasToWorld([D,I]),g.handles.points[3]=c.canvasToWorld([P,O]),f.invalidated=!0,Be(u),cn(f,a,Qt.HandlesUpdated),this.editData.hasMoved=!0},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else this._dragModifyHandle(n),a.invalidated=!0;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragModifyHandle=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c}=s,{annotation:l,handleIndex:f}=this.editData,{data:u}=l,d=o.world,h=[c.worldToCanvas(u.handles.points[0]),c.worldToCanvas(u.handles.points[1]),c.worldToCanvas(u.handles.points[2]),c.worldToCanvas(u.handles.points[3])],g={start:{x:h[0][0],y:h[0][1]},end:{x:h[1][0],y:h[1][1]}},p={start:{x:h[2][0],y:h[2][1]},end:{x:h[3][0],y:h[3][1]}},v=[...d],y=c.worldToCanvas(v);if(f===0||f===1){const w=h[f===0?1:0],x=ms(rn(),y[0]-w[0],y[1]-w[1]),C=ms(rn(),h[f][0]-w[0],h[f][1]-w[1]);Fl(x,x),Fl(C,C);const S={start:{x:w[0],y:w[1]},end:{x:y[0],y:y[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(S,p))return;const T=w,_=this._getSignedAngle(C,x);let E=h[2][0],b=h[2][1],D=h[3][0],I=h[3][1];E-=T[0],b-=T[1],D-=T[0],I-=T[1];const P=E*Math.cos(_)-b*Math.sin(_),O=E*Math.sin(_)+b*Math.cos(_),A=D*Math.cos(_)-I*Math.sin(_),V=D*Math.sin(_)+I*Math.cos(_);E=P+T[0],b=O+T[1],D=A+T[0],I=V+T[1];const G=c.canvasToWorld([E,b]),R=c.canvasToWorld([D,I]);u.handles.points[f]=v,u.handles.points[2]=G,u.handles.points[3]=R}else{const m=f===2?3:2,w={longLineSegment:{start:g.start,end:g.end},shortLineSegment:{start:p.start,end:p.end}},x=Jr(rn(),[w.longLineSegment.end.x,w.longLineSegment.end.y],[w.longLineSegment.start.x,w.longLineSegment.start.y]),C=Fl(rn(),x),S=Jr(rn(),[y[0],y[1]],[h[f][0],h[f][1]]),T=Cy(S),_=this._getSignedAngle(C,S),E=Math.cos(_)*T,b=WY(rn(),[h[m][0],h[m][1]],C,E);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:y[0],y:y[1]},end:{x:b[0],y:b[1]}},{start:{x:w.longLineSegment.start.x,y:w.longLineSegment.start.y},end:{x:w.longLineSegment.end.x,y:w.longLineSegment.end.y}})||!c5([y[0],y[1]],[b[0],b[1]],[g.start.x,g.start.y],[g.end.x,g.end.y]))return;u.handles.points[m]=c.canvasToWorld(b),u.handles.points[f]=v}},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!0;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(te));u.annotationUID=g;const{color:w,lineWidth:x,lineDash:C,shadow:S}=this.getAnnotationStyle({annotation:h,styleSpecifier:u});if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let T;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(T=[m[y]]),T&&or(i,g,"0",T,{color:w});const _=`${g}-line-1`,E=`${g}-line-2`;Sn(i,g,"0",m[0],m[1],{color:w,lineDash:C,lineWidth:x,shadow:S},_),Sn(i,g,"1",m[2],m[3],{color:w,lineDash:C,lineWidth:x,shadow:S},E),o=!0;const I=this.getLinkedTextBoxStyle(u,h);if(!I.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const P=this.configuration.getTextLines(p,l);if(!P||P.length===0)continue;let O;p.handles.textBox.hasMoved||(O=Oa(m),p.handles.textBox.worldPosition=a.canvasToWorld(O));const A=a.worldToCanvas(p.handles.textBox.worldPosition),G=ho(i,g,"1",P,A,m,{},I),{x:R,y:N,width:F,height:j}=G;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+F,N]),bottomLeft:a.canvasToWorld([R,N+j]),bottomRight:a.canvasToWorld([R+F,N+j])}}return o},this._movingLongAxisWouldPutItThroughShortAxis=(n,i)=>{const o=rn();ms(o,i.end.x-i.start.x,i.end.y-i.start.y),Fl(o,o);const a={start:{x:i.start.x-o[0]*10,y:i.start.y-o[1]*10},end:{x:i.end.x+o[0]*10,y:i.end.y+o[1]*10}};return!c5([a.start.x,a.start.y],[a.end.x,a.end.y],[n.start.x,n.start.y],[n.end.x,n.end.y])},this._calculateCachedStats=(n,i,o)=>{const{data:a}=n,{element:s}=o.viewport,c=a.handles.points[0],l=a.handles.points[1],f=a.handles.points[2],u=a.handles.points[3],{cachedStats:d}=a,h=Object.keys(d);for(let p=0;pA?O:A,G=O>A?A:O,R=O>A?D:P,N=O>A?P:D;this._isInsideVolume(x,C,S,T,w)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,d[v]={length:V,width:G,unit:R,widthUnit:N}}const g=n.invalidated;return n.invalidated=!1,g&&cn(n,s,Qt.StatsUpdated),d},this._isInsideVolume=(n,i,o,a,s)=>hr(n,s)&&hr(i,s)&&hr(o,s)&&hr(a,s),this._getSignedAngle=(n,i)=>Math.atan2(n[0]*i[1]-n[1]*i[0],n[0]*i[0]+n[1]*i[1]),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,o=n.world,a=_e(i),{viewport:s,renderingEngine:c}=a;this.isDrawing=!0;const l=s.getCamera(),{viewPlaneNormal:f,viewUp:u}=l,d=this.getReferencedImageId(s,o,f,u),h=s.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...f],viewUp:[...u],FrameOfReferenceUID:h,referencedImageId:d,...s.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};ln(g,i);const p=At(i,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Gt(i),e.preventDefault(),Be(p),g}_calculateLength(e,r){const n=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return Math.sqrt(n*n+i*i+o*o)}};L0.toolName="Bidirectional",L0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=L0.hydrateBase(L0,i,r[0],n),[f,u]=r,[d,h]=f,[g,p]=u,v=[d,h,g,p],{toolInstance:y,...m}=n||{},w={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:v,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...m}};return ln(w,l.element),Be([l.id]),w};let N1=L0;function vCe(t,e){const{cachedStats:r,label:n}=t,{length:i,width:o,unit:a}=r[e],s=[];return n&&s.push(n),i===void 0||s.push(`L: ${un(i)} ${a||a}`,`W: ${un(o)} ${a}`),s}async function yCe(t,e){console.warn("Deprecation Alert: There is a new getSegmentLargestBidirectional function that handles volume, stack and individual segment cases properly. This function is deprecated and will be removed in a future version.");const{data:r}=e,n=_e(t),i=(r.getSegment||wCe)(n,r);if(!i)return;const o=n.viewport.getFrameOfReferenceUID(),a=Xw(),{segmentIndex:s,segmentationId:c}=i,l=mr.getAnnotations(this.toolName||N1.toolName,o);let f=!1;const u=l.filter(h=>{const g=h.data.segment;return g?(g.segmentationId===c&&g.segmentIndex===s&&(f=!0,h.data.segment=g),!0):!1});f||u.push({data:{segment:i}});let d;if(u.forEach(async h=>{const g=[],p=h.data.segment,{segmentIndex:v,segmentationId:y}=p;g[v]=p,mr.removeAnnotation(h.annotationUID);const m=await JG({...a.find(C=>C.segmentationId===y),segments:g});if(!m)return;const w=ZG(m,n.viewport);w.annotationUID=h.annotationUID,w.data.segment=p;const x=mr.addAnnotation(w,o);if(p.segmentIndex===i.segmentIndex&&p.segmentationId===i.segmentationId){d=m;const{style:C}=i;C&&bE.setAnnotationStyles(x,C)}}),d){const{sliceIndex:h}=d,g=n.viewport.getImageIds();ds(t,{imageIndex:g.length-1-h}),n.viewport.render()}else console.warn("No bidirectional found");return d}function wCe(t,e){var a;const r=Xw();if(!r.length)return;const n=e.segmentationId||r[0].segmentationId,i=e.segmentIndex??Da(n);if(!i)return;const o=(a=e.segmentData)==null?void 0:a.get(i);return{label:`Segment ${i}`,segmentIndex:i,segmentationId:n,...o}}function QG(t){const e=ni(t);if(e===void 0)return;og(t).forEach(a=>{a.invalidateBrushCursor()});const n=e.getViewportsInfo();if(!Object.keys(n).map(a=>n[a]).length)return;const o=e.getViewportIds();Be(o)}function b8(t,e,r={}){const n=Vn(t),i=n.representationData,o=(r==null?void 0:r.representationType)??Object.keys(i)[0];if(!o)throw new Error(`Segmentation ${t} does not have any representations`);switch(o){case Vt.Labelmap:return xCe(n,e,r);case Vt.Contour:return CCe(n,e,r);default:return}}function xCe(t,e,{viewport:r}){const n=t.representationData.Labelmap;if(r instanceof Tr){const{volumeId:h}=n,g=$e.getVolume(h);return g?g.imageData.getScalarValueFromWorld(e):void 0}const i=ru(r.id,t.segmentationId);if(i.length>1){console.warn("Segment selection for labelmaps with multiple imageIds in stack viewports is not supported yet.");return}const o=i[0];if(!$e.getImage(o))return;const s=Lw(r.id,t.segmentationId),c=s==null?void 0:s.actor.getMapper().getInputData(),l=zr(c,e),f=c.getDimensions();return(c.voxelManager||hc.createScalarVolumeVoxelManager({dimensions:f,scalarData:c.getPointData().getScalars().getData()})).getAtIJKPoint(l)}function CCe(t,e,{viewport:r}){const n=t.representationData.Contour,i=Array.from(n.annotationUIDsMap.keys()),{viewPlaneNormal:o}=r.getCamera();for(const a of i){const s=n.annotationUIDsMap.get(a);if(s)for(const c of s){const l=Hr(c);if(!l)continue;const{polyline:f}=l.data.contour;if(Zt(o,l.metadata.viewPlaneNormal)&&JE(e,f))return Number(a)}}}function eW(t,e,{viewport:r,searchRadius:n}){const o=Vn(t).representationData.Labelmap;if(r instanceof Tr){const{volumeId:p}=o,v=$e.getVolume(p);if(!v)return;const y=v.voxelManager,m=v.imageData,w=zr(m,e),x=y.getAtIJK(w[0],w[1],w[2]),C=r.worldToCanvas(e);return TCe(C,x,r,m,n)?x:void 0}const a=Tf(r.id,t);if(!$e.getImage(a))return;const c=Lw(r.id,t),l=c==null?void 0:c.actor.getMapper().getInputData(),f=zr(l,e),u=l.getDimensions(),d=l.voxelManager||hc.createScalarVolumeVoxelManager({dimensions:u,scalarData:l.getPointData().getScalars().getData()}),h=d.getAtIJKPoint(f);return SCe(f,u,d,h)?h:void 0}function tW(t,e,r=1){const n=Array.from({length:2*r+1},(i,o)=>o-r);for(const i of n)for(const o of n)for(const a of n){if(i===0&&o===0&&a===0)continue;const s=t(i,o,a);if(s!==void 0&&e!==s)return!0}return!1}function SCe(t,e,r,n,i){return tW((a,s,c)=>{const l=[t[0]+a,t[1]+s,t[2]+c];return r.getAtIJK(l[0],l[1],l[2])},n,i)}function TCe(t,e,r,n,i){return tW((a,s)=>{const c=[t[0]+a,t[1]+s],l=r.canvasToWorld(c),f=n.get("voxelManager").voxelManager,u=zr(n,l);return f.getAtIJK(u[0],u[1],u[2])},e,i)}function nW(t){const e=Vn(t),{annotationUIDsMap:r}=e.representationData.Contour;for(const[n,i]of r.entries())if(Array.from(i).find(a=>Hr(a).highlighted))return n}const _Ce=` const MAX_STRENGTH = 65535f; // Workgroup size - X*Y*Z must be multiple of 32 for better performance @@ -4185,11 +4185,11 @@ fn main( labelmap[currentPixelIndex] = newLabel; strengthData[currentPixelIndex] = newStrength; } -`,E3e=1024*1024*1024,o7=1.99*E3e,L3={windowSize:3,maxProcessingTime:3e4,inspection:{numCyclesInterval:5,numCyclesBelowThreshold:3,threshold:1e-4}};async function ex(t,e,r=L3){var Se;const n=[8,8,4],{windowSize:i,maxProcessingTime:o}=Object.assign({},L3,r),a=Object.assign({},L3.inspection,r.inspection),s=$e.getVolume(t),c=$e.getVolume(e),[l,f,u]=s.dimensions;if(c.dimensions[0]!==l||c.dimensions[1]!==f||c.dimensions[2]!==u)throw new Error("Volume and labelmap must have the same size");let d=Math.floor(Math.sqrt(f**2+l**2+u**2)/2);d=Math.min(d,500);const h=c.voxelManager.getCompleteScalarDataArray();let g=s.voxelManager.getCompleteScalarDataArray();g instanceof Float32Array||(g=new Float32Array(g));const p={maxStorageBufferBindingSize:o7,maxBufferSize:o7},y=await(await((Se=navigator.gpu)==null?void 0:Se.requestAdapter())).requestDevice({requiredLimits:p}),m=g.byteLength,w=d*Uint32Array.BYTES_PER_ELEMENT,x=6*Int32Array.BYTES_PER_ELEMENT,C=y.createShaderModule({code:_3e}),S=3,T=new Uint32Array([l,f,u,0]),_=y.createBuffer({size:T.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),E=y.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});y.queue.writeBuffer(E,0,g);const b=[0,1].map(()=>y.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}));y.queue.writeBuffer(b[0],0,new Uint32Array(h));const D=[0,1].map(()=>y.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST})),I=y.createBuffer({size:w,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),P=y.createBuffer({size:x,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),O=new Int32Array([l,f,u,-1,-1,-1]);y.queue.writeBuffer(P,0,O);const A=y.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:6,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:7,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),V=[0,1].map(Re=>{const je=b[Re],qe=D[Re],oe=b[(Re+1)%2],ce=D[(Re+1)%2];return y.createBindGroup({layout:A,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:{buffer:E}},{binding:2,resource:{buffer:je}},{binding:3,resource:{buffer:qe}},{binding:4,resource:{buffer:oe}},{binding:5,resource:{buffer:ce}},{binding:6,resource:{buffer:I}},{binding:7,resource:{buffer:P}}]})}),G=y.createComputePipeline({layout:y.createPipelineLayout({bindGroupLayouts:[A]}),compute:{module:C,entryPoint:"main",constants:{workGroupSizeX:n[0],workGroupSizeY:n[1],workGroupSizeZ:n[2],windowSize:i}}}),R=[Math.ceil(l/n[0]),Math.ceil(f/n[1]),Math.ceil(u/n[2])],N=y.createBuffer({size:w,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),F=o?performance.now()+o:0;let j=a.numCyclesInterval,te=0;for(let Re=0;Re0&&!(Re%j)){await N.mapAsync(GPUMapMode.READ,0,w);const ce=N.getMappedRange(0,w),ae=new Uint32Array(ce.slice(0))[Re]/g.length;if(N.unmap(),Re>=1&&aeF){console.warn(`Exceeded processing time limit (${o})ms`);break}}const ie=y.createCommandEncoder(),he=(d+1)%2,ue=y.createBuffer({size:m,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),ve=y.createBuffer({size:x,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});ie.copyBufferToBuffer(b[he],0,ue,0,m),ie.copyBufferToBuffer(P,0,ve,0,x),y.queue.submit([ie.finish()]),await ue.mapAsync(GPUMapMode.READ,0,m);const Me=ue.getMappedRange(0,m),Ue=new Uint32Array(Me);h.set(Ue),ue.unmap(),await ve.mapAsync(GPUMapMode.READ,0,x);const be=ve.getMappedRange(0,x),B=new Int32Array(be.slice(0));ve.unmap();const M=B[0],$=B[1],W=B[2],Y=B[3],ne=B[4],re=B[5];c.voxelManager.setCompleteScalarDataArray(h),c.voxelManager.clearBounds(),c.voxelManager.setBounds([[M,Y],[$,ne],[W,re]])}const{transformWorldToIndex:k1}=Rn,b3e=254,D3e=255,I3e=.1,O3e=.8;function M3e(t,e){const{topLeftWorld:r,bottomRightWorld:n}=e,i=k1(t.imageData,r),o=k1(t.imageData,n);return{...e,topLeftIJK:i,bottomRightIJK:o}}function P3e(t,e){const r=t.imageData.getDirection(),n=Ft(r[3],r[4],r[5]),{center:i,radius:o}=e,a=t.imageData,s=On(Ke(),i,n,-o),c=On(Ke(),i,n,o),l=uG([c,s],a);return M3e(t,l)}function R3e(t,e,r){const n=t.imageData,i=r.getCamera(),{ijkVecRowDir:o,ijkVecColDir:a}=Cw(n,i);if([o,a].some(f=>!Zt(Math.abs(f[0]),1)&&!Zt(Math.abs(f[1]),1)&&!Zt(Math.abs(f[2]),1))){console.warn("Oblique view is not supported!");return}const{boundsIJK:c}=P3e(t,e),l={minX:c[0][0],maxX:c[0][1]+1,minY:c[1][0],maxY:c[1][1]+1,minZ:c[2][0],maxZ:c[2][1]+1};return mE(t.volumeId,l,{targetBuffer:{type:"Float32Array"}})}function L3e(t,e,r,n){const i=t.voxelManager.getCompleteScalarDataArray(),o=r.center,[a,s,c]=t.dimensions,l=a*s,f=k1(t.imageData,o),u=i[f[2]*l+f[1]*a+f[0]],d=n.positiveSeedValue??b3e,h=n.positiveSeedVariance??I3e,g=Math.abs(u*h),p=u-g,v=u+g,y=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],m=f[2]*l+f[1]*a+f[0];e.voxelManager.setAtIndex(m,d);const w=[f];for(;w.length;){const x=w.shift(),[C,S,T]=x;for(let _=0,E=y.length;_=a||I<0||I>=s||P<0||P>=c)continue;const O=P*l+I*a+D,A=i[O];e.voxelManager.getAtIndex(O)===d||Av||(e.voxelManager.setAtIndex(O,d),w.push([D,I,P]))}}}function A3e(t,e,r,n,i){const o=t.voxelManager.getCompleteScalarDataArray(),[a,s,c]=e.dimensions,l=a*s,{worldVecRowDir:f,worldVecSliceDir:u}=Cw(e.imageData,n.getCamera()),d=k1(t.imageData,r.center),h=o[d[2]*a*s+d[1]*a+d[0]],g=i.negativeSeedVariance??O3e,p=(i==null?void 0:i.negativeSeedValue)??D3e,v=Math.abs(h*g),y=h-v,m=h+v,w=360,x=2*Math.PI/w,C=tw(af(),u,x),S=VR(f);for(let T=0;T=a||D<0||D>=s||I<0||I>=c)continue;const P=b+D*a+I*l,O=o[P];(Om)&&e.voxelManager.setAtIndex(P,p)}}async function N3e(t,e,r,n){const i=await um(t.volumeId);return L3e(t,i,e,n),A3e(t,i,e,r,n),i}async function rW(t,e,r,n){const i=$e.getVolume(t),o=R3e(i,e,r),a=await N3e(o,e,r,n);return await ex(o.volumeId,a.volumeId),a}const k3e=254,V3e=255,F3e=[-1/0,-995],U3e=[0,1900];function B3e(t,e,r){const{negativeSeedValue:n=V3e,negativePixelRange:i=F3e}=r,o=t.voxelManager.getCompleteScalarDataArray(),[a,s,c]=e.dimensions,l=Math.floor(c/2),f=new Array(a*s).fill(!1),u=l*a*s,d=(g,p)=>{const v=[[g,p]];for(;v.length;){const[y,m]=v.shift(),w=m*a+y;if(y<0||y>=a||m<0||m>=s||f[w])continue;f[w]=!0;const x=u+w,C=o[x];Ci[1]||(e.voxelManager.setAtIndex(x,n),v.push([y-1,m]),v.push([y+1,m]),v.push([y,m-1]),v.push([y,m+1]))}},h=(g,p,v,y)=>{for(let m=g;m!==p;m+=v){const w=y*a+m,x=u+w,C=o[x];if(Ci[1])break;f[w]||d(m,y)}};for(let g=0;g=i[0]&&w<=i[1]&&e.voxelManager.setAtIndex(m,n)}}}}async function W3e(t,e){const r=um(t.volumeId);return G3e(t,r,e),B3e(t,r,e),r}async function iW(t,e,r){const{boundingBox:n}=e,{ijkTopLeft:i,ijkBottomRight:o}=n,a={minX:i[0],maxX:o[0],minY:i[1],maxY:o[1],minZ:i[2],maxZ:o[2]},s=mE(t,a,{targetBuffer:{type:"Float32Array"}}),c=await W3e(s,r);return await ex(s.volumeId,c.volumeId),c}const z3e=254,$3e=255,j3e=1,oW=1.8,H3e=3.2,eT=30,K3e=70,q3e=50,{transformWorldToIndex:X3e}=Rn,tp=1e5;function aW(t,e,r){const{dimensions:n,imageData:i}=t,[o,a,s]=n,c=t.voxelManager,l=c.getCompleteScalarDataArray(),f=o*a,u=(r==null?void 0:r.initialNeighborhoodRadius)??j3e,d=(r==null?void 0:r.positiveStdDevMultiplier)??oW,h=(r==null?void 0:r.negativeStdDevMultiplier)??H3e,g=(r==null?void 0:r.negativeSeedMargin)??eT,p=(r==null?void 0:r.negativeSeedsTargetPatches)??K3e,v=X3e(i,e).map(Math.round),y=c.toIndex(v);if(v[0]<0||v[0]>=o||v[1]<0||v[1]>=a||v[2]<0||v[2]>=s)return console.warn("Click position is outside volume bounds."),null;const m=_V(l,n,v,u);m.count===0&&(m.mean=l[y],m.stdDev=0);const w=m.mean-d*m.stdDev,x=m.mean+d*m.stdDev,C=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]];let S=1/0,T=1/0,_=1/0,E=-1/0,b=-1/0,D=-1/0;const I=new Set,P=[],O=l[y];if(O>=w&&O<=x)I.add(y),P.push(v),S=E=v[0],T=b=v[1],_=D=v[2];else return console.warn("Clicked voxel intensity is outside the calculated positive range. No positive seeds generated."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};let A=0;for(;A=o||oe<0||oe>=a||ce<0||ce>=s)continue;const Te=ce*f+oe*o+qe;if(I.has(Te))continue;const ae=l[Te];ae>=w&&ae<=x&&(I.add(Te),I.size=tp&&console.debug(`Reached maximum number of positive seeds (${tp}). Stopping BFS.`),I.size===0)return console.warn("No positive seeds found after BFS."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};let V=0,G=0;I.forEach(W=>{const Y=l[W];V+=Y,G+=Y*Y});const R=I.size,N=V/R,F=G/R-N*N,j=Math.sqrt(Math.max(0,F)),te=h*j,ie=Math.max(0,S-g),he=Math.max(0,T-g),ue=Math.max(0,_-g),ve=Math.min(o-1,E+g),Me=Math.min(a-1,b+g),Ue=Math.min(s-1,D+g),be=new Set;let B=0,M=0;const $=p*q3e;for(;Mte){let Re=!1;for(let je=-1;je<=1;je++){const qe=Y+je;if(!(qe<0||qe>=a))for(let oe=-1;oe<=1;oe++){const ce=W+oe;if(ce<0||ce>=o)continue;const Te=ne*f+qe*o+ce;I.has(Te)||be.has(Te)||(be.add(Te),Re=!0)}}Re&&M++}}return be.size===0&&console.warn("Could not find any negative seeds. GrowCut might fail or produce poor results."),console.debug("positiveSeedIndices",I.size),console.debug("negativeSeedIndices",be.size),{positiveSeedIndices:I,negativeSeedIndices:be}}async function sW({referencedVolumeId:t,worldPosition:e,options:r}){const n=$e.getVolume(t),i=um(t);i.voxelManager.forEach(({index:f,value:u})=>{u!==0&&i.voxelManager.setAtIndex(f,0)});const o=r.seeds??aW(n,e,r),a=(r==null?void 0:r.positiveSeedValue)??z3e,s=(r==null?void 0:r.negativeSeedValue)??$3e;if(!o)return null;const{positiveSeedIndices:c,negativeSeedIndices:l}=o;return c.size<10||c.size>tp||l.size<10?(console.warn("Not enough seeds found. GrowCut might fail or produce poor results."),i):(c.forEach(f=>{i.voxelManager.setAtIndex(f,a)}),l.forEach(f=>{i.voxelManager.setAtIndex(f,s)}),await ex(t,i.volumeId,r),i)}const Y3e=Object.freeze(Object.defineProperty({__proto__:null,run:ex,runGrowCutForBoundingBox:iW,runGrowCutForSphere:rW,runOneClickGrowCut:sW},Symbol.toStringTag,{value:"Module"}));function J3e(t,e){const{segmentationId:r,config:n}=e,i={colorLUTIndex:Z3e(n),...n};rr.addSegmentationRepresentation(t,r,e.type,i),e.type===Vt.Contour&&Be([t]),es(r)}function Z3e(t){const{colorLUTOrIndex:e}=t||{};return e===void 0?Ep(JSON.parse(JSON.stringify(p5))):typeof e=="number"?e:Array.isArray(e)&&e.every(n=>Array.isArray(n)&&n.length===4)?Ep(e):Ep(JSON.parse(JSON.stringify(p5)))}function ag(t,e){e.map(r=>J3e(t,r))}function D8(t,e){return ag(t,e.map(r=>({...r,type:Vt.Contour})))}function Q3e(t){const e={};for(const[r,n]of Object.entries(t))e[r]=D8(r,n);return e}function cW(t,e){return ag(t,e.map(r=>({...r,type:Vt.Labelmap})))}function eCe(t){for(const[e,r]of Object.entries(t))cW(e,r.map(n=>({...n,type:Vt.Labelmap})))}function lW(t,e){return ag(t,e.map(r=>({...r,type:Vt.Surface})))}function tCe(t){const e={};for(const[r,n]of Object.entries(t))e[r]=lW(r,n);return e}async function nCe({segmentationId:t,viewportId:e,imageIds:r,options:n}){const i=Vn(t);if(n!=null&&n.removeOriginal){const o=i.representationData.Labelmap;$e.getVolume(o.volumeId)&&$e.removeVolumeLoadObject(o.volumeId),i.representationData.Labelmap={imageIds:r}}else i.representationData.Labelmap={...i.representationData.Labelmap,imageIds:r};await ag(e,[{segmentationId:t,type:Vt.Labelmap}]),et.addEventListenerOnce(k.SEGMENTATION_RENDERED,()=>To(t))}async function rCe({volumeId:t}){return{imageIds:$e.getVolume(t).imageIds}}function iCe({segmentationId:t,options:e}){const r=Vn(t);if(!r)return;const{volumeId:n}=r.representationData.Labelmap,i=$e.getVolume(n);return nCe({segmentationId:t,viewportId:e.viewportId,imageIds:i.imageIds,options:e})}async function uW(t){return oU(t)}async function oCe({segmentationId:t,segmentIndices:e,mode:r="individual"}){qw(),gl(Xa.COMPUTE_LARGEST_BIDIRECTIONAL,0);const n=DG(t,e);if(!n)return;const{operationData:i,segImageIds:o,reconstructableVolume:a,indices:s}=n,c=a?await aCe({operationData:i,indices:s,mode:r}):await sCe({segImageIds:o,indices:s,mode:r});return gl(Xa.COMPUTE_LARGEST_BIDIRECTIONAL,100),c}async function aCe({operationData:t,indices:e,mode:r}){const n=IG(t),{segmentationVoxelManager:i,segmentationImageData:o}=n,s={scalarData:i.getCompleteScalarDataArray(),dimensions:o.getDimensions(),spacing:o.getSpacing(),origin:o.getOrigin(),direction:o.getDirection()};return await vl().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:s,indices:e,mode:r})}async function sCe({segImageIds:t,indices:e,mode:r}){const{segmentationInfo:n}=OG(t);return await vl().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:n,indices:e,mode:r,isStack:!0})}function cCe(t){const e=Vn(t);if(!e)return null;let r;const n=e.representationData.Labelmap;if("imageIds"in n){const{imageIds:i}=n,o=$e.getImage(i[0]),a=$e.getVolumeContainingImageId(o.referencedImageId);if(a!=null&&a.volume)return a.volume;r=i.map(s=>$e.getImage(s).referencedImageId)}else if("volumeId"in n){const{volumeId:i,referencedVolumeId:o}=n;if(o){const s=$e.getVolume(o);if(s)return s}const a=$e.getVolume(i);a&&(r=a.imageIds.map(s=>$e.getImage(s).referencedImageId))}return Yw(r)}async function lCe({segmentationIds:t,segmentIndex:e}){qw(),gl(Xa.COMPUTE_STATISTICS,0);const r=Vn(t[0]),{imageIds:n}=r.representationData.Labelmap;if(!Cf(n))throw new Error("Invalid volume - TMTV cannot be calculated");return await uCe({segmentationIds:t,segmentIndex:e})}async function uCe({segmentationIds:t,segmentIndex:e}){const r=t.map(p=>ig(p)),n=AG(r,e);if(!n)throw new Error("Invalid volume - TMTV cannot be calculated");const{imageData:i,dimensions:o,direction:a,origin:s,voxelManager:c}=n,l=i.getSpacing(),u={scalarData:c.getCompleteScalarDataArray(),dimensions:o,spacing:l,origin:s,direction:a},d=cCe(t[0]),h={dimensions:d.dimensions,spacing:d.spacing,origin:d.origin,direction:d.direction,scalarData:d.voxelManager.getCompleteScalarDataArray()};if(h.scalarData.length===0||u.scalarData.length===0)return{[e]:{name:"TMTV",value:0}};const g=await vl().executeTask("compute","computeMetabolicStats",{segmentationInfo:u,imageInfo:h});return gl(Xa.COMPUTE_STATISTICS,100),g}const fCe=Object.freeze(Object.defineProperty({__proto__:null,IslandRemoval:Pd,LabelmapMemo:Yxe,SegmentStatsCalculator:QS,VolumetricCalculator:hd,computeMetabolicStats:lCe,computeStackLabelmapFromVolume:rCe,computeVolumeLabelmapFromStack:uW,contourAndFindLargestBidirectional:JG,createBidirectionalToolData:ZG,createLabelmapVolumeForViewport:pxe,createMergedLabelmapForIndex:AG,floodFill:_8,getBrushSizeForToolGroup:s3e,getBrushThresholdForToolGroup:l3e,getBrushToolInstances:og,getHoveredContourSegmentationAnnotation:nW,getOrCreateImageVolume:Yw,getOrCreateSegmentationVolume:ig,getReferenceVolumeForSegmentationVolume:_G,getSegmentIndexAtLabelmapBorder:eW,getSegmentIndexAtWorldPoint:b8,getSegmentLargestBidirectional:oCe,getStatistics:FG,getUniqueSegmentIndices:ZU,growCut:Y3e,invalidateBrushCursor:QG,rectangleROIThresholdVolumeByRange:hxe,segmentContourAction:y3e,setBrushSizeForToolGroup:a3e,setBrushThresholdForToolGroup:c3e,thresholdSegmentationByRange:u3e,thresholdVolumeByRange:RG,triggerSegmentationRender:tg,triggerSegmentationRenderBySegmentationId:Hw,validateLabelmap:exe},Symbol.toStringTag,{value:"Module"}));function dCe(t){let e="";const r=t[0]<0?"R":"L",n=t[1]<0?"A":"P",i=t[2]<0?"F":"H",o=[Math.abs(t[0]),Math.abs(t[1]),Math.abs(t[2])],a=1e-4;for(let s=0;s<3;s++)if(o[0]>a&&o[0]>o[1]&&o[0]>o[2])e+=r,o[0]=0;else if(o[1]>a&&o[1]>o[0]&&o[1]>o[2])e+=n,o[1]=0;else if(o[2]>a&&o[2]>o[0]&&o[2]>o[1])e+=i,o[2]=0;else if(o[0]>a&&o[1]>a&&o[0]===o[1])e+=r+n,o[0]=0,o[1]=0;else if(o[0]>a&&o[2]>a&&o[0]===o[2])e+=r+i,o[0]=0,o[2]=0;else if(o[1]>a&&o[2]>a&&o[1]===o[2])e+=n+i,o[1]=0,o[2]=0;else break;return e}function hCe(t){let e=t.replace("H","f");return e=e.replace("F","h"),e=e.replace("R","l"),e=e.replace("L","r"),e=e.replace("A","p"),e=e.replace("P","a"),e=e.toUpperCase(),e}const gCe=Object.freeze(Object.defineProperty({__proto__:null,getOrientationStringLPS:dCe,invertOrientationStringLPS:hCe},Symbol.toStringTag,{value:"Module"}));var ah;(function(t){t.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",t.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED"})(ah||(ah={}));const I8={};function fW(t,e){const r=_e(t),{viewportId:n}=r;I8[n]=e}function O8(t){const e=_e(t),{viewportId:r}=e;return I8[r]}function pCe(t){return I8[t]}const{ViewportStatus:dW}=Qa,{triggerEvent:A3}=Rn,hW=!0,tT=new Map;function mCe(t,e){let r,n;if(t===void 0)throw new Error("playClip: element must not be undefined");const i=_e(t);if(!i)throw new Error("playClip: element must be a valid Cornerstone enabled element");e||(e={}),e.dynamicCineEnabled=e.dynamicCineEnabled??!0;const{viewport:o}=i,a=SCe(o,e);let s=O8(t);const c=e.dynamicCineEnabled;if(c&&pW(t),s?nT(t,{stopDynamicCine:!c,viewportId:o.id}):(s={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:e.frameTimeVector??void 0,speed:e.frameTimeVectorSpeedMultiplier??1,reverse:e.reverse??!1,loop:e.loop??!0,bounce:e.bounce??!1},fW(t,s)),s.dynamicCineEnabled=e.dynamicCineEnabled,(e.framesPerSecond<0||e.framesPerSecond>0)&&(s.framesPerSecond=Number(e.framesPerSecond),s.reverse=s.framesPerSecond<0,s.ignoreFrameTimeVector=!0),s.ignoreFrameTimeVector!==!0&&s.frameTimeVector&&s.frameTimeVector.length===a.numScrollSteps&&a.frameTimeVectorEnabled){const{timeouts:u,isTimeVarying:d}=vCe(s.frameTimeVector,s.speed);r=u,n=d}e.bounce!==void 0&&(s.bounce=e.bounce);const l=()=>{const{numScrollSteps:u,currentStepIndex:d}=a;let h=d+(s.reverse?-1:1);if(h<0||h>=u)if(s.bounce)s.reverse=!s.reverse,h=d+(s.reverse?-1:1),h=Math.max(0,Math.min(u-1,h));else if(s.loop)h=s.reverse?u-1:0;else{nT(t,{stopDynamicCine:!c,viewportId:o.id}),A3(t,ah.CLIP_STOPPED,{element:t});return}const p=h-d;if(p)try{a.scroll(p)}catch(v){console.warn("Play clip not scrolling",v),mW(s),A3(t,ah.CLIP_STOPPED,{element:t})}};if(c){const u=M8(o);u&&tT.set(u.volumeId,t)}a.play?s.framesPerSecond=a.play(e.framesPerSecond):r&&r.length>0&&n?(s.usingFrameTimeVector=!0,s.intervalId=window.setTimeout(function u(){s.intervalId=window.setTimeout(u,r[a.currentStepIndex]),l()},0)):(s.usingFrameTimeVector=!1,s.intervalId=window.setInterval(l,1e3/Math.abs(s.framesPerSecond)));const f={element:t};A3(t,ah.CLIP_STARTED,f)}function gW(t,e={}){nT(t,{stopDynamicCine:!0,...e})}function nT(t,e={stopDynamicCine:!0,viewportId:void 0}){const{stopDynamicCine:r,viewportId:n}=e,i=_e(t);let o;const a=i==null?void 0:i.viewport;if(i){const{viewport:s}=i;o=O8(s.element)}else if(n)o=pCe(n);else return;o&&mW(o),a instanceof Th?a.pause():r&&a instanceof Tr&&pW(t)}function pW(t){const{viewport:e}=_e(t);if(e instanceof ur){const r=M8(e);if(r!=null&&r.isDynamicVolume()){const n=tT.get(r.volumeId);tT.delete(r.volumeId),n&&n!==t&&gW(n)}}}function vCe(t,e){let r,n,i,o=0;const a=t.length,s=[];let c=!1;for((typeof e!="number"||e<=0)&&(e=1),r=1;r0&&(c?i=o/s.length|0:i=s[0],s.push(i)),{timeouts:s,isTimeVarying:c}}function mW(t){const e=t.intervalId;typeof e<"u"&&(t.intervalId=void 0,t.usingFrameTimeVector?clearTimeout(e):clearInterval(e))}function M8(t){if(!(t instanceof ur))return;const e=t.getAllVolumeIds();if(!(e!=null&&e.length))return;const n=e.find(i=>{var o;return(o=$e.getVolume(i))==null?void 0:o.isDynamicVolume()})??e[0];return $e.getVolume(n)}function yCe(t,e){const r=t.getImageIds();return{get numScrollSteps(){return r.length},get currentStepIndex(){return t.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){if(this.waitForRenderedCount<=e&&t.viewportStatus!==dW.RENDERED){this.waitForRenderedCount++;return}this.waitForRenderedCount=0,sc(t,{delta:n,debounceLoading:hW})}}}function wCe(t,e){return{get numScrollSteps(){return t.getNumberOfSlices()},get currentStepIndex(){return t.getSliceIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(r){if(this.waitForRenderedCount<=e&&t.viewportStatus!==dW.RENDERED){this.waitForRenderedCount++;return}this.waitForRenderedCount=0,sc(t,{delta:r,debounceLoading:hW})},play(r){return r&&t.setPlaybackRate(r/24),t.play(),t.getFrameRate()}}}function xCe(t,e){const{volumeId:r}=e,n={viewPlaneNormal:Ke(),scrollInfo:null},i=()=>{const o=t.getCamera();if(!n.scrollInfo||!aS(o.viewPlaneNormal,n.viewPlaneNormal)){const s=ud(t,r);n.viewPlaneNormal=o.viewPlaneNormal,n.scrollInfo=s}return n.scrollInfo};return{get numScrollSteps(){return i().numScrollSteps},get currentStepIndex(){return i().currentStepIndex},get frameTimeVectorEnabled(){const o=t.getCamera(),a=e.direction.slice(6,9).map(c=>-c),s=kt(a,o.viewPlaneNormal);return of(s,1)},scroll(o){i().currentStepIndex+=o,sc(t,{delta:o})}}}function CCe(t){return{get numScrollSteps(){return t.numDimensionGroups},get currentStepIndex(){return t.dimensionGroupNumber-1},get frameTimeVectorEnabled(){return!1},scroll(e){t.scroll(e)}}}function SCe(t,e){if(t instanceof lr)return yCe(t,e.waitForRendered??30);if(t instanceof ur){const r=M8(t);return e.dynamicCineEnabled&&(r!=null&&r.isDynamicVolume())?CCe(r):xCe(t,r)}if(t instanceof Th)return wCe(t,e.waitForRendered??30);throw new Error("Unknown viewport type")}const TCe=Object.freeze(Object.defineProperty({__proto__:null,Events:ah,addToolState:fW,getToolState:O8,playClip:mCe,stopClip:gW},Symbol.toStringTag,{value:"Module"}));function _Ce(t,e){var n,i,o;const r=(e==null?void 0:e.knotsRatioPercentage)||30;return!((o=(i=(n=t==null?void 0:t.data)==null?void 0:n.contour)==null?void 0:i.polyline)!=null&&o.length)||r<=0}function ECe(t,e){const r=ba(),n=ri(Ke(),e,t),i=Math.abs(t[0])>.1?Ft(-t[1],t[0],0):Ft(0,-t[2],t[1]);return i4(r,e,n,i),r}function Hv(t,e=Math.floor(Math.random()*(t.length-1))){if(e===0)return 0;const r=[...t],{length:n}=t;for(let i=0;i{const u=Yt(Ke(),f,o);return[u[0],u[1]]});let s=n?Hv(a):0,c=HS(a,0,a.length,(e==null?void 0:e.knotsRatioPercentage)||30);if(c===a)return!1;Hv(c,-s);for(let f=1;f<(e==null?void 0:e.loop);f++)s=n?Hv(c):0,c=HS(c,0,a.length,(e==null?void 0:e.knotsRatioPercentage)||30),Hv(c,-s);const l=$r(ba(),o);return t.data.contour.polyline=c.map(f=>Yt([0,0,0],[...f,0],l)),!0}const bCe={smoothAnnotation:vW},DCe=Object.freeze(Object.defineProperty({__proto__:null,default:bCe,smoothAnnotation:vW},Symbol.toStringTag,{value:"Module"})),ICe=Object.freeze(Object.defineProperty({__proto__:null,getBoundsIJKFromRectangleAnnotations:LG,isAxisAlignedRectangle:qG},Symbol.toStringTag,{value:"Module"})),yW={};function wW(t,e){const r=_e(t),{viewportId:n}=r;yW[n]=e}function sg(t){const e=_e(t),{viewportId:r}=e;return yW[r]}const gd=pn.Prefetch,xW=0;function OCe(t,e){t=Math.round(t)||0,e=Math.round(e)||0;const r=[];let n=e-t+1;if(n<=0)return r;for(;n--;)r[n]=e--;return r}function MCe(t,e){let r=0,n=t.length-1;return t.forEach((i,o)=>{ie&&(n=Math.min(o,n))}),{low:r,high:n}}function cg(t){const e=_e(t);if(!e)return null;const{viewport:r}=e;return r instanceof lr?{currentImageIdIndex:r.getCurrentImageIdIndex(),imageIds:r.getImageIds()}:null}function tx(t){return function(e){const r=e.detail;let n;try{n=cg(t)}catch{return}if(!n||!n.imageIds||n.imageIds.length===0)return;const o=n.imageIds.indexOf(r.imageId);if(o<0)return;const a=sg(t);!a||!a.indicesToRequest||!a.indicesToRequest.length||a.indicesToRequest.push(o)}}const PCe=t=>{const e=new Set(t.imageIds);return r=>r.type!==gd||!e.has(r.additionalDetails.imageId)};let bp={maxImagesToPrefetch:1/0,preserveExistingPool:!0},rT;const RCe=10;function CW(t){var g,p;const e=sg(t);if(!e)return;const r=e||{},n=cg(t);if(!((g=n==null?void 0:n.imageIds)!=null&&g.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const{currentImageIdIndex:i}=n;if(r.enabled=r.enabled&&(((p=r.indicesToRequest)==null?void 0:p.length)??0)>0,r.enabled===!1)return;function o(v){const y=r.indicesToRequest.indexOf(v);y>-1&&r.indicesToRequest.splice(y,1)}if(e.indicesToRequest.sort((v,y)=>v-y),r.indicesToRequest.slice().forEach(function(v){const y=n.imageIds[v];if(!y)return;(Math.abs(i-v)<6?$e.getImageLoadObject(y):$e.isLoaded(y))&&o(v)}),!r.indicesToRequest.length)return;bp.preserveExistingPool||Bi.clearRequestStack(gd);const s=MCe(r.indicesToRequest,n.currentImageIdIndex);let c,l,f=s.low,u=s.high;const d=[];for(;f>=0||ubp.maxImagesToPrefetch,m=r.indicesToRequest[u]-v>bp.maxImagesToPrefetch,w=!y&&f>=0,x=!m&&u_s(v,y);d.forEach(v=>{const y={requestType:gd};Bi.addRequest(h.bind(null,v,y),gd,{imageId:v},xW)})}function iT(t){clearTimeout(rT),rT=setTimeout(function(){const e=t.target;try{CW(e)}catch{return}},RCe)}function LCe(t){const e=cg(t);if(!e||!e.imageIds||e.imageIds.length===0){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const r={indicesToRequest:OCe(0,e.imageIds.length-1),enabled:!0,direction:1},n=r.indicesToRequest.indexOf(e.currentImageIdIndex);r.indicesToRequest.splice(n,1),wW(t,r),CW(t),t.removeEventListener(rt.STACK_NEW_IMAGE,iT),t.addEventListener(rt.STACK_NEW_IMAGE,iT);const i=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,i),et.addEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,i)}function ACe(t){clearTimeout(rT),t.removeEventListener(rt.STACK_NEW_IMAGE,iT);const e=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,e);const r=sg(t);r&&r.indicesToRequest.length&&(r.enabled=!1,Bi.clearRequestStack(gd))}function NCe(){return bp}function kCe(t){bp=t}const VCe={enable:LCe,disable:ACe,getConfiguration:NCe,setConfiguration:kCe};let V1={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1},oT;const FCe=5,UCe=t=>{var n;const e=cg(t);if(!e)return;if(!((n=e.imageIds)!=null&&n.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}R8(t),P8(t),t.removeEventListener(rt.STACK_NEW_IMAGE,aT),t.addEventListener(rt.STACK_NEW_IMAGE,aT);const r=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,r),et.addEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,r)};function P8(t){var l,f;const e=cg(t);if(!e)return;if(!((l=e==null?void 0:e.imageIds)!=null&&l.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const r=sg(t);if(!r)return;const n=r||{};if(n.enabled=n.enabled&&(((f=n.indicesToRequest)==null?void 0:f.length)??0)>0,n.enabled===!1)return;function i(u){const d=n.indicesToRequest.indexOf(u);d>-1&&n.indicesToRequest.splice(d,1)}const o=n.indicesToRequest.slice(),{currentImageIdIndex:a}=e;if(o.forEach(u=>{const d=e.imageIds[u];if(!d)return;(Math.abs(a-u)<6?$e.getImageLoadObject(d):$e.isLoaded(d))&&i(u)}),!n.indicesToRequest.length)return;V1.preserveExistingPool||Bi.filterRequests(PCe(e));function s(u){var v,y;const d=e.imageIds.indexOf(u);i(d);const h=$e.getCachedImageBasedOnImageURI(u),{stats:g}=n,p=((v=h==null?void 0:h.image)==null?void 0:v.decodeTimeInMS)||0;if(p){g.imageIds.set(u,p),g.decodeTimeInMS+=p;const m=((y=h==null?void 0:h.image)==null?void 0:y.loadTimeInMS)||0;g.loadTimeInMS+=m}if(!n.indicesToRequest.length&&h!=null&&h.sizeInBytes){const{sizeInBytes:m}=h,w=$e.getMaxCacheSize()/4/m;if(!n.cacheFill)g.initialTime=Date.now()-g.start,g.initialSize=g.imageIds.size,R8(t,w),P8(t);else if(g.imageIds.size){g.fillTime=Date.now()-g.start;const{size:x}=g.imageIds;g.fillSize=x}}}const c=(u,d)=>_s(u,d).then(()=>s(u));n.indicesToRequest.forEach(u=>{const d=e.imageIds[u],h={requestType:gd};Bi.addRequest(c.bind(null,d,h),gd,{imageId:d},xW)})}function aT(t){clearTimeout(oT),oT=setTimeout(function(){const e=t.target;try{R8(e),P8(e)}catch{return}},FCe)}const BCe=t=>t<0?-1:1,R8=(t,e)=>{var d;const r=cg(t);if(!r)return;if(!((d=r.imageIds)!=null&&d.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const{currentImageIdIndex:n}=r;let{maxAfter:i=2,minBefore:o=2}=V1;const{directionExtraImages:a=10}=V1,s=sg(t)||{indicesToRequest:[],currentImageIdIndex:n,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},c=n-s.currentImageIdIndex;if(s.direction=BCe(c),s.currentImageIdIndex=n,s.enabled=!0,s.stackCount<100&&(s.stackCount+=a),Math.abs(c)>i||!c)if(s.stackCount=0,e){const h=n/r.imageIds.length;o=Math.ceil(e*h),i=Math.ceil(e*(1-h)),s.cacheFill=!0}else s.cacheFill=!1;else c<0?(o+=s.stackCount,i=0):(i+=s.stackCount,o=0);const l=Math.max(0,n-o),f=Math.min(r.imageIds.length-1,n+i),u=[];for(let h=n+1;h<=f;h++)u.push(h);for(let h=n-1;h>=l;h--)u.push(h);s.indicesToRequest=u,wW(t,s)};function GCe(t){clearTimeout(oT),t.removeEventListener(rt.STACK_NEW_IMAGE,aT);const e=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,e);const r=sg(t);r&&(r.enabled=!1)}function WCe(){return V1}function zCe(t){V1=t}const $Ce={enable:UCe,disable:GCe,getConfiguration:WCe,setConfiguration:zCe},jCe=Object.freeze(Object.defineProperty({__proto__:null,isViewportPreScaled:lu},Symbol.toStringTag,{value:"Module"}));function HCe(t,e){let r;const n=e.dimensionGroupNumbers||e.frameNumbers||Array.from({length:t.numDimensionGroups},(i,o)=>o+1);if(e.frameNumbers&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead."),!e.maskVolumeId&&!e.worldCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(e.maskVolumeId&&e.worldCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(e.maskVolumeId){const i=$e.getVolume(e.maskVolumeId);if(!i)throw new Error("Segmentation volume not found");const[o,a]=qCe(n,t,i);return[o,a]}return e.worldCoordinate?KCe(n,e.worldCoordinate,t):r}function KCe(t,e,r){const{dimensions:n,imageData:i}=r,o=i.worldToIndex(e);if(o[0]=Math.floor(o[0]),o[1]=Math.floor(o[1]),o[2]=Math.floor(o[2]),!hr(o,n))throw new Error("outside bounds");const a=n[0],s=n[0]*n[1],c=[];return t.forEach(l=>{const f=o[2]*s+o[1]*a+o[0];c.push(r.voxelManager.getAtIndexAndDimensionGroup(f,l))}),c}function qCe(t,e,r){const{imageData:n}=r,i=r.voxelManager,o=i.getScalarDataLength(),a=[];a.length=o;let s=0;for(let d=0,h=o;d{if(h===0)return;const p=RE(e.imageData,e.dimensions,e.spacing,d);let v=0;const y=new Map;t.forEach(x=>y.set(x,0));const m=({index:x})=>{for(let C=0;C{w.push(x/v)}),f.push(g),c.push(w)};return r.voxelManager.forEach(u,{imageData:n}),[c,f]}function SW(t,e){const r=t.getScalarDataLength(),n=new Float32Array(r);for(const i of e){const o=t.getDimensionGroupScalarData(i);for(let a=0;a{const n=SW(t,e);for(let i=0;i{const n=XCe(t,e);for(let i=0;i{if(e.length!==2)throw new Error("Please provide only 2 dimension groups for subtraction.");const n=t.getScalarDataLength(),i=t.getDimensionGroupScalarData(e[0]),o=t.getDimensionGroupScalarData(e[1]);for(let a=0;au+1);if(o.length<=1)throw new Error("Please provide two or more dimension groups");const a=t.voxelManager,s=a.getScalarDataLength(),c=TW[e];if(!c)throw new Error(`Unsupported operation: ${e}`);const l=new Float32Array(s);return c(a,o,(f,u)=>{l[f]=u}),l}function JCe(t,e,r){const{dimensionGroupNumbers:n,frameNumbers:i,targetVolume:o}=r;if(!o)throw new Error("A target volume must be provided");i&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead.");const a=n||i||Array.from({length:t.numDimensionGroups},(f,u)=>u+1);if(a.length<=1)throw new Error("Please provide two or more dimension groups");const s=t.voxelManager,c=o.voxelManager,l=TW[e];if(!l)throw new Error(`Unsupported operation: ${e}`);l(s,a,(f,u)=>{c.setAtIndex(f,u)}),c.resetModifiedSlices();for(let f=0;f{for(const[c,l]of s.entries())if(l!==void 0)return c;return-1};let a=o(n);for(;a!==-1;){const s=[a];for(;n.has(a);){const c=n.get(a)[1];n.has(c)&&s.push(c),n.delete(a),a=c}i.push(s),a=o(n)}return i.length?i:void 0}function bW(t){const e=EW(t);if(!e)return;const r=t.getPoints().getData();return e.map(n=>n.map(i=>_W(r,i)))}const QCe=Object.freeze(Object.defineProperty({__proto__:null,getPoint:_W,getPolyDataPointIndexes:EW,getPolyDataPoints:bW},Symbol.toStringTag,{value:"Module"}));var $a;(function(t){t.Top="top",t.Left="left",t.Bottom="bottom",t.Right="right"})($a||($a={}));const eSe=Object.freeze(Object.defineProperty({__proto__:null,get ColorbarRangeTextPosition(){return $a}},Symbol.toStringTag,{value:"Module"})),Bl=t=>t&&t.upper>t.lower,C5=t=>!!t&&t.width>0&&t.height>0,F1=(t,e)=>!!t&&!!e&&t.lower===e.lower&&t.upper===e.upper,DW=(t,e)=>!!t&&!!e&&t.width===e.width&&t.height===e.height,tSe=(t,e,r)=>[t[0]*(1-r)+e[0]*r,t[1]*(1-r)+e[1]*r,t[2]*(1-r)+e[2]*r],{clamp:nSe}=Rn;class L8{constructor(e){L8.validateProps(e);const{colormap:r,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:s=!1}=e;this._colormap=r,this._imageRange=i,this._voiRange=o,this._showFullImageRange=s,this._canvas=this._createRootElement(n),a&&this.appendTo(a)}get colormap(){return this._colormap}set colormap(e){this._colormap=e,this.render()}get size(){const{width:e,height:r}=this._canvas;return{width:e,height:r}}set size(e){const{_canvas:r}=this;!C5(e)||DW(r,e)||(this._setCanvasSize(r,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!Bl(e)||F1(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!Bl(e)||F1(e,this._voiRange)||(this._voiRange=e,this.render())}get showFullImageRange(){return this._showFullImageRange}set showFullImageRange(e){e!==this._showFullImageRange&&(this._showFullImageRange=e,this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}dispose(){const{_canvas:e}=this,{parentElement:r}=e;r==null||r.removeChild(e)}static validateProps(e){const{size:r,imageRange:n,voiRange:i}=e;if(r&&!C5(r))throw new Error('Invalid "size"');if(n&&!Bl(n))throw new Error('Invalid "imageRange"');if(i&&!Bl(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,r){const{width:n,height:i}=r;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createRootElement(e){const r=document.createElement("canvas");return Object.assign(r.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(r,e),r}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:r}=e,n=r.length/4,i=v=>{const y=4*v;if(!(v<0||v>=n))return{index:v,position:r[y],color:[r[y+1],r[y+2],r[y+3]]}},{width:o,height:a}=this._canvas,s=this._canvas.getContext("2d");if(!s)return;const c=o>a,l=c?o:a,{_voiRange:f}=this,u=this._showFullImageRange?this._imageRange:{...f};let d,h=i(0);const g=(u.upper-u.lower)/(l-1);let p=u.lower;for(let v=0;vnSe(Math.round(x*255),0,255));s.fillStyle=`rgb(${w[0]}, ${w[1]}, ${w[2]})`,c?s.fillRect(v,0,1,a):s.fillRect(0,a-v-1,o,1),p+=g}}}const Ff={FONT:"10px Arial",COLOR:"white",TICK_SIZE:5,TICK_WIDTH:1,TICK_LABEL_MARGIN:3,MAX_NUM_TICKS:8,TICKS_STEPS:[1,2.5,5,10]};class A8{constructor(e){A8.validateProps(e);const{top:r=0,left:n=0,size:i={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:a={lower:0,upper:1},ticks:s,container:c,showFullPixelValueRange:l=!1}=e,{style:f,position:u}=s??{};this._imageRange=o,this._voiRange=a,this._font=(f==null?void 0:f.font)??Ff.FONT,this._color=(f==null?void 0:f.color)??Ff.COLOR,this._tickSize=(f==null?void 0:f.tickSize)??Ff.TICK_SIZE,this._tickWidth=(f==null?void 0:f.tickWidth)??Ff.TICK_WIDTH,this._labelMargin=(f==null?void 0:f.labelMargin)??Ff.TICK_LABEL_MARGIN,this._maxNumTicks=(f==null?void 0:f.maxNumTicks)??Ff.MAX_NUM_TICKS,this._rangeTextPosition=u??$a.Right,this._showFullPixelValueRange=l,this._canvas=this._createCanvasElement(i,r,n),c&&this.appendTo(c)}get size(){const{width:e,height:r}=this._canvas;return{width:e,height:r}}set size(e){const{_canvas:r}=this;!C5(e)||DW(r,e)||(this._setCanvasSize(r,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:r}=this,n=this.top;e!==n&&(r.style.top=`${e}px`,this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:r}=this,n=this.left;e!==n&&(r.style.left=`${e}px`,this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!Bl(e)||F1(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!Bl(e)||F1(e,this._voiRange)||(this._voiRange=e,this.render())}get tickSize(){return this._tickSize}set tickSize(e){e!==this._tickSize&&(this._tickSize=e,this.render())}get tickWidth(){return this._tickWidth}set tickWidth(e){e!==this._tickWidth&&(this._tickWidth=e,this.render())}get color(){return this._color}set color(e){e!==this._color&&(this._color=e,this.render())}get showFullPixelValueRange(){return this._showFullPixelValueRange}set showFullPixelValueRange(e){e!==this._showFullPixelValueRange&&(this._showFullPixelValueRange=e,this.render())}get visible(){return this._canvas.style.display==="block"}set visible(e){e!==this.visible&&(this._canvas.style.display=e?"block":"none",e&&this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}static validateProps(e){const{size:r,imageRange:n,voiRange:i}=e;if(r&&!C5(r))throw new Error('Invalid "size"');if(n&&!Bl(n))throw new Error('Invalid "imageRange"');if(i&&!Bl(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,r){const{width:n,height:i}=r;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createCanvasElement(e,r,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:`${r}px`,left:`${n}px`}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:r,upper:n}=e,o=(n-r)/(this._maxNumTicks-1),a=Math.pow(10,-Math.floor(Math.log10(Math.abs(o)))),s=o*a,l=Ff.TICKS_STEPS.find(g=>g>=s)/a,f=Math.ceil(n/l)*l,u=Math.floor(r/l)*l,d=Math.round((f-u)/l)+1,h=[];for(let g=0;g=n,o=i?r:n,a=e.getContext("2d"),{_voiRange:s}=this,c=this._showFullPixelValueRange?this._imageRange:{...s},l=c.upper-c.lower,{ticks:f}=this._getTicks(c);a.clearRect(0,0,r,n),a.font=this._font,a.textBaseline=i?"top":"middle",a.textAlign=i?"center":"left",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,f.forEach(u=>{let d=Math.round(o*((u-c.lower)/l));if(i||(d=n-d),d<0||d>o)return;const h=u.toString(),g=a.measureText(h);let p;i?this._rangeTextPosition===$a.Top?p=this._getTopTickInfo({position:d,labelMeasure:g}):p=this._getBottomTickInfo({position:d,labelMeasure:g}):this._rangeTextPosition===$a.Left?p=this._getLeftTickInfo({position:d,labelMeasure:g}):p=this._getRightTickInfo({position:d});const{labelPoint:v,tickPoints:y}=p,{start:m,end:w}=y;return a.beginPath(),a.moveTo(m[0],m[1]),a.lineTo(w[0],w[1]),a.fillText(h,v[0],v[1]),a.stroke(),d})}}function rSe(t,e,r){return(t>=e?[$a.Top,$a.Bottom]:[$a.Left,$a.Right]).includes(r)}class iSe{constructor({id:e,container:r}){this._containerResizeCallback=n=>{let i,o;const{contentRect:a,contentBoxSize:s}=n[0];a?(i=a.width,o=a.height):s!=null&&s.length&&(i=s[0].inlineSize,o=s[0].blockSize),this._containerSize={width:i,height:o},this.onContainerResize()},this._id=e,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(e),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),r&&this.appendTo(r)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:r,_containerResizeObserver:n}=this,{parentElement:i}=r;!e||e===i||(i&&n.unobserve(i),e.appendChild(r),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:r}=this,{parentElement:n}=e;n==null||n.removeChild(e),r.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const r=document.createElement("div");return r.id=e,r.classList.add("widget"),Object.assign(r.style,{width:"100%",height:"100%"}),r}onContainerResize(){}}const Ng={MULTIPLIER:1,RANGE_TEXT_POSITION:$a.Right,TICKS_BAR_SIZE:50};class U1 extends iSe{constructor(e){var r;super(e),this._isMouseOver=!1,this._isInteracting=!1,this._mouseOverCallback=n=>{this._isMouseOver=!0,this.showTicks(),n.stopPropagation()},this._mouseOutCallback=n=>{this._isMouseOver=!1,this.hideTicks(),n.stopPropagation()},this._mouseDownCallback=n=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(n),n.stopPropagation()},this._mouseDragCallback=(n,i)=>{const o=this.getVOIMultipliers(),a=this._getPointsFromMouseEvent(n),{points:s,voiRange:c}=i,l=xs(rn(),a.local,s.local),f=l[0]*o[0],u=l[1]*o[1];if(!f&&!u)return;const{lower:d,upper:h}=c;let{windowWidth:g,windowCenter:p}=im(d,h);g=Math.max(g+f,1),p+=u;const v=Xu(g,p);this.voiRange=v,n.stopPropagation(),n.preventDefault()},this._mouseUpCallback=n=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),n.stopPropagation()},this._eventListenersManager=new fV,this._colormaps=U1.getColormapsMap(e),this._activeColormapName=U1.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=((r=e.ticks)==null?void 0:r.position)??Ng.RANGE_TEXT_POSITION,this._canvas.appendTo(this.rootElement),this._ticksBar.appendTo(this.rootElement),this._addRootElementEventListeners()}get activeColormapName(){return this._activeColormapName}set activeColormapName(e){if(e===this._activeColormapName)return;const r=this._colormaps.get(e);if(!r){console.warn(`Invalid colormap name (${e})`);return}this._activeColormapName=e,this._canvas.colormap=r}get imageRange(){return this._canvas.imageRange}set imageRange(e){this._canvas.imageRange=e,this._ticksBar.imageRange=e}get voiRange(){return this._canvas.voiRange}set voiRange(e){const{voiRange:r}=this._canvas;!Bl(e)||F1(e,r)||(this._canvas.voiRange=e,this._ticksBar.voiRange=e,this.onVoiChange(e))}get showFullImageRange(){return this._canvas.showFullImageRange}set showFullImageRange(e){this._canvas.showFullImageRange=e,this._ticksBar.showFullPixelValueRange=e}destroy(){super.destroy(),this._eventListenersManager.reset()}createRootElement(){const e=document.createElement("div");return Object.assign(e.style,{position:"relative",fontSize:"0",width:"100%",height:"100%"}),e}onContainerResize(){super.onContainerResize(),this.updateTicksBar(),this._canvas.size=this.containerSize}getVOIMultipliers(){return[Ng.MULTIPLIER,Ng.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:r}=e;return r.reduce((n,i)=>n.set(i.Name,i),new Map)}static getInitialColormapName(e){const{activeColormapName:r,colormaps:n}=e;return!!r&&n.some(o=>o.Name===r)?r:n[0].Name}_createCanvas(e){const{imageRange:r,voiRange:n,showFullPixelValueRange:i}=e,o=this._colormaps.get(this._activeColormapName);return new L8({colormap:o,imageRange:r,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const r=e.ticks;return new A8({imageRange:e.imageRange,voiRange:e.voiRange,ticks:r,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:r}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=r.getBoundingClientRect(),a=[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset];return{client:n,page:i,local:a}}updateTicksBar(){const{width:e,height:r}=this.containerSize;if(e===0&&r===0)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=r,a=o?e:Ng.TICKS_BAR_SIZE,s=o?Ng.TICKS_BAR_SIZE:r;if(!rSe(e,r,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let c,l;n.size={width:a,height:s},o?(l=0,c=i===$a.Top?-s:r):(c=0,l=i===$a.Left?-a:e),n.top=c,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:r}=this;e.addEventListener(r,"mouseover",this._mouseOverCallback),e.addEventListener(r,"mouseout",this._mouseOutCallback),e.addEventListener(r,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:r}=this,n=this._getPointsFromMouseEvent(e),i={...this._canvas.voiRange},o={points:n,voiRange:i};this._removeVOIEventListeners(),r.addEventListener(document,"voi.mouseup",this._mouseUpCallback),r.addEventListener(document,"voi.mousemove",a=>this._mouseDragCallback(a,o))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const N3=4;function oSe(t,e,r){if(EV(t,e)==="PT"){const{clientWidth:i,clientHeight:o}=t.element,a=5/Math.max(i,o),s=lu(t,e),{fixedPTWindowWidth:c=!0}=r??{},l=c?0:a;return s?[l,a]:[l,N3]}return[N3,N3]}const{Events:yu}=Qa,Kv={lower:-1e3,upper:1e3};class D0 extends U1{constructor(e){const{element:r,volumeId:n}=e,i=D0._getImageRange(r,n),o=D0._getVOIRange(r,n);super({...e,imageRange:i,voiRange:o}),this.autoHideTicks=()=>{if(this._hideTicksTimeoutId)return;const a=this._hideTicksTime-Date.now();a<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout(()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()},a)},this._stackNewImageCallback=()=>{this.imageRange=D0._getImageRange(this._element)},this._imageVolumeModifiedCallback=a=>{const{volumeId:s}=a.detail;if(s!==this._volumeId)return;const{_element:c}=this;this.imageRange=D0._getImageRange(c,s)},this._viewportVOIModifiedCallback=a=>{const{viewportId:s,volumeId:c,range:l,colormap:f}=a.detail,{viewport:u}=this.enabledElement;s!==u.id||c!==this._volumeId||(this.voiRange=l,f&&(this.activeColormapName=f.name),this.showAndAutoHideTicks())},this._viewportColormapModifiedCallback=a=>{const{viewportId:s,colormap:c,volumeId:l}=a.detail,{viewport:f}=this.enabledElement;s!==f.id||l!==this._volumeId||(this.activeColormapName=c.name)},this._element=r,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return _e(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return oSe(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:r}=this.enabledElement;if(r instanceof lr)r.setProperties({voiRange:e}),r.render();else if(r instanceof ur){const{_volumeId:n}=this,i=sm(n);r.setProperties({voiRange:e},n),i.forEach(o=>o.render())}}static _getImageRange(e,r){const n=_e(e),{viewport:i}=n,o=i.getImageActor(r);if(!o)return Kv;const s=o.getMapper().getInputData().getPointData().getScalars();let c;if(s)c=s.getRange();else{if(!r)throw new Error("volumeId is required when scalarData is not available");const l=$e.getVolume(r),[f,u]=l.voxelManager.getRange();c=[f,u]}return c[0]===0&&c[1]===0?Kv:{lower:c[0],upper:c[1]}}static _getVOIRange(e,r){const n=_e(e),{viewport:i}=n,o=i.getImageActor(r);if(!o)return Kv;const a=o.getProperty().getRGBTransferFunction(0).getRange();return a[0]===0&&a[1]===0?Kv:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(e=1e3){this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;et.addEventListener(yu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(yu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(yu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(yu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}destroy(){super.destroy();const{_element:e}=this;et.removeEventListener(yu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.removeEventListener(yu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.removeEventListener(yu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.removeEventListener(yu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}const aSe=Object.freeze(Object.defineProperty({__proto__:null,Colorbar:U1,Enums:eSe,ViewportColorbar:D0},Symbol.toStringTag,{value:"Module"}));function IW(t,e,r,n,i){const o=[];let a=0;const s=t.scalarData;let c,l,f;if(t.color)for(l=0;lUG(s,f),imageData:t})}function dSe(t,e,r){const[n,i]=t,o=Ft((n[0]+i[0])/2,(n[1]+i[1])/2,(n[2]+i[2])/2),a=Qi(n,i)/2;let s;if(!r){const c=sT(e,o),l=e.getSpacing(),f=Math.min(...l),u=Math.ceil(a/f);return s=[[c[0]-u,c[0]+u],[c[1]-u,c[1]+u],[c[2]-u,c[2]+u]],{boundsIJK:s,centerWorld:o,radiusWorld:a}}return s=hSe(e,r,t,o,a),{boundsIJK:s,centerWorld:o,radiusWorld:a}}function hSe(t,e,r,n,i){const[o,a]=r,s=t.getDimensions(),c=e.getCamera(),l=Ft(c.viewUp[0],c.viewUp[1],c.viewUp[2]),f=Ft(c.viewPlaneNormal[0],c.viewPlaneNormal[1],c.viewPlaneNormal[2]),u=Ke();kn(u,l,f);const d=Ke(),h=Ke();On(d,a,f,i),On(h,o,f,-i),On(d,d,u,-i),On(h,h,u,i);const g=[sT(t,d),sT(t,h)];return cf(g,s)}function PW(t){if(!Array.isArray(t)||t.length!==9)throw new Error("Matrix must be an array of 9 numbers");if(!t.every(e=>typeof e=="number"&&!isNaN(e)))throw new Error("Matrix must contain only valid numbers")}function RW(t){PW(t);const e=[[t[0],t[1],t[2]],[t[3],t[4],t[5]],[t[6],t[7],t[8]]],r=e[0][0]*(e[1][1]*e[2][2]-e[1][2]*e[2][1])-e[0][1]*(e[1][0]*e[2][2]-e[1][2]*e[2][0])+e[0][2]*(e[1][0]*e[2][1]-e[1][1]*e[2][0]);if(Math.abs(r)<1e-10)throw new Error("Matrix is not invertible (determinant is zero)");const n=[[e[1][1]*e[2][2]-e[1][2]*e[2][1],-(e[0][1]*e[2][2]-e[0][2]*e[2][1]),e[0][1]*e[1][2]-e[0][2]*e[1][1]],[-(e[1][0]*e[2][2]-e[1][2]*e[2][0]),e[0][0]*e[2][2]-e[0][2]*e[2][0],-(e[0][0]*e[1][2]-e[0][2]*e[1][0])],[e[1][0]*e[2][1]-e[1][1]*e[2][0],-(e[0][0]*e[2][1]-e[0][1]*e[2][0]),e[0][0]*e[1][1]-e[0][1]*e[1][0]]],i=[];for(let o=0;o<3;o++)for(let a=0;a<3;a++)i.push(n[o][a]/r);return i}function k3(t){const e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);return t.map(r=>r/e)}function gSe(t){PW(t);const e=t.slice(0,3),r=t.slice(3,6),n=t.slice(6,9),i=k3(e),o=k3(r),a=k3(n),s={x:[1,0,0],y:[0,1,0],z:[0,0,1]},c=1e-10,l=i.every((u,d)=>Math.abs(u-s.x[d])Math.abs(u-s.y[d])Math.abs(u-s.z[d]){ri(s,s,Ir(Ke(),[-o[0],-o[1],-o[2]],a))}),e instanceof lr&&(t.metadata.referencedImageId=e.getCurrentImageId()),t}function wSe(t,e,r){const n=e*r,i=t.length/n;if(![1,3,4].includes(i))throw new Error("Buffer must be 1, 3, or 4 channels per pixel");const o=Array.from({length:r},()=>new Array(e).fill(!1));for(let v=0;v0){x=!0;break}o[v][y]=x}const a=Array.from({length:r},()=>new Array(e).fill(0));let s=0;const c={};for(let v=0;vC<0||C>=e||S<0||S>=r?!1:o[S][C]&&a[S][C]===0;let w=0;_8(m,[y,v],{onFlood:(C,S)=>{a[S][C]=s,w++},diagonals:!1}),c[s]=w}if(s===0)return[];const l=Object.keys(c).reduce((v,y)=>c[v]>c[y]?v:y);function f(v,y){if(a[y][v]!==+l)return!1;for(const[m,w]of[[1,0],[-1,0],[0,1],[0,-1]]){const x=v+m,C=y+w;if(x<0||x>=e||C<0||C>=r||a[C][x]!==+l)return!0}return!1}let u=null;e:for(let v=0;vx[0]===v&&x[1]===y);m<0&&(m=0);let w=null;for(let x=1;x<=8;x++){const[C,S]=d[(m+x)%8],T=g[0]+C,_=g[1]+S;if(T>=0&&T=0&&_(y+1)%r,i=(y,m)=>{const w=[];for(let x=y;w.push(x),x!==m;x=n(x));return w};let o=0,a=0;for(let y=1;yt[a][0]&&(a=y);const s=t[o],c=t[a],l=i(o,a),f=i(a,o),u=Math.min(...t.map(y=>y[1])),d=l.some(y=>t[y][1]===u)?l:f,h=Math.min(...d.map(y=>t[y][1]));let g=d.map(y=>t[y]).filter(y=>Math.abs(y[1]-h)<=e);g.length<2&&(g=d.map(y=>t[y]).sort((y,m)=>y[1]-m[1]).slice(0,2));const p=g.reduce((y,m)=>m[0]m[0]>y[0]?m:y,g[0]);return{P1:p,P2:s,P3:c,P4:v}}function SSe(t,e,r,n,i,o={}){const{maxDist:a=15,slack:s=2}=o,c={P1:{dx:-1,dy:-1},P2:{dx:-1,dy:1},P3:{dx:1,dy:1},P4:{dx:1,dy:-1}};function l(f,{dx:u,dy:d},h=5){const g=u<0?f[0]-a:f[0]-s,p=u<0?f[0]+s:f[0]+a,v=d<0?f[1]-a:f[1]-s,y=d<0?f[1]+s:f[1]+a;let m=f;for(const[w,x]of i){if(wp||xy)continue;const C=Math.round(w),S=Math.round(x);if(C<0||C>=e||S<0||S>=r)continue;const T=(C-m[0])*u,_=(S-m[0])*d;t[S*e+C]>h&&(T>0||_>0)&&(m=[w,x])}return m}return{P1:l(n.P1,c.P1),P2:l(n.P2,c.P2),P3:l(n.P3,c.P3),P4:l(n.P4,c.P4)}}function TSe(t,e,r,n,i){const o=CSe(n);return SSe(t,e,r,o,i,{maxDist:20})}function a7(t,e){return Math.atan2(e[1]-t[1],e[0]-t[0])}function _Se(t){const{P1:e,P2:r,P3:n,P4:i}=t,o=c5(e,r,i,n,!0);if(!o)throw new Error("Fan edges appear parallel — no apex found");const a=o;let s=a7(a,e)*(180/Math.PI),c=a7(a,i)*(180/Math.PI);if(c<=s){const p=s;s=c,c=p}const l=Math.hypot(e[0]-a[0],e[1]-a[1]),f=Math.hypot(i[0]-a[0],i[1]-a[1]),u=Math.hypot(r[0]-a[0],r[1]-a[1]),d=Math.hypot(n[0]-a[0],n[1]-a[1]),h=Math.min(l,f),g=Math.max(u,d);return{center:a,startAngle:s,endAngle:c,innerRadius:h,outerRadius:g}}function np(t,e,r,n,i={}){const{strokeStyle:o="#f00",lineWidth:a=2,quality:s=.92}=i,c=document.createElement("canvas");c.width=e,c.height=r;const l=c.getContext("2d"),f=e*r,u=t.length/f,d=l.createImageData(e,r),h=d.data;for(let g=0;g0){l.strokeStyle=o,l.lineWidth=a,l.beginPath(),l.moveTo(n[0][0]+.5,n[0][1]+.5);for(let g=1;g=h;C-=.01){const S=o[0]+l*Math.cos(C),T=o[1]+l*Math.sin(C);v.lineTo(S,T)}return v.closePath(),v.strokeStyle=f,v.lineWidth=u,v.stroke(),p.toDataURL("image/jpeg",d)}function bSe(t,e=5){const{contour:r,simplified:n,hull:i,refined:o,fanGeometry:a}=k8(t),{pixelData:s,width:c,height:l}=N8(t)||{};if(!s)return;let f;e===1?f=np(s,c,l,r):e===2?f=np(s,c,l,n):e===3?f=np(s,c,l,i):e===4?f=np(s,c,l,[o.P1,o.P2,o.P3,o.P4]):f=ESe(s,c,l,a,{strokeStyle:"#f00",lineWidth:3,quality:.95}),AW(f,"contour.jpg")}function k8(t){const{pixelData:e,width:r,height:n}=N8(t)||{};if(!e)return;const i=wSe(e,r,n),{simplified:o,hull:a}=xSe(i),s=TSe(e,r,n,a,o),c=_Se({P1:s.P1,P2:s.P2,P3:s.P3,P4:s.P4});return{contour:i,simplified:o,hull:a,refined:s,fanGeometry:c}}const DSe=Object.freeze(Object.defineProperty({__proto__:null,calculateFanGeometry:k8,default:AW,downloadFanJpeg:bSe,exportContourJpeg:np,getPixelData:N8},Symbol.toStringTag,{value:"Module"})),ISe=un,OSe=Object.freeze(Object.defineProperty({__proto__:null,AnnotationMultiSlice:Lwe,IslandRemoval:Pd,annotationHydration:y1e,boundingBox:Mwe,calibrateImageSpacing:Owe,cine:TCe,contourSegmentation:eve,contours:uxe,debounce:Yh,drawing:rye,dynamicVolume:ZCe,geometricSurfaceUtils:vSe,getAnnotationNearPoint:bwe,getAnnotationNearPointOnEnabledElement:sG,getCalibratedAspect:c8,getCalibratedLengthUnitsAndScale:Ia,getCalibratedProbeUnitsAndValue:g5,getClosestImageIdForStackViewport:BE,getOrCreateImageVolume:Yw,getPixelValueUnits:uu,getPixelValueUnitsImageId:vB,getSphereBoundsInfo:uG,getViewportForAnnotation:F2,isObject:VE,math:pme,moveAnnotationToViewPlane:ySe,normalizeViewportPlane:NG,orientation:gCe,planar:Gve,planarFreehandROITool:DCe,pointInSurroundingSphereCallback:fSe,pointToString:fG,polyDataUtils:QCe,rectangleROITool:ICe,roundNumber:ISe,segmentation:fCe,setAnnotationLabel:LW,stackContextPrefetch:$Ce,stackPrefetch:VCe,throttle:Wo,touch:kpe,triggerAnnotationRender:Jh,triggerAnnotationRenderForToolGroupIds:dB,triggerAnnotationRenderForViewportIds:Be,triggerEvent:ut,usFanExtraction:DSe,viewport:jCe,viewportFilters:Fme,voi:uSe},Symbol.toStringTag,{value:"Module"})),MSe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function NW(t,e){const r=rr;t.forEach(n=>{r.updateSegmentation(n.segmentationId,n.payload),e||es(n.segmentationId)})}function PSe(t,e,r){rr.setSegmentationRepresentationVisibility(t,e,r)}function RSe(t,e,r){const n=Ea(t,e);n&&n.forEach(i=>{PSe(t,{segmentationId:i.segmentationId,type:i.type},r)})}function LSe(t,e){return pB(t,e)}function ASe(t,e,r,n){const i=Ea(t,e);i&&(i.forEach(o=>{o.segments[r].visible=n}),Hw(e.segmentationId),qc(t,e.segmentationId))}function NSe(t,e,r){return!kW(t,e).has(r)}function kW(t,e){const r=NE(t,e);return r?Object.entries(r.segments).reduce((i,[o,a])=>(a.visible||i.add(Number(o)),i),new Set):new Set}const kSe=Object.freeze(Object.defineProperty({__proto__:null,getHiddenSegmentIndices:kW,getSegmentIndexVisibility:NSe,getSegmentationRepresentationVisibility:LSe,setSegmentIndexVisibility:ASe,setSegmentationRepresentationVisibility:RSe},Symbol.toStringTag,{value:"Module"}));function VSe(t){return Ha.getStyle(t)}function FSe(t,e){Ha.setStyle(t,e),!t.viewportId&&!t.segmentationId&&Xw().forEach(n=>{tg(n.segmentationId)}),qc(t.viewportId,t.segmentationId,t.type)}function USe(t,e){Ha.setRenderInactiveSegmentations(t,e),tg(t),CG(t).forEach(n=>{qc(t,n.segmentationId)})}function BSe(t){return Ha.getRenderInactiveSegmentations(t)}function GSe(){Ha.resetToGlobalStyle(),tg()}function WSe(t){return Ha.hasCustomStyle(t)}const zSe=Object.freeze(Object.defineProperty({__proto__:null,getRenderInactiveSegmentations:BSe,getStyle:VSe,hasCustomStyle:WSe,resetToGlobalStyle:GSe,setRenderInactiveSegmentations:USe,setStyle:FSe},Symbol.toStringTag,{value:"Module"})),$Se=Object.freeze(Object.defineProperty({__proto__:null,color:Nye,style:zSe,visibility:kSe},Symbol.toStringTag,{value:"Module"}));function S5(t,e){const r=Vn(t);typeof e=="string"&&(console.warn("segmentIndex is a string, converting to number"),e=Number(e)),Object.values(r.segments).forEach(i=>{i.active=!1}),r.segments[e]||(r.segments[e]={segmentIndex:e,label:"",locked:!1,cachedStats:{},active:!1}),r.segments[e].active!==!0&&(r.segments[e].active=!0,es(t));const n=eg(t);n.forEach(i=>{Ea(i,{segmentationId:t}).forEach(a=>{a.segments[e]||(a.segments[e]={visible:!0})})}),n.forEach(i=>{const o=Pr(i);QG(o.id)})}const jSe=Object.freeze(Object.defineProperty({__proto__:null,getActiveSegmentIndex:Da,setActiveSegmentIndex:S5},Symbol.toStringTag,{value:"Module"}));async function HSe(t){const e=a1e(t);return es(t.segmentationId),e}function VW(t,e){const r=Vn(t);if(r.representationData.Labelmap){const{representationData:n}=r,i=n.Labelmap;("imageIds"in i||"volumeId"in i)&&("imageIds"in i?i.imageIds.map(a=>$e.getImage(a)):[$e.getVolume(i.volumeId)]).forEach(a=>{if(!a)return;const{voxelManager:s}=a;s.forEach(({value:c,index:l})=>{c===e&&s.setAtIndex(l,0)})}),To(t)}else throw new Error("Invalid segmentation type, only labelmap is supported right now")}function KSe(t,e,r={setNextSegmentAsActive:!0}){VW(t,e);const n=Da(t)===e,i=Vn(t),{segments:o}=i;delete o[e];const a={...o};if(NW([{segmentationId:t,payload:{segments:a}}]),n&&r.setNextSegmentAsActive){const c=Object.keys(o).map(Number).sort((d,h)=>d-h),l=c.indexOf(e),f=c[l+1],u=c[l-1];f!==void 0?S5(t,f):u!==void 0&&S5(t,u)}eg(t).forEach(c=>{Ea(c,{segmentationId:t}).forEach(f=>{delete f.segments[e]})})}function qSe(t){const e=rr,r=Vn(t);return e.getLabelmapImageIds(r.representationData)}const XSe={clearSegmentValue:VW,convertStackToVolumeLabelmap:HSe,computeVolumeLabelmapFromStack:uW,convertVolumeToStackLabelmap:iCe},YSe=Object.freeze(Object.defineProperty({__proto__:null,activeSegmentation:Tve,addContourRepresentationToViewport:D8,addContourRepresentationToViewportMap:Q3e,addLabelmapRepresentationToViewport:cW,addLabelmapRepresentationToViewportMap:eCe,addRepresentationData:kE,addSegmentationRepresentations:ag,addSegmentations:hG,addSurfaceRepresentationToViewport:lW,addSurfaceRepresentationToViewportMap:tCe,config:$Se,defaultSegmentationStateManager:rr,getActiveSegmentation:Od,getCurrentLabelmapImageIdsForViewport:ru,getLabelmapImageIds:qSe,getLabelmapImageIdsForImageId:gve,helpers:XSe,removeAllSegmentationRepresentations:mG,removeAllSegmentations:xG,removeContourRepresentation:yG,removeLabelmapRepresentation:vG,removeSegment:KSe,removeSegmentation:x8,removeSegmentationRepresentation:rg,removeSegmentationRepresentations:gG,removeSurfaceRepresentation:wG,segmentIndex:jSe,segmentLocking:Rye,segmentationStyle:Ha,state:Jwe,strategies:i3e,triggerSegmentationEvents:Zpe,updateSegmentations:NW},Symbol.toStringTag,{value:"Module"}));class V8{constructor(e){this._controlPoints=[],this._invalidated=!1,this._length=0,this._controlPoints=[],this._resolution=(e==null?void 0:e.resolution)??20,this._fixedResolution=(e==null?void 0:e.fixedResolution)??!1,this._closed=(e==null?void 0:e.closed)??!1,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._fixedResolution||this._resolution===e||(this._resolution=e,this.invalidated=!0)}get fixedResolution(){return this._fixedResolution}get closed(){return this._closed}set closed(e){this._closed!==e&&(this._closed=e,this.invalidated=!0)}get aabb(){return this._update(),this._aabb}get length(){return this._update(),this._length}get invalidated(){return this._invalidated}set invalidated(e){this._invalidated=e}hasTangentPoints(){return!1}addControlPoint(e){this._controlPoints.push([e[0],e[1]]),this.invalidated=!0}addControlPoints(e){e.forEach(r=>this.addControlPoint(r))}addControlPointAtU(e){const r=this._getLineSegmentAt(e),{start:n,end:i}=r.points,o=Math.floor(e),a=this._curveSegments[o],s=e-Math.floor(o),c=[n[0]+s*(i[0]-n[0]),n[1]+s*(i[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,c),this.invalidated=!0,{index:l,point:c}}deleteControlPointByIndex(e){const r=this._closed?3:1;return e>=0&&er?(this._controlPoints.splice(e,1),this.invalidated=!0,!0):!1}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,r){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...r],this.invalidated=!0}getControlPoints(){return this._controlPoints.map(e=>[e[0],e[1]])}getClosestControlPoint(e){const r=this._controlPoints;let n=1/0,i=-1;for(let o=0,a=r.length;ou.distanceSquared-d.distanceSquared);let n,i=-1,o=1/0,a,s;for(let u=0;uo)continue;const{curveSegmentIndex:h,curveSegment:g}=d,{lineSegments:p}=g;for(let v=0;v=c.minY&&e[1]=h.minY&&e[1]=l.maxX?o:l.maxX,a=a>=l.maxY?a:l.maxY,r+=f}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=r,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const r=[];return e.forEach(({lineSegments:n},i)=>{n.forEach((o,a)=>{i===0&&a===0&&r.push([...o.points.start]),r.push([...o.points.end])})}),r}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const r=[],{_curveSegments:n}=this;for(let i=0;in)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let a=0,s=i.length;a=c.previousLineSegmentsLength&&a<=l)return c}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,r=e[0],n=e[e.length-1],i={points:{start:[...r],end:[...n]},aabb:{minX:Math.min(r[0],n[0]),minY:Math.min(r[1],n[1]),maxX:Math.max(r[0],n[0]),maxY:Math.max(r[1],n[1])}};return{aabb:{minX:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}const JSe=1e-8;class F8 extends V8{getPreviewCurveSegments(e,r){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=r?n:n-1,a=this.getTransformMatrix(),s=[...this.controlPoints],c=[];r||s.push(e);for(let l=i;l<=o;l++){const f=this._getCurveSegment(l,a,s,r);c.push(f)}return c}getSplineCurves(){const e=this._getNumCurveSegments(),r=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let i=0;for(let o=0;o=o)if(this.closed)s=(o+s)%o;else return;const{p0:f,p1:u,p2:d,p3:h}=this._getCurveSegmentPoints(s,n,i),g=c*c,p=g*c,v=C2(1,c,g,p),y=ku(BR(),v,r);return[$6(y,C2(f[0],u[0],d[0],h[0])),$6(y,C2(f[1],u[1],d[1],h[1]))]}_getCurveSegmentPoints(e,r=this.controlPoints,n=this.closed){const i=this._getNumCurveSegments(r,n),o=e,a=o-1,s=n?(o+1)%i:o+1,c=s+1,l=r[o],f=r[s];let u,d;return a>=0?u=r[a]:u=n?r[r.length-1]:GS(f,l),cl?l:p;const v=this._getPoint(p,r,n,i);if(!g){u=v;continue}d=v;const y=d[0]-u[0],m=d[1]-u[1],w=Math.sqrt(y**2+m**2),x={minX:u[0]<=d[0]?u[0]:d[0],maxX:u[0]>=d[0]?u[0]:d[0],minY:u[1]<=d[1]?u[1]:d[1],maxY:u[1]>=d[1]?u[1]:d[1]};f.push({points:{start:u,end:d},aabb:x,length:w,previousLineSegmentsLength:h}),u=d,h+=w}return f}_getCurveSegment(e,r=this.getTransformMatrix(),n=this.controlPoints,i=this.closed){const{p0:o,p1:a,p2:s,p3:c}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,r,n,i);let f=0,u=1/0,d=1/0,h=-1/0,g=-1/0;return l.forEach(({aabb:p,length:v})=>{u=Math.min(u,p.minX),d=Math.min(d,p.minY),h=Math.max(h,p.maxX),g=Math.max(g,p.maxY),f+=v}),{controlPoints:{p0:o,p1:a,p2:s,p3:c},aabb:{minX:u,minY:d,maxX:h,maxY:g},length:f,previousCurveSegmentsLength:0,lineSegments:l}}}const ZSe=kR(ba(),J_(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class FW extends F8{getTransformMatrix(){return ZSe}}class B1 extends F8{constructor(e){super(e),this._scale=(e==null?void 0:e.scale)??.5,this._fixedScale=(e==null?void 0:e.fixedScale)??!1}get scale(){return this._scale}set scale(e){this._fixedScale||this._scale===e||(this._scale=e,this.invalidated=!0)}get fixedScale(){return this._fixedScale}getTransformMatrix(){const{scale:e}=this,r=2*e;return[0,1,0,0,-e,0,e,0,r,e-3,3-r,-e,-e,2-e,e-2,e]}}class UW extends B1{constructor(){super({scale:.5,fixedScale:!0})}}class BW extends B1{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class GW extends V8{getSplineCurves(){return[]}getLineSegments(){return[]}getPreviewCurveSegments(e,r){return[]}}const QSe=[1,0,0,-2,2,0,1,-2,1];class eTe extends GW{hasTangentPoints(){return!0}getTransformMatrix(){return QSe}}const tTe=Object.freeze(Object.defineProperty({__proto__:null,BSpline:FW,CardinalSpline:B1,CatmullRomSpline:UW,CubicSpline:F8,LinearSpline:BW,QuadraticBezier:eTe,QuadraticSpline:GW,Spline:V8},Symbol.toStringTag,{value:"Module"}));class Qu extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r)}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:r,deltaPoints:n}=e.detail,i=_e(r),o=n.world;if(o[0]===0&&o[1]===0&&o[2]===0)return;const a=i.viewport.getCamera(),{focalPoint:s,position:c}=a,l=[c[0]-o[0],c[1]-o[1],c[2]-o[2]],f=[s[0]-o[0],s[1]-o[1],s[2]-o[2]];i.viewport.setCamera({focalPoint:f,position:l}),i.viewport.render()}}Qu.toolName="Pan";class WW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2,rotateSampleDistanceFactor:2}}){super(e,r),this._resizeObservers=new Map,this._hasResolutionChanged=!1,this.preMouseDownCallback=n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a,f=s.getDefaultActor().actor.getMapper();if(!("getSampleDistance"in f||"getCurrentSampleDistance"in f))return!0;const d=f.getSampleDistance();if(!this._hasResolutionChanged){const{rotateSampleDistanceFactor:h}=this.configuration;f.setSampleDistance(d*h),this._hasResolutionChanged=!0,this.cleanUp!==null&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{f.setSampleDistance(d),s.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})}return!0},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.onSetToolActive=()=>{const n=()=>{this._getViewportsInfo().forEach(({viewportId:o,renderingEngineId:a})=>{if(!this._resizeObservers.has(o)){const{viewport:s}=Oi(o,a)||{viewport:null};if(!s)return;const{element:c}=s,l=new ResizeObserver(()=>{const f=Oi(o,a);if(!f)return;const{viewport:u}=f,d=u.getViewPresentation();u.resetCamera(),u.setViewPresentation(d),u.render()});l.observe(c),this._resizeObservers.set(o,l)}})};n(),this._viewportAddedListener=i=>{i.detail.toolGroupId===this.toolGroupId&&n()},et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener)},this.onSetToolDisabled=()=>{this._resizeObservers.forEach((n,i)=>{n.disconnect(),this._resizeObservers.delete(i)}),this._viewportAddedListener&&(et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null)},this.rotateCamera=(n,i,o,a)=>{const s=n.getVtkActiveCamera(),c=s.getViewUp(),l=s.getFocalPoint(),f=s.getPosition(),u=[0,0,0],d=[0,0,0],h=[0,0,0],g=Wt(new Float32Array(16));dr(g,g,i),Ro(g,g,a,o),dr(g,g,[-i[0],-i[1],-i[2]]),Yt(u,f,g),Yt(d,l,g),Wt(g),Ro(g,g,a,o),Yt(h,c,g),n.setCamera({position:u,viewUp:h,focalPoint:d})},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:r,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:s}=this.configuration,c=_e(r),{viewport:l}=c,f=l.getCamera(),u=r.clientWidth,d=r.clientHeight,h=[o[0]/u,o[1]/d],g=[a[0]/u,a[1]/d],p=[u*.5,d*.5],v=l.canvasToWorld(p),m=(1+Math.abs([.5,.5][0]))**2,w=[g[0],0,0],x=[h[0],0,0],C=w[0]**2,S=x[0]**2,T=C>m?0:Math.sqrt(m-C),_=S>m?0:Math.sqrt(m-S),E=[w[0],0,T];nn.normalize(E);const b=[x[0],0,_];nn.normalize(b);const D=nn.dot(E,b);if(Math.abs(D)>1e-4){const I=-2*Math.acos(nn.clampValue(D,-1,1))*Math.sign(h[0]-g[0])*s,P=f.viewUp,O=f.viewPlaneNormal,A=[0,0,0],V=[0,0,0];nn.cross(P,O,A),nn.normalize(A),nn.cross(O,A,V),nn.normalize(V),nn.normalize(P),this.rotateCamera(l,v,V,I);const G=(g[1]-h[1])*s;this.rotateCamera(l,v,A,G),l.render()}}}WW.toolName="TrackballRotate";const V3=4,nTe=1024,rTe="PT";class Oh extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this._getImageDynamicRangeFromMiddleSlice=(n,i)=>{const o=Math.floor(i[2]/2),a=i[0]*i[1];let s,c;n instanceof Float32Array?(s=4,c=Float32Array):n instanceof Uint8Array?(s=1,c=Uint8Array):n instanceof Uint16Array?(s=2,c=Uint16Array):n instanceof Int16Array&&(s=2,c=Int16Array);const l=n.buffer,f=o*a*s,u=new c(l,f,a),{max:d,min:h}=this._getMinMax(u,a);return d-h}}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){var g,p;const{element:r,deltaPoints:n}=e.detail,i=_e(r),{viewport:o}=i;let a,s,c,l,f,u,d=!1;const h=o.getProperties();if(o instanceof ur){a=o.getVolumeId(),u=sm(a),{lower:s,upper:c}=h.voiRange;const v=$e.getVolume(a);if(!v)throw new Error("Volume not found "+a);l=v.metadata.Modality,d=v.scaling&&Object.keys(v.scaling).length>0}else if(h.voiRange){l=o.modality,{lower:s,upper:c}=h.voiRange;const{preScale:v={scaled:!1}}=((g=o.getImageData)==null?void 0:g.call(o))||{};d=v.scaled&&((p=v.scalingParameters)==null?void 0:p.suvbw)!==void 0}else throw new Error("Viewport is not a valid type");if(l===rTe&&d?f=this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:c,clientHeight:r.clientHeight,isPreScaled:d,viewport:o,volumeId:a}):f=this.getNewRange({viewport:o,deltaPointsCanvas:n.canvas,volumeId:a,lower:s,upper:c}),!(f.lower>=f.upper)&&(o.setProperties({voiRange:f}),o.render(),o instanceof ur)){u.forEach(v=>{o!==v&&v.render()});return}}getPTScaledNewRange({deltaPointsCanvas:e,lower:r,upper:n,clientHeight:i,viewport:o,volumeId:a,isPreScaled:s}){let c=V3;s?c=5/i:c=this._getMultiplierFromDynamicRange(o,a)||V3;const f=e[1]*c;return n-=f,n=s?Math.max(n,.1):n,{lower:r,upper:n}}getNewRange({viewport:e,deltaPointsCanvas:r,volumeId:n,lower:i,upper:o}){const a=this._getMultiplierFromDynamicRange(e,n)||V3,s=r[0]*a,c=r[1]*a;let{windowWidth:l,windowCenter:f}=im(i,o);l+=s,f+=c,l=Math.max(l,1);const u=e.getProperties().VOILUTFunction;return Xu(l,f,u)}_getMultiplierFromDynamicRange(e,r){var o;let n;if(r){const a=$e.getVolume(r),{voxelManager:s}=e.getImageData(),l=s.getMiddleSliceData().reduce((d,h)=>[Math.min(d[0],h),Math.max(d[1],h)],[1/0,-1/0]),f=(o=a==null?void 0:a.metadata)==null?void 0:o.BitsStored,u=f?2**f:1/0;n=Math.min(l,u)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/nTe;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:r,voxelManager:n}=e.getImageData();if(n!=null&&n.getRange){const s=n.getRange();return s[1]-s[0]}const i=r.getDimensions();if(r.getRange){const s=r.getRange();return s[1]-s[0]}let o;if(r.getScalarData?o=r.getScalarData():o=r.getPointData().getScalars().getData(),i[2]!==1)return this._getImageDynamicRangeFromMiddleSlice(o,i);let a;if(o.getRange)a=o.getRange();else{const{min:s,max:c}=this._getMinMax(o,o.length);a=[s,c]}return a[1]-a[0]}_getMinMax(e,r){let n=1/0,i=-1/0;for(let o=0;oi&&(i=a)}return{max:i,min:n}}}Oh.toolName="WindowLevel";class zW extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=this.getReferencedImageId(l,s,u,d),g=l.getFrameOfReferenceUID(),p={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...s],[...s],[...s],[...s]]},cachedStats:{}}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,viewportIdsToRender:v},this._activateDraw(a),Gt(a),n.preventDefault(),Be(v),p},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData;this._deactivateDraw(o),Jt(o),this.editData=null,this.isDrawing=!1,mn(a.annotationUID),Be(s),Un(a),this.applyWindowLevelRegion(a,o)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData,{data:c}=a,{currentPoints:l}=i,f=_e(o),{worldToCanvas:u,canvasToWorld:d}=f.viewport,h=l.world,{points:g}=c.handles,p=3;g[p]=[...h];const v=u(g[0]),y=u(g[3]),m=[y[0],v[1]],w=[v[0],y[1]],x=d(m),C=d(w);g[1]=x,g[2]=C,a.invalidated=!0,Be(s)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(C));l.annotationUID=d;const{color:v,lineWidth:y,lineDash:m}=this.getAnnotationStyle({annotation:u,styleSpecifier:l});if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const w=`${d}-rect`;Em(i,d,"0",p[0],p[3],{color:v,lineDash:m,lineWidth:y},w),o=!0}return o},this.applyWindowLevelRegion=(n,i)=>{const o=_e(i),{viewport:a}=o,s=MW(a),{data:c}=n,{points:l}=c.handles,f=l.map(T=>a.worldToCanvas(T)),u=f[0],d=f[3];let h=Math.min(u[0],d[0]),g=Math.min(u[1],d[1]),p=Math.abs(u[0]-d[0]),v=Math.abs(u[1]-d[1]);h=jy(h,0,s.width),g=jy(g,0,s.height),p=Math.floor(Math.min(p,Math.abs(s.width-h))),v=Math.floor(Math.min(v,Math.abs(s.height-g)));const y=IW(s,Math.round(h),Math.round(g),p,v),m=OW(y,s.minPixelValue,s.maxPixelValue);this.configuration.minWindowWidth===void 0&&(this.configuration.minWindowWidth=10);const w=Math.max(Math.abs(m.max-m.min),this.configuration.minWindowWidth),x=m.mean,C=a.getProperties().VOILUTFunction,S=Xu(w,x,C);a.setProperties({voiRange:S}),a.render()},this.cancel=()=>null,this.isPointNearTool=()=>null,this.toolSelectedCallback=()=>null,this.handleSelectedCallback=()=>null,this._activateModify=()=>null,this._deactivateModify=()=>null}}zW.toolName="WindowLevelRegion";class Ld extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}){super(e,r),this.deltaY=1}mouseWheelCallback(e){this._scroll(e)}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){this._scrollDrag(e)}_scrollDrag(e){const{deltaPoints:r,viewportId:n,renderingEngineId:i}=e.detail,{viewport:o}=Oi(n,i),{debounceIfNotLoaded:a,invert:s,loop:c}=this.configuration,l=r.canvas[1];let f;o instanceof ur&&(f=o.getVolumeId());const u=this._getPixelPerImage(o),d=l+this.deltaY;if(u)if(Math.abs(d)>=u){const h=Math.round(d/u);sc(o,{delta:s?-h:h,volumeId:f,debounceLoading:a,loop:c}),this.deltaY=d%u}else this.deltaY=d}_scroll(e){const{wheel:r,element:n}=e.detail,{direction:i}=r,{invert:o}=this.configuration,{viewport:a}=_e(n),s=i*(o?-1:1);sc(a,{delta:s,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:a instanceof Tr?a.getVolumeId():void 0,scrollSlabs:this.configuration.scrollSlabs})}_getPixelPerImage(e){const{element:r}=e,n=e.getNumberOfSlices();return Math.max(2,r.offsetHeight/Math.max(n,8))}}Ld.toolName="StackScroll";class Mh extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.mouseWheelCallback=n=>{const{element:i,wheel:o}=n.detail,a=_e(i),{viewport:s}=a,{invert:c}=this.configuration,l=o.direction*10*(c?-1:1);this.setAngle(s,l)},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:r,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,s=_e(r),{viewport:c}=s,l=c.getCamera(),f=r.clientWidth,u=r.clientHeight,d=[f*.5,u*.5],h=c.canvasToWorld(d);let g=oh([a,h],[h,o]);const{viewPlaneNormal:p}=l,v=Mn(Ke(),h,a),y=Mn(Ke(),h,o),m=kn(Ke(),v,y);kt(p,m)>0&&(g=-g),!Number.isNaN(g)&&this.setAngle(c,g)}setAngle(e,r){const{viewPlaneNormal:n,viewUp:i}=e.getCamera();if(e instanceof Tr){const o=(r+360)%360*Math.PI/180,a=Wt(new Float32Array(16));Ro(a,a,o,n);const s=Yt(Ke(),i,a);e.setCamera({viewUp:s})}else{const{rotation:o}=e.getViewPresentation();e.setViewPresentation({rotation:(o+r+360)%360})}e.render()}}Mh.toolName="PlanarRotate";class Gl extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.001,maxZoomScale:3e3,pinchToZoom:!0,pan:!0,invert:!1}}){super(e,r),this.preMouseDownCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=a.world,l=_e(o).viewport.getCamera(),{focalPoint:f}=l;this.initialMousePosWorld=s;let u=Ft(f[0]-s[0],f[1]-s[1],f[2]-s[2]);return u=Qn(Ke(),u),this.dirVec=u,!1},this.preTouchStartCallback=n=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(n)},this._dragParallelProjection=(n,i,o,a=!1)=>{var T,_,E;const{element:s,deltaPoints:c}=n.detail,l=a?n.detail.deltaDistance.canvas:c.canvas[1],f=[s.clientWidth,s.clientHeight],{parallelScale:u,focalPoint:d,position:h}=o,g=5/f[1],p=l*g*(this.configuration.invert?-1:1),v=(1-p)*u;let y=d,m=h;if(!this.configuration.zoomToCenter){const b=Qi(d,this.initialMousePosWorld);m=On(Ke(),h,this.dirVec,-b*p),y=On(Ke(),d,this.dirVec,-b*p)}const w=i.getImageData();let x=[1,1,1],C=v,S=!1;if(w){x=w.spacing;const{dimensions:b}=w,D=b[0]*x[0],I=b[1]*x[1],P=f[0]/f[1],O=(T=i.options)==null?void 0:T.displayArea,A=((_=O==null?void 0:O.imageArea)==null?void 0:_[0])??1.1,V=((E=O==null?void 0:O.imageArea)==null?void 0:E[1])??1.1,G=D*A,R=I*V,N=G/R;let F;N>P?F=G/P*.5:F=R*.5;const{minZoomScale:j,maxZoomScale:te}=this.configuration,ie=F/te,he=F/j;vhe&&(C=he,S=!0)}i.setCamera({parallelScale:C,focalPoint:S?d:y,position:S?h:m})},this._dragPerspectiveProjection=(n,i,o,a=!1)=>{const{element:s,deltaPoints:c}=n.detail,l=a?n.detail.deltaDistance.canvas:c.canvas[1],f=[s.clientWidth,s.clientHeight],{position:u,focalPoint:d,viewPlaneNormal:h}=o,g=nn.distance2BetweenPoints(u,d),p=Math.sqrt(g)/f[1],v=[-h[0],-h[1],-h[2]],y=this.configuration.invert?l/p:l*p;let m=y*v[0];u[0]+=m,d[0]+=m,m=y*v[1],u[1]+=m,d[1]+=m,m=y*v[2],u[2]+=m,d[2]+=m,i.setCamera({position:u,focalPoint:d})},this.initialMousePosWorld=[0,0,0],this.dirVec=[0,0,0],this.configuration.pinchToZoom?this.touchDragCallback=this._pinchCallback.bind(this):this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}mouseWheelCallback(e){this._zoom(e)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:n,currentPoints:i}=e.detail,o=_e(n),{viewport:a}=o,s=a.getCamera(),c=i.world,{focalPoint:l}=s;this.initialMousePosWorld=c;let f=Ft(l[0]-c[0],l[1]-c[1],l[2]-c[2]);f=Qn(Ke(),f),this.dirVec=f,s.parallelProjection?this._dragParallelProjection(e,a,s,!0):this._dragPerspectiveProjection(e,a,s,!0),a.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:r}=e.detail,n=_e(r),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_zoom(e){const{element:r,points:n}=e.detail,i=_e(r),{viewport:o}=i;o.getCamera();const s=e.detail.wheel.direction,c={detail:{element:r,eventName:k.MOUSE_WHEEL,renderingEngineId:i.renderingEngineId,viewportId:o.id,camera:{},deltaPoints:{page:n.page,client:n.client,world:n.world,canvas:[0,-s*5]},startPoints:n,lastPoints:n,currentPoints:n}};o.type===vr.STACK&&this.preMouseDownCallback(c),this._dragCallback(c)}_panCallback(e){const{element:r,deltaPoints:n}=e.detail,i=_e(r),o=n.world,a=i.viewport.getCamera(),{focalPoint:s,position:c}=a,l=[c[0]-o[0],c[1]-o[1],c[2]-o[2]],f=[s[0]-o[0],s[1]-o[1],s[2]-o[2]];i.viewport.setCamera({focalPoint:f,position:l}),i.viewport.render()}}Gl.toolName="Zoom";class $W extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}}){super(e,r)}mouseClickCallback(e){const{element:r,currentPoints:n}=e.detail,i=_e(r),{viewport:o,renderingEngine:a}=i,s=o.getVolumeId();if(!s)throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");let c=-1/0;const l=(g,p)=>{if(g>c)return c=g,p},f=l8(o,n.world,s,l);if(!f||!f.length)return;const{targetViewportIds:u,toolGroupId:d}=this.configuration;a.getViewports().filter(g=>{if((u==null?void 0:u.indexOf(g.id))>=0)return!0;const p=Pr(g.id,a.id);return!!(d&&d===(p==null?void 0:p.id))}).forEach(g=>{g instanceof ur?g.jumpToWorld(f):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")})}}$W.toolName="MIPJumpToClickTool";const{RENDERING_DEFAULTS:F3}=wf;function iTe(){return"rgb(0, 200, 0)"}function oTe(){return!0}function aTe(){return!0}function sTe(){return!0}const js={DRAG:1,ROTATE:2,SLAB:3};class jc extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},autoPan:{enabled:!1,panSize:10},handleRadius:3,enableHDPIHandles:!1,referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:Zc.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}){var n,i,o,a;super(e,r),this.toolCenter=[0,0,0],this.initializeViewport=({renderingEngineId:s,viewportId:c})=>{const l=Oi(c,s);if(!l)return;const{FrameOfReferenceUID:f,viewport:u}=l,{element:d}=u,{position:h,focalPoint:g,viewPlaneNormal:p}=u.getCamera();let v=this._getAnnotations(l);v=this.filterInteractableAnnotationsForElement(d,v),v!=null&&v.length&&mn(v[0].annotationUID);const y={highlighted:!1,metadata:{cameraPosition:[...h],cameraFocalPoint:[...g],FrameOfReferenceUID:f,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:c}};return ln(y,d),{normal:p,point:u.canvasToWorld([u.canvas.clientWidth/2,u.canvas.clientHeight/2])}},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.resetCrosshairs=()=>{const s=this._getViewportsInfo();for(const c of s){const{viewportId:l,renderingEngineId:f}=c,u=Oi(l,f),d=u.viewport;d.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!0,suppressEvents:!0}),d.resetSlabThickness();const{element:m}=d;let w=this._getAnnotations(u);w=this.filterInteractableAnnotationsForElement(m,w),w.length&&mn(w[0].annotationUID),d.render()}this._computeToolCenter(s)},this.computeToolCenter=()=>{const s=this._getViewportsInfo();this._computeToolCenter(s)},this._computeToolCenter=s=>{if(!s.length||s.length===1){console.warn("For crosshairs to operate, at least two viewports must be given.");return}const[c,l,f]=s,{normal:u,point:d}=this.initializeViewport(c),{normal:h,point:g}=this.initializeViewport(l);let p=[0,0,0],v=Ke();f?{normal:p,point:v}=this.initializeViewport(f):(ri(v,d,g),Ir(v,v,.5),kn(p,u,h));const y=nl(u,d),m=nl(h,g),w=nl(p,v),x=yk(y,m,w);this.setToolCenter(x)},this.addNewAnnotation=s=>{const c=s.detail,{element:l}=c,{currentPoints:f}=c,u=f.world,d=_e(l),{viewport:h}=d;this._jump(d,u);const g=this._getAnnotations(d),p=this.filterInteractableAnnotationsForElement(h.element,g),{data:v}=p[0],{rotationPoints:y}=v.handles,m=[];for(let w=0;w{console.log("Not implemented yet")},this.handleSelectedCallback=(s,c)=>{const l=s.detail,{element:f}=l;c.highlighted=!0,this._activateModify(f),Gt(f),s.preventDefault()},this.isPointNearTool=(s,c,l,f)=>!!this._pointNearTool(s,c,l,6),this.toolSelectedCallback=(s,c,l)=>{const f=s.detail,{element:u}=f;c.highlighted=!0,this._activateModify(u),Gt(u),s.preventDefault()},this.onCameraModified=s=>{var E;const c=s.detail,{element:l}=c,f=_e(l),{renderingEngine:u}=f,d=f.viewport,h=this._getAnnotations(f),p=this.filterInteractableAnnotationsForElement(l,h)[0];if(!p)return;const v=d.getCamera(),y=p.metadata.cameraPosition,m=[0,0,0];nn.subtract(v.position,y,m);const w=p.metadata.cameraFocalPoint,x=[0,0,0];nn.subtract(v.focalPoint,w,x),p.metadata.cameraPosition=[...v.position],p.metadata.cameraFocalPoint=[...v.focalPoint];const C=this._getReferenceLineControllable(d.id),S=this._getReferenceLineDraggableRotatable(d.id);if(!Zt(v.position,y,.001)&&C&&S){let b=!1;Zt(m,x,.001)||(b=!0);const I=Math.abs(nn.dot(m,v.viewPlaneNormal))<.01;!b&&!I&&(this.toolCenter[0]+=m[0],this.toolCenter[1]+=m[1],this.toolCenter[2]+=m[2],ut(et,k.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter}))}(E=this.configuration.autoPan)!=null&&E.enabled&&Pr(d.id,u.id).getViewportIds().filter(I=>I!==d.id).forEach(I=>{this._autoPanViewportIfNecessary(I,u)});const _=At(l,this.getToolName(),!1);Be(_)},this.onResetCamera=s=>{this.resetCrosshairs()},this.mouseMoveCallback=(s,c)=>{const{element:l,currentPoints:f}=s.detail,u=f.canvas;let d=!1;for(let h=0;h0?[...p.activeViewportIds]:[];p.activeViewportIds=[],p.handles.activeOperation=null;const w=this.getHandleNearImagePoint(l,g,u,6);let x=!1;w?x=!0:x=this._pointNearTool(l,g,u,6),x&&!v||!x&&v?(g.highlighted=!v,d=!0):(p.handles.activeOperation!==y||!this._areViewportIdArraysEqual(p.activeViewportIds,m))&&(d=!0)}return d},this.filterInteractableAnnotationsForElement=(s,c)=>{if(!c||!c.length)return[];const l=_e(s),{viewportId:f}=l;return c.filter(d=>d.data.viewportId===f)},this.renderAnnotation=(s,c)=>{let l=!1;const{viewport:f,renderingEngine:u}=s,{element:d}=f,h=this._getAnnotations(s),g=f.getCamera(),v=this.filterInteractableAnnotationsForElement(d,h)[0];if(!(h!=null&&h.length)||!(v!=null&&v.data))return l;const y=v.annotationUID,{clientWidth:m,clientHeight:w}=f.canvas,x=Math.sqrt(m*m+w*w),C=Math.min(m,w),S=v.data,T=f.worldToCanvas(this.toolCenter),_=this._filterAnnotationsByUniqueViewportOrientations(s,h),E=[],b=[0,0,m,w];_.forEach(A=>{const{data:V}=A;V.handles.toolCenter=this.toolCenter;const G=u.getViewport(V.viewportId),R=G.getCamera(),N=this._getReferenceLineControllable(G.id),F=this._getReferenceLineDraggableRotatable(G.id),j=this._getReferenceLineSlabThicknessControlsOn(G.id),{clientWidth:te,clientHeight:ie}=G.canvas,he=Math.sqrt(te*te+ie*ie),ue=[te*.5,ie*.5],ve=G.canvasToWorld(ue),Me=[0,0,0];nn.cross(g.viewPlaneNormal,R.viewPlaneNormal,Me),nn.normalize(Me),nn.multiplyScalar(Me,he);const Ue=[0,0,0];nn.add(ve,Me,Ue);const be=[0,0,0];nn.subtract(ve,Me,be);const B=f.worldToCanvas(Ue),M=f.worldToCanvas(ve),$=rn();Jr($,B,M),Fl($,$);const W=rn();Ll(W,$,x*100);const Y=rn();Ll(Y,$,C*.4);const ne=rn();Ll(ne,$,C*.2);const re=rn(),Se=this.configuration.referenceLinesCenterGapRadius;Ll(re,$,_.length===2?Se:0);const Re=rn(),je=rn(),qe=rn(),oe=rn();let ce=Qm(T);(!F||!N)&&(ce=Qm(M)),mo(Re,ce,re),mo(je,ce,W),Jr(qe,ce,re),Jr(oe,ce,W),ep(Re,je,b),ep(qe,oe,b);const Te=rn();Jr(Te,T,Y);const ae=rn();mo(ae,T,Y);let we=Qm(T);!F&&j&&(we=Qm(M));let Ze=[...this.toolCenter];!F&&j&&(Ze=[...ve]);const le=[0,0,0];nn.subtract(Ue,be,le),nn.normalize(le);const{viewPlaneNormal:Tt}=g,{matrix:Ot}=Yi.buildFromDegree().rotate(90,Tt),_t=[0,0,0];Yt(_t,le,Ot);const Ae=G.getSlabThickness(),tt=[..._t];nn.multiplyScalar(tt,Ae);const gt=[0,0,0];nn.add(Ze,tt,gt);const ht=f.worldToCanvas(gt),xt=rn();Jr(xt,we,ht);const jt=rn();Jr(jt,we,W),mo(jt,jt,xt);const Pt=rn();mo(Pt,we,W),mo(Pt,Pt,xt),ep(jt,Pt,b);const Kt=rn();mo(Kt,we,W),Jr(Kt,Kt,xt);const en=rn();Jr(en,we,W),Jr(en,en,xt),ep(Kt,en,b);const Dn=rn(),Xn=rn(),fn=rn(),Nn=rn();Jr(Dn,we,ne),mo(Dn,Dn,xt),mo(Xn,we,ne),mo(Xn,Xn,xt),Jr(fn,we,ne),Jr(fn,fn,xt),mo(Nn,we,ne),Jr(Nn,Nn,xt),E.push([G,Re,je,qe,oe,jt,Pt,Kt,en,Te,ae,Dn,Xn,fn,Nn])});const D=[],I=[],P=this._getReferenceLineColor(f.id),O=P!==void 0?P:"rgb(200, 200, 200)";if(E.forEach((A,V)=>{var Me,Ue,be,B;const G=A[0],R=this._getReferenceLineColor(G.id),N=this._getReferenceLineControllable(G.id),F=this._getReferenceLineDraggableRotatable(G.id)||((Me=this.configuration.mobile)==null?void 0:Me.enabled),j=this._getReferenceLineSlabThicknessControlsOn(G.id)||((Ue=this.configuration.mobile)==null?void 0:Ue.enabled),te=S.activeViewportIds.find(M=>M===G.id);let ie=R!==void 0?R:"rgb(200, 200, 200)",he=1;const ue=S.handles.activeOperation!==null&&S.handles.activeOperation===js.DRAG&&te;ue&&(he=2.5);let ve=`${V}`;if(N&&F?(ve=`${V}One`,Sn(c,y,ve,A[1],A[2],{color:ie,lineWidth:he}),ve=`${V}Two`,Sn(c,y,ve,A[3],A[4],{color:ie,lineWidth:he})):Sn(c,y,ve,A[2],A[4],{color:ie,lineWidth:he}),N){ie=R!==void 0?R:"rgb(200, 200, 200)";const M=S.handles.activeOperation===js.ROTATE,$=[A[9],A[10]],W=[f.canvasToWorld(A[9]),G,A[1],A[2]],Y=[f.canvasToWorld(A[10]),G,A[3],A[4]];D.push(W,Y);const ne=S.handles.activeOperation===js.SLAB,re=[A[11],A[12],A[13],A[14]],Se=[f.canvasToWorld(A[11]),G,A[5],A[6]],Re=[f.canvasToWorld(A[12]),G,A[5],A[6]],je=[f.canvasToWorld(A[13]),G,A[7],A[8]],qe=[f.canvasToWorld(A[14]),G,A[7],A[8]];I.push(Se,Re,je,qe);let oe=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1),ce=1;if((be=this.configuration.mobile)!=null&&be.enabled&&(oe=this.configuration.mobile.handleRadius,ce=this.configuration.mobile.opacity),(ue||(B=this.configuration.mobile)!=null&&B.enabled)&&!M&&!ne&&F&&j){let ae=`${V}One`;or(c,y,ae,$,{color:ie,handleRadius:oe,opacity:ce,type:"circle"}),ae=`${V}Two`,or(c,y,ae,re,{color:ie,handleRadius:oe,opacity:ce,type:"rect"})}else if(ue&&!M&&!ne&&F){const ae=`${V}`;or(c,y,ae,$,{color:ie,handleRadius:oe,opacity:ce,type:"circle"})}else if(te&&!M&&!ne&&j){const ae=`${V}`;or(c,y,ae,re,{color:ie,handleRadius:oe,opacity:ce,type:"rect"})}else if(M&&F){const ae=`${V}`,we=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1);or(c,y,ae,$,{color:ie,handleRadius:we,fill:ie,type:"circle"})}else if(ne&&te&&j){const ae=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1);or(c,y,ve,re,{color:ie,handleRadius:ae,fill:ie,type:"rect"})}G.getSlabThickness()>.5&&j&&(ve=`${V}STOne`,Sn(c,y,ve,A[5],A[6],{color:ie,width:1,lineDash:[2,3]}),ve=`${V}STTwo`,Sn(c,y,ve,A[7],A[8],{color:ie,width:A,lineDash:[2,3]}))}}),l=!0,S.handles.rotationPoints=D,S.handles.slabThicknessPoints=I,this.configuration.viewportIndicators){const{viewportIndicatorsConfig:A}=this.configuration,V=(A==null?void 0:A.xOffset)||.95,G=(A==null?void 0:A.yOffset)||.05,R=[m*V,w*G],N=(A==null?void 0:A.circleRadius)||x*.01;ia(c,y,"0",R,N,{color:O,fill:O})}return l},this._getAnnotations=s=>{const{viewport:c}=s,l=hn(this.getToolName(),c.element)||[],f=this._getViewportsInfo().map(({viewportId:d})=>d);return l.filter(d=>{const{data:h}=d;return f.includes(h.viewportId)})},this._onNewVolume=()=>{const s=this._getViewportsInfo();this._computeToolCenter(s)},this._areViewportIdArraysEqual=(s,c)=>s.length!==c.length?!1:(s.forEach(l=>{let f=!1;for(let u=0;u{const{viewportId:l,renderingEngine:f,viewport:u}=s,d=c.filter(y=>y.data.viewportId!==l);if(!d||!d.length)return[];const h=u.getCamera(),{viewPlaneNormal:g,position:p}=h;return d.filter(y=>{const{viewportId:m}=y.data,x=f.getViewport(m).getCamera();return!(Zt(x.viewPlaneNormal,g,.01)&&Zt(x.position,p,1))})},this._filterViewportWithSameOrientation=(s,c,l)=>{const{renderingEngine:f}=s,{data:u}=c,d=f.getViewport(u.viewportId),h=l.filter(y=>{const{data:m}=y,w=f.getViewport(m.viewportId);return this._getReferenceLineControllable(w.id)===!0});if(!h||!h.length)return[];const g=d.getCamera(),p=g.viewPlaneNormal;return nn.normalize(p),h.filter(y=>{const{viewportId:m}=y.data,x=f.getViewport(m).getCamera(),C=x.viewPlaneNormal;return nn.normalize(C),Zt(p,C,.01)&&Zt(g.viewUp,x.viewUp,.01)})},this._filterAnnotationsByUniqueViewportOrientations=(s,c)=>{const{renderingEngine:l,viewport:f}=s,d=f.getCamera().viewPlaneNormal;nn.normalize(d);const h=c.filter(y=>{const{data:m}=y,w=l.getViewport(m.viewportId),x=this._getReferenceLineControllable(w.id);return f!==w&&x===!0}),g=[];for(let y=0;y{const{data:m}=y,w=l.getViewport(m.viewportId),x=this._getReferenceLineControllable(w.id);return f!==w&&x!==!0});for(let y=0;y_===m))continue;const{viewportId:w}=m.data,C=l.getViewport(w).getCamera(),S=C.viewPlaneNormal;if(nn.normalize(S),Zt(d,S,.01)||Qg(d,S,.01))continue;let T=!1;for(let _=0;_{const l=s.getAllVolumeIds(),f=c.getAllVolumeIds();return l.length===f.length&&l.every(u=>f.includes(u))},this._jump=(s,c)=>{Ye.isInteractingWithTool=!0;const{viewport:l,renderingEngine:f}=s,u=this._getAnnotations(s),d=[0,0,0];nn.subtract(c,this.toolCenter,d);const g=this._getAnnotationsForViewportsWithDifferentCameras(s,u).filter(p=>{const{data:v}=p,y=f.getViewport(v.viewportId),m=this._checkIfViewportsRenderingSameScene(l,y);return this._getReferenceLineControllable(y.id)&&this._getReferenceLineDraggableRotatable(y.id)&&m});return g.length===0?(Ye.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(f,g,d),Ye.isInteractingWithTool=!1,!0)},this._activateModify=s=>{var c;Ye.isInteractingWithTool=!((c=this.configuration.mobile)!=null&&c.enabled),s.addEventListener(k.MOUSE_UP,this._endCallback),s.addEventListener(k.MOUSE_DRAG,this._dragCallback),s.addEventListener(k.MOUSE_CLICK,this._endCallback),s.addEventListener(k.TOUCH_END,this._endCallback),s.addEventListener(k.TOUCH_DRAG,this._dragCallback),s.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=s=>{Ye.isInteractingWithTool=!1,s.removeEventListener(k.MOUSE_UP,this._endCallback),s.removeEventListener(k.MOUSE_DRAG,this._dragCallback),s.removeEventListener(k.MOUSE_CLICK,this._endCallback),s.removeEventListener(k.TOUCH_END,this._endCallback),s.removeEventListener(k.TOUCH_DRAG,this._dragCallback),s.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._endCallback=s=>{const c=s.detail,{element:l}=c;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(l),Jt(l),this.editData=null;const u=At(l,this.getToolName(),!1);Be(u)},this._dragCallback=s=>{const c=s.detail,l=c.deltaPoints.world;if(Math.abs(l[0])<.001&&Math.abs(l[1])<.001&&Math.abs(l[2])<.001)return;const{element:f}=c,u=_e(f),{renderingEngine:d,viewport:h}=u,g=this._getAnnotations(u),v=this.filterInteractableAnnotationsForElement(f,g)[0];if(!v)return;const{handles:y}=v.data,{currentPoints:m}=s.detail,w=m.canvas;if(y.activeOperation===js.DRAG){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(S=>{const{data:T}=S,_=d.getViewport(T.viewportId),E=this._getReferenceLineControllable(_.id),b=this._getReferenceLineDraggableRotatable(_.id);return E===!0&&b===!0&&v.data.activeViewportIds.find(D=>D===_.id)});this._applyDeltaShiftToSelectedViewportCameras(d,C,l)}else if(y.activeOperation===js.ROTATE){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(V=>{const{data:G}=V,R=d.getViewport(G.viewportId),N=this._getReferenceLineControllable(R.id),F=this._getReferenceLineDraggableRotatable(R.id);return N===!0&&F===!0}),S=rn(),T=rn(),_=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],E=h.worldToCanvas(_),b=c.currentPoints.canvas,D=rn();xs(D,b,c.deltaPoints.canvas),xs(S,D,E),xs(T,b,E);let I=$Y(S,T);this._isClockWise(E,D,b)&&(I*=-1),I=Math.round(I*100)/100;const P=h.getCamera().viewPlaneNormal,{matrix:O}=Yi.buildFromRadian().translate(_[0],_[1],_[2]).rotate(I,P).translate(-_[0],-_[1],-_[2]),A=[];C.forEach(V=>{const{data:G}=V;G.handles.toolCenter=_;const R=d.getViewport(G.viewportId),N=R.getCamera(),{viewUp:F,position:j,focalPoint:te}=N;F[0]+=j[0],F[1]+=j[1],F[2]+=j[2],Yt(te,te,O),Yt(j,j,O),Yt(F,F,O),F[0]-=j[0],F[1]-=j[1],F[2]-=j[2],R.setCamera({position:j,viewUp:F,focalPoint:te}),A.push(R.id)}),d.renderViewports(A)}else if(y.activeOperation===js.SLAB){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(_=>{const{data:E}=_,b=d.getViewport(E.viewportId),D=this._getReferenceLineControllable(b.id),I=this._getReferenceLineSlabThicknessControlsOn(b.id);return D===!0&&I===!0&&v.data.activeViewportIds.find(P=>P===b.id)});if(C.length===0)return;const S=this._filterViewportWithSameOrientation(u,C[0],g),T=[];T.push(h.id),S.forEach(_=>{const{data:E}=_,b=d.getViewport(E.viewportId),I=b.getCamera().viewPlaneNormal,P=nn.dot(l,I),O=[...I];if(nn.multiplyScalar(O,P),Math.abs(O[0])>.001||Math.abs(O[1])>.001||Math.abs(O[2])>.001){const A=Math.sqrt(O[0]*O[0]+O[1]*O[1]+O[2]*O[2]),V=c.lastPoints.world,G=[0,0,0],R=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(b.id)){const{rotationPoints:Ue}=this.editData.annotation.data.handles,be=Ue.filter(B=>B[1].uid===b.id);if(be.length===2){const B=h.canvasToWorld(be[0][3]),M=h.canvasToWorld(be[1][3]);nn.add(B,M,R),nn.multiplyScalar(R,.5)}}nn.subtract(V,R,G);const F=nn.dot(G,I),j=[...I];nn.multiplyScalar(j,F);const te=[j[0],j[1],j[2]];Qn(te,te);const ie=[O[0],O[1],O[2]];Qn(ie,ie);let he=b.getSlabThickness();Qg(te,ie,.001)?he-=A:he+=A,he=Math.abs(he),he=Math.max(F3.MINIMUM_SLAB_THICKNESS,he),this._pointNearReferenceLine(v,w,6,b)&&(he=F3.MINIMUM_SLAB_THICKNESS),Pr(b.id,d.id).getToolInstance(this.getToolName()).setSlabThickness(b,he),T.push(b.id)}}),d.renderViewports(T)}},this._pointNearReferenceLine=(s,c,l,f)=>{const{data:u}=s,{rotationPoints:d}=u.handles;for(let h=0;h{const i=Oi(n,r);if(!i)return;const o=this._getAnnotations(i);o!=null&&o.length&&o.forEach(a=>{mn(a.annotationUID)})})}setToolCenter(e,r=!1){this.toolCenter=e;const n=this._getViewportsInfo();Be(n.map(({viewportId:i})=>i)),r||ut(et,k.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter})}getHandleNearImagePoint(e,r,n,i){const o=_e(e),{viewport:a}=o;let s=this._getRotationHandleNearImagePoint(a,r,n,i);if(s!==null||(s=this._getSlabThicknessHandleNearImagePoint(a,r,n,i),s!==null))return s}_unsubscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:r,renderingEngineId:n})=>{const{viewport:i}=Oi(r,n),{element:o}=i;o.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_subscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:r,renderingEngineId:n})=>{const{viewport:i}=Oi(r,n),{element:o}=i;o.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_autoPanViewportIfNecessary(e,r){const n=r.getViewport(e),{clientWidth:i,clientHeight:o}=n.canvas,a=n.worldToCanvas(this.toolCenter),s=this.configuration.autoPan.panSize,c=[a[0],a[1]];if(a[0]<0?c[0]=s:a[0]>i&&(c[0]=i-s),a[1]<0?c[1]=s:a[1]>o&&(c[1]=o-s),c[0]===a[0]&&c[1]===a[1])return;const l=n.canvasToWorld(c),f=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],u=n.getCamera(),{focalPoint:d,position:h}=u,g=[h[0]-f[0],h[1]-f[1],h[2]-f[2]],p=[d[0]-f[0],d[1]-f[1],d[2]-f[2]];n.setCamera({focalPoint:p,position:g}),n.render()}setSlabThickness(e,r){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;r===F3.MINIMUM_SLAB_THICKNESS&&(o=Zc.COMPOSITE),e.setBlendMode(o,n,!1),e.setSlabThickness(r,n)}_isClockWise(e,r,n){return(r[0]-e[0])*(n[1]-e[1])-(r[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,r,n){r.forEach(i=>{this._applyDeltaShiftToViewportCamera(e,i,n)})}_applyDeltaShiftToViewportCamera(e,r,n){const{data:i}=r,o=e.getViewport(i.viewportId),a=o.getCamera(),s=a.viewPlaneNormal,c=nn.dot(n,s),l=[...s];if(nn.multiplyScalar(l,c),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const f=[0,0,0],u=[0,0,0];nn.add(a.focalPoint,l,f),nn.add(a.position,l,u),o.setCamera({focalPoint:f,position:u}),o.render()}}_getRotationHandleNearImagePoint(e,r,n,i){const{data:o}=r,{rotationPoints:a}=o.handles;for(let s=0;sP===p.id))continue;const v=this._getReferenceLineControllable(p.id),y=this._getReferenceLineSlabThicknessControlsOn(p.id);if(!v||!y)continue;const m=d[g][2],w=d[g][3],x=rn();mo(x,m,w),Ll(x,x,.5);const C=rn();Jr(C,m,x),Fl(C,C);const S=rn();Ll(S,C,l*.05);const T=rn(),_=rn();mo(T,x,S),Jr(_,x,S);const E={start:{x:T[0],y:T[1]},end:{x:m[0],y:m[1]}},b=Ii([E.start.x,E.start.y],[E.end.x,E.end.y],[n[0],n[1]]),D={start:{x:_[0],y:_[1]},end:{x:w[0],y:w[1]}},I=Ii([D.start.x,D.start.y],[D.end.x,D.end.y],[n[0],n[1]]);(b<=i||I<=i)&&(h.push(p.id),f.handles.activeOperation=null),g++}return f.activeViewportIds=[...h],this.editData={annotation:r},f.handles.activeOperation===js.DRAG}}jc.toolName="Crosshairs";const qv="magnify-viewport";class jW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}){super(e,r),this._hasBeenRemoved=!1,this.preMouseDownCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o),{viewport:c,renderingEngine:l}=s;if(!(c instanceof lr))throw new Error("MagnifyTool only works on StackViewports");const f=this._getReferencedImageId(c);if(!f)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const u=At(o,this.getToolName());return this.editData={referencedImageId:f,viewportIdsToRender:u,enabledElement:s,renderingEngine:l,currentPoints:a},this._createMagnificationViewport(),this._activateDraw(o),Gt(o),n.preventDefault(),Be(u),!0},this.preTouchStartCallback=n=>{this.preMouseDownCallback(n)},this._createMagnificationViewport=()=>{const{enabledElement:n,referencedImageId:i,viewportIdsToRender:o,renderingEngine:a,currentPoints:s}=this.editData,{viewport:c}=n,{element:l}=c,f=c.getProperties(),{rotation:u}=c.getViewPresentation(),{canvas:d,world:h}=s;let g;if(g=l.querySelector(".magnifyTool"),g===null){const v=document.createElement("div");v.classList.add("magnifyTool"),v.style.display="block",v.style.width=`${this.configuration.magnifyWidth}px`,v.style.height=`${this.configuration.magnifyHeight}px`,v.style.position="absolute",g=v,l.querySelector(".viewport-element").appendChild(v);const m={viewportId:qv,type:vr.STACK,element:g};a.enableElement(m)}g.style.top=`${d[1]-this.configuration.magnifyHeight/2}px`,g.style.left=`${d[0]-this.configuration.magnifyWidth/2}px`;const p=a.getViewport(qv);p.setStack([i]).then(()=>{if(this._hasBeenRemoved)return;p.setProperties(f),p.setViewPresentation({rotation:u});const{parallelScale:v}=c.getCamera(),{focalPoint:y,position:m,viewPlaneNormal:w}=p.getCamera(),x=Math.sqrt(Math.pow(y[0]-m[0],2)+Math.pow(y[1]-m[1],2)+Math.pow(y[2]-m[2],2)),C=[h[0],h[1],h[2]],S=[C[0]+x*w[0],C[1]+x*w[1],C[2]+x*w[2]];p.setCamera({parallelScale:v*(1/this.configuration.magnifySize),focalPoint:C,position:S}),p.render()}),g.style.display="block",Be(o)},this._dragCallback=n=>{const i=n.detail,{deltaPoints:o,element:a,currentPoints:s}=i,c=o.world,l=s.canvas,f=_e(a),{renderingEngine:u}=f,d=u.getViewport(qv),h=a.querySelector(".magnifyTool");if(!h)return;h.style.top=`${l[1]-this.configuration.magnifyHeight/2}px`,h.style.left=`${l[0]-this.configuration.magnifyWidth/2}px`;const{focalPoint:g,position:p}=d.getCamera(),v=[p[0]+c[0],p[1]+c[1],p[2]+c[2]],y=[g[0]+c[0],g[1]+c[1],g[2]+c[2]];d.setCamera({focalPoint:y,position:v}),d.render()},this._dragEndCallback=n=>{const{element:i}=n.detail,o=_e(i),{renderingEngine:a}=o;a.disableElement(qv);const s=i.querySelector(".viewport-element"),c=s.querySelector(".magnifyTool");s.removeChild(c),this._deactivateDraw(i),Jt(i),this._hasBeenRemoved=!0},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,this._hasBeenRemoved=!1,n.addEventListener(k.MOUSE_UP,this._dragEndCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._dragEndCallback),n.addEventListener(k.TOUCH_END,this._dragEndCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._dragEndCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._dragEndCallback),n.removeEventListener(k.TOUCH_END,this._dragEndCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)}}_getReferencedImageId(e){const r=this.getTargetId(e);let n;return e instanceof lr&&(n=r.split("imageId:")[1]),n}}jW.toolName="Magnify";const cTe="advancedMagnifyTool",lTe=125,{Events:wu}=Qa,s7=t=>t.uid!==t.referencedId;var cT;(function(t){t.ShowZoomFactorsList="showZoomFactorsList"})(cT||(cT={}));const uTe="AdvancedMagnify",fTe=1-qa,rb=class rb extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:3,zoomFactorList:[1.5,2,2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:fl.Secondary,modifierKey:Ki.Shift}]}}}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c,renderingEngine:l}=s,f=o.world,u=o.canvas,{magnifyingGlass:d}=this.configuration,{radius:h,zoomFactor:g,autoPan:p}=d,v=this._getCanvasHandlePoints(u,h),y=c.getCamera(),{viewPlaneNormal:m,viewUp:w}=y,x=this.getReferencedImageId(c,f,m,w),C=Pn(),S=Pn(),T=c.getFrameOfReferenceUID(),_={annotationUID:C,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...w],FrameOfReferenceUID:T,referencedImageId:x},data:{sourceViewportId:c.id,magnifyViewportId:S,zoomFactor:g,isCanvasAnnotation:!0,handles:{points:v,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(_,{magnifyViewportId:S,sourceEnabledElement:s,position:u,radius:h,zoomFactor:g,autoPan:{enabled:p.enabled,padding:p.padding,callback:b=>{const D=_.data.handles.points,{canvas:I}=b.delta;for(let P=0,O=D.length;P{this.magnifyViewportManager.dispose(),mm().forEach(i=>{i.metadata.toolName===this.getToolName()&&mn(i.annotationUID)})},this.isPointNearTool=(n,i,o,a)=>{const{data:s}=i,{points:c}=s.handles,l=c,f=l[0],u=l[2],d=l[3],h=Math.abs(u[1]-f[1])*.5,g=[d[0]+h,f[1]+h],p=Zu([g,o]);return Math.abs(p-h){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},Gt(a),this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;const{points:l}=c.handles,f=l.findIndex(d=>d===o),u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f},this._activateModify(s),Gt(s),Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{data:l}=a;l.handles.activeHandleIndex=null,this._deactivateModify(o),Jt(o),this.editData=null,this.isDrawing=!1,Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{deltaPoints:o}=i,a=(o==null?void 0:o.canvas)??[0,0,0],{annotation:s,viewportIdsToRender:c}=this.editData,{points:l}=s.data.handles;l.forEach(f=>{f[0]+=a[0],f[1]+=a[1]}),s.invalidated=!0,this.editData.hasMoved=!0,Be(c)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c}=this.editData,{data:l}=a;if(c===void 0){const{deltaPoints:f}=i,u=f.canvas;l.handles.points.forEach(h=>{h[0]+=u[0],h[1]+=u[1]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;Be(s)},this._dragHandle=n=>{const i=n.detail,{annotation:o}=this.editData,{data:a}=o,{points:s}=a.handles,c=s,l=c[0],f=c[2],u=c[3],d=Math.abs(f[1]-l[1])*.5,h=[u[0]+d,l[1]+d],{currentPoints:g}=i,p=g.canvas,v=Zu([h,p]),y=this._getCanvasHandlePoints(h,v);s[0]=y[0],s[1]=y[1],s[2]=y[2],s[3]=y[3]},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length))return o;c=c==null?void 0:c.filter(u=>u.data.sourceViewportId===a.id);const l=this.filterInteractableAnnotationsForElement(s,c);if(!(l!=null&&l.length))return o;const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let u=0;u[[n[0],n[1]-i,0],[n[0]+i,n[1],0],[n[0],n[1]+i,0],[n[0]-i,n[1],0]],this.magnifyViewportManager=I0.getInstance()}showZoomFactorsList(e,r){const{element:n,currentPoints:i}=e.detail,o=_e(n),{viewport:a}=o,{canvas:s}=i,c=n.querySelector(":scope .viewport-element"),l=r.data.zoomFactor,f=()=>u.parentElement.removeChild(u),u=this._getZoomFactorsListDropdown(l,d=>{d!==void 0&&(r.data.zoomFactor=Number.parseFloat(d),r.invalidated=!0),f(),a.render()});Object.assign(u.style,{left:`${s[0]}px`,top:`${s[1]}px`}),c.appendChild(u),u.focus()}_getZoomFactorsListDropdown(e,r){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach(o=>{i.addEventListener(o,a=>a.stopPropagation())}),i.addEventListener("change",o=>{o.stopPropagation(),r(i.value)}),i.addEventListener("keydown",o=>{var s;((o.keyCode??o.which===27)||((s=o.key)==null?void 0:s.toLowerCase())==="escape")&&(o.stopPropagation(),r())}),n.forEach(o=>{const a=document.createElement("option");a.label=o,a.title=`Zoom factor ${o.toFixed(1)}`,a.value=o,a.defaultSelected=o===e,i.add(a)}),i}};rb.Actions=cT;let G1=rb;class I0{constructor(){this.createViewport=(e,r)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:s,autoPan:c}=r,{viewport:l}=i,{element:f}=l,u=new dTe({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:s,autoPan:c});return this._addSourceElementEventListener(f),this._magnifyViewportsMap.set(u.viewportId,{annotation:e,magnifyViewport:u,magnifyViewportInfo:r}),u},this._annotationRemovedCallback=e=>{const{annotation:r}=e.detail;r.metadata.toolName===uTe&&this.destroyViewport(r.data.magnifyViewportId)},this._newStackImageCallback=e=>{const{viewportId:r,imageId:n}=e.detail,i=this._getMagnifyViewportsMapEntriesBySourceViewportId(r),{viewport:o}=Wn(r);o.stackActorReInitialized&&this._reset(r),i.forEach(({annotation:a})=>{a.metadata.referencedImageId=n,a.invalidated=!0})},this._newVolumeImageCallback=e=>{const{renderingEngineId:r,viewportId:n}=e.detail,o=jr(r).getViewport(n),{viewPlaneNormal:a}=o.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach(({annotation:c})=>{const{viewPlaneNormal:l}=c.metadata;if(!(Math.abs(kt(l,a))>fTe))return;const{handles:u}=c.data,d=o.canvasToWorld([0,0]),h=Mn(Ke(),d,u.points[0]),g=kt(h,a),p=Ir(Ke(),a,g);for(let v=0,y=u.points.length;vthis.destroyViewport(r))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter(({magnifyViewport:n})=>{const{viewport:i}=n.sourceEnabledElement;return i.id===e})}_reset(e){this._getMagnifyViewportsMapEntriesBySourceViewportId(e).forEach(({magnifyViewport:n,annotation:i,magnifyViewportInfo:o})=>{this.destroyViewport(n.viewportId);const a=Wn(e);this.createViewport(i,{...o,sourceEnabledElement:{...a}})})}_addEventListeners(){et.addEventListener(k.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){et.removeEventListener(k.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(wu.STACK_NEW_IMAGE,this._newStackImageCallback);const r=i=>{const{viewportId:o}=i.detail;this._reset(o)};e.addEventListener(wu.VIEWPORT_NEW_IMAGE_SET,r);const n=i=>{const{viewportId:o}=i.detail;this._reset(o)};e.addEventListener(wu.VOLUME_VIEWPORT_NEW_VOLUME,n),e.addEventListener(wu.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.newStackHandler=r,e.newVolumeHandler=n}_removeSourceElementEventListener(e){e.removeEventListener(wu.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(wu.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.removeEventListener(wu.VIEWPORT_NEW_IMAGE_SET,e.newStackHandler),e.removeEventListener(wu.VOLUME_VIEWPORT_NEW_VOLUME,e.newVolumeHandler),delete e.newStackHandler,delete e.newVolumeHandler}_initialize(){this._addEventListeners()}}class dTe{constructor({magnifyViewportId:e,sourceEnabledElement:r,radius:n=lTe,position:i=[0,0],zoomFactor:o,autoPan:a}){this._enabledElement=null,this._sourceToolGroup=null,this._magnifyToolGroup=null,this._isViewportReady=!1,this._radius=0,this._resized=!1,this._canAutoPan=!1,this._viewportId=e??Pn(),this._sourceEnabledElement=r,this._autoPan=a,this.radius=n,this.position=i,this.zoomFactor=o,this.visible=!0,this._browserMouseDownCallback=this._browserMouseDownCallback.bind(this),this._browserMouseUpCallback=this._browserMouseUpCallback.bind(this),this._handleToolModeChanged=this._handleToolModeChanged.bind(this),this._mouseDragCallback=this._mouseDragCallback.bind(this),this._resizeViewportAsync=Yh(this._resizeViewport.bind(this),1),this._initialize()}get sourceEnabledElement(){return this._sourceEnabledElement}get viewportId(){return this._viewportId}get radius(){return this._radius}set radius(e){Math.abs(this._radius-e)>1e-5&&(this._radius=e,this._resized=!0)}update(){const{radius:e,position:r,visible:n}=this,{viewport:i}=this._enabledElement,{element:o}=i,a=2*e,[s,c]=r;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.style,{display:n?"block":"hidden",width:`${a}px`,height:`${a}px`,left:`${-e}px`,top:`${-e}px`,transform:`translate(${s}px, ${c}px)`}),this._isViewportReady&&(this._syncViewports(),i.render())}dispose(){const{viewport:e}=this._enabledElement,{element:r}=e,n=e.getRenderingEngine();this._removeEventListeners(r),n.disableElement(e.id),r.parentNode&&r.parentNode.removeChild(r)}_handleToolModeChanged(e){var s;const{_magnifyToolGroup:r}=this,{toolGroupId:n,toolName:i,mode:o,toolBindingsOptions:a}=e.detail;if(((s=this._sourceToolGroup)==null?void 0:s.id)===n)switch(o){case Fn.Active:r.setToolActive(i,a);break;case Fn.Passive:r.setToolPassive(i);break;case Fn.Enabled:r.setToolEnabled(i);break;case Fn.Disabled:r.setToolDisabled(i);break;default:throw new Error(`Unknow tool mode (${o})`)}}_inheritBorderRadius(e){const r=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");r.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:r}=this,n=r*2;return e.classList.add(cTe),Object.assign(e.style,{display:"block",width:`${n}px`,height:`${n}px`,position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:`${-r}px`,top:`${-r}px`,transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParallelScale(e,r,n){const{parallelScale:i}=e.getCamera(),o=r.canvas.offsetWidth/e.canvas.offsetWidth;return i*(1/n)*o}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,r){const n=e.getActors(),i=`${r.id}-toolGroup`,o=Pr(e.id,e.renderingEngineId),a=o.clone(i,s=>{const c=o.getToolInstance(s);return c instanceof cr&&!(c instanceof G1)});return a.addViewport(r.id,r.renderingEngineId),n.filter(s7).forEach(s=>{ag(this.viewportId,[{segmentationId:s.referencedId,type:Vt.Labelmap}])}),{sourceToolGroup:o,magnifyToolGroup:a}}_cloneStack(e,r){const n=e.getImageIds();r.setStack(n).then(()=>{this._isViewportReady=!0,this.update()})}_cloneVolumes(e,r){const i=e.getActors().filter(o=>!s7(o)).map(o=>({volumeId:o.uid}));return r.setVolumes(i).then(()=>{this._isViewportReady=!0,this.update()}),r}_cloneViewport(e,r){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:r,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const s=i.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,s):this._isVolumeViewport(e)&&this._cloneVolumes(e,s),this._inheritBorderRadius(r);const c=this._cloneToolGroups(e,s);this._sourceToolGroup=c.sourceToolGroup,this._magnifyToolGroup=c.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:r}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),r.addEventListener("mouseup",this._cancelMouseEventCallback),r.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){var n;const{element:r}=this._enabledElement.viewport;this._canAutoPan=!!((n=e.target)!=null&&n.closest(".advancedMagnifyTool")),document.addEventListener("mouseup",this._browserMouseUpCallback),r.removeEventListener("mouseup",this._cancelMouseEventCallback),r.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!Ye.isInteractingWithTool)return;const{_autoPan:r}=this;if(!r.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:s}=this,c=[s,s],l=ko(c,a),f=s-r.padding;if(l<=f)return;const u=l-f,d=xs(rn(),a,c);Fl(d,d),Ll(d,d,u);const h=mo(rn(),this.position,d),g=o(this.position),p=o(h),v=Mn(Ke(),p,g),y={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:h,world:p}},delta:{canvas:d,world:v}};r.callback(y)}_addBrowserEventListeners(e){document.addEventListener("mousedown",this._browserMouseDownCallback,!0),e.addEventListener("mousedown",this._cancelMouseEventCallback),e.addEventListener("mouseup",this._cancelMouseEventCallback),e.addEventListener("mousemove",this._cancelMouseEventCallback),e.addEventListener("dblclick",this._cancelMouseEventCallback)}_removeBrowserEventListeners(e){document.removeEventListener("mousedown",this._browserMouseDownCallback,!0),document.removeEventListener("mouseup",this._browserMouseUpCallback),e.removeEventListener("mousedown",this._cancelMouseEventCallback),e.removeEventListener("mouseup",this._cancelMouseEventCallback),e.removeEventListener("mousemove",this._cancelMouseEventCallback),e.removeEventListener("dblclick",this._cancelMouseEventCallback)}_addEventListeners(e){et.addEventListener(k.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(k.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(k.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){et.removeEventListener(k.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(k.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(k.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:r}=e,{canvas:n}=r,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(r,i),this._enabledElement=_e(i)}_syncViewportsCameras(e,r){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParallelScale(e,r,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:s}=r.getCamera(),c=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],f=[l[0]+c*s[0],l[1]+c*s[1],l[2]+c*s[2]];r.setCamera({parallelScale:i,focalPoint:l,position:f})}_syncStackViewports(e,r){r.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:r}=this._enabledElement,n=e.getProperties();r.getImageData()&&(r.setProperties(n),this._syncViewportsCameras(e,r),this._isStackViewport(e)&&this._syncStackViewports(e,r),this._syncViewportsCameras(e,r),r.render())}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}G1.toolName="AdvancedMagnify";const{EPSILON:U3}=wf;class pd extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",enforceSameFrameOfReference:!0,showFullDimension:!1}}){super(e,r),this.editData=null,this._init=()=>{var h;const i=Bo()[0];if(!i)return;let o=i.getViewports();o=Vw(o,this.getToolName());const a=i.getViewport(this.configuration.sourceViewportId);if(!(a!=null&&a.getImageData()))return;const{element:s}=a,{viewUp:c,viewPlaneNormal:l}=a.getCamera(),f=$y(a);let u=(h=this.editData)==null?void 0:h.annotation;const d=a.getFrameOfReferenceUID();if(u)this.editData.annotation.data.handles.points=f;else{const g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...c],FrameOfReferenceUID:d,referencedImageId:null},data:{handles:{points:f}}};ln(g,s),u=g}this.editData={sourceViewportId:a.id,renderingEngine:i,annotation:u},Be(o.filter(g=>g.id!==a.id).map(g=>g.id))},this.onSetToolEnabled=()=>{this._init()},this.onSetToolConfiguration=()=>{this._init()},this.onCameraModified=n=>{this._init()},this.renderAnnotation=(n,i)=>{var F,j;const{viewport:o}=n;if(!this.editData)return!1;const{annotation:a,sourceViewportId:s}=this.editData;let c=!1;const{viewport:l}=Wn(s)||{};if(!l||l.id===o.id||!a||!((j=(F=a==null?void 0:a.data)==null?void 0:F.handles)!=null&&j.points)||this.configuration.enforceSameFrameOfReference&&l.getFrameOfReferenceUID()!==o.getFrameOfReferenceUID())return c;const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=a.data.handles.points[0],d=a.data.handles.points[1],h=a.data.handles.points[2],g=a.data.handles.points[3],{focalPoint:p,viewPlaneNormal:v,viewUp:y}=o.getCamera(),{viewPlaneNormal:m}=l.getCamera();if(this.isParallel(v,m))return c;const w=nl(v,p),x=[u,h,d,g],C=[u,d,h,g];let S=x,T=qn(Ke(),x[0],x[1]);T=Qn(Ke(),T);let _=qn(Ke(),x[2],x[0]);_=Qn(Ke(),_);const E=kn(Ke(),T,_);if(this.isParallel(E,v))return c;this.isPerpendicular(T,v)&&(S=C);const b=Ch(S[0],S[1],w),D=Ch(S[2],S[3],w),{annotationUID:I}=a;f.annotationUID=I;const P=this.getStyle("lineWidth",f,a),O=this.getStyle("lineDash",f,a),A=this.getStyle("color",f,a),V=this.getStyle("shadow",f,a);let G=[b,D].map(te=>o.worldToCanvas(te));if(this.configuration.showFullDimension&&(G=this.handleFullDimension(o,b,v,y,D,G)),G.length<2)return c;const R=`${I}-line`;return Sn(i,I,"1",G[0],G[1],{color:A,width:P,lineDash:O,shadow:V},R),c=!0,c},this.isPerpendicular=(n,i)=>{const o=kt(n,i);return Math.abs(o)RS(l,m)),[v,y]=[r,o].map(m=>RS(l,m));a=[[d,h],[h,g],[p,g],[d,p]].map(([m,w])=>this.intersectInfiniteLines(m,w,v,y)).filter(m=>m&&this.isInBound(m,u)).map(m=>{const w=yV(l,m);return e.worldToCanvas(w)})}catch(f){console.log(f)}return a}intersectInfiniteLines(e,r,n,i){const[o,a]=e,[s,c]=r,[l,f]=n,[u,d]=i,h=c-a,g=o-s,p=s*a-o*c,v=d-f,y=l-u,m=u*f-l*d;if(Math.abs(h*y-v*g)1-U3}isInBound(e,r){return e[0]>=0&&e[0]<=r[0]&&e[1]>=0&&e[1]<=r[1]}}pd.toolName="ReferenceLines";const{EPSILON:c7}=wf;class HW extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}){super(e,r),this.onSetToolEnabled=()=>{this._init()},this.onSetToolActive=()=>{this._init()},this._init=()=>{const n=this.configuration.sourceImageIds;if(!(n!=null&&n.length)){console.warn("OverlayGridTool: No sourceImageIds provided in configuration");return}const i=wt("imagePlaneModule",n[0]);if(!i){console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");return}const{frameOfReferenceUID:o}=i,a=ni(this.toolGroupId).viewportsInfo;if(!(a!=null&&a.length)){console.warn("OverlayGridTool: No viewports found");return}const s=hn(this.getToolName(),o);if(!(s!=null&&s.length)){const c=n.map(f=>this.calculateImageIdPointSets(f)),l={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{viewportData:new Map,pointSets:c}};ln(l,o)}Be(a.map(({viewportId:c})=>c))},this.calculateImageIdPointSets=n=>{const{imagePositionPatient:i,rows:o,columns:a,rowCosines:s,columnCosines:c,rowPixelSpacing:l,columnPixelSpacing:f}=wt("imagePlaneModule",n),u=[...i],d=[...i],h=[...i],g=[...i];return On(d,i,c,a*f),On(h,i,s,o*l),On(g,h,c,a*f),{pointSet1:[u,h,d,g],pointSet2:[u,d,h,g]}},this.renderAnnotation=(n,i)=>{const o=this.configuration.sourceImageIds;let a=!1;if(!(o!=null&&o.length))return a;const{viewport:s,FrameOfReferenceUID:c}=n;if(s.getImageIds().length<2)return a;const f=hn(this.getToolName(),c);if(!(f!=null&&f.length))return a;const u=f[0],{annotationUID:d}=u,{focalPoint:h,viewPlaneNormal:g}=s.getCamera(),p={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},v=this.getImageIdNormal(o[0]);if(this.isParallel(g,v))return a;const y=nl(g,h),m=u.data.pointSets,w=u.data.viewportData;for(let x=0;xs.worldToCanvas(G)),A=`${d}-line`,V=`${x}`;Sn(i,d,V,O[0],O[1],{color:I,width:b,lineDash:D,shadow:P},A)}return a=!0,a},this.initializeViewportData=(n,i)=>(n.set(i,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),n.get(i)),this.isPerpendicular=(n,i)=>{const o=kt(n,i);return Math.abs(o)1-c7}getImageIdNormal(e){const{imageOrientationPatient:r}=wt("imagePlaneModule",e),n=Ft(r[0],r[1],r[2]),i=Ft(r[3],r[4],r[5]);return kn(Ke(),n,i)}}HW.toolName="OverlayGrid";class KW extends _f{constructor(e={},r={configuration:{opacity:.5}}){super(e,r),this._init=()=>{var s;const n=ni(this.toolGroupId).viewportsInfo;if(!(n!=null&&n.length)){console.warn(this.getToolName()+"Tool: No viewports found");return}const i=(s=jr(n[0].renderingEngineId))==null?void 0:s.getViewport(n[0].viewportId);if(!i)return;const o=i.getFrameOfReferenceUID(),a=hn(this.getToolName(),o);if(!(a!=null&&a.length)){const c=new Map;hTe(c,n);const l={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{actorsWorldPointsMap:c}};ln(l,o)}Be(n.map(({viewportId:c})=>c))},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=n=>{this._init()},this.renderAnnotation=(n,i)=>{const{viewport:o,FrameOfReferenceUID:a}=n;let s=!1;const c=hn(this.getToolName(),a);if(!(c!=null&&c.length))return s;const l=c[0],{annotationUID:f}=l,u=l.data.actorsWorldPointsMap;qW(u,o);const d=o.getActors(),h=XW(o);return d.forEach(g=>{if(!(g!=null&&g.clippingFilter))return;const p=u.get(g.uid);if(!p||!p.get(h))return;let v=1;const{worldPointsSet:y,color:m}=p.get(h);for(let w=0;wo.worldToCanvas(_)),S={color:m,fillColor:m,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},T=g.uid+"#"+v;Hl(i,f,T,C,S),v++}}),s=!0,s}}}function hTe(t,e){e.forEach(({viewportId:r,renderingEngineId:n})=>{var o;const i=(o=jr(n))==null?void 0:o.getViewport(r);qW(t,i)})}function qW(t,e){const r=e.getActors(),n=XW(e);r.forEach(i=>{if(!(i!=null&&i.clippingFilter))return;let o=t.get(i.uid);if(o||(o=new Map,t.set(i.uid,o)),!o.get(n)){const a=i.clippingFilter.getOutputData(),s=bW(a);if(!s)return;const c=i.actor.getProperty().getColor(),l=gTe(c);o.set(n,{worldPointsSet:s,color:l})}})}function XW(t){const{viewPlaneNormal:e}=t.getCamera(),r=t.getCurrentImageIdIndex();return`${t.id}-${fG(e)}-${r}`}function gTe(t){function e(r){let n=Math.floor(r*255).toString(16);return n.length===1&&(n="0"+n),n}return"#"+e(t[0])+e(t[1])+e(t[2])}KW.toolName="SegmentationIntersection";class Ba extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}){super(e,r),this.isDrawing=!1,this.isHandleOutsideImage=!1,this._elementWithCursor=null,this._currentCursorWorldPosition=null,this._currentCanvasPosition=null,this._disableCursorEnabled=!1,this.mouseMoveCallback=n=>{const{detail:i}=n,{element:o,currentPoints:a}=i;this._currentCursorWorldPosition=a.world,this._currentCanvasPosition=a.canvas,this._elementWithCursor=o;const s=this.getActiveAnnotation(o);return s===null?(this.createInitialAnnotation(a.world,o),!1):(this.updateAnnotationPosition(o,s),!1)},this.createInitialAnnotation=(n,i)=>{const o=_e(i);if(!o)throw new Error("No enabled element found");const{viewport:a,renderingEngine:s}=o;this.isDrawing=!0;const c=a.getCamera(),{viewPlaneNormal:l,viewUp:f}=c;if(!l||!f)throw new Error("Camera not found");const u=this.getReferencedImageId(a,n,l,f),d=a.getFrameOfReferenceUID(),h={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...f],FrameOfReferenceUID:d,referencedImageId:u},data:{label:"",handles:{points:[[...n]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}};if(hn(this.getToolName(),i).length>0)return null;if(ln(h,i)===null)return;const v=At(i,this.getToolName(),!1);Be(v)},this.onCameraModified=n=>{const i=n.detail,{element:o,previousCamera:a,camera:s}=i,l=_e(o).viewport;if(o!==this._elementWithCursor)return;const f=a.focalPoint,u=s.viewPlaneNormal,d=s.focalPoint,h=[0,0,0];if(nn.subtract(d,f,h),h.reduce((v,y)=>v+y,0)===0)return;const g=nn.dot(h,u);if(Math.abs(g)<.01||!this._currentCanvasPosition)return;const p=l.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=p,this.updateAnnotationPosition(o,this.getActiveAnnotation(o))},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a,FrameOfReferenceUID:s}=n,c=this._elementWithCursor===a.element;this.configuration.positionSync&&!c&&this.updateViewportImage(a);const{element:l}=a;let f=hn(this.getToolName(),l);if(!(f!=null&&f.length)||(f=this.filterInteractableAnnotationsForElement(l,f),!(f!=null&&f.length)))return o;const u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;disNaN(I)))return o;const S=y.map(I=>a.worldToCanvas(I));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(g))continue;const T={upper:"upper",right:"right",lower:"lower",left:"left"},[_,E]=S[0],b=c?20:7,D=c?5:7;Sn(i,g,T.upper,[_,E-(b/2+D)],[_,E-b/2],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.lower,[_,E+(b/2+D)],[_,E+b/2],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.right,[_+(b/2+D),E],[_+b/2,E],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.left,[_-(b/2+D),E],[_-b/2,E],{color:C,lineDash:x,lineWidth:w}),o=!0}return o},this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=ni(this.toolGroupId).viewportsInfo;if(!e)return;e.map(n=>Oi(n.viewportId,n.renderingEngineId)).forEach(n=>{n&&Gt(n.viewport.element)})}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=ni(this.toolGroupId).viewportsInfo;if(!e)return;e.map(n=>Oi(n.viewportId,n.renderingEngineId)).forEach(n=>{n&&Jt(n.viewport.element)})}getActiveAnnotation(e){const r=hn(this.getToolName(),e);return r.length?r[0]:null}updateAnnotationPosition(e,r){var a,s;const n=this._currentCursorWorldPosition;if(!n||!((s=(a=r.data)==null?void 0:a.handles)!=null&&s.points))return;r.data.handles.points=[[...n]],r.invalidated=!0;const i=At(e,this.getToolName(),!1);_e(e)&&Be(i)}filterInteractableAnnotationsForElement(e,r){var d,h,g;if(!(r instanceof Array)||r.length===0)return[];const n=r[0],i=(d=_e(e))==null?void 0:d.viewport;if(!i)return[];const o=i.getCamera(),{viewPlaneNormal:a,focalPoint:s}=o;if(!a||!s)return[];const c=(g=(h=n.data)==null?void 0:h.handles)==null?void 0:g.points;if(!(c instanceof Array)||c.length!==1)return[];const l=c[0],f=nl(a,s);return m1(f,l)isNaN(n)))){if(e instanceof lr){const n=dE(r,e);if(n===null)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ur){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=nl(i,n),a=m1(o,r,!0);if(Math.abs(a)<.5)return;const s=Qn(Ke(),Ft(...i)),c=Ir(Ke(),s,a),l=ri(Ke(),Ft(...n),c);{e.setCamera({focalPoint:l});const f=e.getRenderingEngine();f&&f.renderViewport(e.id)}}}}}Ba.toolName="ReferenceCursors";const l7=[];class YW extends _f{constructor(e={},r={configuration:{viewportId:"",scaleLocation:"bottom"}}){super(e,r),this.editData=null,this._init=()=>{var g,p;const i=Bo()[0];if(!i)return;const o=ni(this.toolGroupId).viewportsInfo;if(!o)return;const a=o.map(v=>Oi(v.viewportId,v.renderingEngineId));let{viewport:s}=a[0];const{FrameOfReferenceUID:c}=a[0];if(this.configuration.viewportId&&a.forEach(v=>{v.viewport.id==this.configuration.viewportId&&(s=v.viewport)}),!s)return;const{viewUp:l,viewPlaneNormal:f}=s.getCamera(),u=$y(s);let d=(g=this.editData)==null?void 0:g.annotation;const h=hn(this.getToolName(),s.element);h.length&&(d=h.filter(v=>v.data.viewportId==s.id)[0]),a.forEach(v=>{const{viewport:y}=v;if(!l7.includes(y.id)){const m={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...f],viewUp:[...l],FrameOfReferenceUID:c,referencedImageId:null},data:{handles:{points:$y(y)},viewportId:y.id}};l7.push(y.id),ln(m,y.element),d=m}}),(p=this.editData)!=null&&p.annotation&&this.editData.annotation.data.viewportId==s.id&&(this.editData.annotation.data.handles.points=u,this.editData.annotation.data.viewportId=s.id),this.editData={viewport:s,renderingEngine:i,annotation:d}},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=n=>{this.configuration.viewportId=n.detail.viewportId,this._init()},this.computeScaleSize=(n,i,o)=>{const a=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let s;return o=="top"||o=="bottom"?s=a.filter(c=>cn*.2):s=a.filter(c=>ci*.2),s[0]},this.computeEndScaleTicks=(n,i)=>{const o={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]},a=[[n[1][0]+o[i][0][0],n[1][1]+o[i][0][0]],[n[1][0]+o[i][1][0],n[1][1]+o[i][1][1]]],s=[[n[0][0]+o[i][0][0],n[0][1]+o[i][0][0]],[n[0][0]+o[i][1][0],n[0][1]+o[i][1][1]]];return{endTick1:a,endTick2:s}},this.computeInnerScaleTicks=(n,i,o,a,s)=>{let c;i=="bottom"||i=="top"?c=s[0][0]-a[0][0]:(i=="left"||i=="right")&&(c=s[0][1]-a[0][1]);const l=[],f=[],u=[];let d=n;n>=50&&(d=n/10);const h=c/d;for(let g=0;g{let a,s=qn(Ke(),o[0],o[1]);s=Qn(Ke(),s);let c=qn(Ke(),o[2],o[0]);c=Qn(Ke(),c);const l={bottom:[o[1],o[2]],top:[o[0],o[3]],right:[o[2],o[3]],left:[o[0],o[1]]},f=ri(Ke(),l[i][0],l[i][0]).map(d=>d/2),u=n/2/Math.sqrt(Math.pow(s[0],2)+Math.pow(s[1],2)+Math.pow(s[2],2));return i=="top"||i=="bottom"?a=[qn(Ke(),f,c.map(d=>d*u)),ri(Ke(),f,c.map(d=>d*u))]:(i=="left"||i=="right")&&(a=[ri(Ke(),f,s.map(d=>d*u)),qn(Ke(),f,s.map(d=>d*u))]),a},this.computeCanvasScaleCoordinates=(n,i,o,a,s)=>{let c;if(s=="top"||s=="bottom"){const l=i[0][0]-i[1][0];c=[[n.width/2-l/2,o.height],[n.width/2+l/2,o.height]]}else if(s=="left"||s=="right"){const l=i[0][1]-i[1][1];c=[[a.width,n.height/2-l/2],[a.width,n.height/2+l/2]]}return c},this.computeScaleBounds=(n,i,o,a)=>{const s=i*Math.min(1e3,n.width),c=o*Math.min(1e3,n.height),l={bottom:[-c,-s],top:[c,s],left:[c,s],right:[-c,-s]},f={bottom:[n.height,n.width],top:[0,n.width],left:[n.height,0],right:[n.height,n.width]};return{height:f[a][0]+l[a][0],width:f[a][1]+l[a][1]}}}renderAnnotation(e,r){if(!this.editData||!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,a=hn(this.getToolName(),i.element).filter(ve=>ve.data.viewportId==i.id)[0],s=e.viewport.canvas,c=!1;if(!i)return c;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},f={width:s.width/window.devicePixelRatio||1,height:s.height/window.devicePixelRatio||1},u=a.data.handles.points[0],d=a.data.handles.points[1],h=a.data.handles.points[2],g=a.data.handles.points[3],p=[u,h,d,g],v=Qi(h,g),y=Qi(u,h),m=this.computeScaleBounds(f,.05,.05,n),w=this.computeScaleBounds(f,.05,.05,n),x=this.computeScaleSize(v,y,n),C=this.computeWorldScaleCoordinates(x,n,p).map(ve=>i.worldToCanvas(ve)),S=this.computeCanvasScaleCoordinates(f,C,w,m,n),T=this.computeEndScaleTicks(S,n),{annotationUID:_}=a;l.annotationUID=_;const E=this.getStyle("lineWidth",l,a),b=this.getStyle("lineDash",l,a),D=this.getStyle("color",l,a),I=this.getStyle("shadow",l,a),P=`${_}-scaleline`;Sn(r,_,"1",S[0],S[1],{color:D,width:E,lineDash:b,shadow:I},P);const A=`${_}-left`;Sn(r,_,"2",T.endTick1[0],T.endTick1[1],{color:D,width:E,lineDash:b,shadow:I},A);const G=`${_}-right`;Sn(r,_,"3",T.endTick2[0],T.endTick2[1],{color:D,width:E,lineDash:b,shadow:I},G);const N={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},F=[S[0][0]+N[n][0],S[0][1]+N[n][1]],j=this._getTextLines(x),{tickIds:te,tickUIDs:ie,tickCoordinates:he}=this.computeInnerScaleTicks(x,n,_,T.endTick1,T.endTick2);for(let ve=0;ve=50?(r=e/10,n=" cm"):(r=e,n=" mm"),[r.toString().concat(n)]}}YW.toolName="ScaleOverlay";const JW=(t,e,r)=>{var a,s,c;if(!((c=(s=(a=e==null?void 0:e.data)==null?void 0:a.contour)==null?void 0:s.polyline)!=null&&c.length))return;const{polyline:n}=e.data.contour,{length:i}=n;let o=1/0;for(let l=0;lthis.toolInfo.toolSize||(this.pushOneHandle(s,a,r),o.first===void 0&&(o.first=s),o.last=s)}if(o.first!==void 0&&o.last!==void 0)for(let s=0;s0&&(i.toolSize=Math.min(i.maxToolSize,o))}getMaxSpacing(e){return Math.max(this.toolInfo.toolSize/4,e)}getInsertPosition(e,r,n){let i;const{points:o,element:a,mouseCanvasPoint:s}=n,c=this.toolInfo.toolSize,l=_e(a),{viewport:f}=l,u=f.worldToCanvas(o[e]),d=f.worldToCanvas(o[r]),h=[(u[0]+d[0])/2,(u[1]+d[1])/2],g=ko(s,h);if(g=0;l--){if(l>=s-1||l<0)continue;const f=l+1,u=ko(n[l],n[f]);if(u>c){const d=this.directionalVector(n[l],n[f]),g=(u-e.meanDistance)/e.meanDistance*e.meanDistance*Wc.CHAIN_PULL_STRENGTH_FACTOR;n[l][0]+=d[0]*g,n[l][1]+=d[1]*g,n[l][2]+=d[2]*g}}for(let l=a+1;l=s||l<=0)continue;const f=l-1,u=ko(n[l],n[f]);if(u>c){const d=this.directionalVector(n[l],n[f]),g=(u-e.meanDistance)/e.meanDistance*e.meanDistance*Wc.CHAIN_PULL_STRENGTH_FACTOR;n[l][0]+=d[0]*g,n[l][1]+=d[1]*g,n[l][2]+=d[2]*g}}}};Wc.shapeName="Circle",Wc.CHAIN_MAINTENANCE_ITERATIONS=3,Wc.CHAIN_PULL_STRENGTH_FACTOR=.3,Wc.MAX_INTER_DISTANCE_FACTOR=1.2;let Dp=Wc;class Ph extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{minSpacing:1,referencedToolNames:["PlanarFreehandROI","PlanarFreehandContourSegmentationTool"],toolShape:"circle",referencedToolName:"PlanarFreehandROI",updateCursorSize:"dynamic"}}){super(e,r),this.registeredShapes=new Map,this.isActive=!1,this.commonData={activeAnnotationUID:null,viewportIdsToRender:[],isEditingOpenContour:!1,canvasLocation:void 0},this.preMouseDownCallback=n=>{const i=n.detail,o=i.element;if(this.configureToolSize(n),this.selectFreehandTool(i),this.commonData.activeAnnotationUID!==null)return this.isActive=!0,Gt(o),this.activateModify(o),!0},this.mouseMoveCallback=n=>{this.mode===Fn.Active?(this.configureToolSize(n),this.updateCursor(n)):this.commonData.canvasLocation=void 0},this.endCallback=n=>{const i=n.detail,{element:o}=i,a=this.configuration,s=_e(o);this.isActive=!1,this.deactivateModify(o),Jt(o);const{renderingEngineId:c,viewportId:l}=s,u=Pr(l,c).getToolInstance(a.referencedToolName),h=this.filterSculptableAnnotationsForElement(o).find(g=>g.annotationUID===this.commonData.activeAnnotationUID);u.configuration.calculateStats&&(h.invalidated=!0),cn(h,o,Qt.HandlesUpdated)},this.dragCallback=n=>{const i=n.detail,o=i.element;this.updateCursor(n);const a=this.filterSculptableAnnotationsForElement(o),s=a.find(l=>l.annotationUID===this.commonData.activeAnnotationUID);if(!(a!=null&&a.length)||!this.isActive)return;const c=s.data.contour.polyline;this.sculpt(i,c)},this.registerShapes(Dp.shapeName,Dp),this.setToolShape(this.configuration.toolShape)}registerShapes(e,r){const n=new r;this.registeredShapes.set(e,n)}sculpt(e,r){const n=this.configuration,i=e.element,o=_e(i),{viewport:a}=o,s=this.registeredShapes.get(this.selectedShape);this.sculptData={mousePoint:e.currentPoints.world,mouseCanvasPoint:e.currentPoints.canvas,deltaWorld:e.deltaPoints.world,points:r,maxSpacing:s.getMaxSpacing(n.minSpacing),element:i};const c=s.pushHandles(a,this.sculptData);c.first!==void 0&&this.insertNewHandles(c)}interpolatePointsWithinMaxSpacing(e,r,n,i){const{element:o}=this.sculptData,a=_e(o),{viewport:s}=a,c=u7(e+1,r.length),l=s.worldToCanvas(r[e]),f=s.worldToCanvas(r[c]);ko(l,f)>i&&n.push(e)}updateCursor(e){const r=e.detail,n=r.element,i=_e(n),{renderingEngine:o,viewport:a}=i;this.commonData.viewportIdsToRender=[a.id];const s=this.filterSculptableAnnotationsForElement(n);if(!(s!=null&&s.length))return;const c=s.find(l=>l.annotationUID===this.commonData.activeAnnotationUID);if(this.commonData.canvasLocation=r.currentPoints.canvas,this.isActive)c.highlighted=!0;else{const l=this.registeredShapes.get(this.selectedShape),f=r.currentPoints.canvas;this.configuration.updateCursorSize==="dynamic"&&l.updateToolSize(f,a,c)}Be(this.commonData.viewportIdsToRender)}filterSculptableAnnotationsForElement(e){const r=this.configuration,n=_e(e),{renderingEngineId:i,viewportId:o}=n,a=[],c=Pr(o,i).getToolInstance(r.referencedToolName);return r.referencedToolNames.forEach(l=>{const f=hn(l,e);f&&a.push(...f)}),c.filterInteractableAnnotationsForElement(e,a)}configureToolSize(e){this.registeredShapes.get(this.selectedShape).configureToolSize(e)}insertNewHandles(e){const r=this.findNewHandleIndices(e);let n=0;for(let i=0;i<(r==null?void 0:r.length);i++){const o=r[i]+1+n;this.insertHandleRadially(o),n++}}findNewHandleIndices(e){const{points:r,maxSpacing:n}=this.sculptData,i=[];for(let o=e.first;o<=e.last;o++)this.interpolatePointsWithinMaxSpacing(o,r,i,n);return i}insertHandleRadially(e){const{points:r}=this.sculptData;if(e>r.length-1&&this.commonData.isEditingOpenContour)return;const n=this.registeredShapes.get(this.selectedShape),i=e-1,o=u7(e,r.length),s=n.getInsertPosition(i,o,this.sculptData);r.splice(e,0,s)}selectFreehandTool(e){const r=this.getClosestFreehandToolOnElement(e);r!==void 0&&(this.commonData.activeAnnotationUID=r)}getClosestFreehandToolOnElement(e){const{element:r}=e,n=_e(r),{viewport:i}=n,o=this.configuration,a=this.filterSculptableAnnotationsForElement(r);if(!(a!=null&&a.length))return;const s=e.currentPoints.canvas,c={distance:1/0,toolIndex:void 0,annotationUID:void 0};for(let l=0;l<(a==null?void 0:a.length);l++){if(a[l].isLocked||!a[l].isVisible)continue;const f=JW(i,a[l],s);f!==-1&&f(t+e)%e;Ph.toolName="SculptorTool";const pTe={Z:[0,0,1]};class ZW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:pTe.Z,rotateIncrementDegrees:30}}){super(e,r)}mouseWheelCallback(e){const{element:r,wheel:n}=e.detail,i=_e(r),{viewport:o}=i,{direction:a,rotateIncrementDegrees:s}=this.configuration,c=o.getCamera(),{viewUp:l,position:f,focalPoint:u}=c,{direction:d}=n,[h,g,p]=u,[v,y,m]=a,w=d*(s*Math.PI)/180,x=[0,0,0],C=[0,0,0],S=[0,0,0],T=Wt(new Float32Array(16));dr(T,T,[h,g,p]),Ro(T,T,w,[v,y,m]),dr(T,T,[-h,-g,-p]),Yt(x,f,T),Yt(C,u,T),Wt(T),Ro(T,T,w,[v,y,m]),Yt(S,l,T),o.setCamera({position:x,viewUp:S,focalPoint:C}),o.render()}}ZW.toolName="VolumeRotateMouseWheel";const Vp=class Vp extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:mTe,changeTextCallback:vTe,preventHandleOutsideImage:!1}}){super(e,r),this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{annotationUID:l}=i,f=i.data.handles.points[0],u=c.worldToCanvas(f);if(Sr(o,u)=x&&o[0]<=x+v.width&&o[1]>=C&&o[1]<=C+v.height},this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=this.getReferencedImageId(l,s,u,d),g=l.getFrameOfReferenceUID(),p={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h,...l.getViewReference({points:[s]})},data:{text:"",handles:{points:[[...s],[...s]]},label:""}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,newAnnotation:!0,viewportIdsToRender:v,offset:[0,0,0]},n.preventDefault(),Be(v),this.configuration.getTextCallback(y=>{if(!y){mn(p.annotationUID),Be(v),this.isDrawing=!1;return}Jt(a),p.data.text=y,Un(p),Be(v)}),this.createMemo(a,p,{newAnnotation:!0}),p},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a,currentPoints:s}=o;i.highlighted=!0;const c=At(a,this.getToolName());let l=[0,0,0];if(s&&s.world){const f=s.world,u=i.data.handles.points[0];l=[u[0]-f[0],u[1]-f[1],u[2]-f[2]]}this.editData={annotation:i,viewportIdsToRender:c,offset:l},this._activateModify(a),Gt(a),Be(c),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData;this._deactivateDraw(o),this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragCallback=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,offset:f}=this.editData;f?c.data.handles.points[0]=[s[0]+f[0],s[1]+f[1],s[2]+f[2]]:c.data.handles.points[0]=[...s],c.invalidated=!0,Be(l),cn(c,a,Qt.LabelChange)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length))return o;c=this.filterInteractableAnnotationsForElement(s,c);const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;f{const o=Wn(e);if(!o)return;const{viewport:a}=o,s=a.getFrameOfReferenceUID(),{viewPlaneNormal:c,viewUp:l}=a.getCamera(),f=new Vp,u=f.getReferencedImageId(a,r,c,l),d={annotationUID:(i==null?void 0:i.annotationUID)||Pn(),data:{text:n,handles:{points:[r]}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:f.getToolName(),viewPlaneNormal:c,FrameOfReferenceUID:s,referencedImageId:u,...i}};ln(d,a.element),Be([a.id])};let T5=Vp;function mTe(t){return t(prompt("Enter your annotation:"))}function vTe(t,e,r){return r(prompt("Enter your annotation:"))}T5.toolName="Label";const{transformWorldToIndex:f7}=Rn,A0=class A0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:yTe,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:f,viewUp:u,position:d}=l.getCamera(),h=this.getReferencedImageId(l,s,f,u),g={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:h,viewUp:u,cameraPosition:d},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(g,a);const p=At(a,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(p),g},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=d.world;u.handles.points[c]=[...h],a.invalidated=!0}this.editData.hasMoved=!0,Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(N));if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let T;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(T=[S[y]]),T&&or(i,g,"0",S,{color:m,lineDash:x,lineWidth:w});const _=`${g}-line`;if(Sn(i,g,"1",S[0],S[1],{color:m,width:w,lineDash:x,shadow:C},_),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const b=this.getLinkedTextBoxStyle(u,h);if(!b.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const D=this.configuration.getTextLines(p,l);if(!p.handles.textBox.hasMoved){const N=Oa(S);p.handles.textBox.worldPosition=a.canvasToWorld(N)}const I=a.worldToCanvas(p.handles.textBox.worldPosition),O=ho(i,g,"1",D,I,S,{},b),{x:A,y:V,width:G,height:R}=O;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([A,V]),topRight:a.canvasToWorld([A+G,V]),bottomLeft:a.canvasToWorld([A,V+R]),bottomRight:a.canvasToWorld([A+G,V+R])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(f=>f===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o),Be(l),e.preventDefault()}_calculateLength(e,r){const n=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],s=i.handles.points[1],{cachedStats:c}=i,l=Object.keys(c);for(let u=0;u{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=A0.hydrateBase(A0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let gf=A0;function yTe(t,e){const r=t.cachedStats[e],{length:n,unit:i}=r;return n==null||isNaN(n)?void 0:[`${un(n)} ${i}`]}const{transformWorldToIndex:d7}=Rn,ib=class ib extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:wTe}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:u,viewUp:d,position:h}=l.getCamera(),g=this.getReferencedImageId(l,s,u,d),p={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:g,viewUp:d,cameraPosition:h},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(v),p},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),_e(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l}=this.editData,{data:f}=a;if(l){const{deltaPoints:h}=i,g=h.world,{textBox:p}=f.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(c===void 0){const{deltaPoints:h}=i,g=h.world;f.handles.points.forEach(v=>{v[0]+=g[0],v[1]+=g[1],v[2]+=g[2]}),a.invalidated=!0}else{const{currentPoints:h}=i,g=h.world;f.handles.points[c]=[...g],a.invalidated=!0}this.editData.hasMoved=!0;const u=_e(o),{renderingEngine:d}=u;Be(s)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,_e(n),Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(R));let T;if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!Kr(g))continue;if(!si(g)&&!this.editData&&y!==null&&(T=[S[y]]),T&&or(i,g,"0",S,{color:m,lineDash:x,lineWidth:w}),BU(i,g,"0",S[0],S[1],{color:m,width:w,lineDash:x}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const E=this.getLinkedTextBoxStyle(u,h);if(!E.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const b=this.configuration.getTextLines(p,l);if(!p.handles.textBox.hasMoved){const R=Oa(S);p.handles.textBox.worldPosition=a.canvasToWorld(R)}const D=a.worldToCanvas(p.handles.textBox.worldPosition),P=ho(i,g,"1",b,D,S,{},E),{x:O,y:A,width:V,height:G}=P;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([O,A]),topRight:a.canvasToWorld([O+V,A]),bottomLeft:a.canvasToWorld([O,A+G]),bottomRight:a.canvasToWorld([O+V,A+G])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_calculateHeight(e,r){const n=r[0]-e[0],i=r[1]-e[1],o=r[2]-e[2];if(n==0)return i!=0?Math.abs(o):0;if(i==0)return Math.abs(o);if(o==0)return Math.abs(i)}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],s=i.handles.points[1],{cachedStats:c}=i,l=Object.keys(c);for(let u=0;u{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=this.constructor.createAnnotationForViewport(l,{data:{handles:{points:[[...s]]}}});ln(f,a);const u=At(a,this.getToolName());return this.editData={annotation:f,newAnnotation:!0,viewportIdsToRender:u},this._activateModify(a),Gt(a),n.preventDefault(),Be(u),f},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{viewportId:l,renderingEngine:f}=_e(o);this.eventDispatchDetail={viewportId:l,renderingEngineId:f.id},this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,newAnnotation:f}=this.editData,{data:u}=c;this.createMemo(a,c,{newAnnotation:f}),u.handles.points[0]=[...s],c.invalidated=!0,Be(l)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;d{const I=Ur(T),P=D.hasImageURI(I),O=Ur(D.getCurrentImageId());return P&&O!==I})&&delete p.cachedStats[_]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(g))continue;or(i,g,"0",[y],{color:m,lineWidth:w,handleRadius:this.configuration.handleRadius}),o=!0;const C=this.getLinkedTextBoxStyle(u,h);if(!C.visibility)continue;const S=this.configuration.getTextLines(p,l);if(S){const T=[y[0]+this.configuration.textCanvasOffset.x,y[1]+this.configuration.textCanvasOffset.y];ff(i,g,"0",S,[T[0],T[1]],C)}}return o}}isPointNearTool(e,r,n,i){const o=_e(e),{viewport:a}=o,{data:s}=r,c=s.handles.points[0],l=a.worldToCanvas(c);return Sr(n,l)D!==null);T=b?E.values:T,_=b?E.units:"raw"}else _=uu(C,e.metadata.referencedImageId,p);f[g]={index:S,value:T,Modality:C,modalityUnit:_}}else this.isHandleOutsideImage=!0,f[g]={index:S,Modality:C}}const d=e.invalidated;return e.invalidated=!1,d&&cn(e,c,i),f}};bu.toolName="Probe",bu.probeDefaults={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:CTe,handleRadius:"6",textCanvasOffset:{x:6,y:-6}}},bu.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,viewUp:c,instance:l,viewport:f}=bu.hydrateBase(bu,i,r,n),{toolInstance:u,...d}=n||{},h={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...d}};ln(h,f.element),Be([f.id])};let au=bu;function CTe(t,e){const r=t.cachedStats[e],{index:n,value:i,modalityUnit:o}=r;if(i===void 0||!n)return;const a=[];if(a.push(`(${n[0]}, ${n[1]}, ${n[2]})`),i instanceof Array&&o instanceof Array)for(let s=0;s{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:l.getFrameOfReferenceUID(),referencedImageId:g},data:{label:"",handles:{points:[[...s]]},cachedStats:{}}},v=At(a,this.getToolName());return this.editData={annotation:p,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(a),Gt(a),n.preventDefault(),Be(v),p},this.postTouchStartCallback=n=>this.postMouseDownCallback(n),this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;if(!this.editData)return o;const s=this.filterInteractableAnnotationsForElement(a.element,[this.editData.annotation]);if(!(s!=null&&s.length))return o;const c=this.getTargetId(a),l=a.getRenderingEngine(),f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=this.editData.annotation,d=u.annotationUID,h=u.data,g=h.handles.points[0],p=a.worldToCanvas(g);f.annotationUID=d;const{color:v}=this.getAnnotationStyle({annotation:u,styleSpecifier:f});if(!h.cachedStats[c]||h.cachedStats[c].value===null?(h.cachedStats[c]={Modality:null,index:null,value:null},this._calculateCachedStats(u,l,n)):u.invalidated&&this._calculateCachedStats(u,l,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;or(i,d,"0",[p],{color:v}),o=!0;const m=this.configuration.getTextLines(h,c);if(m){const w=[p[0]+6,p[1]-6];ff(i,d,"0",m,[w[0],w[1]],this.getLinkedTextBoxStyle(f,u))}return o}}};ob.toolName="DragProbe";let uT=ob;function STe(t,e){const r=t.cachedStats[e],{index:n,value:i,modalityUnit:o}=r;if(i===void 0)return;const a=[];return a.push(`(${n[0]}, ${n[1]}, ${n[2]})`),a.push(`${i.toFixed(2)} ${o}`),a}const{transformWorldToIndex:h7}=Rn,N0=class N0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:TTe,statsCalculator:dl}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world;o.canvas;const c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},cachedStats:{},initialRotation:l.getRotation()}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,centerWorld:s,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=f.map(_=>c.worldToCanvas(_)),[d,h,g,p]=u,v=Math.hypot(g[0]-p[0],g[1]-p[1]),y=Math.hypot(h[0]-d[0],h[1]-d[1]),m=Math.atan2(g[1]-p[1],g[0]-p[0]),w=[(g[0]+p[0])/2,(h[1]+d[1])/2],x={center:w,xRadius:(v-a)/2,yRadius:(y-a)/2,angle:m},C={center:w,xRadius:(v+a)/2,yRadius:(y+a)/2,angle:m},S=this._pointInEllipseCanvas(x,o);return!!(this._pointInEllipseCanvas(C,o)&&!S)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f,u,d,h,g,p;if(o.worldPosition)l=!0;else{const{points:y}=c.handles,{viewport:m}=_e(s),{worldToCanvas:w,canvasToWorld:x}=m;f=y.findIndex(S=>S===o);const C=y.map(w);p=C[f],h=Math.abs(C[2][0]-C[3][0]),g=Math.abs(C[0][1]-C[1][1]),u=[(C[2][0]+C[3][0])/2,(C[0][1]+C[1][1])/2],d=x(u)}const v=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:v,handleIndex:f,canvasWidth:h,canvasHeight:g,centerWorld:d,originalHandleCanvas:p,movingTextBox:l},this._activateModify(s),Gt(s),Be(v),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(this.doneEditMemo(),a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a))},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{viewport:l}=c,{canvasToWorld:f}=l,{annotation:u,viewportIdsToRender:d,centerWorld:h,newAnnotation:g}=this.editData;this.createMemo(o,u,{newAnnotation:g});const p=l.worldToCanvas(h),{data:v}=u,y=Math.abs(s[0]-p[0]),m=Math.abs(s[1]-p[1]),w=[p[0],p[1]-m],x=[p[0],p[1]+m],C=[p[0]-y,p[1]],S=[p[0]+y,p[1]];v.handles.points=[f(w),f(x),f(C),f(S)],u.invalidated=!0,this.editData.hasMoved=!0,Be(d),cn(u,o,Qt.HandlesUpdated)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,{viewport:a}=_e(o),{canvasToWorld:s,worldToCanvas:c}=a,{annotation:l,canvasWidth:f,canvasHeight:u,handleIndex:d,centerWorld:h,originalHandleCanvas:g}=this.editData,p=a.worldToCanvas(h),{data:v}=l,{points:y}=v.handles,{currentPoints:m}=i,w=m.canvas;if(d===0||d===1){const x=Math.abs(w[1]-p[1]),C=[p[0],p[1]-x],S=[p[0],p[1]+x];y[0]=s(C),y[1]=s(S);const T=w[0]-g[0],_=f/2+T,E=[p[0]-_,p[1]],b=[p[0]+_,p[1]];y[2]=s(E),y[3]=s(b)}else{const x=Math.abs(w[0]-p[0]),C=[p[0]-x,p[1]],S=[p[0]+x,p[1]];y[2]=s(C),y[3]=s(S);const T=w[1]-g[1],_=u/2+T,E=[p[0],p[1]-_],b=[p[0],p[1]+_];y[0]=s(E),y[1]=s(b)}},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(te)),T=a5(S),{centerPointRadius:_}=this.configuration;if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(h,a,f);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,a,f,n),a instanceof ur)){const{referencedImageId:te}=h.metadata;for(const ie in p.cachedStats)ie.startsWith("imageId")&&f.getStackViewports().find(ve=>{const Me=Ur(te),Ue=ve.hasImageURI(Me),be=Ur(ve.getCurrentImageId());return Ue&&be!==Me})&&delete p.cachedStats[ie]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let E;if(!Kr(g))continue;!si(g)&&!this.editData&&m!==null&&(E=[S[m]]),E&&or(i,g,"0",E,{color:w});const b=`${g}-ellipse`,D="0";if(QE(i,g,D,S,{color:w,lineDash:C,lineWidth:x},b),_>0&&Math.min(Math.abs(T[0][0]-T[1][0])/2,Math.abs(T[0][1]-T[1][1])/2)>3*_){const ie=this._getCanvasEllipseCenter(S);ia(i,g,`${D}-center`,ie,_,{color:w,lineDash:C,lineWidth:x})}o=!0;const I=this.getLinkedTextBoxStyle(u,h);if(!I.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const P=this.configuration.getTextLines(p,l);if(!P||P.length===0)continue;let O;p.handles.textBox.hasMoved||(O=Oa(T),p.handles.textBox.worldPosition=a.canvasToWorld(O));const A=a.worldToCanvas(p.handles.textBox.worldPosition),G=ho(i,g,"1",P,A,S,{},I),{x:R,y:N,width:F,height:j}=G;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+F,N]),bottomLeft:a.canvasToWorld([R,N+j]),bottomRight:a.canvasToWorld([R+F,N+j])}}return o},this._calculateCachedStats=(n,i,o)=>{var C,S,T,_;if(!this.configuration.calculateStats)return;const a=n.data,{element:s}=i,{points:c}=a.handles,l=c.map(E=>i.worldToCanvas(E)),{viewPlaneNormal:f,viewUp:u}=i.getCamera(),[d,h]=a5(l),g=i.canvasToWorld(d),p=i.canvasToWorld(h),{cachedStats:v}=a,y=Object.keys(v),m=g,w=p;for(let E=0;EAw(ve,Re,{fast:!0}),returnPoints:this.configuration.storePointData});const Se=this.configuration.statsCalculator.getStatistics();v[b]={Modality:O.Modality,area:W,mean:(C=Se.mean)==null?void 0:C.value,max:(S=Se.max)==null?void 0:S.value,min:(T=Se.min)==null?void 0:T.value,stdDev:(_=Se.stdDev)==null?void 0:_.value,statsArray:Se.array,pointsInShape:re,isEmptyArea:be,areaUnit:$,modalityUnit:ne}}const x=n.invalidated;return n.invalidated=!1,x&&cn(n,s,Qt.StatsUpdated),v},this._isInsideVolume=(n,i,o)=>hr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,r){const{xRadius:n,yRadius:i,center:o,angle:a}=e,s=zY(rn(),r,o,-a);if(n<=0||i<=0)return!1;const c=[s[0]-o[0],s[1]-o[1]];return c[0]*c[0]/(n*n)+c[1]*c[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[r,n,i,o]=e,a=[i[0],n[1]],s=[o[0],r[1]];return[(a[0]+s[0])/2,(a[1]+s[1])/2]}};N0.toolName="EllipticalROI",N0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=N0.hydrateBase(N0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let Ad=N0;function TTe(t,e){const r=t.cachedStats[e],{area:n,mean:i,stdDev:o,max:a,isEmptyArea:s,areaUnit:c,modalityUnit:l,min:f}=r,u=[];if(Ar(n)){const d=s?"Area: Oblique not supported":`Area: ${un(n)} ${c}`;u.push(d)}return Ar(i)&&u.push(`Mean: ${un(i)} ${l}`),Ar(a)&&u.push(`Max: ${un(a)} ${l}`),Ar(f)&&u.push(`Min: ${un(f)} ${l}`),Ar(o)&&u.push(`Std Dev: ${un(o)} ${l}`),u}const{transformWorldToIndex:g7}=Rn,k0=class k0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:_Te,statsCalculator:dl}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s]],activeHandleIndex:null},cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=f.map(g=>c.worldToCanvas(g)),d=Zu(u),h=Zu([u[0],o]);return Math.abs(h-d){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:g}=c.handles;f=g.findIndex(p=>p===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Gt(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;this.doneEditMemo(),a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{viewport:l}=c,{canvasToWorld:f}=l,{annotation:u,viewportIdsToRender:d,newAnnotation:h}=this.editData;this.createMemo(o,u,{newAnnotation:h});const{data:g}=u;g.handles.points=[g.handles.points[0],f(s)],u.invalidated=!0,this.editData.hasMoved=!0,Be(d),cn(u,o,Qt.HandlesUpdated)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,a=_e(o),{canvasToWorld:s,worldToCanvas:c}=a.viewport,{annotation:l,handleIndex:f}=this.editData,{data:u}=l,{points:d}=u.handles,h=d.map(v=>c(v)),{currentPoints:g}=i,p=g.canvas;if(f===0){const v=p[0]-h[0][0],y=p[1]-h[0][1],m=p,w=[h[1][0]+v,h[1][1]+y];d[0]=s(m),d[1]=s(w)}else d[1]=s(p)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(he)),T=S[0],_=Zu(S),E=rh(S),{centerPointRadius:b}=this.configuration;if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(h,a,f,n);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,a,f,n),a instanceof ur)){const{referencedImageId:he}=h.metadata;for(const ue in p.cachedStats)ue.startsWith("imageId")&&f.getStackViewports().find(Ue=>{const be=Ur(he),B=Ue.hasImageURI(be),M=Ur(Ue.getCurrentImageId());return B&&M!==be})&&delete p.cachedStats[ue]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let D;if(!Kr(g))continue;!si(g)&&!this.editData&&m!==null&&(D=[S[m]]),D&&or(i,g,"0",D,{color:w});const I=`${g}-circle`,P="0";ia(i,g,P,T,_,{color:w,lineDash:C,lineWidth:x},I),b>0&&_>3*b&&ia(i,g,`${P}-center`,T,b,{color:w,lineDash:C,lineWidth:x}),o=!0;const O=this.getLinkedTextBoxStyle(u,h);if(!O.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const A=this.configuration.getTextLines(p,l);if(!A||A.length===0)continue;let V;p.handles.textBox.hasMoved||(V=Oa(E),p.handles.textBox.worldPosition=a.canvasToWorld(V));const G=a.worldToCanvas(p.handles.textBox.worldPosition),N=ho(i,g,"1",A,G,S,{},O),{x:F,y:j,width:te,height:ie}=N;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([F,j]),topRight:a.canvasToWorld([F+te,j]),bottomLeft:a.canvasToWorld([F,j+ie]),bottomRight:a.canvasToWorld([F+te,j+ie])}}return o},this._calculateCachedStats=(n,i,o,a)=>{var S,T,_,E;if(!this.configuration.calculateStats)return;const s=n.data,{element:c}=i,l=n.invalidated,{points:f}=s.handles,u=f.map(b=>i.worldToCanvas(b)),{viewPlaneNormal:d,viewUp:h}=i.getCamera(),[g,p]=rh(u),v=i.canvasToWorld(g),y=i.canvasToWorld(p),{cachedStats:m}=s,w=Object.keys(m),x=v,C=y;for(let b=0;bAw(B,ae,{fast:!0}),boundsIJK:ue,imageData:O,returnPoints:this.configuration.storePointData}));const Te=this.configuration.statsCalculator.getStatistics();m[D]={Modality:A.Modality,area:je,mean:(S=Te.mean)==null?void 0:S.value,max:(T=Te.max)==null?void 0:T.value,min:(_=Te.min)==null?void 0:_.value,pointsInShape:ce,stdDev:(E=Te.stdDev)==null?void 0:E.value,statsArray:Te.array,isEmptyArea:W,areaUnit:Se,radius:M/2/ne,radiusUnit:re,perimeter:2*Math.PI*(M/2)/ne,modalityUnit:oe}}else this.isHandleOutsideImage=!0,m[D]={Modality:A.Modality}}return n.invalidated=!1,l&&cn(n,c,Qt.StatsUpdated),m},this._isInsideVolume=(n,i,o)=>hr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}};k0.toolName="CircleROI",k0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=k0.hydrateBase(k0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let _5=k0;function _Te(t,e){const r=t.cachedStats[e],{radius:n,radiusUnit:i,area:o,mean:a,stdDev:s,max:c,min:l,isEmptyArea:f,areaUnit:u,modalityUnit:d}=r,h=[];if(Ar(n)){const g=f?"Radius: Oblique not supported":`Radius: ${un(n)} ${i}`;h.push(g)}if(Ar(o)){const g=f?"Area: Oblique not supported":`Area: ${un(o)} ${u}`;h.push(g)}return Ar(a)&&h.push(`Mean: ${un(a)} ${d}`),Ar(c)&&h.push(`Max: ${un(c)} ${d}`),Ar(l)&&h.push(`Min: ${un(l)} ${d}`),Ar(s)&&h.push(`Std Dev: ${un(s)} ${d}`),h}const Xv=5,ab=class ab extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,degrees:[45,135,225,315],diameters:[10,30,60]}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{points:[[...s]]}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,newAnnotation:!0},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=c.worldToCanvas(f[0]),d=Zu([u,o]);return Math.abs(d){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h}=this.editData,{data:g}=d;g.handles.points=[u(s),u(s)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData,{data:c}=a,{deltaPoints:l}=i,f=l.world;c.handles.points.forEach(g=>{g[0]+=f[0],g[1]+=f[1],g[2]+=f[2]}),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,a=_e(o),{canvasToWorld:s,worldToCanvas:c}=a.viewport,{annotation:l}=this.editData,{data:f}=l,{points:u}=f.handles,d=u.map(w=>c(w)),{currentPoints:h}=i,g=h.canvas,p=g[0]-d[0][0],v=g[1]-d[0][1],y=g,m=[d[1][0]+p,d[1][1]+v];u[0]=s(y),u[1]=s(m)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;i.highlighted=!1,s.handles.activeHandleIndex=null;const{renderingEngine:c}=_e(n);return Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(D))[0];if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(d))continue;let C=`${d}-crosshair-vertical`,S=[x[0],x[1]+Xv],T=[x[0],x[1]-Xv];Sn(i,d,C,S,T,{color:v,lineDash:m,lineWidth:y}),C=`${d}-crosshair-horizontal`,S=[x[0]+Xv,x[1]],T=[x[0]-Xv,x[1]],Sn(i,d,C,S,T,{color:v,lineDash:m,lineWidth:y});const _=this.configuration.diameters.map(D=>this.worldMeasureToCanvas(D,a));for(let D=0;D<_.length;D++){const I=`${d}-circle-${D}`,P=`${d}-circle-${D}`;ia(i,d,P,x,_[D]/2,{color:v,lineDash:m,lineWidth:y},I)}const E=D=>D*Math.PI/180,b=this.configuration.degrees.map(D=>E(D));for(let D=0;D{const{instance:s}=i.data.spline;return s.isPointNearCurve(o,a)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:d}=c.handles;f=d.findIndex(h=>h===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,contourHoleProcessingEnabled:l}=this.editData,{data:f}=a;a.autoGenerated=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),d=this.getTargetImageData(this.getTargetId(u.viewport)),{imageData:h,dimensions:g}=d;this.isHandleOutsideImage=f.handles.points.map(v=>zr(h,v)).some(v=>!hr(v,g)),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const p=c?Qt.Completed:Qt.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=a.annotationUID,this.fireChangeOnUpdate.changeType=p):this.fireChangeOnUpdate={annotationUID:a.annotationUID,changeType:p,contourHoleProcessingEnabled:l},Be(s),this.doneEditMemo(),this.editData=null,this.isDrawing=!1},this._keyDownCallback=n=>{const i=n.detail,{element:o}=i,a=i.key??"",{lastControlPointDeletionKeys:s}=this.configuration.spline;if(!s.includes(a))return;const{annotation:l}=this.editData,{data:f}=l;if(f.handles.points.length===p7){this.cancel(o);return}else{const u=f.handles.points.length-1;this._deleteControlPointByIndex(o,l,u)}n.preventDefault()},this._mouseMoveCallback=n=>{const{drawPreviewEnabled:i}=this.configuration.spline;if(!i)return;const{element:o}=n.detail,{renderingEngine:a}=_e(o),s=At(o,this.getToolName());this.editData.lastCanvasPoint=n.detail.currentPoints.canvas,Be(s),n.preventDefault()},this._mouseDownCallback=n=>{const i=n.type===k.MOUSE_DOUBLE_CLICK,{annotation:o,viewportIdsToRender:a}=this.editData,{data:s}=o;if(s.contour.closed)return;this.doneEditMemo();const c=n.detail,{currentPoints:l,element:f}=c,{canvas:u,world:d}=l;let h=s.handles.points.length>=2&&i,g=!0;if(s.handles.points.length&&this.createMemo(f,o,{newAnnotation:s.handles.points.length===1}),s.handles.points.length>=3){this.createMemo(f,o);const{instance:p}=s.spline,v=p.getClosestControlPointWithinDistance(u,m7);(v==null?void 0:v.index)===0&&(g=!1,h=!0)}g&&s.handles.points.push(d),s.contour.closed=s.contour.closed||h,o.invalidated=!0,Be(a),s.contour.closed&&this._endCallback(n),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;this.moveAnnotation(a,p)}else{const{currentPoints:g}=i,p=g.world;u.handles.points[c]=[...p],a.invalidated=!0}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this.triggerAnnotationCompleted=(n,i)=>{const o=k.ANNOTATION_COMPLETED,a={annotation:n,changeType:Qt.Completed,contourHoleProcessingEnabled:i};ut(et,o,a)},this.triggerAnnotationModified=(n,i,o=Qt.StatsUpdated)=>{const{viewportId:a,renderingEngineId:s}=i,c=k.ANNOTATION_MODIFIED;ut(et,c,{annotation:n,viewportId:a,renderingEngineId:s,changeType:o})},this.triggerChangeEvent=(n,i,o=Qt.StatsUpdated,a)=>{o===Qt.Completed?this.triggerAnnotationCompleted(n,a):this.triggerAnnotationModified(n,i,o)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.KEY_DOWN,this._keyDownCallback),n.addEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.KEY_DOWN,this._keyDownCallback),n.removeEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._renderStats=(n,i,o,a)=>{const s=n.data,c=this.getTargetId(i);if(!s.spline.instance.closed||!a.visibility)return;const l=this.configuration.getTextLines(s,c);if(!l||l.length===0)return;const f=s.handles.points.map(m=>i.worldToCanvas(m));if(!s.handles.textBox.hasMoved){const m=Oa(f);s.handles.textBox.worldPosition=i.canvasToWorld(m)}const u=i.worldToCanvas(s.handles.textBox.worldPosition),h=ho(o,n.annotationUID??"","textBox",l,u,f,{},a),{x:g,y:p,width:v,height:y}=h;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([g,p]),topRight:i.canvasToWorld([g+v,p]),bottomLeft:i.canvasToWorld([g,p+y]),bottomRight:i.canvasToWorld([g+v,p+y])}},this.addControlPointCallback=(n,i)=>{const{data:o}=i,a=o.spline.type,s=this._getSplineConfig(a),c=s.controlPointAdditionDistance;if(s.controlPointAdditionEnabled===!1)return;const l=n.detail,{element:f}=l,u=_e(f),{renderingEngine:d,viewport:h}=u,{canvasToWorld:g}=h,{instance:p}=o.spline,v=n.detail.currentPoints.canvas,y=p.getClosestPoint(v);if(y.distance>c)return;const{index:m,point:w}=p.addControlPointAtU(y.uValue);o.handles.points.splice(m,0,g(w)),i.invalidated=!0;const x=At(f,this.getToolName());Be(x)},this.deleteControlPointCallback=(n,i)=>{const o=i.data.spline.type,a=this._getSplineConfig(o),s=a.controlPointDeletionDistance;if(a.controlPointDeletionEnabled===!1)return;const c=n.detail,{element:l,currentPoints:f}=c,{canvas:u}=f,{instance:d}=i.data.spline,h=d.getClosestControlPointWithinDistance(u,s);h&&this._deleteControlPointByIndex(l,i,h.index)},this._calculateCachedStats=(n,i)=>{if(!this.configuration.calculateStats)return;const o=n.data;if(!o.contour.closed)return;const a=_e(i);if(!a)return;const{viewport:s}=a,{cachedStats:c}=o,{polyline:l}=o.contour,f=Object.keys(c);for(let d=0;ds.worldToCanvas(D)),y=v[0],m=s.canvasToWorld(y),w=s.canvasToWorld([y[0]+1,y[1]]),x=s.canvasToWorld([y[0],y[1]+1]),C=Qi(m,w),S=Qi(m,x),{imageData:T}=g,{scale:_,areaUnit:E}=Ia(g,()=>{const{maxX:D,maxY:I,minX:P,minY:O}=uf(v),A=s.canvasToWorld([P,O]),V=zr(T,A),G=s.canvasToWorld([D,I]),R=zr(T,G);return[V,R]});let b=_m(v)/_/_;b*=C*S,c[h]={Modality:p.Modality,area:b,areaUnit:E}}const u=n.invalidated;return n.invalidated=!1,u&&this.triggerAnnotationModified(n,a,Qt.StatsUpdated),c},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0}),this.annotationCompletedBinded=this.annotationCompleted.bind(this)}annotationCompleted(e){var n;const{sourceAnnotation:r}=e.detail;!this.splineToolNames.includes((n=r==null?void 0:r.metadata)==null?void 0:n.toolName)||!this.configuration.simplifiedSpline||!this.isContourSegmentationTool()||zE(r)}initializeListeners(){et.addEventListener(k.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}removeListeners(){et.removeEventListener(k.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.removeListeners()}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{canvas:o}=n,a=Qh(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,s=_e(i),{renderingEngine:c}=s,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,i);const f=At(i,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:f,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:o,contourHoleProcessingEnabled:a},this._activateDraw(i),e.preventDefault(),Be(f),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Jt(e);const{annotation:r,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&mn(r.annotationUID),super.cancelAnnotation(r);const o=_e(e),{renderingEngine:a}=o;return Be(n),this.editData=null,r.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){var O,A,V;const{enabledElement:r,targetId:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=r,{worldToCanvas:s}=a,{element:c}=a,l=e.annotation,{annotationUID:f,data:u,highlighted:d}=l,{handles:h}=u,{points:g,activeHandleIndex:p}=h,v=(O=this.editData)==null?void 0:O.newAnnotation,{lineWidth:y,lineDash:m,color:w,locked:x}=o,C=g.map(G=>s(G)),{drawPreviewEnabled:S}=this.configuration.spline,T=l.data.spline.type,_=this._getSplineConfig(T),E=l.data.spline.instance,b=ym(l);if(b.findIndex(G=>!G)!==-1)throw new Error(`Can't find annotation for child ${l.childAnnotationUIDs.join()}`);[l,...b].filter(G=>this._isSplineROIAnnotation(G)).forEach(G=>{const N=this._updateSplineInstance(c,G).getPolylinePoints();this.updateContourPolyline(G,{points:N,closed:u.contour.closed,targetWindingDirection:ra.Clockwise},a,{updateWindingDirection:u.contour.closed})}),super.renderAnnotationInstance(e),!u.cachedStats[n]||u.cachedStats[n].areaUnit==null?(u.cachedStats[n]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(l,c)):l.invalidated&&this._throttledCalculateCachedStats(l,c);let P;if(!x&&!this.editData&&p!==null&&(P=[C[p]]),(P||v||d)&&or(i,f,"0",C,{color:w,lineWidth:y,handleRadius:"3"}),S&&E.numControlPoints>1&&((A=this.editData)!=null&&A.lastCanvasPoint)&&!E.closed){const{lastCanvasPoint:G}=this.editData,R=E.getPreviewPolylinePoints(G,m7);gc(i,f,"previewSplineChange",R,{color:"#9EA0CA",lineDash:m,lineWidth:1})}if(_.showControlPointsConnectors){const G=[...C];E.closed&&G.push(C[0]),gc(i,f,"controlPointsConnectors",G,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(l,a,i,o.textbox),((V=this.fireChangeOnUpdate)==null?void 0:V.annotationUID)===f&&(this.triggerChangeEvent(l,r,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),l.invalidated=!1,!0}createInterpolatedSplineControl(e){var o;if((o=e.data.handles.points)!=null&&o.length)return;const{polyline:r}=e.data.contour;if(!r||!r.length)return;e.data.handles.points=[];const{points:n}=e.data.handles,i=Math.max(10,Math.floor(r.length/20));for(let a=0;a({type:o.type,instance:a,resolution:o.resolution});let c;return(l=this.configuration.interpolation)!=null&&l.enabled&&(c=f=>{var u;(u=f.data).spline||(u.spline=s()),this.createInterpolatedSplineControl(f)}),Ui(r,{data:{handles:{points:[[...n]]},spline:s(),cachedStats:{}},onInterpolationComplete:c})}_deleteControlPointByIndex(e,r,n){const i=_e(e),{points:o}=r.data.handles;o.length===3?mn(r.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,s=At(e,this.getToolName());r.invalidated=!0,Be(s)}_isSplineROIAnnotation(e){var r;return!!((r=e.data)!=null&&r.spline)}_getSplineConfig(e){const{configuration:r}=this,n=r.spline.configuration;return Object.assign({type:e},ETe,n[e])}_updateSplineInstance(e,r){const n=_e(e),{viewport:i}=n,{worldToCanvas:o}=i,{data:a}=r,{type:s,instance:c}=r.data.spline,l=this._getSplineConfig(s),u=a.handles.points.map(o),d=l.resolution!==void 0?parseInt(l.resolution):void 0,h=l.scale!==void 0?parseFloat(l.scale):void 0;return c.setControlPoints(u),c.closed=!!a.contour.closed,!c.fixedResolution&&d!==void 0&&c.resolution!==d&&(c.resolution=d,r.invalidated=!0),c instanceof B1&&!c.fixedScale&&h!==void 0&&c.scale!==h&&(c.scale=h,r.invalidated=!0),c}};Du.toolName="SplineROI",Du.SplineTypes=Ml,Du.Actions=Ip,Du.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;if(r.lengthi,this._areEqual=typeof n=="function"?n:(i,o)=>i===o}push(e){const r=this._getBucketIndex(e),n=this._buckets[r],i={value:e,next:n};this._buckets[r]=i,this._size++}pop(){if(this._size===0)throw new Error("Cannot pop because the queue is empty.");for(;this._buckets[this._currentBucketIndex]===null;)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;const e=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=e.next,this._size--,e.value}remove(e){if(!e)return!1;const r=this._getBucketIndex(e),n=this._buckets[r];let i=n,o;for(;i!==null&&!this._areEqual(e,i.value);)o=i,i=i.next;return i===null?!1:(i===n?this._buckets[r]=i.next:o.next=i.next,this._size--,!0)}isEmpty(){return this._size===0}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const r=new Array(e);return r.fill(null),r}}const B3=4294967295,ITe=2/(3*Math.PI);class b5{constructor(e,r,n){this._getPointIndex=(o,a)=>{const{width:s}=this;return o*s+a},this._getPointCoordinate=o=>{const a=o%this.width,s=Math.floor(o/this.width);return[a,s]},this._getPointCost=o=>Math.round(this.searchGranularity*this.costs[o]);const i=e.length;this.searchGranularityBits=8,this.searchGranularity=1<.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(r-2,0)),i}_computeGradientX(){const{width:e,height:r}=this,n=new Float32Array(e*r);let i=0;for(let o=0;o=i||l<0||l>=o)return 1;if(a<0||s<0||a>=i||s>=o)return 0;const f=n(l,c);let u=this.gradMagnitude[f];(a===c||s===l)&&(u*=Math.SQRT1_2);const d=this.laplace[f],h=this._getGradientDirection(a,s,c,l);return .43*u+.43*d+.11*h}_getNeighborPoints(e){const{width:r,height:n}=this,i=[],o=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),s=Math.min(e[0]+1,r-1),c=Math.min(e[1]+1,n-1);for(let l=a;l<=c;l++)for(let f=o;f<=s;f++)(f!==e[0]||l!==e[1])&&i.push([f,l]);return i}static createInstanceFromRawPixelData(e,r,n,i){const o=e.length,a=new Float32Array(o),{lower:s,upper:c}=i,l=c-s;for(let f=0,u=e.length;fthis.pointArray[e])}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(e){this.pointArray.splice(this.pointArray.length-e,e)}addPoints(e){this.pointArray=this.pointArray.concat(e)}prependPath(e){const r=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let i=0;ithis._controlPointIndexes.push(r))}}const OTe=10**2,cb=class cb extends L1{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextLines:MTe,calculateStats:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:Ki.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{cancelInProgress:{method:"cancelInProgress",bindings:[{key:"Escape"}]}}}}){super(e,r),this.isHandleOutsideImage=!1,this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,l=a*a,f=i.data.contour.polyline.map(d=>c.worldToCanvas(d));let u=f[f.length-1];for(let d=0;d{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1};const c=_e(a),{renderingEngine:l}=c;this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:g}=c.handles;f=g.findIndex(p=>p===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=(n,i=!1)=>{const o=n.detail,{element:a}=o,{annotation:s,viewportIdsToRender:c,newAnnotation:l,contourHoleProcessingEnabled:f}=this.editData,{data:u}=s;this.doneEditMemo(),u.handles.activeHandleIndex=null,this._deactivateModify(a),this._deactivateDraw(a),Jt(a);const d=_e(a);if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage||i){mn(s.annotationUID),this.clearEditData(),Be(c);return}Be(c);const h=l?Qt.Completed:Qt.HandlesUpdated;this.triggerChangeEvent(s,d,h,f),this.clearEditData()},this.triggerChangeEvent=(n,i,o=Qt.StatsUpdated,a=!1)=>{o===Qt.Completed?Dw(n,a):cn(n,i.viewport.element,o)},this._mouseDownCallback=n=>{const i=n.type===k.MOUSE_DOUBLE_CLICK,{annotation:o,viewportIdsToRender:a,worldToSlice:s,sliceToWorld:c,newAnnotation:l}=this.editData;if(this.editData.closed)return;const f=n.detail,{element:u}=f,{currentPoints:d}=f,{canvas:h,world:g}=d;let p=g;const v=_e(u),{viewport:y,renderingEngine:m}=v,w=this.editData.currentPath.getControlPoints();let x=w.length>=2&&i;if(this.doneEditMemo(),this.createMemo(u,o,{newAnnotation:l&&w.length===1}),w.length>=2){const T={index:-1,distSquared:1/0};for(let _=0,E=w.length;_{const{element:i,currentPoints:o}=n.detail,{world:a,canvas:s}=o,{renderingEngine:c}=_e(i),l=At(i,this.getToolName());this.editData.lastCanvasPoint=s;const{width:f,height:u}=this.scissors,{worldToSlice:d}=this.editData,h=d(a);if(h[0]<0||h[1]<0||h[0]>=f||h[1]>=u)return;const g=this.scissors.findPathToPoint(h),p=new Dl;p.addPoints(g),p.prependPath(this.editData.confirmedPath),this.editData.currentPath=p,Be(l),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,movingTextBox:c,handleIndex:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(c){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(l===void 0)console.warn("Drag annotation not implemented");else{const{currentPoints:g}=i,p=g.world;this.editHandle(p,o,a,l)}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData;return a&&mn(i.annotationUID),Be(o),this.doneEditMemo(),this.scissors=null,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._calculateCachedStats=(n,i)=>{if(!this.configuration.calculateStats)return;const o=n.data;if(!o.contour.closed)return;const a=_e(i),{viewport:s,renderingEngine:c}=a,{cachedStats:l}=o,{polyline:f}=o.contour,u=Object.keys(l);for(let h=0;hs.worldToCanvas(I)),m=y[0],w=s.canvasToWorld(m),x=s.canvasToWorld([m[0]+1,m[1]]),C=s.canvasToWorld([m[0],m[1]+1]),S=Qi(w,x),T=Qi(w,C),{imageData:_}=p,{scale:E,areaUnit:b}=Ia(p,()=>{const{maxX:I,maxY:P,minX:O,minY:A}=uf(y),V=s.canvasToWorld([O,A]),G=zr(_,V),R=s.canvasToWorld([I,P]),N=zr(_,R);return[G,N]});let D=_m(y)/E/E;D*=S*T,l[g]={Modality:v.Modality,area:D,areaUnit:b}}const d=n.invalidated;return n.invalidated=!1,d&&this.triggerAnnotationModified(n,a,Qt.StatsUpdated),l},this._renderStats=(n,i,o,a)=>{const s=n.data,c=this.getTargetId(i);if(!s.contour.closed||!a.visibility)return;const l=this.configuration.getTextLines(s,c);if(!l||l.length===0)return;const f=s.handles.points.map(m=>i.worldToCanvas(m));if(!s.handles.textBox.hasMoved){const m=Oa(f);s.handles.textBox.worldPosition=i.canvasToWorld(m)}const u=i.worldToCanvas(s.handles.textBox.worldPosition),h=ho(o,n.annotationUID??"","textBox",l,u,f,{},a),{x:g,y:p,width:v,height:y}=h;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([g,p]),topRight:i.canvasToWorld([g+v,p]),bottomLeft:i.canvasToWorld([g,p+y]),bottomRight:i.canvasToWorld([g+v,p+y])}},this.triggerAnnotationModified=(n,i,o=Qt.StatsUpdated)=>{const{viewportId:a,renderingEngineId:s}=i,c=k.ANNOTATION_MODIFIED;ut(et,c,{annotation:n,viewportId:a,renderingEngineId:s,changeType:o})},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}setupBaseEditData(e,r,n,i,o){var T,_;const a=_e(r),{viewport:s}=a;this.isDrawing=!0;const c=s.getImageData(),{imageData:l}=c;let f,u,d,h,g;if(!(s instanceof ur))d=c.dimensions[0],h=c.dimensions[1],f=E=>{const b=zr(l,E);return[b[0],b[1]]},u=E=>Sh(l,[E[0],E[1],0]),g=c.scalarData;else if(s instanceof ur){const E=hE(s),{sliceToIndexMatrix:b,indexToSliceMatrix:D}=E;f=I=>{const P=zr(l,I),O=Yt([0,0,0],P,D);return[O[0],O[1]]},u=I=>{const P=Yt([0,0,0],[I[0],I[1],0],b);return Sh(l,P)},g=E.scalarData,d=E.width,h=E.height}else throw new Error("Viewport not supported");g=SV(g,d,h);const{voiRange:p}=s.getProperties(),v=f(e);this.scissors=b5.createInstanceFromRawPixelData(g,d,h,p),i&&(this.scissorsNext=b5.createInstanceFromRawPixelData(g,d,h,p),this.scissorsNext.startSearch(f(i))),this.scissors.startSearch(v);const y=!i,m=new Dl,w=new Dl,x=y?void 0:new Dl;m.addPoint(v),m.addControlPoint(v);const C=At(r,this.getToolName()),S=s.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:C,newAnnotation:y,hasMoved:!1,lastCanvasPoint:S,confirmedPath:m,currentPath:w,confirmedPathNext:x,closed:!1,handleIndex:((T=this.editData)==null?void 0:T.handleIndex)??((_=n.handles)==null?void 0:_.activeHandleIndex),worldToSlice:f,sliceToWorld:u,contourHoleProcessingEnabled:o}}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n,a=this.createAnnotation(e),s=Qh(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(o,i,a,void 0,s),this.addAnnotation(a,i),this._activateDraw(i),e.preventDefault(),Be(this.editData.viewportIdsToRender),a}clearEditData(){this.editData=null,this.scissors=null,this.scissorsNext=null,this.isDrawing=!1}editHandle(e,r,n,i){var w;const{data:o}=n,{points:a}=o.handles,{length:s}=a,c=a[(i-1+s)%s],l=a[(i+1)%s];if(!((w=this.editData)!=null&&w.confirmedPathNext)){this.setupBaseEditData(c,r,n,l);const{polyline:x}=o.contour,C=new Dl,S=new Dl,{worldToSlice:T}=this.editData,_=YS(n,i-1),E=YS(n,i+1);if(E===-1||_===-1)throw new Error(`Can't find handle index ${E===-1&&l} ${_===-1&&c}`);i===0?S.addPoints(x.slice(E+1,_).map(T)):(C.addPoints(x.slice(0,_+1).map(T)),S.addPoints(x.slice(E,x.length).map(T))),this.editData.confirmedPath=C,this.editData.confirmedPathNext=S}const{editData:f,scissors:u}=this,{worldToSlice:d,sliceToWorld:h}=f,{activeHandleIndex:g}=o.handles;if(g==null)o.handles.activeHandleIndex=i;else if(g!==i)throw new Error(`Trying to edit a different handle than the one currently being edited ${i}!==${o.handles.activeHandleIndex}`);const p=d(e);if(p[0]<0||p[0]>=u.width||p[1]<0||p[1]>=u.height)return;a[i]=h(p);const v=u.findPathToPoint(p),y=this.scissorsNext.findPathToPoint(p),m=new Dl;m.prependPath(f.confirmedPath),i!==0&&m.addPoints(v),m.addPoints(y.reverse()),m.appendPath(f.confirmedPathNext),i===0&&m.addPoints(v),f.currentPath=m,n.invalidated=!0,f.hasMoved=!0,f.closed=!0}renderAnnotation(e,r){var n;return this.updateAnnotation((n=this.editData)==null?void 0:n.currentPath),super.renderAnnotation(e,r)}isContourSegmentationTool(){return!1}createAnnotation(e){const r=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return Ui(r,{data:{handles:{points:[[...n]]}}})}cancelInProgress(e,r,n){if(!this.editData){this.undo();return}this._endCallback(n,!0)}renderAnnotationInstance(e){var m,w,x,C;const{annotation:r,enabledElement:n,svgDrawingHelper:i,annotationStyle:o,targetId:a}=e,{viewport:s}=n,{element:c}=s,{worldToCanvas:l}=s,{annotationUID:f,data:u,highlighted:d}=r,{handles:h}=u,g=(m=this.editData)==null?void 0:m.newAnnotation,{lineWidth:p,lineDash:v,color:y}=o;if(d||g&&r.annotationUID===((x=(w=this.editData)==null?void 0:w.annotation)==null?void 0:x.annotationUID)){const S="0",T=h.points.map(l);or(i,f,S,T,{color:y,lineDash:v,lineWidth:p})}return super.renderAnnotationInstance(e),!u.cachedStats[a]||((C=u.cachedStats[a])==null?void 0:C.areaUnit)===null?(u.cachedStats[a]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(r,c)):r.invalidated&&this._throttledCalculateCachedStats(r,c),this._renderStats(r,s,i,o.textbox),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:r,sliceToWorld:n,worldToSlice:i,closed:o,newAnnotation:a}=this.editData;let{pointArray:s}=e;s.length>1&&(s=[...s,s[0]]);const c=a&&o?ra.Clockwise:void 0;this.updateContourPolyline(r,{points:s,closed:o,targetWindingDirection:c},{canvasToWorld:n,worldToCanvas:i})}};cb.toolName="LivewireContour";let D5=cb;function MTe(t,e){const r=t.cachedStats[e],{area:n,areaUnit:i}=r,o=[];if(n){const a=`Area: ${un(n)} ${i}`;o.push(a)}return o}const lb=class lb extends D5{updateInterpolatedAnnotation(e,r){this.editData||!e.invalidated||!e.data.handles.interpolationSources||(e.data.contour.originalPolyline=e.data.contour.polyline,queueMicrotask(()=>{if(!e.data.handles.interpolationSources)return;const{points:n}=e.data.handles,{element:i}=r.viewport;this.setupBaseEditData(n[0],i,e);const{length:o}=n,{scissors:a}=this,{nearestEdge:s,repeatInterpolation:c}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:f}=this.editData,u=[];if(s){let h=l(n[n.length-1]);n.forEach((g,p)=>{const v=l(g);h=v,u.push(v),a.startSearch(h),a.findPathToPoint(v),a.findPathToPoint(l(n[(p+3)%n.length]));const y=a.findMinNearby(v,s);Zt(v,y)||(u[p]=y,h=y,n[p]=f(y))})}const d=new Dl;for(let h=0;h{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),{arrowFirst:p}=this.configuration,v=l.getFrameOfReferenceUID(),y={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:v,referencedImageId:g,...l.getViewReference({points:[s]})},data:{text:"",handles:{points:[[...s],[...s]],activeHandleIndex:null,arrowFirst:p,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};ln(y,a);const m=At(a,this.getToolName());return this.editData={annotation:y,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(m),y},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l,movingTextBox:f}=this.editData,{data:u}=a;c&&!l||(u.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),c?this.configuration.getTextCallback(d=>{if(!d){mn(a.annotationUID),Be(s),this.editData=null,this.isDrawing=!1;return}a.data.text=d,cn(a,o,Qt.HandlesUpdated),Un(a),this.createMemo(o,a,{newAnnotation:!!this.memo}),LW(a,o,d),Be(s)}):f||cn(a,o,Qt.HandlesUpdated),this.doneEditMemo(),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=d.world;u.handles.points[c]=[...h],a.invalidated=!0}this.editData.hasMoved=!0,Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.touchTapCallback=n=>{n.detail.taps==2&&this.doubleClickCallback(n)},this.doubleClickCallback=n=>{const i=n.detail,{element:o}=i;let a=hn(this.getToolName(),o);if(a=this.filterInteractableAnnotationsForElement(o,a),!(a!=null&&a.length))return;const s=a.find(l=>this.isPointNearTool(o,l,i.currentPoints.canvas,6));if(!s)return;const c=s;this.configuration.changeTextCallback(s,n.detail,this._doneChangingTextCallback.bind(this,o,c)),this.editData=null,this.isDrawing=!1,n.stopImmediatePropagation(),n.preventDefault()},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(G));let T;if(!si(d)&&!this.editData&&y!==null&&(T=[S[y]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(d))continue;T&&or(i,d,"0",S,{color:m,lineWidth:w});const _="1";if(this.configuration.arrowFirst?u5(i,d,_,S[1],S[0],{color:m,width:w,lineDash:x,viaMarker:this.configuration.arrowHeadStyle!=="legacy",markerSize:C}):u5(i,d,_,S[0],S[1],{color:m,width:w,lineDash:x,viaMarker:this.configuration.arrowHeadStyle!=="legacy",markerSize:C}),o=!0,!p)continue;const E=this.getLinkedTextBoxStyle(l,u);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}if(!h.handles.textBox.hasMoved){const G=S[1];h.handles.textBox.worldPosition=a.canvasToWorld(G)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),I=ho(i,d,"1",[p],b,S,{},E),{x:P,y:O,width:A,height:V}=I;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,O]),topRight:a.canvasToWorld([P+A,O]),bottomLeft:a.canvasToWorld([P,O+V]),bottomRight:a.canvasToWorld([P+A,O+V])}}return o}}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_doneChangingTextCallback(e,r,n){r.data.text=n,_e(e);const i=At(e,this.getToolName());Be(i),cn(r,e)}_isInsideVolume(e,r,n){return hr(e,n)&&hr(r,n)}};V0.toolName="ArrowAnnotate",V0.hydrate=(e,r,n,i)=>{const o=Wn(e);if(!o)return;const{FrameOfReferenceUID:a,referencedImageId:s,viewPlaneNormal:c,instance:l,viewport:f}=V0.hydrateBase(V0,o,r,i),{toolInstance:u,...d}=i||{},h={annotationUID:(i==null?void 0:i.annotationUID)||Pn(),data:{text:n||"",handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:c,FrameOfReferenceUID:a,referencedImageId:s,...d}};ln(h,f.element),Be([f.id])};let pf=V0;function PTe(t){return t(prompt("Enter your annotation:"))}function RTe(t,e,r){return r(prompt("Enter your annotation:"))}const F0=class F0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,showAngleArc:!1,arcOffset:5,preventHandleOutsideImage:!1,getTextLines:LTe}}){super(e,r),this.addNewAnnotation=n=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u,d]=l.handles.points,h=c.worldToCanvas(f),g=c.worldToCanvas(u),p={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};if(Ii([p.start.x,p.start.y],[p.end.x,p.end.y],[o[0],o[1]])<=a)return!0;if(!d)return!1;const y=c.worldToCanvas(d),m={start:{x:g[0],y:g[1]},end:{x:y[0],y:y[1]}};return Ii([m.start.x,m.start.y],[m.end.x,m.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.angleStartedNotYetCompleted&&f.handles.points.length===2){this.editData.handleIndex=2;return}this.angleStartedNotYetCompleted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else{const{currentPoints:g}=i,p=g.world;u.handles.points[c]=[...p],a.invalidated=!0}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,this.angleStartedNotYetCompleted=!1,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{var d;let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let h=0;ha.worldToCanvas(N));!v.cachedStats[l]||v.cachedStats[l].angle==null?(v.cachedStats[l]={angle:null},this._calculateCachedStats(g,f,n)):g.invalidated&&this._throttledCalculateCachedStats(g,f,n);let _;if(!si(g.annotationUID)&&!this.editData&&m!==null&&(_=[T[m]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(p))continue;_&&or(i,p,"0",T,{color:w,lineDash:C,lineWidth:x});let E="1";if(Sn(i,p,E,T[0],T[1],{color:w,width:x,lineDash:C}),o=!0,T.length!==3)return o;if(E="2",Sn(i,p,E,T[1],T[2],{color:w,width:x,lineDash:C}),this.configuration.showAngleArc){const N=T[1],F=this.configuration.arcOffset,j=Math.min(Ii([N[0],N[1]],[T[0][0],T[0][1]],[T[2][0],T[2][1]]),Ii([N[0],N[1]],[T[2][0],T[2][1]],[T[0][0],T[0][1]]))/F,te=[];let ie=Math.atan2(T[0][1]-N[1],T[0][0]-N[0]),he=Math.atan2(T[2][1]-N[1],T[2][0]-N[0]);if(heMath.PI){const Me=ie;ie=he,he=Me+2*Math.PI}const ve=32;for(let Me=0;Me<=ve;Me++){const Ue=ie+Me/ve*(he-ie);te.push([N[0]+j*Math.cos(Ue),N[1]+j*Math.sin(Ue)])}Hl(i,p,"3",te,{color:w,width:x,lineDash:S})}if(!((d=v.cachedStats[l])!=null&&d.angle))continue;const b=this.getLinkedTextBoxStyle(u,g);if(!b.visibility){v.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const D=this.configuration.getTextLines(v,l);if(!v.handles.textBox.hasMoved){const N=T[1];v.handles.textBox.worldPosition=a.canvasToWorld(N)}const I=a.worldToCanvas(v.handles.textBox.worldPosition),O=ho(i,p,"1",D,I,T,{},b),{x:A,y:V,width:G,height:R}=O;v.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([A,V]),topRight:a.canvasToWorld([A+G,V]),bottomLeft:a.canvasToWorld([A,V+R]),bottomRight:a.canvasToWorld([A+G,V+R])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport;if(i.handles.points.length!==3)return;const a=i.handles.points[0],s=i.handles.points[1],c=i.handles.points[2],{cachedStats:l}=i,f=Object.keys(l);for(let d=0;dzr(v,y)).some(y=>!hr(y,p)),l[h]={angle:isNaN(g)?"Incomplete Angle":g}}const u=e.invalidated;return e.invalidated=!1,u&&cn(e,o,Qt.StatsUpdated),l}};F0.toolName="Angle",F0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=F0.hydrateBase(F0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let gT=F0;function LTe(t,e){const r=t.cachedStats[e],{angle:n}=r;return n===void 0?void 0:isNaN(n)?[`${n}`]:[`${un(n)} °`]}const ATe=(...t)=>{const e=t[0].length===2?[0,0]:[0,0,0],r=t.length;for(const n of t)e[0]+=n[0]/r,e[1]+=n[1]/r,e.length===3&&(e[2]+=n[2]/r);return e},bl=ATe,ub=class ub extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:NTe,showArcLines:!1}}){super(e,r),this.addNewAnnotation=n=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{distanceToPoint:f,distanceToPoint2:u}=this.distanceToLines({viewport:c,points:l.handles.points,canvasCoords:o,proximity:a});return f<=a||u<=a},this.toolSelectedCallback=(n,i,o,a,s=6)=>{const c=n.detail,{element:l}=c;i.highlighted=!0;const f=At(l,this.getToolName()),u=_e(l),{renderingEngine:d,viewport:h}=u,{isNearFirstLine:g,isNearSecondLine:p}=this.distanceToLines({viewport:h,points:i.data.handles.points,canvasCoords:a,proximity:s});this.editData={annotation:i,viewportIdsToRender:f,movingTextBox:!1,isNearFirstLine:g,isNearSecondLine:p},this._activateModify(l),Gt(l),Be(f),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.doneEditMemo(),this.angleStartedNotYetCompleted&&f.handles.points.length<4){Jt(o),this.editData.handleIndex=f.handles.points.length;return}this.angleStartedNotYetCompleted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._mouseDownCallback=n=>{const{annotation:i,handleIndex:o}=this.editData,a=n.detail,{element:s,currentPoints:c}=a,l=c.world,{data:f}=i;if(o===1){f.handles.points[1]=l,this.editData.hasMoved=f.handles.points[1][0]!==f.handles.points[0][0]||f.handles.points[1][1]!==f.handles.points[0][0];return}if(o===3){f.handles.points[3]=l,this.editData.hasMoved=f.handles.points[3][0]!==f.handles.points[2][0]||f.handles.points[3][1]!==f.handles.points[2][0],this.angleStartedNotYetCompleted=!1;return}this.editData.hasMoved=!1,Gt(s),f.handles.points[2]=f.handles.points[3]=l,this.editData.handleIndex=f.handles.points.length-1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,isNearFirstLine:f,isNearSecondLine:u,newAnnotation:d}=this.editData;this.createMemo(o,a,{newAnnotation:d});const{data:h}=a;if(l){const{deltaPoints:v}=i,y=v.world,{textBox:m}=h.handles,{worldPosition:w}=m;w[0]+=y[0],w[1]+=y[1],w[2]+=y[2],m.hasMoved=!0}else if(c===void 0&&(f||u)){const{deltaPoints:v}=i,y=v.world,m=h.handles.points;f?[m[0],m[1]].forEach(x=>{x[0]+=y[0],x[1]+=y[1],x[2]+=y[2]}):u&&[m[2],m[3]].forEach(x=>{x[0]+=y[0],x[1]+=y[1],x[2]+=y[2]}),a.invalidated=!0}else{const{currentPoints:v}=i,y=v.world;h.handles.points[c]=[...y],a.invalidated=!0}this.editData.hasMoved=!0;const g=_e(o),{renderingEngine:p}=g;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;s.handles.points.length<4&&mn(i.annotationUID),i.highlighted=!1,s.handles.activeHandleIndex=null;const c=_e(n),{renderingEngine:l}=c;return Be(o),a&&Un(i),this.editData=null,this.angleStartedNotYetCompleted=!1,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_START,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_START,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_START,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_START,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{var d;let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let h=0;ha.worldToCanvas(Ue));!v.cachedStats[l]||v.cachedStats[l].angle==null?(v.cachedStats[l]={angle:null,arc1Angle:null,arc2Angle:null,points:{world:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null},canvas:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null}}},this._calculateCachedStats(g,f,n)):g.invalidated&&this._throttledCalculateCachedStats(g,f,n);let T;if(!si(p)&&!this.editData&&m!==null&&(T=[S[m]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(p))continue;T&&or(i,p,"0",S,{color:w,lineDash:C,lineWidth:x});const _=[S[0],S[1]],E=[S[2],S[3]];let b="line1";if(Sn(i,p,b,_[0],_[1],{color:w,width:x,lineDash:C}),o=!0,S.length<4)return o;b="line2",Sn(i,p,b,E[0],E[1],{color:w,width:x,lineDash:C}),b="linkLine";const D=bl(_[0],_[1]),I=bl(E[0],E[1]);Sn(i,p,b,D,I,{color:w,lineWidth:"1",lineDash:"1,4"});const{arc1Start:P,arc1End:O,arc2End:A,arc2Start:V}=v.cachedStats[l].points.canvas,{arc1Angle:G,arc2Angle:R}=v.cachedStats[l];if(this.configuration.showArcLines&&(b="arc1",Sn(i,p,b,P,O,{color:w,lineWidth:"1"}),b="arc2",Sn(i,p,b,V,A,{color:w,lineWidth:"1"})),!((d=v.cachedStats[l])!=null&&d.angle))continue;const N=this.getLinkedTextBoxStyle(u,g);if(!N.visibility){v.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const F=this.configuration.getTextLines(v,l);if(!v.handles.textBox.hasMoved){const Ue=Oa(S);v.handles.textBox.worldPosition=a.canvasToWorld(Ue)}const j=a.worldToCanvas(v.handles.textBox.worldPosition),ie=ho(i,p,"cobbAngleText",F,j,S,{},N),{x:he,y:ue,width:ve,height:Me}=ie;if(v.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([he,ue]),topRight:a.canvasToWorld([he+ve,ue]),bottomLeft:a.canvasToWorld([he,ue+Me]),bottomRight:a.canvasToWorld([he+ve,ue+Me])},this.configuration.showArcLines){const Ue="arcAngle1",be=[`${G.toFixed(2)} °`],B=bl(P,O);ff(i,p,Ue,be,B,{...N,padding:3});const M="arcAngle2",$=[`${R.toFixed(2)} °`],W=bl(V,A);ff(i,p,M,$,W,{...N,padding:3})}}return o},this.distanceToLines=({viewport:n,points:i,canvasCoords:o,proximity:a})=>{const[s,c,l,f]=i,u=n.worldToCanvas(s),d=n.worldToCanvas(c),h=n.worldToCanvas(l),g=n.worldToCanvas(f),p={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}},y=Ii([p.start.x,p.start.y],[p.end.x,p.end.y],[o[0],o[1]]),m=Ii([v.start.x,v.start.y],[v.end.x,v.end.y],[o[0],o[1]]);let w=!1,x=!1;return y<=a?w=!0:m<=a&&(x=!0),{distanceToPoint:y,distanceToPoint2:m,isNearFirstLine:w,isNearSecondLine:x}},this.getArcsStartEndPoints=({firstLine:n,secondLine:i,mid1:o,mid2:a})=>{const s=[o,a],c=oh(n,s),l=oh(i,s),f=c>90?1:0,u=l>90?0:1,d=bl(s[0],s[1]),h=Math.sqrt((s[1][0]-s[0][0])**2+(s[1][1]-s[0][1])**2),g=.1,p=bl(n[0],n[1]),v=bl(i[0],i[1]),y=[n[f][0]-p[0],n[f][1]-p[1]],m=Math.sqrt(y[0]**2+y[1]**2),w=[y[0]/m,y[1]/m],x=[p[0]+w[0]*h*g,p[1]+w[1]*h*g],C=[d[0]-o[0],d[1]-o[1]],S=Math.sqrt(C[0]**2+C[1]**2),T=[C[0]/S,C[1]/S],_=[o[0]+T[0]*h*g,o[1]+T[1]*h*g],E=[i[u][0]-v[0],i[u][1]-v[1]],b=Math.sqrt(E[0]**2+E[1]**2),D=[E[0]/b,E[1]/b],I=[v[0]+D[0]*h*g,v[1]+D[1]*h*g],P=[d[0]-a[0],d[1]-a[1]],O=Math.sqrt(P[0]**2+P[1]**2),A=[P[0]/O,P[1]/O],V=[a[0]+A[0]*h*g,a[1]+A[1]*h*g];return{arc1Start:x,arc1End:_,arc2Start:I,arc2End:V,arc1Angle:c>90?180-c:c,arc2Angle:l>90?180-l:l}},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,r,n,i="mouse"){const o=e.detail,{element:a}=o,{data:s}=r;r.highlighted=!0;let c=!1,l;n.worldPosition?c=!0:l=s.handles.points.findIndex(u=>u===n);const f=At(a,this.getToolName());this.editData={annotation:r,viewportIdsToRender:f,handleIndex:l,movingTextBox:c},this._activateModify(a),Gt(a),Be(f),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data;if(i.handles.points.length!==4)return;const o=[null,null],a=[null,null];let s=Number.MAX_VALUE;for(let _=0;_<2;_+=1)for(let E=2;E<4;E+=1){const b=Qi(i.handles.points[_],i.handles.points[E]);bc.worldToCanvas(_)),u=[f[0],f[1]],d=[f[2],f[3]],h=bl(u[0],u[1]),g=bl(d[0],d[1]),{arc1Start:p,arc1End:v,arc2End:y,arc2Start:m,arc1Angle:w,arc2Angle:x}=this.getArcsStartEndPoints({firstLine:u,secondLine:d,mid1:h,mid2:g}),{cachedStats:C}=i,S=Object.keys(C);for(let _=0;_{if(this.startedDrawing)return;this.startedDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;if(!(l instanceof lr))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.startedDrawing&&f.handles.points.length===1){this.editData.handleIndex=1;return}this.startedDrawing=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l}=this.editData,{data:f}=a;if(l){const{deltaPoints:h}=i,g=h.world,{textBox:p}=f.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(c===void 0){const{deltaPoints:h}=i,g=h.world;f.handles.points.forEach(v=>{v[0]+=g[0],v[1]+=g[1],v[2]+=g[2]}),a.invalidated=!0}else{const{currentPoints:h}=i,g=h.world;f.handles.points[c]=[...g],a.invalidated=!0}this.editData.hasMoved=!0;const u=_e(o),{renderingEngine:d}=u;Be(s)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,this.startedDrawing=!1,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(O));if(!p.cachedStats[l]||p.cachedStats[l].xValues==null?(p.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let w="0";if(l5(i,g,w,m[0],{color:y},0),o=!0,m.length!==2)return o;if(w="1",l5(i,g,w,m[1],{color:y},1),p.cachedStats[l].isUnitless){const O=`${g}-line-1`;Sn(i,g,"1",m[0],m[1],{color:y,width:1,shadow:this.configuration.shadow},O)}else{const O=m[0],A=m[1],V=A[1]-O[1],G=A[0]-O[0],R=p.cachedStats[l].isHorizontal;let N=[0,0];R?N=[O[0]+G,O[1]]:N=[O[0],O[1]+V];let F=`${g}-line-1`,j="1";Sn(i,g,j,m[0],N,{color:y,width:1,shadow:this.configuration.shadow},F),F=`${g}-line-2`,j="2",Sn(i,g,j,m[1],N,{color:y,width:1,lineDash:[1,1],shadow:this.configuration.shadow},F)}const C=this.getLinkedTextBoxStyle(u,h);if(!C.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const S=this.configuration.getTextLines(p,l,this.configuration);if(!p.handles.textBox.hasMoved){const O=m[1];p.handles.textBox.worldPosition=a.canvasToWorld(O)}const T=a.worldToCanvas(p.handles.textBox.worldPosition),E=ho(i,g,"1",S,T,m,{},C),{x:b,y:D,width:I,height:P}=E;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([b,D]),topRight:a.canvasToWorld([b+I,D]),bottomLeft:a.canvasToWorld([b,D+P]),bottomRight:a.canvasToWorld([b+I,D+P])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,r,n,i){}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;const s=At(o,this.getToolName());let c;n.worldPosition||(c=a.handles.points.findIndex(u=>u===n)),this.editData={handleIndex:c,annotation:r,viewportIdsToRender:s},this._activateModify(o),Gt(o);const l=_e(o),{renderingEngine:f}=l;Be(s),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport;if(i.handles.points.length!==2)return;const{cachedStats:a}=i,s=Object.keys(a);for(let l=0;lMath.abs(I),C=[y[0],w[0]],S=[y[1],w[1]],T=[m[0],m[1]]}a[f]={xValues:C,yValues:S,isHorizontal:_,units:T,isUnitless:E}}const c=e.invalidated;return e.invalidated=!1,c&&cn(e,o,Qt.StatsUpdated),a}};fb.toolName="UltrasoundDirectionalTool";let mT=fb;function kTe(t,e,r){const n=t.cachedStats[e],{xValues:i,yValues:o,units:a,isUnitless:s,isHorizontal:c}=n;if(s)return[`${un(i[0])} px`];if(r.displayBothAxesDistances){const l=Math.abs(i[1]-i[0]),f=Math.abs(o[1]-o[0]);return[`${un(l)} ${a[0]}`,`${un(f)} ${a[1]}`]}if(c){const l=Math.abs(i[1]-i[0]);return[`${un(l)} ${a[0]}`]}else{const l=Math.abs(o[1]-o[0]);return[`${un(l)} ${a[1]}`]}}function VTe(t){return(t%360+360)%360}function vT(t,e){const r=e[0]-t[0],n=e[1]-t[1],i=Math.atan2(n,r)*(180/Math.PI);return VTe(i)}function I5(t,e){const r=vT(t,e[0]),n=vT(t,e[1]);return rr[0]-n[0]);const e=[t[0].slice()];for(let r=1;r[Math.max(f,r),Math.min(u,n)]).filter(([f,u])=>u>f);if(i.length===0)return[[r,n]];i.sort((f,u)=>f[0]-u[0]);const o=[];let[a,s]=i[0];for(let f=1;fl&&c.push([l,f]),l=Math.max(l,u);return lI5(t,f)),i=yT(n),o=i.reduce((f,[u,d])=>f+(d-u),0);if(o===0)return 0;const a=[];for(const f of r){const u=I5(t,f),d=QW(u,i);a.push(...d)}const l=yT(a).reduce((f,[u,d])=>f+(d-u),0)/o*100;return Math.min(100,Math.max(0,l))}const{transformIndexToWorld:w7}=Rn,xr=class xr extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:UTe,center:null,innerRadius:null,outerRadius:null,startAngle:null,endAngle:null,bLineColor:"rgb(60, 255, 60)",pleuraColor:"rgb(0, 4, 255)",drawDepthGuide:!0,depth_ratio:.5,depthGuideColor:"rgb(0, 255, 255)",depthGuideThickness:4,depthGuideDashLength:20,depthGuideDashGap:16,depthGuideOpacity:.2,fanOpacity:.1,showFanAnnotations:!0,updatePercentageCallback:null,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,r),this.pleuraAnnotations=[],this.bLineAnnotations=[],this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:f,viewUp:u,position:d}=l.getCamera(),h=this.getReferencedImageId(l,s,f,u),g={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:h,viewUp:u,cameraPosition:d},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null},annotationType:this.getActiveAnnotationType(),label:""}};ln(g,a);const p=At(a,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(p),g},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{viewport:a}=_e(o)||{};if(!a)return;const{annotation:s,viewportIdsToRender:c,handleIndex:l,movingTextBox:f,newAnnotation:u}=this.editData,{data:d}=s;if(this.createMemo(o,s,{newAnnotation:u}),f){const{deltaPoints:h}=i,g=h.world,{textBox:p}=d.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(l===void 0){const{deltaPoints:h}=i,g=h.world,p=d.handles.points;p.every(y=>{const m=[y[0]+g[0],y[1]+g[1],y[2]+g[2]];return this.isInsideFanShape(a,m)})&&(p.forEach(y=>{y[0]+=g[0],y[1]+=g[1],y[2]+=g[2]}),s.invalidated=!0)}else{const{currentPoints:h}=i,g=h.world;this.isInsideFanShape(a,g)&&(d.handles.points[l]=[...g],s.invalidated=!0)}this.editData.hasMoved=!0,Be(c),s.invalidated&&cn(s,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;if(!this.getFanShapeGeometryParameters(a))return;const{imageData:c}=a.getImageData()||{};if(!c)return o;this.configuration.drawDepthGuide&&this.drawDepthGuide(i,a);let l=hn(this.getToolName(),s);if(!(l!=null&&l.length)||(l=this.filterInteractableAnnotationsForElement(s,l),!(l!=null&&l.length)))return o;this.getTargetId(a),a.getRenderingEngine();const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=a.worldToCanvas(w7(c,this.configuration.center)),d=this.getIndexToCanvasRatio(a),h=this.configuration.innerRadius*d,g=this.configuration.outerRadius*d,p=a.getCurrentImageId(),v=l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&T.metadata.referencedImageId===p).map(T=>{const _=T.data.handles.points.map(b=>a.worldToCanvas(b));return I5(u,_)}),y=yT(v),m=[],w=[],x=T=>{const{annotationUID:_,data:E}=T,{points:b,activeHandleIndex:D}=E.handles;f.annotationUID=_;const{color:I,lineWidth:P,lineDash:O,shadow:A}=this.getAnnotationStyle({annotation:T,styleSpecifier:f}),V=b.map(F=>a.worldToCanvas(F));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let G;if(!Kr(_))return;!si(_)&&!this.editData&&D!==null&&(G=[V[D]]),G&&or(i,_,"0",V,{color:this.getColorForLineType(T),fill:this.getColorForLineType(T),lineDash:O,lineWidth:P});const R=`${_}-line`;if(Sn(i,_,"1",V[0],V[1],{color:this.getColorForLineType(T),width:P,lineDash:O,shadow:A},R),this.configuration.showFanAnnotations){const F=I5(u,V);let j=0;T.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE?y7(w,F).forEach(ie=>{QW(ie,y).forEach(ue=>{j++;const ve=j,Me=`${_}-fan-${ve}`,Ue=`2-${ve}`;$S(i,_,Ue,u,h,g,ue[0],ue[1],{color:"transparent",fill:this.getColorForLineType(T),fillOpacity:this.configuration.fanOpacity,width:P,lineDash:O,shadow:A},Me,10),w.push(ue)})}):T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&y7(m,F).forEach((ie,he)=>{j++;const ue=j,ve=`${_}-fan-${ue}`,Me=`2-${ue}`;$S(i,_,Me,u,h,g,ie[0],ie[1],{color:"transparent",fill:this.getColorForLineType(T),fillOpacity:this.configuration.fanOpacity,width:P,lineDash:O,shadow:A},ve,5),m.push(ie)})}};return l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&T.metadata.referencedImageId===p).forEach(T=>{if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;x(T)}),l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE&&T.metadata.referencedImageId===p).forEach(T=>{if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;x(T)}),o=!0,this.configuration.updatePercentageCallback&&a&&this.configuration.updatePercentageCallback(this.calculateBLinePleuraPercentage(a)),o},this.activeAnnotationType=xr.USPleuraBLineAnnotationType.BLINE}static filterAnnotations(e,r=()=>!0){const n=hn(xr.toolName,e);return n!=null&&n.length?n.filter(o=>{const a=o.metadata.referencedImageId;return r(a)}):[]}static countAnnotations(e,r=()=>!0){const n=hn(xr.toolName,e),{viewport:i}=_e(e),o=i.getImageIds(),a=c=>{const l=o.findIndex(f=>f===c);return l===-1?0:l};if(!(n!=null&&n.length))return;const s=new Map;return n.forEach(c=>{const l=c.metadata.referencedImageId;if(!r(l))return;const{annotationType:f}=c.data;let u;s.has(l)?u=s.get(l):u={frame:a(l),bLine:0,pleura:0},f===xr.USPleuraBLineAnnotationType.PLEURA?u.pleura++:f===xr.USPleuraBLineAnnotationType.BLINE&&u.bLine++,s.set(l,u)}),s}static deleteAnnotations(e,r=()=>!1){const n=hn(xr.toolName,e);n!=null&&n.length&&n.forEach(i=>{r(i.metadata.referencedImageId)&&mn(i.annotationUID)})}setActiveAnnotationType(e){this.activeAnnotationType=e}getActiveAnnotationType(){return this.activeAnnotationType}deleteLastAnnotationType(e,r){let n;const i=hn(xr.toolName,e);if(r===xr.USPleuraBLineAnnotationType.PLEURA?n=i.filter(o=>o.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA):r===xr.USPleuraBLineAnnotationType.BLINE&&(n=i.filter(o=>o.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE)),(n==null?void 0:n.length)>0){const o=n.pop();mn(o.annotationUID)}}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(f=>f===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o),Be(l),e.preventDefault()}isInsideFanShape(e,r){if(!this.getFanShapeGeometryParameters(e))return!1;const{imageData:n}=e.getImageData()||{};if(n){const i=e.worldToCanvas(n.indexToWorld(this.configuration.center)),o=e.worldToCanvas(r),a=vT(i,o);return a>=this.configuration.startAngle&&a<=this.configuration.endAngle}}updateFanGeometryConfiguration(e){e&&(this.isFanShapeGeometryParametersValid(e)&&(this.configuration.center=[e.center[0],e.center[1],0]),this.configuration.innerRadius=e.innerRadius,this.configuration.outerRadius=e.outerRadius,this.configuration.startAngle=e.startAngle,this.configuration.endAngle=e.endAngle)}deriveFanGeometryFromViewport(e){const r=e.getCurrentImageId(),{fanGeometry:n}=k8(r)||{};n&&this.updateFanGeometryConfiguration(n)}isFanShapeGeometryParametersValid(e){return e||(e=this.configuration),(e==null?void 0:e.center)&&(e==null?void 0:e.innerRadius)>0&&(e==null?void 0:e.outerRadius)&&(e==null?void 0:e.startAngle)>0&&(e==null?void 0:e.startAngle)<360&&(e==null?void 0:e.endAngle)>0&&(e==null?void 0:e.endAngle)<360}getFanShapeGeometryParameters(e){if(this.isFanShapeGeometryParametersValid())return!0;if(!this.isFanShapeGeometryParametersValid()){const r=e.getCurrentImageId(),n=wt("ultrasoundFanShapeGeometry",r);this.updateFanGeometryConfiguration(n)}return this.isFanShapeGeometryParametersValid()||this.deriveFanGeometryFromViewport(e),this.isFanShapeGeometryParametersValid()}calculateBLinePleuraPercentage(e){if(!this.getFanShapeGeometryParameters(e))return;const{imageData:r}=e.getImageData()||{};if(!r)return;const{element:n}=e,i=e.worldToCanvas(r.indexToWorld(this.configuration.center)),o=e.getCurrentImageId(),a=hn(this.getToolName(),n)||[],s=a.filter(l=>l.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&l.metadata.referencedImageId===o).map(l=>l.data.handles.points.map(u=>e.worldToCanvas(u))),c=a.filter(l=>l.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE&&l.metadata.referencedImageId===o).map(l=>l.data.handles.points.map(u=>e.worldToCanvas(u)));return FTe(i,s,c)}getColorForLineType(e){const{annotationType:r}=e.data,{bLineColor:n,pleuraColor:i}=this.configuration;return r===xr.USPleuraBLineAnnotationType.BLINE?n:r===xr.USPleuraBLineAnnotationType.PLEURA?i:n}getIndexToCanvasRatio(e){const{imageData:r}=e.getImageData()||{},n=e.worldToCanvas(r.indexToWorld([1,0,0])),i=e.worldToCanvas(r.indexToWorld([2,0,0])),o=[i[0]-n[0],i[1]-n[1]];return Math.sqrt(o[0]*o[0]+o[1]*o[1])}drawDepthGuide(e,r){if(!this.getFanShapeGeometryParameters(r))return;const{imageData:n}=r.getImageData()||{};if(!n)return;const i=g=>g*180/Math.PI,o=g=>g*Math.PI/180,a=g=>r.worldToCanvas(w7(n,g)),s=this.configuration.innerRadius+this.configuration.depth_ratio*(this.configuration.outerRadius-this.configuration.innerRadius),c=this.configuration.startAngle,f=this.configuration.endAngle-c,u=o(f)*s;let d=Math.round(u/(this.configuration.depthGuideDashLength+this.configuration.depthGuideDashGap));d<=0&&(d=Math.max(15,Math.round(f/5)));const h=f/d;for(let g=0;g{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=xr.hydrateBase(xr,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let wT=xr;function UTe(t,e){return[""]}const Fp=class Fp extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:BTe,changeTextCallback:GTe,canvasPosition:[10,10],canvasSize:10,handleRadius:"6",seriesLevel:!1,isPoint:!1}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o),{viewport:c}=s,l=a.world,f=this.constructor.createAnnotationForViewport(c,{data:{handles:{points:[[...l]]},seriesLevel:this.configuration.seriesLevel,isPoint:this.configuration.isPoint}});ln(f,o);const u=At(o,this.getToolName());return n.preventDefault(),Be(u),this.configuration.getTextCallback(d=>{if(!d){mn(f.annotationUID),Be(u),this.isDrawing=!1;return}f.data.text=d,Un(f),Be(u)}),this.createMemo(o,f,{newAnnotation:!0}),f},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i;if(!(l!=null&&l.isPoint))return!1;const{canvasPosition:f,canvasSize:u}=this.configuration;return f!=null&&f.length?Math.abs(o[0]-f[0]+u/2)<=u/2&&Math.abs(o[1]-f[1]+u/2)<=u/2:!1},this.toolSelectedCallback=(n,i)=>{i.highlighted=!0,n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{viewportId:l,renderingEngine:f}=_e(o);this.eventDispatchDetail={viewportId:l,renderingEngineId:f.id},this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this.doubleClickCallback=n=>{const i=n.detail,{element:o}=i;let a=hn(this.getToolName(),o);if(a=this.filterInteractableAnnotationsForElement(o,a),!(a!=null&&a.length))return;const s=a.find(l=>this.isPointNearTool(o,l,i.currentPoints.canvas,6));if(!s)return;const c=s;this.createMemo(o,c),this.configuration.changeTextCallback(s,n.detail,this._doneChangingTextCallback.bind(this,o,c)),this.isDrawing=!1,this.doneEditMemo(),n.stopImmediatePropagation(),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,newAnnotation:f}=this.editData,{data:u}=c;this.createMemo(a,c,{newAnnotation:f}),u.handles.points[0]=[...s],c.invalidated=!0,Be(l)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fw+y),v,{color:g,width:1});if(o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o}return o}}handleSelectedCallback(e,r){const n=e.detail,{element:i}=n;r.highlighted=!0;const o=At(i,this.getToolName());this.editData={annotation:r,viewportIdsToRender:o},this._activateModify(i),Gt(i),Be(o),e.preventDefault()}static setPoint(e,r=!e.data.isPoint,n){e.data.isPoint=r,cn(e,n)}_doneChangingTextCallback(e,r,n){r.data.text=n;const i=At(e,this.getToolName());Be(i),cn(r,e)}cancel(e){if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),Jt(e);const{annotation:r,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=r;return r.highlighted=!1,o.handles.activeHandleIndex=null,Be(n),i&&Un(r),this.editData=null,r.annotationUID}}_isInsideVolume(e,r,n){return hr(e,n)&&hr(r,n)}};Fp.toolName="KeyImage",Fp.dataSeries={data:{seriesLevel:!0}},Fp.dataPoint={data:{isPoint:!0}};let xT=Fp;function BTe(t){return t(prompt("Enter your annotation:"))}function GTe(t,e,r){return r(prompt("Enter your annotation:"))}class ez extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.preMouseDownCallback=n=>this._deleteNearbyAnnotations(n,"mouse"),this.preTouchStartCallback=n=>this._deleteNearbyAnnotations(n,"touch")}_deleteNearbyAnnotations(e,r){const{renderingEngineId:n,viewportId:i,element:o,currentPoints:a}=e.detail,s=Pr(i,n);if(!s)return!1;const c=s._toolInstances,l=[];for(const f in c){const u=c[f];if(typeof u.isPointNearTool!="function"||typeof u.filterInteractableAnnotationsForElement!="function")continue;const d=hn(f,o),h=u.filterInteractableAnnotationsForElement(o,d);if(h)for(const g of h)u.isPointNearTool(o,g,a.canvas,10,r)&&l.push(g.annotationUID)}for(const f of l){na(f);const u=Hr(f);cr.createAnnotationMemo(o,u,{deleting:!0}),mn(f)}return e.preventDefault(),!0}}ez.toolName="Eraser";const{transformWorldToIndex:x7,transformIndexToWorld:WTe}=Rn,Up=class Up extends vi{constructor(e,r){const n=Ui({configuration:{positiveStdDevMultiplier:oW,shrinkExpandIncrement:.1,islandRemoval:{enabled:!1}}},r);super(e,n)}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a,{viewUp:l}=s.getCamera(),{segmentationId:f,segmentIndex:u,labelmapVolumeId:d,referencedVolumeId:h}=await this.getLabelmapSegmentationData(s);if(!this._isOrthogonalView(s,h))throw new Error("Oblique view is not supported yet");return this.growCutData={metadata:{...s.getViewReference({points:[o]}),viewUp:l},segmentation:{segmentationId:f,segmentIndex:u,labelmapVolumeId:d,referencedVolumeId:h},viewportId:s.id,renderingEngineId:c.id},e.preventDefault(),!0}shrink(){this._runLastCommand({shrinkExpandAmount:-this.configuration.shrinkExpandIncrement})}expand(){this._runLastCommand({shrinkExpandAmount:this.configuration.shrinkExpandIncrement})}refresh(){this._runLastCommand()}async getGrowCutLabelmap(e){throw new Error("Not implemented")}async runGrowCut(){const{growCutData:e,configuration:r}=this,{segmentation:{segmentationId:n,segmentIndex:i,labelmapVolumeId:o}}=e,a=$e.getVolume(o);let s=0;const c=async({shrinkExpandAmount:l=0}={})=>{l!==0&&(this.seeds=null),s+=l;const f=Math.max(.1,r.positiveStdDevMultiplier+s),u=l<0?Math.max(1,eT-Math.abs(s)*3):eT+s*3,d={...e,options:{...e.options||{},positiveSeedValue:i,negativeSeedValue:255,positiveStdDevMultiplier:f,negativeSeedMargin:u}},h=await this.getGrowCutLabelmap(d),{isPartialVolume:g}=r;(g?this.applyPartialGrowCutLabelmap:this.applyGrowCutLabelmap)(n,i,a,h),this._removeIslands(d)};await c(),Up.lastGrowCutCommand=c,this.growCutData=null}applyPartialGrowCutLabelmap(e,r,n,i){const o=i.voxelManager.getCompleteScalarDataArray(),a=n.voxelManager,[s,c,l]=i.dimensions,[f,u]=n.dimensions,d=s*c,h=f*u;for(let g=0;g{s===r&&o.setAtIndex(c,s)}),To(e)}_runLastCommand({shrinkExpandAmount:e=0}={}){const r=Up.lastGrowCutCommand;r&&r({shrinkExpandAmount:e})}async getLabelmapSegmentationData(e){const r=cu(e.id);if(!r)throw new Error("No active segmentation found");const{segmentationId:n}=r,i=Da(n),{representationData:o}=Vn(n),a=o[Vt.Labelmap];let{volumeId:s,referencedVolumeId:c}=a;if(!s){const l=e.getImageIds();if(Cf(l))s=ig(n).volumeId;else{const f=e.getCurrentImageId(),u=$e.getImage(f),d=d1(f);c=this._createFakeVolume([u.imageId,d.imageId]).volumeId;const g=Tf(e.id,n),p=d1(g);s=this._createFakeVolume([g,p.imageId]).volumeId}}if(!c){const{imageIds:l}=a,f=l.map(h=>$e.getImage(h).referencedImageId),u=$e.generateVolumeId(f),d=$e.getVolume(u);c=d?d.volumeId:(await cm(u,f)).volumeId}return{segmentationId:n,segmentIndex:i,labelmapVolumeId:s,referencedVolumeId:c}}_createFakeVolume(e){const r=$e.generateVolumeId(e),n=$e.getVolume(r);if(n)return n;const i=am(e,r),o=i.spacing;o[2]===0&&(o[2]=1);const a=new Ud({volumeId:r,dataType:i.dataType,metadata:structuredClone(i.metadata),dimensions:i.dimensions,spacing:i.spacing,origin:i.origin,direction:i.direction,referencedVolumeId:i.referencedVolumeId,imageIds:i.imageIds,referencedImageIds:i.referencedImageIds});return $e.putVolumeSync(r,a),a}_isOrthogonalView(e,r){const i=$e.getVolume(r).imageData,o=e.getCamera(),{ijkVecColDir:a,ijkVecSliceDir:s}=Cw(i,o);return[a,s].every(c=>Zt(Math.abs(c[0]),1)||Zt(Math.abs(c[1]),1)||Zt(Math.abs(c[2]),1))}getRemoveIslandData(e){}_removeIslands(e){const{islandRemoval:r}=this.configuration;if(!r.enabled)return;const{segmentation:{segmentIndex:n,labelmapVolumeId:i},renderingEngineId:o,viewportId:a}=e,s=$e.getVolume(i),c=this.getRemoveIslandData(e);if(!c)return;const[l,f]=s.dimensions,u=l*f,{worldIslandPoints:d=[],islandPointIndexes:h=[]}=c;let g=[...(c==null?void 0:c.ijkIslandPoints)??[]];const v=jr(o).getViewport(a),{voxelManager:y}=s,m=new Pd;g=g.concat(d.map(w=>x7(s.imageData,w))),g=g.concat(h.map(w=>{const x=w%l,C=Math.floor(w/l)%f,S=Math.floor(w/u);return[x,C,S]})),m.initialize(v,y,{points:g,previewSegmentIndex:n,segmentIndex:n}),m.floodFillSegmentIsland(),m.removeExternalIslands(),m.removeInternalIslands()}getSegmentStyle({segmentationId:e,viewportId:r,segmentIndex:n}){return mB({segmentationId:e,segmentIndex:n,viewportId:r})}};Up.lastGrowCutCommand=null;let Rh=Up;Rh.toolName="GrowCutBaseTool";const db=class db extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positiveSeedVariance:.5,negativeSeedVariance:.9}}){super(e,r),this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,{world:s}=a,c=_e(o),{viewport:l}=c;this.growCutData.circleBorderPoint=s,Be([l.id])},this._endCallback=async n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a;this.runGrowCut(),this._deactivateDraw(o),this.growCutData=null,Jt(o),Be([s.id])},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a;return await super.preMouseDownCallback(e),Object.assign(this.growCutData,{circleCenterPoint:o,circleBorderPoint:o}),this._activateDraw(n),Gt(n),Be([s.id]),!0}async getGrowCutLabelmap(e){const{segmentation:{referencedVolumeId:r},renderingEngineId:n,viewportId:i,circleCenterPoint:o,circleBorderPoint:a,options:s}=e,l=jr(n).getViewport(i),f=yh(Mn(Ke(),o,a));return rW(r,{center:o,radius:f},l,s)}_activateDraw(e){e.addEventListener(k.MOUSE_UP,this._endCallback),e.addEventListener(k.MOUSE_DRAG,this._dragCallback),e.addEventListener(k.MOUSE_CLICK,this._endCallback)}renderAnnotation(e,r){if(!this.growCutData)return;const{viewport:n}=e,{segmentation:i,circleCenterPoint:o,circleBorderPoint:a}=this.growCutData,s=n.worldToCanvas(o),c=n.worldToCanvas(a),l=xs(rn(),c,s),f=jY(l);if(Zt(f,0))return;const u="growcut",d="0",{color:h}=this.getSegmentStyle({segmentationId:i.segmentationId,segmentIndex:i.segmentIndex,viewportId:n.id});ia(r,u,d,s,f,{color:h})}};db.toolName="RegionSegment";let CT=db;const hb=class hb extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!1,positiveSeedVariance:.4,negativeSeedVariance:.9,subVolumePaddingPercentage:.1,islandRemoval:{enabled:!1}}}){super(e,r),this.mouseTimer=null,this.allowedToProceed=!1}mouseMoveCallback(e){if(this.mode!==Fn.Active)return;const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n;i.style.cursor="default",this.mouseTimer!==null&&(window.clearTimeout(this.mouseTimer),this.mouseTimer=null),this.mouseTimer=window.setTimeout(()=>{this.onMouseStable(e,o,i)},this.configuration.mouseStabilityDelay||500)}async onMouseStable(e,r,n){await super.preMouseDownCallback(e);const i=$e.getVolume(this.growCutData.segmentation.referencedVolumeId),o=aW(i,r,{})||{positiveSeedIndices:new Set,negativeSeedIndices:new Set},{positiveSeedIndices:a,negativeSeedIndices:s}=o;let c;a.size/s.size>20||s.size<30?(c="not-allowed",this.allowedToProceed=!1):(c="copy",this.allowedToProceed=!0);const l=_e(n);n&&(n.style.cursor=c,requestAnimationFrame(()=>{n.style.cursor!==c&&(n.style.cursor=c)})),this.allowedToProceed&&(this.seeds=o),l&&l.viewport&&l.viewport.render()}async preMouseDownCallback(e){if(!this.allowedToProceed)return!1;const r=e.detail,{currentPoints:n,element:i}=r;_e(i)&&(i.style.cursor="wait",requestAnimationFrame(()=>{i.style.cursor!=="wait"&&(i.style.cursor="wait")}));const{world:a}=n;return await super.preMouseDownCallback(e),this.growCutData=Ui(this.growCutData,{worldPoint:a,islandRemoval:{worldIslandPoints:[a]}}),this.growCutData.worldPoint=a,this.growCutData.islandRemoval={worldIslandPoints:[a]},await this.runGrowCut(),i&&(i.style.cursor="default"),!0}getRemoveIslandData(e){const{worldPoint:r}=e;return{worldIslandPoints:[r]}}async getGrowCutLabelmap(e){const{segmentation:{referencedVolumeId:r},worldPoint:n,options:i}=e,{subVolumePaddingPercentage:o}=this.configuration,a={...i,subVolumePaddingPercentage:o,seeds:this.seeds};return sW({referencedVolumeId:r,worldPosition:n,options:a})}};hb.toolName="RegionSegmentPlus";let ST=hb;const zTe=[-1/0,-995],$Te=[0,1900],jTe=[1e3,1900],{transformWorldToIndex:Yv,transformIndexToWorld:G3}=Rn;class tz extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positivePixelRange:$Te,negativePixelRange:zTe,islandRemoval:{enabled:!0,islandPixelRange:jTe}}}){super(e,r),this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,{world:s}=a,c=_e(o),{viewport:l}=c,f=this._getHorizontalLineWorldPoints(c,s);this.growCutData.horizontalLines[1]=f,Be([l.id])},this._endCallback=async n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a;await this.runGrowCut(),this._deactivateDraw(o),this.growCutData=null,Jt(o),Be([s.id])},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a,l=this._getHorizontalLineWorldPoints(a,o);return await super.preMouseDownCallback(e),this.growCutData.horizontalLines=[l,l],this._activateDraw(n),Gt(n),Be([s.id]),!0}renderAnnotation(e,r){if(!this.growCutData)return;const{segmentation:n,horizontalLines:i}=this.growCutData;if(i.length!==2)return;const{viewport:o}=e,{segmentationId:a,segmentIndex:s}=n,[c,l]=i,[f,u]=c,[d,h]=l,g=[f,u,h,d].map(S=>o.worldToCanvas(S)),p="growCutRect",v="0",{color:y,fillColor:m,lineWidth:w,fillOpacity:x,lineDash:C}=this.getSegmentStyle({segmentationId:a,segmentIndex:s,viewportId:o.id});gc(r,p,v,g,{color:y,fillColor:m,fillOpacity:x,lineWidth:w,lineDash:C,closePath:!0})}async getGrowCutLabelmap(e){const{segmentation:{segmentIndex:r,referencedVolumeId:n},renderingEngineId:i,viewportId:o,horizontalLines:a}=e,c=jr(i).getViewport(o),[l,f]=a,u=[l[0],l[1],f[1],f[0]],d=$e.getVolume(n),{topLeft:h,bottomRight:g}=this._getWorldBoundingBoxFromProjectedSquare(c,u),p=Yv(d.imageData,h),v=Yv(d.imageData,g),y={boundingBox:{ijkTopLeft:p,ijkBottomRight:v}},m=this.configuration,w={positiveSeedValue:r,negativeSeedValue:255,negativePixelRange:m.negativePixelRange,positivePixelRange:m.positivePixelRange};return iW(n,y,w)}getRemoveIslandData(){const{segmentation:{segmentIndex:e,referencedVolumeId:r,labelmapVolumeId:n}}=this.growCutData,i=$e.getVolume(r),o=$e.getVolume(n),a=i.voxelManager.getCompleteScalarDataArray(),s=o.voxelManager.getCompleteScalarDataArray(),{islandPixelRange:c}=this.configuration.islandRemoval,l=[];for(let f=0,u=s.length;f=c[0]&&d<=c[1]&&l.push(f)}return{islandPointIndexes:l}}_activateDraw(e){e.addEventListener(k.MOUSE_UP,this._endCallback),e.addEventListener(k.MOUSE_DRAG,this._dragCallback),e.addEventListener(k.MOUSE_CLICK,this._endCallback)}_projectWorldPointAcrossSlices(e,r,n){const i=this._getViewportVolume(e),{dimensions:o}=i,a=Yv(i.imageData,r),s=n.findIndex(f=>Zt(Math.abs(f),1));if(s===-1)throw new Error("Non-orthogonal direction vector");const c=[...a],l=[...a];return c[s]=0,l[s]=o[s]-1,[c,l]}_getCuboidIJKEdgePointsFromProjectedWorldPoint(e,r){const{viewPlaneNormal:n}=e.getCamera();return this._projectWorldPointAcrossSlices(e,r,n)}_getWorldCuboidCornerPoints(e,r){const n=[],i=this._getViewportVolume(e);return r.forEach(o=>{const s=this._getCuboidIJKEdgePointsFromProjectedWorldPoint(e,o).map(c=>G3(i.imageData,c));n.push(...s)}),n}_getWorldBoundingBoxFromProjectedSquare(e,r){const n=this._getWorldCuboidCornerPoints(e,r),i=[...n[0]],o=[...n[0]];return n.forEach(a=>{RY(i,i,a),LY(o,o,a)}),{topLeft:i,bottomRight:o}}_getViewportVolume(e){if(!(e instanceof Tr))throw new Error("Viewport is not a BaseVolumeViewport");const r=e.getAllVolumeIds()[0];return $e.getVolume(r)}_getHorizontalLineIJKPoints(e,r){const{viewport:n}=e,i=this._getViewportVolume(n),{dimensions:o}=i,a=Yv(i.imageData,r),{viewUp:s,viewPlaneNormal:c}=n.getCamera(),f=kn(Ke(),s,c).findIndex(h=>Zt(Math.abs(h),1)),u=[...a],d=[...a];return u[f]=0,d[f]=o[f]-1,[u,d]}_getHorizontalLineWorldPoints(e,r){const{viewport:n}=e,i=this._getViewportVolume(n),[o,a]=this._getHorizontalLineIJKPoints(e,r),s=G3(i.imageData,o),c=G3(i.imageData,a);return[s,c]}}tz.toolName="WholeBodySegment";function HTe(t,e,r=!0){const n=Object.assign({},e,{segmentIndex:0});E8(t,n)}function KTe(t,e){HTe(t,e,!0)}class nz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:E8,ERASE_INSIDE:KTe},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=cu(l.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:g}=h,p=Da(g),v=zd(g),y=iu(l.id,g,p),{representationData:m}=Vn(g),w=m[Vt.Labelmap],x={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:l.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:y},data:{handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null}}},C=At(a,this.getToolName());if(this.editData={annotation:x,segmentIndex:p,segmentationId:g,segmentsLocked:v,segmentColor:y,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},l instanceof Tr){const{volumeId:S}=w,T=$e.getVolume(S);this.editData={...this.editData,volumeId:S,referencedVolumeId:T.referencedVolumeId}}else{const S=Tf(l.id,g);this.editData={...this.editData,imageId:S}}return this._activateDraw(a),Gt(a),n.preventDefault(),Be(C),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c}=this.editData,{data:l}=a,{currentPoints:f}=i,u=_e(o),{worldToCanvas:d,canvasToWorld:h}=u.viewport,g=f.world,{points:p}=l.handles;p[c]=[...g];let v,y,m,w,x,C,S,T;switch(c){case 0:case 3:v=d(p[0]),w=d(p[3]),y=[w[0],v[1]],m=[v[0],w[1]],C=h(y),S=h(m),p[1]=C,p[2]=S;break;case 1:case 2:y=d(p[1]),m=d(p[2]),v=[m[0],y[1]],w=[y[0],m[1]],x=h(v),T=h(w),p[0]=x,p[3]=T;break}a.invalidated=!0,this.editData.hasMoved=!0,Be(s)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=a;if(s&&!c)return;l.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const f=_e(o),u={...this.editData,points:l.handles.points,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(f,u),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{annotation:s}=this.editData,c=s.metadata,l=s.annotationUID,f=s.data,{points:u}=f.handles,d=u.map(p=>a.worldToCanvas(p)),h=`rgb(${c.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(Em(i,l,"0",d[0],d[3],{color:h}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}nz.toolName="RectangleScissor";class rz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Jw,ERASE_INSIDE:jG},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=o.canvas,l=_e(a),{viewport:f}=l;this.isDrawing=!0;const u=f.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=cu(f.id);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:p}=g,v=Da(p),y=zd(p),m=iu(f.id,p,v),{representationData:w}=Vn(p),x=w.Labelmap;if(!x)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const C={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:f.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:m},data:{handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},S=[f.id];if(this.editData={annotation:C,centerCanvas:c,segmentIndex:v,segmentationId:p,segmentsLocked:y,segmentColor:m,viewportIdsToRender:S,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},f instanceof Tr){const{volumeId:T}=x,_=$e.getVolume(T);this.editData={...this.editData,volumeId:T,referencedVolumeId:_.referencedVolumeId}}else{const T=Tf(f.id,p);this.editData={...this.editData,imageId:T}}return this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h,centerCanvas:g}=this.editData,{data:p}=d,v=Math.abs(s[0]-g[0]),y=Math.abs(s[1]-g[1]),m=Math.sqrt(v*v+y*y),w=[g[0],g[1]+m],x=[g[0],g[1]-m],C=[g[0]-m,g[1]],S=[g[0]+m,g[1]];p.handles.points=[u(w),u(x),u(C),u(S)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=a,{viewPlaneNormal:f,viewUp:u}=a.metadata;if(s&&!c)return;l.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const d=_e(o),h={...this.editData,points:l.handles.points,viewPlaneNormal:f,viewUp:u,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,h),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_END,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{viewportIdsToRender:s}=this.editData;if(!s.includes(a.id))return o;const{annotation:c}=this.editData,l=c.metadata,f=c.annotationUID,u=c.data,{points:d}=u.handles,h=d.map(x=>a.worldToCanvas(x)),g=h[0],p=h[1],v=[Math.floor((g[0]+p[0])/2),Math.floor((g[1]+p[1])/2)],y=Math.abs(g[1]-Math.floor((g[1]+p[1])/2)),m=`rgb(${l.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(ia(i,f,"0",v,y,{color:m}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}rz.toolName="CircleScissor";class iz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:zG,ERASE_INSIDE:$G},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;this.doneEditMemo();const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=o.canvas,l=_e(a),{viewport:f}=l;this.isDrawing=!0;const u=f.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=cu(f.id);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:p}=g,v=Da(p),y=zd(p),m=iu(f.id,p,v);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:f.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:m},data:{invalidated:!0,handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},x=[f.id];this.editData={annotation:w,centerCanvas:c,segmentIndex:v,segmentationId:p,segmentsLocked:y,segmentColor:m,toolGroupId:this.toolGroupId,viewportIdsToRender:x,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null};const{representationData:C}=Vn(p),S=this.getEditData({viewport:f,representationData:C,segmentsLocked:y,segmentationId:p});return this.editData={...this.editData,...S},this._activateDraw(a),Gt(a),n.preventDefault(),Be(x),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h,centerCanvas:g}=this.editData,{data:p}=d,v=Math.abs(s[0]-g[0]),y=Math.abs(s[1]-g[1]),m=Math.sqrt(v*v+y*y),w=[g[0],g[1]+m],x=[g[0],g[1]-m],C=[g[0]-m,g[1]],S=[g[0]+m,g[1]];p.handles.points=[u(w),u(x),u(C),u(S)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c,segmentIndex:l,segmentsLocked:f}=this.editData,{data:u}=a,{viewPlaneNormal:d,viewUp:h}=a.metadata;if(s&&!c)return;a.highlighted=!1,u.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const g=_e(o),p={...this.editData,points:u.handles.points,segmentIndex:l,segmentsLocked:f,viewPlaneNormal:d,viewUp:h,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(g,p),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{viewportIdsToRender:s}=this.editData;if(!s.includes(a.id))return o;const{annotation:c}=this.editData,l=c.metadata,f=c.annotationUID,u=c.data,{points:d}=u.handles,h=d.map(x=>a.worldToCanvas(x)),g=h[0],p=h[1],v=[Math.floor((g[0]+p[0])/2),Math.floor((g[1]+p[1])/2)],y=Math.abs(g[1]-Math.floor((g[1]+p[1])/2)),m=`rgb(${l.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(ia(i,f,"0",v,y,{color:m}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}iz.toolName="SphereScissor";const{transformWorldToIndex:kg}=Rn;class oz extends _5{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:qTe,statsCalculator:dl,showTextBox:!1,throttleTimeout:100}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u;let g,p,v;if(l instanceof lr)throw new Error("Stack Viewport Not implemented");{const T=this.getTargetId(l);v=yl(T),p=$e.getVolume(v),g=Zl(p,s,d)}const y=xf(p,d),m=this._getStartCoordinate(s,y,d),w=this._getEndCoordinate(s,y,d),x=l.getFrameOfReferenceUID(),C={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:x,referencedImageId:g,volumeId:v,spacingInNormal:y,enabledElement:c},data:{label:"",startCoordinate:m,endCoordinate:w,handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[],statistics:[]},labelmapUID:null}};this._computeProjectionPoints(C,p),ln(C,a);const S=At(a,this.getToolName());return this.editData={annotation:C,viewportIdsToRender:S,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),C},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const d=this.getTargetId(u.viewport),h=$e.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(a,h,d,u),Be(s),c?Un(a):cn(a,o)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;let s=hn(this.getToolName(),a.element);if(!(s!=null&&s.length))return o;s=zw(s,a.getCamera());const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let l=0;la.worldToCanvas(he)),S=C[0],T=Zu(C),{centerPointRadius:_}=this.configuration,E=rh(C),b=a.getCamera().focalPoint,D=a.getCamera().viewPlaneNormal;let I=g,P=p;Array.isArray(g)&&(I=this._getCoordinateForViewplaneNormal(I,D),d.startCoordinate=I),Array.isArray(p)&&(P=this._getCoordinateForViewplaneNormal(P,D),d.endCoordinate=P);const O=Bu(d.startCoordinate),A=Bu(d.endCoordinate),V=this._getCoordinateForViewplaneNormal(b,D),G=Bu(V);if(GMath.max(O,A))continue;const R=Bu((d.startCoordinate+d.endCoordinate)/2);let N=!1;if(G===R&&(N=!0),d.handles.points[0][this._getIndexOfCoordinatesForViewplaneNormal(D)]=R,f.invalidated&&this._throttledCalculateCachedStats(f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let F;if(!Kr(u))continue;!si(u)&&!this.editData&&y!==null&&N&&(F=[C[y]]),F&&or(i,u,"0",F,{color:x});let j=m,te=w;N?(j=m,te=[]):te=[5,5];const ie="0";if(ia(i,u,ie,S,T,{color:x,lineDash:te,lineWidth:j}),_>0&&T>3*_&&ia(i,u,`${ie}-center`,S,_,{color:x,lineDash:w,lineWidth:m}),o=!0,this.configuration.showTextBox){const he=this.getLinkedTextBoxStyle(c,f);if(!he.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const ue=this.configuration.getTextLines(d,{metadata:h});if(!ue||ue.length===0)continue;let ve;d.handles.textBox.hasMoved||(ve=Oa(E),d.handles.textBox.worldPosition=a.canvasToWorld(ve));const Me=a.worldToCanvas(d.handles.textBox.worldPosition),be=ho(i,u,"1",ue,Me,C,{},he),{x:B,y:M,width:$,height:W}=be;d.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([B,M]),topRight:a.canvasToWorld([B+$,M]),bottomLeft:a.canvasToWorld([B,M+W]),bottomRight:a.canvasToWorld([B+$,M+W])}}}return o},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=Wo(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=Yh(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,r){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:s}=r,{startCoordinate:c,endCoordinate:l}=n,{points:f}=n.handles,u=kg(s,f[0]),d=kg(s,f[0]),h=vs(f),g=Ke();s.indexToWorldVec3(u,g);const p=Ke();s.indexToWorldVec3(d,p),this._getIndexOfCoordinatesForViewplaneNormal(o)==2?(g[2]=c,p[2]=l,h[0][2]=c,h[1][2]=c):this._getIndexOfCoordinatesForViewplaneNormal(o)==0?(g[0]=c,p[0]=l,h[0][0]=c,h[1][0]=c):this._getIndexOfCoordinatesForViewplaneNormal(o)==1&&(g[1]=c,p[1]=l,h[0][1]=c,h[1][1]=c);const v=Qi(g,p),y=[];for(let m=0;m{const x=Ke();return On(x,w,o,m),Array.from(x)}));n.cachedStats.projectionPoints=y}_computePointsInsideVolume(e,r,n,i){var b,D,I;const{data:o,metadata:a}=e,{viewPlaneNormal:s,viewUp:c}=a,{viewport:l}=i,f=o.cachedStats.projectionPoints,u=[[]],d=this.getTargetImageData(n),h=o.handles.points.map(P=>l.worldToCanvas(P)),[g,p]=rh(h),v=l.canvasToWorld(g),y=l.canvasToWorld(p),{worldWidth:m,worldHeight:w}=Zh(s,c,v,y),x=Ia(d,o.handles),C=c8(d),S=Math.abs(Math.PI*(m/x.scale/2)*(w/C/x.scale/2)),T={isPreScaled:lu(l,n),isSuvScaled:this.isSuvScaled(l,n,e.metadata.referencedImageId)},_=uu(a.Modality,e.metadata.referencedImageId,T);for(let P=0;Pl.worldToCanvas(be)),[V,G]=rh(A),R=l.canvasToWorld(V),N=l.canvasToWorld(G),F=R,j=N,{dimensions:te,imageData:ie,voxelManager:he}=r,ue=kg(ie,F),ve=kg(ie,O),Me=this._getIndexOfCoordinatesForViewplaneNormal(s);ue[0]=Math.floor(ue[0]),ue[1]=Math.floor(ue[1]),ue[2]=Math.floor(ue[2]),ue[Me]=ve[Me];const Ue=kg(ie,j);if(Ue[0]=Math.floor(Ue[0]),Ue[1]=Math.floor(Ue[1]),Ue[2]=Math.floor(Ue[2]),Ue[Me]=ve[Me],this._isInsideVolume(ue,Ue,te)){const be=Math.min(ue[0],Ue[0]),B=Math.max(ue[0],Ue[0]),M=Math.min(ue[1],Ue[1]),$=Math.max(ue[1],Ue[1]),W=Math.min(ue[2],Ue[2]),Y=Math.max(ue[2],Ue[2]),ne=[[be,B],[M,$],[W,Y]],Se={center:O,xRadius:Math.abs(R[0]-N[0])/2,yRadius:Math.abs(R[1]-N[1])/2,zRadius:Math.abs(R[2]-N[2])/2},Re=he.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:je=>Aw(Se,je),boundsIJK:ne,imageData:ie,returnPoints:this.configuration.storePointData});u.push(Re)}}const E=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=u,o.cachedStats.statistics={Modality:a.Modality,area:S,mean:(b=E.mean)==null?void 0:b.value,stdDev:(D=E.stdDev)==null?void 0:D.value,max:(I=E.max)==null?void 0:I.value,statsArray:E.array,areaUnit:x.areaUnit,modalityUnit:_}}_calculateCachedStatsTool(e,r){const n=e.data,{viewport:i}=r,{cachedStats:o}=n,a=this.getTargetId(i),s=$e.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,s),this._computePointsInsideVolume(e,s,a,r),e.invalidated=!1,cn(e,i.element),o}_getStartCoordinate(e,r,n){const i=this.configuration.numSlicesToPropagate,o=Math.round(i/2),a=Ke();return On(a,e,n,o*-r),this._getCoordinateForViewplaneNormal(a,n)}_getEndCoordinate(e,r,n){const i=this.configuration.numSlicesToPropagate,o=i-Math.round(i/2),a=Ke();return On(a,e,n,o*r),this._getCoordinateForViewplaneNormal(a,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const r=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return r.indexOf(Math.max(...r))}_getCoordinateForViewplaneNormal(e,r){const n=this._getIndexOfCoordinatesForViewplaneNormal(r);return e[n]}}function qTe(t,e={}){const r=t.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnit:s,modalityUnit:c}=r;if(i===void 0)return;const l=[];return l.push(`Area: ${un(n)} ${s}`),l.push(`Mean: ${un(i)} ${c}`),l.push(`Max: ${un(o)} ${c}`),l.push(`Std Dev: ${un(a)} ${c}`),l}oz.toolName="CircleROIStartEndThreshold";const{transformWorldToIndex:C7,isEqual:W3}=Rn;class az extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.preMouseDownCallback=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c,f=l.getCamera(),{viewPlaneNormal:u}=f,d=cu(l.id);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:h}=d,g=Da(h),p=zd(h),{representationData:v}=Vn(h);let y,m,w,x;if(this.doneEditMemo(),l instanceof Tr){const{volumeId:A}=v[Vt.Labelmap],V=$e.getVolume(A);({dimensions:y,direction:m}=V),x=V.voxelManager,w=C7(V.imageData,s)}else{const A=Tf(l.id,h);if(!A)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const{imageData:V}=l.getImageData();y=V.getDimensions(),m=V.getDirection(),x=$e.getImage(A).voxelManager,w=C7(V,s)}const C=this.getFixedDimension(u,m);if(C===void 0){console.warn("Oblique paint fill not yet supported");return}const{floodFillGetter:S,getLabelValue:T,getScalarDataPositionFromPlane:_,inPlaneSeedPoint:E,fixedDimensionValue:b}=this.generateHelpers(x,y,w,C);if(w[0]<0||w[0]>=y[0]||w[1]<0||w[1]>=y[1]||w[2]<0||w[2]>=y[2])return;const D=T(w[0],w[1],w[2]);if(p.includes(D))return;const I=_8(S,E),{flooded:P}=I;P.forEach(A=>{const V=_(A[0],A[1]);x.setAtIndex(V,g)});const O=this.getFramesModified(C,b,I);return To(h,O),!0},this.getFramesModified=(n,i,o)=>{const{flooded:a}=o;if(n===2)return[i];let s=1/0,c=-1/0;for(let f=0;fc&&(c=u)}const l=[];for(let f=s;f<=c;f++)l.push(f);return l},this.generateHelpers=(n,i,o,a=2)=>{let s,c;switch(a){case 0:s=o[0],c=[o[1],o[2]];break;case 1:s=o[1],c=[o[0],o[2]];break;case 2:s=o[2],c=[o[0],o[1]];break;default:throw new Error(`Invalid fixedDimension: ${a}`)}const l=(h,g,p)=>n.toIndex([h,g,p]),f=(h,g,p)=>n.getAtIJK(h,g,p),u=this.generateFloodFillGetter(i,a,s,f);return{getScalarDataPositionFromPlane:this.generateGetScalarDataPositionFromPlane(l,a,s),getLabelValue:f,floodFillGetter:u,inPlaneSeedPoint:c,fixedDimensionValue:s}},this.generateFloodFillGetter=(n,i,o,a)=>{let s;switch(i){case 0:s=(c,l)=>{if(!(c>=n[1]||c<0||l>=n[2]||l<0))return a(o,c,l)};break;case 1:s=(c,l)=>{if(!(c>=n[0]||c<0||l>=n[2]||l<0))return a(c,o,l)};break;case 2:s=(c,l)=>{if(!(c>=n[0]||c<0||l>=n[1]||l<0))return a(c,l,o)};break;default:throw new Error(`Invalid fixedDimension: ${i}`)}return s},this.generateGetScalarDataPositionFromPlane=(n,i,o)=>{let a;switch(i){case 0:a=(s,c)=>n(o,s,c);break;case 1:a=(s,c)=>n(s,o,c);break;case 2:a=(s,c)=>n(s,c,o);break;default:throw new Error(`Invalid fixedDimension: ${i}`)}return a}}getFixedDimension(e,r){const n=r.slice(0,3),i=r.slice(3,6),o=r.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],s=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(W3(a,s))return 0;const c=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(W3(a,c))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];if(W3(a,l))return 2}}az.toolName="PaintFill";const XTe={TOP_LEFT:"TOP_LEFT",TOP_RIGHT:"TOP_RIGHT",BOTTOM_LEFT:"BOTTOM_LEFT",BOTTOM_RIGHT:"BOTTOM_RIGHT"};var U8={Corners:XTe};const{vtkErrorMacro:z3}=J,{Corners:Jv}=U8;function YTe(t,e){e.classHierarchy.push("vtkOrientationMarkerWidget");const r={...t},n=[],i=$A.newInstance(),o=new ResizeObserver(d=>{t.updateViewport()});let a=null,s=null,c=null,l=null,f=null;function u(){e._interactor.isAnimating()||t.updateMarkerOrientation()}e._onParentRendererChanged=()=>t.updateViewport(),t.computeViewport=()=>{const d=e.parentRenderer||e._interactor.getCurrentRenderer(),[h,g,p,v]=d.getViewport(),y=e._interactor.getView(),m=y.getSize(),[w,x]=y.getViewportSize(d),C=Math.min(w,x);let S=e.viewportSize*C;S=Math.max(Math.min(e.minPixelSize,C),Math.min(e.maxPixelSize,S));const T=S/m[0],_=S/m[1];switch(e.viewportCorner){case Jv.TOP_LEFT:return[h,v-_,h+T,v];case Jv.TOP_RIGHT:return[p-T,v-_,p,v];case Jv.BOTTOM_LEFT:return[h,g,h+T,g+_];case Jv.BOTTOM_RIGHT:return[p-T,g,p,g+_];default:return z3("Invalid widget corner"),null}},t.updateViewport=()=>{e.enabled&&(i.setViewport(...t.computeViewport()),e._interactor.render())},t.updateMarkerOrientation=()=>{const h=(e.parentRenderer||e._interactor.getCurrentRenderer()).getActiveCamera();if(!h)return;const g=h.getReferenceByName("position"),p=h.getReferenceByName("focalPoint"),v=h.getReferenceByName("viewUp");if(n[0]!==g[0]||n[1]!==g[1]||n[2]!==g[2]||n[3]!==p[0]||n[4]!==p[1]||n[5]!==p[2]||n[6]!==v[0]||n[7]!==v[1]||n[8]!==v[2]){n[0]=g[0],n[1]=g[1],n[2]=g[2],n[3]=p[0],n[4]=p[1],n[5]=p[2],n[6]=v[0],n[7]=v[1],n[8]=v[2];const y=i.getActiveCamera();y.setPosition(g[0],g[1],g[2]),y.setFocalPoint(p[0],p[1],p[2]),y.setViewUp(v[0],v[1],v[2]),i.resetCamera()}},t.setEnabled=d=>{var h,g;if(d){if(e.enabled)return;if(!e.actor){z3("Must set actor before enabling orientation marker.");return}if(!e._interactor){z3("Must set interactor before enabling orientation marker.");return}const p=e.parentRenderer||e._interactor.getCurrentRenderer(),v=p.getRenderWindow();v.addRenderer(i),v.getNumberOfLayers()<2&&v.setNumberOfLayers(2),i.setLayer(v.getNumberOfLayers()-1),i.setInteractive(e.interactiveRenderer),i.addViewProp(e.actor),e.actor.setVisibility(!0),a=p.onEvent(y=>{y.type==="ActiveCameraEvent"&&(s&&s.unsubscribe(),s=y.camera.onModified(u))}),s=p.getActiveCamera().onModified(u),c=e._interactor.onAnimation(t.updateMarkerOrientation),l=e._interactor.onEndAnimation(t.updateMarkerOrientation),o.observe(e._interactor.getView().getCanvas()),t.updateViewport(),t.updateMarkerOrientation(),e.enabled=!0}else{if(!e.enabled)return;e.enabled=!1,o.disconnect(),a.unsubscribe(),a=null,s.unsubscribe(),s=null,c.unsubscribe(),c=null,l.unsubscribe(),l=null,e.actor.setVisibility(!1),i.removeViewProp(e.actor);const p=(g=(h=e._interactor)==null?void 0:h.findPokedRenderer())==null?void 0:g.getRenderWindow();p&&p.removeRenderer(i)}t.modified()},t.setViewportCorner=d=>{d!==e.viewportCorner&&(e.viewportCorner=d,t.updateViewport())},t.setViewportSize=d=>{const h=Math.min(1,Math.max(0,d));h!==e.viewportSize&&(e.viewportSize=h,t.updateViewport())},t.setActor=d=>{const h=e.enabled;t.setEnabled(!1),e.actor=d,t.setEnabled(h)},t.getRenderer=()=>i,t.delete=()=>{r.delete(),f&&(f.unsubscribe(),f=null),a&&(a.unsubscribe(),a=null),s&&(s.unsubscribe(),s=null),c&&(c.unsubscribe(),c=null),l&&(l.unsubscribe(),l=null),o.disconnect()},f=t.onModified(t.updateViewport)}const JTe={viewportCorner:U8.Corners.BOTTOM_LEFT,viewportSize:.2,minPixelSize:50,maxPixelSize:200,parentRenderer:null,interactiveRenderer:!1};function sz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,JTe,r),J.obj(t,e),J.get(t,e,["enabled","viewportCorner","viewportSize","interactiveRenderer"]),J.setGet(t,e,["_interactor","minPixelSize","maxPixelSize","parentRenderer"]),J.get(t,e,["actor"]),J.moveToProtected(t,e,["interactor"]),YTe(t,e)}const ZTe=J.newInstance(sz,"vtkOrientationMarkerWidget");var S7={newInstance:ZTe,extend:sz,...U8};function cz(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0,0,0,0];const[r,n,i,o]=e,s=t.getContext("2d").getImageData(r,n,i||t.width,o||t.height),c=tm.newInstance({type:"vtkImageData"});c.setOrigin(0,0,0),c.setSpacing(1,1,1),c.setExtent(0,(i||t.width)-1,0,(o||t.height)-1,0,0);const l=Bt.newInstance({numberOfComponents:4,values:new Uint8Array(s.data.buffer)});return l.setName("scalars"),c.getPointData().setScalars(l),c}function QTe(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{flipX:!1,flipY:!1,rotate:0};const r=document.createElement("canvas");r.width=t.width,r.height=t.height;const n=r.getContext("2d"),{flipX:i,flipY:o,rotate:a}=e;return n.translate(r.width/2,r.height/2),n.scale(i?-1:1,o?-1:1),n.rotate(a*Math.PI/180),n.drawImage(t,-t.width/2,-t.height/2),cz(r)}var e_e={canvasToImageData:cz,imageToImageData:QTe};const lz={default:{defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:t=>t/2,faceColor:"white",edgeThickness:.1,edgeColor:"black",resolution:400},xMinusFaceProperty:{text:"X-",faceColor:"yellow"},xPlusFaceProperty:{text:"X+",faceColor:"yellow"},yMinusFaceProperty:{text:"Y-",faceColor:"red"},yPlusFaceProperty:{text:"Y+",faceColor:"red"},zMinusFaceProperty:{text:"Z-",faceColor:"#008000"},zPlusFaceProperty:{text:"Z+",faceColor:"#008000"}},lps:{xMinusFaceProperty:{text:"R",faceRotation:-90},xPlusFaceProperty:{text:"L",faceRotation:90},yMinusFaceProperty:{text:"A",faceRotation:0},yPlusFaceProperty:{text:"P",faceRotation:180},zMinusFaceProperty:{text:"I",faceRotation:180},zPlusFaceProperty:{text:"S",faceRotation:0}}};function uz(t,e){e.set(t)}function t_e(t,e){return uz(lz[t],e)}function n_e(t,e){lz[t]=e}var r_e={applyDefinitions:uz,applyPreset:t_e,registerStylePreset:n_e};const i_e={xPlus:0,xMinus:1,yPlus:2,yMinus:3,zPlus:4,zMinus:5};function o_e(t,e){e.classHierarchy.push("vtkAnnotatedCubeActor"),e.xPlusFaceProperty={...e.xPlusFaceProperty},e.xMinusFaceProperty={...e.xMinusFaceProperty},e.yPlusFaceProperty={...e.yPlusFaceProperty},e.yMinusFaceProperty={...e.yMinusFaceProperty},e.zPlusFaceProperty={...e.zPlusFaceProperty},e.zMinusFaceProperty={...e.zMinusFaceProperty};let r=null;const n=document.createElement("canvas"),i=wa.newInstance(),o=Bd.newInstance();o.setInterpolate(!0);function a(c){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;l&&Object.assign(e[`${c}FaceProperty`],l);const f={...e.defaultStyle,...e[`${c}FaceProperty`]};n.width=f.resolution,n.height=f.resolution;const u=n.getContext("2d");u.fillStyle=f.faceColor,u.fillRect(0,0,n.width,n.height),f.edgeThickness>0&&(u.strokeStyle=f.edgeColor,u.lineWidth=f.edgeThickness*n.width,u.strokeRect(0,0,n.width,n.height)),u.save(),u.translate(0,n.height),u.scale(1,-1),u.translate(n.width/2,n.height/2),u.rotate(-Math.PI*(f.faceRotation/180));const d=f.fontSizeScale(f.resolution);u.fillStyle=f.fontColor,u.textAlign="center",u.textBaseline="middle",u.font=`${f.fontStyle} ${d}px "${f.fontFamily}"`,u.fillText(f.text,0,0),u.restore();const h=e_e.canvasToImageData(n);o.setInputData(h,i_e[c]),t.modified()}function s(){r=LN.newInstance({generate3DTextureCoordinates:!0}),i.setInputConnection(r.getOutputPort()),a("xPlus"),a("xMinus"),a("yPlus"),a("yMinus"),a("zPlus"),a("zMinus")}t.setDefaultStyle=c=>{e.defaultStyle={...e.defaultStyle,...c},s()},t.setXPlusFaceProperty=c=>a("xPlus",c),t.setXMinusFaceProperty=c=>a("xMinus",c),t.setYPlusFaceProperty=c=>a("yPlus",c),t.setYMinusFaceProperty=c=>a("yMinus",c),t.setZPlusFaceProperty=c=>a("zPlus",c),t.setZMinusFaceProperty=c=>a("zMinus",c),s(),i.setInputConnection(r.getOutputPort()),t.setMapper(i),t.addTexture(o)}const a_e={defaultStyle:{text:"",faceColor:"white",faceRotation:0,fontFamily:"Arial",fontColor:"black",fontStyle:"normal",fontSizeScale:t=>t/1.8,edgeThickness:.1,edgeColor:"black",resolution:200}};function fz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,a_e,r),dc.extend(t,e,r),J.get(t,e,["defaultStyle","xPlusFaceProperty","xMinusFaceProperty","yPlusFaceProperty","yMinusFaceProperty","zPlusFaceProperty","zMinusFaceProperty"]),o_e(t,e)}const s_e=J.newInstance(fz,"vtkAnnotatedCubeActor");var T7={newInstance:s_e,extend:fz,Presets:r_e};const{vtkErrorMacro:c_e}=J;function l_e(t,e){let r=0;return t.map((n,i)=>i===r?(r+=n+1,n):n+e)}function Zv(t,e,r,n){t.set(l_e(e,r),n)}function u_e(t,e){e.classHierarchy.push("vtkAppendPolyData"),t.requestData=(r,n)=>{const i=t.getNumberOfInputPorts();if(!i){c_e("No input specified.");return}if(i===1){n[0]=r[0];return}const o=Br.newInstance();let a=0,s=0,c=1,l=1,f=0,u=0,d=0,h=0,g=!0,p=!0,v=!0;for(let D=0;Dc?s:c);const O=I.getPointData();O?(g=g&&O.getNormals()!==null,p=p&&O.getTCoords()!==null,v=v&&O.getScalars()!==null):(g=!1,p=!1,v=!1)}e.outputPointsPrecision===Sy.SINGLE?s=xn.FLOAT:e.outputPointsPrecision===Sy.DOUBLE&&(s=xn.DOUBLE);const y=l1.newInstance({dataType:s});y.setNumberOfPoints(a);const m=y.getData(),w=new Uint32Array(f),x=new Uint32Array(u),C=new Uint32Array(d),S=new Uint32Array(h);let T=null,_=null,E=null;const b=r[i-1];if(g){const D=b.getPointData().getNormals();T=Bt.newInstance({numberOfComponents:3,numberOfTuples:a,size:3*a,dataType:D.getDataType(),name:D.getName()})}if(p){const D=b.getPointData().getTCoords();_=Bt.newInstance({numberOfComponents:2,numberOfTuples:a,size:2*a,dataType:D.getDataType(),name:D.getName()})}if(v){const D=b.getPointData().getScalars();E=Bt.newInstance({numberOfComponents:D.getNumberOfComponents(),numberOfTuples:a,size:a*D.getNumberOfComponents(),dataType:D.getDataType(),name:D.getName()})}a=0,f=0,u=0,d=0,h=0;for(let D=0;D2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,f_e,r),J.setGet(t,e,["outputPointsPrecision"]),J.obj(t,e),J.algo(t,e,1,1),u_e(t,e)}const d_e=J.newInstance(dz,"vtkAppendPolyData");var hz={newInstance:d_e,extend:dz};function h_e(t,e){e.classHierarchy.push("vtkConeSource");function r(n,i){if(e.deleted)return;let o=i[0];const a=2*Math.PI/e.resolution,s=-e.height/2,c=e.resolution+1,l=4*e.resolution+1+e.resolution;let f=0;const u=J.newTypedArray(e.pointType,c*3);let d=0;const h=new Uint32Array(l);u[0]=e.height/2,u[1]=0,u[2]=0,e.capping&&(h[d++]=e.resolution);for(let g=0;ge.resolution?1:g+2;Yi.buildFromRadian().translate(...e.center).rotateFromDirections([1,0,0],e.direction).apply(u),o=Br.newInstance(),o.getPoints().setData(u,3),o.getPolys().setData(h,1),i[0]=o}t.requestData=r}const g_e={height:1,radius:.5,resolution:6,center:[0,0,0],direction:[1,0,0],capping:!0,pointType:"Float64Array"};function gz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,g_e,r),J.obj(t,e),J.setGet(t,e,["height","radius","resolution","capping"]),J.setGetArray(t,e,["center","direction"],3),J.algo(t,e,0,1),h_e(t,e)}const p_e=J.newInstance(gz,"vtkConeSource");var m_e={newInstance:p_e,extend:gz};function v_e(t,e){e.classHierarchy.push("vtkCylinderSource");function r(n,i){if(e.deleted)return;let o=i[0];const a=2*Math.PI/e.resolution;let s=2*e.resolution,c=5*e.resolution;e.capping&&(s=4*e.resolution,c=7*e.resolution+2);const l=J.newTypedArray(e.pointType,s*3);let f=0;const u=new Uint32Array(c),d=new Float32Array(s*3),h=Bt.newInstance({numberOfComponents:3,values:d,name:"Normals"}),g=new Float32Array(s*2),p=Bt.newInstance({numberOfComponents:2,values:g,name:"TCoords"}),v=[0,0,0],y=[0,0,0],m=[0,0,0],w=[0,0,0],x=[0,0],C=[0,0],S=e.otherRadius==null?e.radius:e.otherRadius;for(let T=0;TT*-1)).apply(l),o=Br.newInstance(),o.getPoints().setData(l,3),o.getPolys().setData(u,1),o.getPointData().setNormals(h),o.getPointData().setTCoords(p),i[0]=o}t.requestData=r}const y_e={height:1,initAngle:0,radius:1,resolution:6,center:[0,0,0],direction:[0,1,0],capping:!0,pointType:"Float64Array"};function pz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,y_e,r),J.obj(t,e),J.setGet(t,e,["height","initAngle","otherRadius","radius","resolution","capping"]),J.setGetArray(t,e,["center","direction"],3),J.algo(t,e,0,1),v_e(t,e)}const w_e=J.newInstance(pz,"vtkCylinderSource");var x_e={newInstance:w_e,extend:pz};function C_e(t,e){e.classHierarchy.push("vtkArrowSource");function r(n,i){if(e.deleted)return;const o=x_e.newInstance({capping:!0});o.setResolution(e.shaftResolution),o.setRadius(e.shaftRadius),o.setHeight(1-e.tipLength),o.setCenter(0,(1-e.tipLength)*.5,0);const a=o.getOutputData(),s=a.getPoints().getData(),c=a.getPointData().getNormals().getData();Yi.buildFromDegree().rotateZ(-90).apply(s).apply(c);const l=m_e.newInstance();l.setResolution(e.tipResolution),l.setHeight(e.tipLength),l.setRadius(e.tipRadius);const f=l.getOutputData(),u=f.getPoints().getData();Yi.buildFromRadian().translate(1-e.tipLength*.5,0,0).apply(u);const d=hz.newInstance();d.setInputData(a),d.addInputData(f);const h=d.getOutputData(),g=h.getPoints().getData();Yi.buildFromRadian().translate(-.5+e.tipLength*.5,0,0).apply(g),e.invert?(Yi.buildFromRadian().rotateFromDirections([1,0,0],e.direction).scale(-1,-1,-1).apply(g),i[0]=h):(Yi.buildFromRadian().rotateFromDirections([1,0,0],e.direction).scale(1,1,1).apply(g),i[0]=d.getOutputData())}t.requestData=r}const S_e={tipResolution:6,tipRadius:.1,tipLength:.35,shaftResolution:6,shaftRadius:.03,invert:!1,direction:[1,0,0],pointType:"Float64Array"};function mz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,S_e,r),J.obj(t,e),J.setGet(t,e,["tipResolution","tipRadius","tipLength","shaftResolution","shaftRadius","invert"]),J.setGetArray(t,e,["direction"],3),J.algo(t,e,0,1),C_e(t,e)}const T_e=J.newInstance(mz,"vtkArrowSource");var $3={newInstance:T_e,extend:mz};function j3(t){const e=t.getPoints().getBounds(),r=[-(e[0]+e[1])*.5,-(e[2]+e[3])*.5,-(e[4]+e[5])*.5];Yi.buildFromDegree().translate(...r).apply(t.getPoints().getData())}function H3(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const n=t.getPoints().getBounds(),i=[0,0,0];r?i[e]=-n[e*2+1]:i[e]=-n[e*2],Yi.buildFromDegree().translate(...i).apply(t.getPoints().getData())}function K3(t,e,r,n){const i=t.getPoints().getData().length,o=new Uint8ClampedArray(i);let a=0;for(;a{let i={...e.config,...e.xConfig};const o=$3.newInstance({direction:[1,0,0],...i}).getOutputData();e.config.recenter?j3(o):H3(o,0,i.invert),K3(o,...i.color),i={...e.config,...e.yConfig};const a=$3.newInstance({direction:[0,1,0],...i}).getOutputData();e.config.recenter?j3(a):H3(a,1,i.invert),K3(a,...i.color),i={...e.config,...e.zConfig};const s=$3.newInstance({direction:[0,0,1],...i}).getOutputData();e.config.recenter?j3(s):H3(s,2,i.invert),K3(s,...i.color);const c=hz.newInstance();c.setInputData(o),c.addInputData(a),c.addInputData(s),r.setInputConnection(c.getOutputPort())},t.update();const n=J.debounce(t.update,0);t.setXAxisColor=i=>t.setXConfig({...t.getXConfig(),color:i}),t.setYAxisColor=i=>t.setYConfig({...t.getYConfig(),color:i}),t.setZAxisColor=i=>t.setZConfig({...t.getZConfig(),color:i}),t.getXAxisColor=()=>e.getXConfig().color,t.getYAxisColor=()=>e.getYConfig().color,t.getZAxisColor=()=>e.getZConfig().color,e._onConfigChanged=n,e._onXConfigChanged=n,e._onYConfigChanged=n,e._onZConfigChanged=n}function E_e(t){return{config:{recenter:!0,tipResolution:60,tipRadius:.1,tipLength:.2,shaftResolution:60,shaftRadius:.03,invert:!1,...t==null?void 0:t.config},xConfig:{color:[255,0,0],invert:!1,...t==null?void 0:t.xConfig},yConfig:{color:[255,255,0],invert:!1,...t==null?void 0:t.yConfig},zConfig:{color:[0,128,0],invert:!1,...t==null?void 0:t.zConfig}}}function vz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};dc.extend(t,e,E_e(r)),J.setGet(t,e,["config","xConfig","yConfig","zConfig"]),__e(t,e)}const b_e=J.newInstance(vz,"vtkAxesActor");var D_e={newInstance:b_e,extend:vz},O5;(function(t){t[t.ANNOTATED_CUBE=1]="ANNOTATED_CUBE",t[t.AXES=2]="AXES",t[t.CUSTOM=3]="CUSTOM"})(O5||(O5={}));const zc=class zc extends vi{constructor(e={},r={configuration:{orientationWidget:{enabled:!0,viewportCorner:S7.Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:zc.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[zc.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"L",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"R",faceColor:"#ffff00",faceRotation:270},yPlus:{text:"P",faceColor:"#00ffff",fontColor:"white",faceRotation:180},yMinus:{text:"A",faceColor:"#00ffff",fontColor:"white"},zPlus:{text:"S"},zMinus:{text:"I"}},defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:n=>n/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[zc.OVERLAY_MARKER_TYPES.AXES]:{},[zc.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}){super(e,r),this._resizeObservers=new Map,this.onSetToolEnabled=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolActive=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolDisabled=()=>{this.cleanUpData(),this._unsubscribeToViewportNewVolumeSet()},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.resize=n=>{const i=this.orientationMarkers[n];if(!i)return;const{orientationWidget:o}=i;o.updateViewport()},this.orientationMarkers={},this.updatingOrientationMarker={}}_unsubscribeToViewportNewVolumeSet(){const e=()=>{this._getViewportsInfo().forEach(({viewportId:n,renderingEngineId:i})=>{const{viewport:o}=Oi(n,i),{element:a}=o;a.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this)),this._resizeObservers.get(n).unobserve(a)})};et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,r=>{r.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}_subscribeToViewportEvents(){const e=()=>{this._getViewportsInfo().forEach(({viewportId:n,renderingEngineId:i})=>{const{viewport:o}=Oi(n,i),{element:a}=o;this.initViewports(),a.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this));const s=new ResizeObserver(()=>{setTimeout(()=>{const c=Oi(n,i);if(!c)return;const{viewport:l}=c;this.resize(n),l.render()},100)});s.observe(a),this._resizeObservers.set(n,s)})};e(),et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,r=>{r.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}cleanUpData(){Bo()[0].getViewports().forEach(i=>{const o=this.orientationMarkers[i.id];if(!o)return;const{actor:a,orientationWidget:s}=o;s==null||s.setEnabled(!1),s==null||s.delete(),a==null||a.delete(),i.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),i.getRenderingEngine().render(),delete this.orientationMarkers[i.id]})}initViewports(){const r=Bo()[0];if(!r)return;let n=r.getViewports();n=Vw(n,this.getToolName()),n.forEach(i=>{const o=i.getWidget(this.getToolName());(!o||o.isDeleted())&&this.addAxisActorInViewport(i)})}async addAxisActorInViewport(e){const r=e.id;if(!this.updatingOrientationMarker[r]){this.updatingOrientationMarker[r]=!0;const n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[r]){const{actor:g,orientationWidget:p}=this.orientationMarkers[r];e.getRenderer().removeActor(g),p.setEnabled(!1)}let o;n===1?o=this.createAnnotationCube(i):n===2?o=D_e.newInstance():n===3&&(o=await this.createCustomActor());const a=e.getRenderer(),s=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:c,viewportCorner:l,viewportSize:f,minPixelSize:u,maxPixelSize:d}=this.configuration.orientationWidget,h=S7.newInstance({actor:o,interactor:s.getInteractor(),parentRenderer:a});h.setEnabled(c),h.setViewportCorner(l),h.setViewportSize(f),h.setMinPixelSize(u),h.setMaxPixelSize(d),h.updateMarkerOrientation(),this.orientationMarkers[r]={orientationWidget:h,actor:o},e.addWidget(this.getToolName(),h),s.render(),e.getRenderingEngine().render(),this.updatingOrientationMarker[r]=!1}}async createCustomActor(){const e=this.configuration.overlayConfiguration[O5.CUSTOM].polyDataURL,n=await(await fetch(e)).arrayBuffer(),i=cV.newInstance();i.parseAsArrayBuffer(n),i.update();const o=Br.newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=wa.newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const s=dc.newInstance();return s.setMapper(a),s.rotateZ(180),s}createAnnotationCube(e){const r=T7.newInstance();return r.setDefaultStyle({...e.defaultStyle}),r.setXPlusFaceProperty({...e.faceProperties.xPlus}),r.setXMinusFaceProperty({...e.faceProperties.xMinus}),r.setYPlusFaceProperty({...e.faceProperties.yPlus}),r.setYMinusFaceProperty({...e.faceProperties.yMinus}),r.setZPlusFaceProperty({...e.faceProperties.zPlus}),r.setZMinusFaceProperty({...e.faceProperties.zMinus}),r}async createAnnotatedCubeActor(){const e=T7.newInstance(),{faceProperties:r,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(r).forEach(i=>{const o=`set${i.charAt(0).toUpperCase()+i.slice(1)}FaceProperty`;e[o](r[i])}),e}};zc.CUBE=1,zc.AXIS=2,zc.VTPFILE=3,zc.OVERLAY_MARKER_TYPES=O5;let M5=zc;M5.toolName="OrientationMarker";const Bp=class Bp extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:Bp.SelectMode.Border,searchRadius:6}}){super(e,r),this.mouseMoveCallback=n=>{if(this.mode===Fn.Active)return this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setActiveSegment(n),this.hoverTimer=null},this.configuration.hoverTimeout),!0},this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.hoverTimer=null}_setActiveSegment(e={}){if(Ye.isInteractingWithTool)return;const{element:r,currentPoints:n}=e.detail,i=n.world,o=_e(r);if(!o)return;const{viewport:a}=o,s=cu(a.id);s&&this._setActiveSegmentForType(s,i,a)}_setActiveSegmentForType(e,r,n){if(!n.getImageData())return;const{segmentationId:o,representationData:a}=e;let s;if(this.configuration.mode===Bp.SelectMode.Inside?s=b8(o,r,{viewport:n}):a.Labelmap?s=eW(o,r,{viewport:n,searchRadius:this.configuration.searchRadius}):a.Contour?s=nW(o):a.Surface,!s||s===0)return;S5(o,s);const l=n.getRenderingEngine().getViewports().map(f=>f.id);es(o),Be(l)}};Bp.SelectMode={Inside:"Inside",Border:"Border"};let P5=Bp;P5.toolName="SegmentSelectTool";const U0=class U0 extends N1{constructor(e={}){super(e),this.renderAnnotation=(r,n)=>{let i=!0;const{viewport:o}=r,{element:a}=o,s=o.id;let c=hn(this.getToolName(),a);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(a,c),!(c!=null&&c.length)))return i;const l=this.getTargetId(o),f=o.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:r.viewport.id};for(let d=0;do.worldToCanvas(ue));u.annotationUID=g;const{segmentIndex:w,segmentationId:x}=h.metadata,{lineWidth:C,lineDash:S,shadow:T}=this.getAnnotationStyle({annotation:h,styleSpecifier:u}),E=`rgb(${iu(s,x,w).slice(0,3).join(",")})`;if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(h,f,r)):h.invalidated&&this._throttledCalculateCachedStats(h,f,r),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let b;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(b=[m[y]]),b&&or(n,g,"0",b,{color:E});const D=`${g}-line-1`,I=`${g}-line-2`;Sn(n,g,"0",m[0],m[1],{color:E,lineWidth:C,lineDash:S,shadow:T},D),Sn(n,g,"1",m[2],m[3],{color:E,lineWidth:C,lineDash:S,shadow:T},I),i=!0;const A=this.getLinkedTextBoxStyle(u,h);if(!A.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}A.color=E;const V=this.configuration.getTextLines(p,l);if(!V||V.length===0)continue;let G;p.handles.textBox.hasMoved||(G=Oa(m),p.handles.textBox.worldPosition=o.canvasToWorld(G));const R=o.worldToCanvas(p.handles.textBox.worldPosition),F=ho(n,g,"1",V,R,m,{},A),{x:j,y:te,width:ie,height:he}=F;p.handles.textBox.worldBoundingBox={topLeft:o.canvasToWorld([j,te]),topRight:o.canvasToWorld([j+ie,te]),bottomLeft:o.canvasToWorld([j,te+he]),bottomRight:o.canvasToWorld([j+ie,te+he])}}return i}}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,o=n.world,a=_e(i),{viewport:s}=a;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:l,viewUp:f}=c,u=this.getReferencedImageId(s,o,l,f),d=s.getFrameOfReferenceUID(),h={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...f],FrameOfReferenceUID:d,referencedImageId:u,...s.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};ln(h,i);const g=At(i,this.getToolName());return this.editData={annotation:h,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Gt(i),e.preventDefault(),Be(g),h}};U0.toolName="SegmentBidirectional",U0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{viewport:o}=i,c=mm().filter(T=>T.metadata.toolName==="SegmentBidirectional").find(T=>{const{metadata:_}=T;return _.segmentIndex===(n==null?void 0:n.segmentIndex)&&_.segmentationId===(n==null?void 0:n.segmentationId)});c&&mn(c.annotationUID);const{FrameOfReferenceUID:l,referencedImageId:f,viewPlaneNormal:u,instance:d}=U0.hydrateBase(U0,i,r[0],n),[h,g]=r,[p,v]=h,[y,m]=g,w=[p,v,y,m],{toolInstance:x,...C}=n||{},S={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:w,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{segmentIndex:n==null?void 0:n.segmentIndex,segmentationId:n==null?void 0:n.segmentationId,toolName:d.getToolName(),viewPlaneNormal:u,FrameOfReferenceUID:l,referencedImageId:f,...C}};return ln(S,o.element),Be([o.id]),S};let TT=U0;class yz extends vi{constructor(e={data:{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,searchRadius:6}}){super(e,r),this.mouseMoveCallback=n=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setHoveredSegment(n),this.hoverTimer=null},this.configuration.hoverTimeout),!0),this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.data=e.data??{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}},this.hoverTimer=null}_setHoveredSegment(e={}){if(Ye.isInteractingWithTool)return;const{element:r,currentPoints:n}=e.detail,i=n.world,o=_e(r);if(!o)return;const{viewport:a}=o,s=cu(a.id);s&&this._setHoveredSegmentForType(s,i,a)}_setHoveredSegmentForType(e,r,n){if(!n.getImageData())return;const{segmentationId:o}=e,a=b8(o,r,{viewport:n}),s=e.segments[a],c=s==null?void 0:s.label,l=n.worldToCanvas(r);if(this._editData={hoveredSegmentIndex:a,hoveredSegmentLabel:c,canvasCoordinates:l,worldPoint:r},!a||a===0)return;const u=n.getRenderingEngine().getViewports().map(d=>d.id);es(o),Be(u)}renderAnnotation(e,r){if(!this._editData)return;const{viewport:n}=e,{hoveredSegmentIndex:i,hoveredSegmentLabel:o,canvasCoordinates:a,worldPoint:s}=this._editData;if(!i)return;const c=n.worldToCanvas(s),l=ho(r,"segmentSelectLabelAnnotation","segmentSelectLabelTextBox",[o||"(unnamed segment)"],c,[a],{},{}),f=a[0],u=a[1],{width:d,height:h}=l;this.data.handles.textBox.worldBoundingBox={topLeft:n.canvasToWorld([f,u]),topRight:n.canvasToWorld([f+d,u]),bottomLeft:n.canvasToWorld([f,u+h]),bottomRight:n.canvasToWorld([f+d,u+h])}}}yz.toolName="SegmentLabelTool";const Mo=class Mo extends hl{constructor(e={}){const r=Ui({configuration:{calculateStats:!1,allowOpenContours:!1}},e);super(r),this.onViewportAddedToToolGroupBinded=this.onViewportAddedToToolGroup.bind(this),this.onSegmentationModifiedBinded=this.onSegmentationModified.bind(this)}initializeListeners(){Mo.annotationsToViewportMap.clear(),Mo.viewportIdsChecked=[],et.addEventListener(k.ANNOTATION_MODIFIED,this.annotationModified),et.addEventListener(k.ANNOTATION_COMPLETED,this.annotationCompleted),et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroupBinded),et.addEventListener(k.SEGMENTATION_MODIFIED,this.onSegmentationModifiedBinded)}cleanUpListeners(){Mo.annotationsToViewportMap.clear(),Mo.viewportIdsChecked=[],et.removeEventListener(k.ANNOTATION_MODIFIED,this.annotationModified),et.removeEventListener(k.ANNOTATION_COMPLETED,this.annotationCompleted),et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroup.bind(this)),et.removeEventListener(k.SEGMENTATION_MODIFIED,this.onSegmentationModified.bind(this))}async checkContourSegmentation(e){if(Mo.viewportIdsChecked.includes(e))return;const r=Od(e);if(!r)return console.log("No active segmentation detected"),!1;const n=r.segmentationId;return r.representationData.Contour?Mo.viewportIdsChecked.push(e):(Mo.viewportIdsChecked.push(e),await D8(e,[{segmentationId:n,type:Vt.Contour}]),kE({segmentationId:n,type:Vt.Contour,data:{}})),!0}onViewportAddedToToolGroup(e){const{toolGroupId:r,viewportId:n}=e.detail;r===this.toolGroupId&&this.checkContourSegmentation(n)}onSegmentationModified(e){const{segmentationId:r}=e.detail||{};if(!r)return;const n=aU(r);n&&n.forEach(async({viewportId:i})=>await this.checkContourSegmentation(i))}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.cleanUpListeners()}annotationModified(e){var a;const{annotation:r,renderingEngineId:n,viewportId:i}=e.detail,o=(a=jr(n))==null?void 0:a.getViewport(i);o&&Mo.annotationsToViewportMap.set(r.annotationUID,o)}annotationCompleted(e){var i,o;const{annotation:r}=e.detail,{polyline:n}=((i=r.data)==null?void 0:i.contour)||{};if(((o=r==null?void 0:r.metadata)==null?void 0:o.toolName)===Mo.toolName&&n&&Mo.annotationsToViewportMap.has(r.annotationUID)){const a=Mo.annotationsToViewportMap.get(r.annotationUID);n.length>3&&Qw.viewportContoursToLabelmap(a)}}};Mo.toolName="LabelMapEditWithContour",Mo.annotationsToViewportMap=new Map,Mo.viewportIdsChecked=[];let _T=Mo;const gb=class gb extends cr{constructor(e={}){super(e,{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),this.addNewAnnotation=r=>{const n=r.detail,{currentPoints:i,element:o}=n,a=i.world,s=_e(o),{viewport:c}=s;this.isDrawing=!0;const l=this.constructor.createAnnotationForViewport(c,{data:{handles:{points:[[...a],[...a],[...a],[...a]]}}});ln(l,o);const f=At(o,this.getToolName(),!1);return this.editData={annotation:l,viewportUIDsToRender:f,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Gt(o),r.preventDefault(),Be(f),l},this.getHandleNearImagePoint=(r,n,i,o)=>{const a=_e(r),{viewport:s}=a,{data:c}=n,{points:l}=c.handles;for(let f=0;f{const a=_e(r),{viewport:s}=a,{data:c}=n,{points:l}=c.handles,f=s.worldToCanvas(l[0]),u=s.worldToCanvas(l[3]),d=this._getRectangleImageCoordinates([f,u]),h=[i[0],i[1]],{left:g,top:p,width:v,height:y}=d;if(ZE([g,p,v,y],h)<=o)return!0},this.toolSelectedCallback=(r,n,i="mouse")=>{const o=r.detail,{element:a}=o,{data:s}=n;s.active=!0;const c=At(a,this.getToolName(),!1);this.editData={annotation:n,viewportUIDsToRender:c},this._activateModify(a),Gt(a),Be(c),r.preventDefault()},this.handleSelectedCallback=(r,n,i,o="mouse")=>{const a=r.detail,{element:s}=a,{data:c}=n;c.active=!0;let l;i.worldPosition||(l=c.handles.points.findIndex(u=>u===i));const f=At(s,this.getToolName(),!1);this.editData={annotation:n,viewportUIDsToRender:f,handleIndex:l},this._activateModify(s),Gt(s),Be(f),r.preventDefault()},this._endCallback=r=>{const n=r.detail,{element:i}=n,{annotation:o,viewportUIDsToRender:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=o;s&&!c||(this.doneEditMemo(),l.active=!1,l.handles.activeHandleIndex=null,this._deactivateModify(i),this._deactivateDraw(i),Jt(i),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(o.annotationUID),Be(a))},this._dragCallback=r=>{this.isDrawing=!0;const n=r.detail,{element:i}=n,{annotation:o,viewportUIDsToRender:a,handleIndex:s,newAnnotation:c}=this.editData;this.createMemo(i,o,{newAnnotation:c});const{data:l}=o;if(s===void 0){const{deltaPoints:f}=n,u=f.world,{points:d}=l.handles;d.forEach(h=>{h[0]+=u[0],h[1]+=u[1],h[2]+=u[2]}),l.invalidated=!0}else{const{currentPoints:f}=n,u=_e(i),{worldToCanvas:d,canvasToWorld:h}=u.viewport,g=f.world,{points:p}=l.handles;p[s]=[...g];let v,y,m,w,x,C,S,T;switch(s){case 0:case 3:v=d(p[0]),w=d(p[3]),y=[w[0],v[1]],m=[v[0],w[1]],C=h(y),S=h(m),p[1]=C,p[2]=S;break;case 1:case 2:y=d(p[1]),m=d(p[2]),v=[m[0],y[1]],w=[y[0],m[1]],x=h(v),T=h(w),p[0]=x,p[3]=T;break}l.invalidated=!0}this.editData.hasMoved=!0,_e(i),Be(a)},this._activateDraw=r=>{Ye.isInteractingWithTool=!0,r.addEventListener(k.MOUSE_UP,this._endCallback),r.addEventListener(k.MOUSE_DRAG,this._dragCallback),r.addEventListener(k.MOUSE_MOVE,this._dragCallback),r.addEventListener(k.MOUSE_CLICK,this._endCallback),r.addEventListener(k.TOUCH_END,this._endCallback),r.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=r=>{Ye.isInteractingWithTool=!1,r.removeEventListener(k.MOUSE_UP,this._endCallback),r.removeEventListener(k.MOUSE_DRAG,this._dragCallback),r.removeEventListener(k.MOUSE_MOVE,this._dragCallback),r.removeEventListener(k.MOUSE_CLICK,this._endCallback),r.removeEventListener(k.TOUCH_END,this._endCallback),r.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateModify=r=>{Ye.isInteractingWithTool=!0,r.addEventListener(k.MOUSE_UP,this._endCallback),r.addEventListener(k.MOUSE_DRAG,this._dragCallback),r.addEventListener(k.MOUSE_CLICK,this._endCallback),r.addEventListener(k.TOUCH_END,this._endCallback),r.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=r=>{Ye.isInteractingWithTool=!1,r.removeEventListener(k.MOUSE_UP,this._endCallback),r.removeEventListener(k.MOUSE_DRAG,this._dragCallback),r.removeEventListener(k.MOUSE_CLICK,this._endCallback),r.removeEventListener(k.TOUCH_END,this._endCallback),r.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(r,n)=>{const{viewport:o}=r,{element:a}=o;let s=hn(this.getToolName(),a);if(!(s!=null&&s.length)||(s=this.filterInteractableAnnotationsForElement(a,s),!(s!=null&&s.length)))return!1;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:r.viewport.id};for(let l=0;lo.worldToCanvas(C)),v=this.getStyle("lineWidth",c,f),y=this.getStyle("lineDash",c,f),m=this.getStyle("color",c,f);if(!o.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");return}let w;!this.editData&&g!==null&&(w=[p[g]]),w&&or(n,u,"0",w,{color:m}),GU(n,u,"0",p[0],p[3],{color:"black",lineDash:y,lineWidth:v})}},this._getRectangleImageCoordinates=r=>{const[n,i]=r;return{left:Math.min(n[0],i[0]),top:Math.min(n[1],i[1]),width:Math.abs(n[0]-i[0]),height:Math.abs(n[1]-i[1])}},this._calculateCachedStats=(r,n,i,o,a)=>{const{data:s}=r,{viewportUID:c,renderingEngineUID:l,sceneUID:f}=a,u=s.handles.points[0],d=s.handles.points[3],{cachedStats:h}=s,g=Object.keys(h);for(let v=0;vhr(r,i)&&hr(n,i),this._getTargetVolumeUID=r=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const n=r.getVolumeActors();if(!(!n&&!n.length))return n[0].uid},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Jt(e);const{annotation:r,viewportUIDsToRender:n}=this.editData,{data:i}=r;return i.active=!1,i.handles.activeHandleIndex=null,Be(n),this.editData=null,r.metadata.annotationUID}_getImageVolumeFromTargetUID(e,r){let n,i;if(e.startsWith("stackTarget")){const o=e.indexOf(":"),a=e.substring(o+1);n=r.getViewport(a).getImageData()}else n=$e.getVolume(e);return{imageVolume:n,viewport:i}}_getTargetStackUID(e){return`stackTarget:${e.uid}`}};gb.toolName="VideoRedaction";let ET=gb;const wz=Object.freeze(Object.defineProperty({__proto__:null,AdvancedMagnifyTool:G1,AngleTool:gT,AnnotationDisplayTool:_f,AnnotationTool:cr,ArrowAnnotateTool:pf,BaseTool:vi,BidirectionalTool:N1,BrushTool:Qw,CONSTANTS:iwe,CircleROIStartEndThresholdTool:oz,CircleROITool:_5,CircleScissorsTool:rz,CobbAngleTool:pT,CrosshairsTool:jc,DragProbeTool:uT,ETDRSGridTool:fT,EllipticalROITool:Ad,Enums:tF,EraserTool:ez,HeightTool:lT,KeyImageTool:xT,LabelMapEditWithContourTool:_T,LabelTool:T5,LabelmapBaseTool:Rd,LengthTool:gf,LivewireContourSegmentationTool:hT,LivewireContourTool:D5,MIPJumpToClickTool:$W,MagnifyTool:jW,OrientationMarkerTool:M5,OverlayGridTool:HW,PaintFillTool:az,PanTool:Qu,PlanarFreehandContourSegmentationTool:hl,PlanarFreehandROITool:hf,PlanarRotateTool:Mh,ProbeTool:au,RectangleROIStartEndThresholdTool:S8,RectangleROIThresholdTool:T8,RectangleROITool:ou,RectangleScissorsTool:nz,ReferenceCursors:Ba,ReferenceLinesTool:pd,RegionSegmentPlusTool:ST,RegionSegmentTool:CT,ScaleOverlayTool:YW,SculptorTool:Ph,SegmentBidirectionalTool:TT,SegmentLabelTool:yz,SegmentSelectTool:P5,SegmentationIntersectionTool:KW,SphereScissorsTool:iz,SplineContourSegmentationTool:dT,SplineROITool:E5,StackScrollTool:Ld,Synchronizer:y8,SynchronizerManager:nG,ToolGroupManager:mF,TrackballRotateTool:WW,Types:MSe,UltrasoundDirectionalTool:mT,UltrasoundPleuraBLineTool:wT,VideoRedactionTool:ET,VolumeRotateTool:ZW,WholeBodySegmentTool:tz,WindowLevelRegionTool:zW,WindowLevelTool:Oh,ZoomTool:Gl,addTool:ki,annotation:aye,cancelActiveManipulations:tG,cursors:ipe,destroy:twe,drawing:Ome,init:rG,removeTool:TF,segmentation:YSe,splines:tTe,get state(){return Ye},store:ewe,synchronizers:Ewe,utilities:OSe,version:owe},Symbol.toStringTag,{value:"Module"}));function xz(t,e,r){if(t===void 0)throw new Error("decodeRGB: rgbBuffer must be defined");if(t.length%3!==0)throw new Error(`decodeRGB: rgbBuffer length ${t.length} must be divisible by 3`);const n=t.length/3;let i=0,o=0;if(r){for(let a=0;a>e;return n}function X3(t,e,r){const n=t[`${e}PaletteColorLookupTableData`];if(n)return Promise.resolve(n);const i=wt("imagePixelModule",t.imageId);return i&&typeof i.then=="function"?i.then(o=>o?o[`${e}PaletteColorLookupTableData`]:r):Promise.resolve(i?i[`${e}PaletteColorLookupTableData`]:r)}function _z(t,e,r){const n=t.columns*t.rows,i=t.pixelData;Promise.all([X3(t,"red",null),X3(t,"green",null),X3(t,"blue",null)]).then(([o,a,s])=>{if(!o||!a||!s)throw new Error("The image does not have a complete color palette. R, G, and B palette data are required.");const c=o.length;let l=0,f=0;const u=t.redPaletteColorLookupTableDescriptor[1],d=t.redPaletteColorLookupTableDescriptor[2]===8?0:8,h=q3(o,d),g=q3(a,d),p=q3(s,d);if(r){for(let v=0;vu+c-1?y=c-1:y-=u,e[f++]=h[y],e[f++]=g[y],e[f++]=p[y],e[f++]=255}return}for(let v=0;vu+c-1?y=c-1:y-=u,e[f++]=h[y],e[f++]=g[y],e[f++]=p[y]}})}function Y3(t,e){if(!(!t.elements[e]||t.elements[e].length!==6))return[t.uint16(e,0),t.uint16(e,1),t.uint16(e,2)]}function J3(t,e,r){const n=[],i=t.elements[e];for(let o=0;o0?0:t.uint16("x00280103")}function mc(t,e,r){const n=[],i=t.string(e);if(!i)return;const o=i.split("\\");if(!(r&&o.lengthoe.byteArray.length-oe.position&&(Ot=oe.byteArray.length-oe.position),ce.fragments.push({offset:oe.position-le-8,position:oe.position,length:Ot}),oe.seek(Ot),void(ce.length=oe.position-ce.dataOffset);ce.fragments.push({offset:oe.position-le-8,position:oe.position,length:Ot}),oe.seek(Ot)}Te&&Te.push("pixel data element ".concat(ce.tag," missing sequence delimiter tag xfffee0dd"))}function T(oe,ce){if(oe===void 0)throw"dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'";for(var Te=oe.byteArray.length-8;oe.position<=Te;)if(oe.readUint16()===65534){var ae=oe.readUint16();if(ae===57565)return oe.readUint32()!==0&&oe.warnings("encountered non zero length following item delimiter at position ".concat(oe.position-4," while reading element of undefined length with tag ").concat(ce.tag)),void(ce.length=oe.position-ce.dataOffset)}ce.length=oe.byteArray.length-ce.dataOffset,oe.seek(oe.byteArray.length-oe.position)}function _(oe,ce,Te){if(Te<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(ce+Te>oe.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var ae,we="",Ze=0;Zece.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";for(var we=oe.elements;ce.positionTe)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"}function ie(oe,ce,Te){var ae=3ce.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";for(var we=oe.elements;ce.positionoe.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(oe[ce]<<8)+oe[ce+1]},readInt16:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(ce+2>oe.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";return ce=(oe[ce]<<8)+oe[ce+1],ce=32768&ce?ce-65535-1:ce},readUint32:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*oe[ce]+oe[ce+1])+oe[ce+2])+oe[ce+3]},readInt32:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(oe[ce]<<24)+(oe[ce+1]<<16)+(oe[ce+2]<<8)+oe[ce+3]},readFloat:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var Te=new Uint8Array(4);return Te[3]=oe[ce],Te[2]=oe[ce+1],Te[1]=oe[ce+2],Te[0]=oe[ce+3],new Float32Array(Te.buffer)[0]},readDouble:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(ce+8>oe.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var Te=new Uint8Array(8);return Te[7]=oe[ce],Te[6]=oe[ce+1],Te[5]=oe[ce+2],Te[4]=oe[ce+3],Te[3]=oe[ce+4],Te[2]=oe[ce+5],Te[1]=oe[ce+6],Te[0]=oe[ce+7],new Float64Array(Te.buffer)[0]}};function Me(oe,ce,Te){if(typeof Buffer<"u"&&oe instanceof Buffer)return oe.slice(ce,ce+Te);if(oe instanceof Uint8Array)return new Uint8Array(oe.buffer,oe.byteOffset+ce,Te);throw"dicomParser.from: unknown type for byteArray"}function Ue(oe,ce){for(var Te=0;Te"u"||!(we instanceof Buffer)))throw"dicomParser.ByteStream: parameter byteArray is not of type Uint8Array or Buffer";if(Ze<0)throw"dicomParser.ByteStream: parameter 'position' cannot be less than 0";if(Ze>=we.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=ae,this.byteArray=we,this.position=Ze||0,this.warnings=[]}var ce,Te;return ce=oe,(Te=[{key:"seek",value:function(ae){if(this.position+ae<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=ae}},{key:"readByteStream",value:function(ae){if(this.position+ae>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var we=Me(this.byteArray,this.position,ae);return this.position+=ae,new oe(this.byteArrayParser,we)}},{key:"getSize",value:function(){return this.byteArray.length}},{key:"readUint16",value:function(){var ae=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,ae}},{key:"readUint32",value:function(){var ae=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,ae}},{key:"readFixedString",value:function(ae){var we=_(this.byteArray,this.position,ae);return this.position+=ae,we}}])&&Ue(ce.prototype,Te),Object.defineProperty(ce,"prototype",{writable:!1}),oe}(),B={readUint16:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(ce+2>oe.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return oe[ce]+256*oe[ce+1]},readInt16:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(ce+2>oe.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";return ce=oe[ce]+(oe[ce+1]<<8),ce=32768&ce?ce-65535-1:ce},readUint32:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return oe[ce]+256*oe[ce+1]+256*oe[ce+2]*256+256*oe[ce+3]*256*256},readInt32:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return oe[ce]+(oe[ce+1]<<8)+(oe[ce+2]<<16)+(oe[ce+3]<<24)},readFloat:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var Te=new Uint8Array(4);return Te[0]=oe[ce],Te[1]=oe[ce+1],Te[2]=oe[ce+2],Te[3]=oe[ce+3],new Float32Array(Te.buffer)[0]},readDouble:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(ce+8>oe.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var Te=new Uint8Array(8);return Te[0]=oe[ce],Te[1]=oe[ce+1],Te[2]=oe[ce+2],Te[3]=oe[ce+3],Te[4]=oe[ce+4],Te[5]=oe[ce+5],Te[6]=oe[ce+6],Te[7]=oe[ce+7],new Float64Array(Te.buffer)[0]}};function M(oe){var ce=1"u")throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax";return gt=oe.slice(Ae),ht=pako.inflateRaw(gt),(gt=he(oe,ht.length+Ae)).set(oe.slice(0,Ae),0),gt.set(ht,Ae),new be(B,gt,0)}(Tt,Ot.position),Ot=new D(Tt.byteArrayParser,Tt.byteArray,{});Ot.warnings=Tt.warnings;try{(le?te:ie)(Ot,Tt,Tt.byteArray.length,ce)}catch(_t){throw{exception:_t,dataSet:Ot}}return Ot}return function(Ze,le){for(var Tt in Ze.elements)Ze.elements.hasOwnProperty(Tt)&&(le.elements[Tt]=Ze.elements[Tt]);return Ze.warnings!==void 0&&(le.warnings=Ze.warnings.concat(le.warnings)),le}(Te=M(oe,ce),we(Te))}var Y=function(oe,ce,Te){for(var ae=0,we=ce;we= 0";if(Te>=le.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(ae<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(Te+ae>le.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var Ze=new be(oe.byteArrayParser,oe.byteArray,le.dataOffset),le=A(Ze);if(le.tag!=="xfffee000")throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";Ze.seek(le.length);var Tt=Ze.position;if(ae===1)return Me(Ze.byteArray,Tt+we[Te].offset+8,we[Te].length);for(var le=Y(we,Te,ae),Ot=he(Ze.byteArray,le),_t=0,Ae=Te;Ae= 0";if(Te>=ae.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var Ze=ae[Te],Ze=re(we,Ze);if(Ze===void 0)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";return ne(oe,ce,Ze,Se(Te,ae,we,Ze),we)}var je=!1;function qe(oe,ce,Te){if(je||(je=!0,console&&console.log&&console.log("WARNING: dicomParser.readEncapsulatedPixelData() has been deprecated")),oe===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'";if(ce===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'element'";if(Te===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'";if(ce.tag!=="x7fe00010")throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to non pixel data tag (expected tag = x7fe00010)";if(ce.encapsulatedPixelData!==!0||ce.hadUndefinedLength!==!0||ce.basicOffsetTable===void 0||ce.fragments===void 0)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(Te<0)throw"dicomParser.readEncapsulatedPixelData: parameter 'frame' must be >= 0";return ce.basicOffsetTable.length!==0?Re(oe,ce,Te):ne(oe,ce,0,ce.fragments.length)}s.default={isStringVr:f,isPrivateTag:u,parsePN:d,parseTM:h,parseDA:p,explicitElementToString:v,explicitDataSetToJS:y,createJPEGBasicOffsetTable:x,parseDicomDataSetExplicit:te,parseDicomDataSetImplicit:ie,readFixedString:_,alloc:he,version:ue,bigEndianByteArrayParser:ve,ByteStream:be,sharedCopy:Me,DataSet:D,findAndSetUNElementLength:T,findEndOfEncapsulatedElement:S,findItemDelimitationItemAndSetElementLength:I,littleEndianByteArrayParser:B,parseDicom:W,readDicomElementExplicit:j,readDicomElementImplicit:O,readEncapsulatedImageFrame:Re,readEncapsulatedPixelData:qe,readEncapsulatedPixelDataFromFragments:ne,readPart10Header:M,readSequenceItemsExplicit:N,readSequenceItemsImplicit:G,readSequenceItem:A,readTag:C,LEI:"1.2.840.10008.1.2",LEE:"1.2.840.10008.1.2.1"}}],o={},n.m=i,n.c=o,n.d=function(a,s,c){n.o(a,s)||Object.defineProperty(a,s,{enumerable:!0,get:c})},n.r=function(a){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},n.t=function(a,s){if(1&s&&(a=n(a)),8&s||4&s&&typeof a=="object"&&a&&a.__esModule)return a;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:a}),2&s&&typeof a!="string")for(var l in a)n.d(c,l,(function(f){return a[f]}).bind(null,l));return c},n.n=function(a){var s=a&&a.__esModule?function(){return a.default}:function(){return a};return n.d(s,"a",s),s},n.o=function(a,s){return Object.prototype.hasOwnProperty.call(a,s)},n.p="",n(n.s=1);function n(a){if(o[a])return o[a].exports;var s=o[a]={i:a,l:!1,exports:{}};return i[a].call(s.exports,s,s.exports,n),s.l=!0,s.exports}var i,o})})(Dz);var Nr=Dz.exports;function Mm(t){const e=t.indexOf(":");let r=t.substring(e+1);const n=r.indexOf("frame=");let i;if(n!==-1){const s=r.substring(n+6);i=parseInt(s,10),r=r.substring(0,n-1)}const o=t.substring(0,e),a=i!==void 0?i-1:void 0;return{scheme:o,url:r,frame:i,pixelDataFrame:a}}let DT={open(t,e){t.open("get",e,!0)},beforeSend(){},beforeProcessing(t){return Promise.resolve(t.response)},imageCreated(){},strict:!1};function Iz(t){DT=Object.assign(DT,t)}function Pm(){return DT}function nx(t,e,r={},n={}){const i=Pm(),o=c=>{if(typeof i.errorInterceptor=="function"){const l=new Error("request failed");l.request=c,l.response=c.response,l.status=c.status,i.errorInterceptor(l)}},a=new XMLHttpRequest,s=new Promise((c,l)=>{i.open(a,t,r,n);const f=i.beforeSend(a,e,r,n);a.responseType="arraybuffer";const u=Object.assign({},r,f);Object.keys(u).forEach(function(d){u[d]!==null&&(d==="Accept"&&t.indexOf("accept=")!==-1||a.setRequestHeader(d,u[d]))}),n.deferred={resolve:c,reject:l},n.url=t,n.imageId=e,a.onloadstart=function(d){i.onloadstart&&i.onloadstart(d,n),ut(et,"cornerstoneimageloadstart",{url:t,imageId:e})},a.onloadend=function(d){i.onloadend&&i.onloadend(d,n),ut(et,"cornerstoneimageloadend",{url:t,imageId:e})},a.onreadystatechange=function(d){i.onreadystatechange&&i.onreadystatechange(d,n),a.readyState===4&&(a.status===200||a.status===206?i.beforeProcessing(a).then(c).catch(()=>{o(a),l(a)}):(o(a),l(a)))},a.onprogress=function(d){const h=d.loaded;let g,p;d.lengthComputable&&(g=d.total,p=Math.round(h/g*100)),ut(et,"cornerstoneimageloadprogress",{url:t,imageId:e,loaded:h,total:g,percentComplete:p}),i.onprogress&&i.onprogress(d,n)},a.onerror=function(){o(a),l(a)},a.onabort=function(){o(a),l(a)},a.send()});return s.xhr=a,s}function L_e(t,e,r){if(r+t.length>e.length)return!1;let n=r;for(let i=0;iy.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}));y.queue.writeBuffer(b[0],0,new Uint32Array(h));const D=[0,1].map(()=>y.createBuffer({size:m,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST})),I=y.createBuffer({size:w,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),P=y.createBuffer({size:x,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),O=new Int32Array([l,f,u,-1,-1,-1]);y.queue.writeBuffer(P,0,O);const A=y.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:5,visibility:GPUShaderStage.COMPUTE,buffer:{type:"read-only-storage"}},{binding:6,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:7,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),V=[0,1].map(Re=>{const je=b[Re],qe=D[Re],oe=b[(Re+1)%2],ce=D[(Re+1)%2];return y.createBindGroup({layout:A,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:{buffer:E}},{binding:2,resource:{buffer:je}},{binding:3,resource:{buffer:qe}},{binding:4,resource:{buffer:oe}},{binding:5,resource:{buffer:ce}},{binding:6,resource:{buffer:I}},{binding:7,resource:{buffer:P}}]})}),G=y.createComputePipeline({layout:y.createPipelineLayout({bindGroupLayouts:[A]}),compute:{module:C,entryPoint:"main",constants:{workGroupSizeX:n[0],workGroupSizeY:n[1],workGroupSizeZ:n[2],windowSize:i}}}),R=[Math.ceil(l/n[0]),Math.ceil(f/n[1]),Math.ceil(u/n[2])],N=y.createBuffer({size:w,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),F=o?performance.now()+o:0;let j=a.numCyclesInterval,te=0;for(let Re=0;Re0&&!(Re%j)){await N.mapAsync(GPUMapMode.READ,0,w);const ce=N.getMappedRange(0,w),ae=new Uint32Array(ce.slice(0))[Re]/g.length;if(N.unmap(),Re>=1&&aeF){console.warn(`Exceeded processing time limit (${o})ms`);break}}const ie=y.createCommandEncoder(),he=(d+1)%2,ue=y.createBuffer({size:m,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),ve=y.createBuffer({size:x,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST});ie.copyBufferToBuffer(b[he],0,ue,0,m),ie.copyBufferToBuffer(P,0,ve,0,x),y.queue.submit([ie.finish()]),await ue.mapAsync(GPUMapMode.READ,0,m);const Me=ue.getMappedRange(0,m),Ue=new Uint32Array(Me);h.set(Ue),ue.unmap(),await ve.mapAsync(GPUMapMode.READ,0,x);const be=ve.getMappedRange(0,x),B=new Int32Array(be.slice(0));ve.unmap();const M=B[0],$=B[1],W=B[2],Y=B[3],ne=B[4],re=B[5];c.voxelManager.setCompleteScalarDataArray(h),c.voxelManager.clearBounds(),c.voxelManager.setBounds([[M,Y],[$,ne],[W,re]])}const{transformWorldToIndex:k1}=Rn,bCe=254,DCe=255,ICe=.1,OCe=.8;function MCe(t,e){const{topLeftWorld:r,bottomRightWorld:n}=e,i=k1(t.imageData,r),o=k1(t.imageData,n);return{...e,topLeftIJK:i,bottomRightIJK:o}}function PCe(t,e){const r=t.imageData.getDirection(),n=Ft(r[3],r[4],r[5]),{center:i,radius:o}=e,a=t.imageData,s=On(Ke(),i,n,-o),c=On(Ke(),i,n,o),l=uG([c,s],a);return MCe(t,l)}function RCe(t,e,r){const n=t.imageData,i=r.getCamera(),{ijkVecRowDir:o,ijkVecColDir:a}=Cw(n,i);if([o,a].some(f=>!Zt(Math.abs(f[0]),1)&&!Zt(Math.abs(f[1]),1)&&!Zt(Math.abs(f[2]),1))){console.warn("Oblique view is not supported!");return}const{boundsIJK:c}=PCe(t,e),l={minX:c[0][0],maxX:c[0][1]+1,minY:c[1][0],maxY:c[1][1]+1,minZ:c[2][0],maxZ:c[2][1]+1};return mE(t.volumeId,l,{targetBuffer:{type:"Float32Array"}})}function LCe(t,e,r,n){const i=t.voxelManager.getCompleteScalarDataArray(),o=r.center,[a,s,c]=t.dimensions,l=a*s,f=k1(t.imageData,o),u=i[f[2]*l+f[1]*a+f[0]],d=n.positiveSeedValue??bCe,h=n.positiveSeedVariance??ICe,g=Math.abs(u*h),p=u-g,v=u+g,y=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]],m=f[2]*l+f[1]*a+f[0];e.voxelManager.setAtIndex(m,d);const w=[f];for(;w.length;){const x=w.shift(),[C,S,T]=x;for(let _=0,E=y.length;_=a||I<0||I>=s||P<0||P>=c)continue;const O=P*l+I*a+D,A=i[O];e.voxelManager.getAtIndex(O)===d||Av||(e.voxelManager.setAtIndex(O,d),w.push([D,I,P]))}}}function ACe(t,e,r,n,i){const o=t.voxelManager.getCompleteScalarDataArray(),[a,s,c]=e.dimensions,l=a*s,{worldVecRowDir:f,worldVecSliceDir:u}=Cw(e.imageData,n.getCamera()),d=k1(t.imageData,r.center),h=o[d[2]*a*s+d[1]*a+d[0]],g=i.negativeSeedVariance??OCe,p=(i==null?void 0:i.negativeSeedValue)??DCe,v=Math.abs(h*g),y=h-v,m=h+v,w=360,x=2*Math.PI/w,C=tw(af(),u,x),S=VR(f);for(let T=0;T=a||D<0||D>=s||I<0||I>=c)continue;const P=b+D*a+I*l,O=o[P];(Om)&&e.voxelManager.setAtIndex(P,p)}}async function NCe(t,e,r,n){const i=await um(t.volumeId);return LCe(t,i,e,n),ACe(t,i,e,r,n),i}async function rW(t,e,r,n){const i=$e.getVolume(t),o=RCe(i,e,r),a=await NCe(o,e,r,n);return await ex(o.volumeId,a.volumeId),a}const kCe=254,VCe=255,FCe=[-1/0,-995],UCe=[0,1900];function BCe(t,e,r){const{negativeSeedValue:n=VCe,negativePixelRange:i=FCe}=r,o=t.voxelManager.getCompleteScalarDataArray(),[a,s,c]=e.dimensions,l=Math.floor(c/2),f=new Array(a*s).fill(!1),u=l*a*s,d=(g,p)=>{const v=[[g,p]];for(;v.length;){const[y,m]=v.shift(),w=m*a+y;if(y<0||y>=a||m<0||m>=s||f[w])continue;f[w]=!0;const x=u+w,C=o[x];Ci[1]||(e.voxelManager.setAtIndex(x,n),v.push([y-1,m]),v.push([y+1,m]),v.push([y,m-1]),v.push([y,m+1]))}},h=(g,p,v,y)=>{for(let m=g;m!==p;m+=v){const w=y*a+m,x=u+w,C=o[x];if(Ci[1])break;f[w]||d(m,y)}};for(let g=0;g=i[0]&&w<=i[1]&&e.voxelManager.setAtIndex(m,n)}}}}async function WCe(t,e){const r=um(t.volumeId);return GCe(t,r,e),BCe(t,r,e),r}async function iW(t,e,r){const{boundingBox:n}=e,{ijkTopLeft:i,ijkBottomRight:o}=n,a={minX:i[0],maxX:o[0],minY:i[1],maxY:o[1],minZ:i[2],maxZ:o[2]},s=mE(t,a,{targetBuffer:{type:"Float32Array"}}),c=await WCe(s,r);return await ex(s.volumeId,c.volumeId),c}const zCe=254,$Ce=255,jCe=1,oW=1.8,HCe=3.2,eT=30,KCe=70,qCe=50,{transformWorldToIndex:XCe}=Rn,tp=1e5;function aW(t,e,r){const{dimensions:n,imageData:i}=t,[o,a,s]=n,c=t.voxelManager,l=c.getCompleteScalarDataArray(),f=o*a,u=(r==null?void 0:r.initialNeighborhoodRadius)??jCe,d=(r==null?void 0:r.positiveStdDevMultiplier)??oW,h=(r==null?void 0:r.negativeStdDevMultiplier)??HCe,g=(r==null?void 0:r.negativeSeedMargin)??eT,p=(r==null?void 0:r.negativeSeedsTargetPatches)??KCe,v=XCe(i,e).map(Math.round),y=c.toIndex(v);if(v[0]<0||v[0]>=o||v[1]<0||v[1]>=a||v[2]<0||v[2]>=s)return console.warn("Click position is outside volume bounds."),null;const m=_V(l,n,v,u);m.count===0&&(m.mean=l[y],m.stdDev=0);const w=m.mean-d*m.stdDev,x=m.mean+d*m.stdDev,C=[[-1,0,0],[1,0,0],[0,-1,0],[0,1,0],[0,0,-1],[0,0,1]];let S=1/0,T=1/0,_=1/0,E=-1/0,b=-1/0,D=-1/0;const I=new Set,P=[],O=l[y];if(O>=w&&O<=x)I.add(y),P.push(v),S=E=v[0],T=b=v[1],_=D=v[2];else return console.warn("Clicked voxel intensity is outside the calculated positive range. No positive seeds generated."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};let A=0;for(;A=o||oe<0||oe>=a||ce<0||ce>=s)continue;const Te=ce*f+oe*o+qe;if(I.has(Te))continue;const ae=l[Te];ae>=w&&ae<=x&&(I.add(Te),I.size=tp&&console.debug(`Reached maximum number of positive seeds (${tp}). Stopping BFS.`),I.size===0)return console.warn("No positive seeds found after BFS."),{positiveSeedIndices:new Set,negativeSeedIndices:new Set};let V=0,G=0;I.forEach(W=>{const Y=l[W];V+=Y,G+=Y*Y});const R=I.size,N=V/R,F=G/R-N*N,j=Math.sqrt(Math.max(0,F)),te=h*j,ie=Math.max(0,S-g),he=Math.max(0,T-g),ue=Math.max(0,_-g),ve=Math.min(o-1,E+g),Me=Math.min(a-1,b+g),Ue=Math.min(s-1,D+g),be=new Set;let B=0,M=0;const $=p*qCe;for(;Mte){let Re=!1;for(let je=-1;je<=1;je++){const qe=Y+je;if(!(qe<0||qe>=a))for(let oe=-1;oe<=1;oe++){const ce=W+oe;if(ce<0||ce>=o)continue;const Te=ne*f+qe*o+ce;I.has(Te)||be.has(Te)||(be.add(Te),Re=!0)}}Re&&M++}}return be.size===0&&console.warn("Could not find any negative seeds. GrowCut might fail or produce poor results."),console.debug("positiveSeedIndices",I.size),console.debug("negativeSeedIndices",be.size),{positiveSeedIndices:I,negativeSeedIndices:be}}async function sW({referencedVolumeId:t,worldPosition:e,options:r}){const n=$e.getVolume(t),i=um(t);i.voxelManager.forEach(({index:f,value:u})=>{u!==0&&i.voxelManager.setAtIndex(f,0)});const o=r.seeds??aW(n,e,r),a=(r==null?void 0:r.positiveSeedValue)??zCe,s=(r==null?void 0:r.negativeSeedValue)??$Ce;if(!o)return null;const{positiveSeedIndices:c,negativeSeedIndices:l}=o;return c.size<10||c.size>tp||l.size<10?(console.warn("Not enough seeds found. GrowCut might fail or produce poor results."),i):(c.forEach(f=>{i.voxelManager.setAtIndex(f,a)}),l.forEach(f=>{i.voxelManager.setAtIndex(f,s)}),await ex(t,i.volumeId,r),i)}const YCe=Object.freeze(Object.defineProperty({__proto__:null,run:ex,runGrowCutForBoundingBox:iW,runGrowCutForSphere:rW,runOneClickGrowCut:sW},Symbol.toStringTag,{value:"Module"}));function JCe(t,e){const{segmentationId:r,config:n}=e,i={colorLUTIndex:ZCe(n),...n};rr.addSegmentationRepresentation(t,r,e.type,i),e.type===Vt.Contour&&Be([t]),es(r)}function ZCe(t){const{colorLUTOrIndex:e}=t||{};return e===void 0?Ep(JSON.parse(JSON.stringify(p5))):typeof e=="number"?e:Array.isArray(e)&&e.every(n=>Array.isArray(n)&&n.length===4)?Ep(e):Ep(JSON.parse(JSON.stringify(p5)))}function ag(t,e){e.map(r=>JCe(t,r))}function D8(t,e){return ag(t,e.map(r=>({...r,type:Vt.Contour})))}function QCe(t){const e={};for(const[r,n]of Object.entries(t))e[r]=D8(r,n);return e}function cW(t,e){return ag(t,e.map(r=>({...r,type:Vt.Labelmap})))}function e3e(t){for(const[e,r]of Object.entries(t))cW(e,r.map(n=>({...n,type:Vt.Labelmap})))}function lW(t,e){return ag(t,e.map(r=>({...r,type:Vt.Surface})))}function t3e(t){const e={};for(const[r,n]of Object.entries(t))e[r]=lW(r,n);return e}async function n3e({segmentationId:t,viewportId:e,imageIds:r,options:n}){const i=Vn(t);if(n!=null&&n.removeOriginal){const o=i.representationData.Labelmap;$e.getVolume(o.volumeId)&&$e.removeVolumeLoadObject(o.volumeId),i.representationData.Labelmap={imageIds:r}}else i.representationData.Labelmap={...i.representationData.Labelmap,imageIds:r};await ag(e,[{segmentationId:t,type:Vt.Labelmap}]),et.addEventListenerOnce(k.SEGMENTATION_RENDERED,()=>To(t))}async function r3e({volumeId:t}){return{imageIds:$e.getVolume(t).imageIds}}function i3e({segmentationId:t,options:e}){const r=Vn(t);if(!r)return;const{volumeId:n}=r.representationData.Labelmap,i=$e.getVolume(n);return n3e({segmentationId:t,viewportId:e.viewportId,imageIds:i.imageIds,options:e})}async function uW(t){return oU(t)}async function o3e({segmentationId:t,segmentIndices:e,mode:r="individual"}){qw(),gl(Xa.COMPUTE_LARGEST_BIDIRECTIONAL,0);const n=DG(t,e);if(!n)return;const{operationData:i,segImageIds:o,reconstructableVolume:a,indices:s}=n,c=a?await a3e({operationData:i,indices:s,mode:r}):await s3e({segImageIds:o,indices:s,mode:r});return gl(Xa.COMPUTE_LARGEST_BIDIRECTIONAL,100),c}async function a3e({operationData:t,indices:e,mode:r}){const n=IG(t),{segmentationVoxelManager:i,segmentationImageData:o}=n,s={scalarData:i.getCompleteScalarDataArray(),dimensions:o.getDimensions(),spacing:o.getSpacing(),origin:o.getOrigin(),direction:o.getDirection()};return await vl().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:s,indices:e,mode:r})}async function s3e({segImageIds:t,indices:e,mode:r}){const{segmentationInfo:n}=OG(t);return await vl().executeTask("compute","getSegmentLargestBidirectionalInternal",{segmentationInfo:n,indices:e,mode:r,isStack:!0})}function c3e(t){const e=Vn(t);if(!e)return null;let r;const n=e.representationData.Labelmap;if("imageIds"in n){const{imageIds:i}=n,o=$e.getImage(i[0]),a=$e.getVolumeContainingImageId(o.referencedImageId);if(a!=null&&a.volume)return a.volume;r=i.map(s=>$e.getImage(s).referencedImageId)}else if("volumeId"in n){const{volumeId:i,referencedVolumeId:o}=n;if(o){const s=$e.getVolume(o);if(s)return s}const a=$e.getVolume(i);a&&(r=a.imageIds.map(s=>$e.getImage(s).referencedImageId))}return Yw(r)}async function l3e({segmentationIds:t,segmentIndex:e}){qw(),gl(Xa.COMPUTE_STATISTICS,0);const r=Vn(t[0]),{imageIds:n}=r.representationData.Labelmap;if(!Cf(n))throw new Error("Invalid volume - TMTV cannot be calculated");return await u3e({segmentationIds:t,segmentIndex:e})}async function u3e({segmentationIds:t,segmentIndex:e}){const r=t.map(p=>ig(p)),n=AG(r,e);if(!n)throw new Error("Invalid volume - TMTV cannot be calculated");const{imageData:i,dimensions:o,direction:a,origin:s,voxelManager:c}=n,l=i.getSpacing(),u={scalarData:c.getCompleteScalarDataArray(),dimensions:o,spacing:l,origin:s,direction:a},d=c3e(t[0]),h={dimensions:d.dimensions,spacing:d.spacing,origin:d.origin,direction:d.direction,scalarData:d.voxelManager.getCompleteScalarDataArray()};if(h.scalarData.length===0||u.scalarData.length===0)return{[e]:{name:"TMTV",value:0}};const g=await vl().executeTask("compute","computeMetabolicStats",{segmentationInfo:u,imageInfo:h});return gl(Xa.COMPUTE_STATISTICS,100),g}const f3e=Object.freeze(Object.defineProperty({__proto__:null,IslandRemoval:Pd,LabelmapMemo:Yxe,SegmentStatsCalculator:QS,VolumetricCalculator:hd,computeMetabolicStats:l3e,computeStackLabelmapFromVolume:r3e,computeVolumeLabelmapFromStack:uW,contourAndFindLargestBidirectional:JG,createBidirectionalToolData:ZG,createLabelmapVolumeForViewport:pxe,createMergedLabelmapForIndex:AG,floodFill:_8,getBrushSizeForToolGroup:sCe,getBrushThresholdForToolGroup:lCe,getBrushToolInstances:og,getHoveredContourSegmentationAnnotation:nW,getOrCreateImageVolume:Yw,getOrCreateSegmentationVolume:ig,getReferenceVolumeForSegmentationVolume:_G,getSegmentIndexAtLabelmapBorder:eW,getSegmentIndexAtWorldPoint:b8,getSegmentLargestBidirectional:o3e,getStatistics:FG,getUniqueSegmentIndices:ZU,growCut:YCe,invalidateBrushCursor:QG,rectangleROIThresholdVolumeByRange:hxe,segmentContourAction:yCe,setBrushSizeForToolGroup:aCe,setBrushThresholdForToolGroup:cCe,thresholdSegmentationByRange:uCe,thresholdVolumeByRange:RG,triggerSegmentationRender:tg,triggerSegmentationRenderBySegmentationId:Hw,validateLabelmap:exe},Symbol.toStringTag,{value:"Module"}));function d3e(t){let e="";const r=t[0]<0?"R":"L",n=t[1]<0?"A":"P",i=t[2]<0?"F":"H",o=[Math.abs(t[0]),Math.abs(t[1]),Math.abs(t[2])],a=1e-4;for(let s=0;s<3;s++)if(o[0]>a&&o[0]>o[1]&&o[0]>o[2])e+=r,o[0]=0;else if(o[1]>a&&o[1]>o[0]&&o[1]>o[2])e+=n,o[1]=0;else if(o[2]>a&&o[2]>o[0]&&o[2]>o[1])e+=i,o[2]=0;else if(o[0]>a&&o[1]>a&&o[0]===o[1])e+=r+n,o[0]=0,o[1]=0;else if(o[0]>a&&o[2]>a&&o[0]===o[2])e+=r+i,o[0]=0,o[2]=0;else if(o[1]>a&&o[2]>a&&o[1]===o[2])e+=n+i,o[1]=0,o[2]=0;else break;return e}function h3e(t){let e=t.replace("H","f");return e=e.replace("F","h"),e=e.replace("R","l"),e=e.replace("L","r"),e=e.replace("A","p"),e=e.replace("P","a"),e=e.toUpperCase(),e}const g3e=Object.freeze(Object.defineProperty({__proto__:null,getOrientationStringLPS:d3e,invertOrientationStringLPS:h3e},Symbol.toStringTag,{value:"Module"}));var ah;(function(t){t.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",t.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED"})(ah||(ah={}));const I8={};function fW(t,e){const r=_e(t),{viewportId:n}=r;I8[n]=e}function O8(t){const e=_e(t),{viewportId:r}=e;return I8[r]}function p3e(t){return I8[t]}const{ViewportStatus:dW}=Qa,{triggerEvent:AC}=Rn,hW=!0,tT=new Map;function m3e(t,e){let r,n;if(t===void 0)throw new Error("playClip: element must not be undefined");const i=_e(t);if(!i)throw new Error("playClip: element must be a valid Cornerstone enabled element");e||(e={}),e.dynamicCineEnabled=e.dynamicCineEnabled??!0;const{viewport:o}=i,a=S3e(o,e);let s=O8(t);const c=e.dynamicCineEnabled;if(c&&pW(t),s?nT(t,{stopDynamicCine:!c,viewportId:o.id}):(s={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:e.frameTimeVector??void 0,speed:e.frameTimeVectorSpeedMultiplier??1,reverse:e.reverse??!1,loop:e.loop??!0,bounce:e.bounce??!1},fW(t,s)),s.dynamicCineEnabled=e.dynamicCineEnabled,(e.framesPerSecond<0||e.framesPerSecond>0)&&(s.framesPerSecond=Number(e.framesPerSecond),s.reverse=s.framesPerSecond<0,s.ignoreFrameTimeVector=!0),s.ignoreFrameTimeVector!==!0&&s.frameTimeVector&&s.frameTimeVector.length===a.numScrollSteps&&a.frameTimeVectorEnabled){const{timeouts:u,isTimeVarying:d}=v3e(s.frameTimeVector,s.speed);r=u,n=d}e.bounce!==void 0&&(s.bounce=e.bounce);const l=()=>{const{numScrollSteps:u,currentStepIndex:d}=a;let h=d+(s.reverse?-1:1);if(h<0||h>=u)if(s.bounce)s.reverse=!s.reverse,h=d+(s.reverse?-1:1),h=Math.max(0,Math.min(u-1,h));else if(s.loop)h=s.reverse?u-1:0;else{nT(t,{stopDynamicCine:!c,viewportId:o.id}),AC(t,ah.CLIP_STOPPED,{element:t});return}const p=h-d;if(p)try{a.scroll(p)}catch(v){console.warn("Play clip not scrolling",v),mW(s),AC(t,ah.CLIP_STOPPED,{element:t})}};if(c){const u=M8(o);u&&tT.set(u.volumeId,t)}a.play?s.framesPerSecond=a.play(e.framesPerSecond):r&&r.length>0&&n?(s.usingFrameTimeVector=!0,s.intervalId=window.setTimeout(function u(){s.intervalId=window.setTimeout(u,r[a.currentStepIndex]),l()},0)):(s.usingFrameTimeVector=!1,s.intervalId=window.setInterval(l,1e3/Math.abs(s.framesPerSecond)));const f={element:t};AC(t,ah.CLIP_STARTED,f)}function gW(t,e={}){nT(t,{stopDynamicCine:!0,...e})}function nT(t,e={stopDynamicCine:!0,viewportId:void 0}){const{stopDynamicCine:r,viewportId:n}=e,i=_e(t);let o;const a=i==null?void 0:i.viewport;if(i){const{viewport:s}=i;o=O8(s.element)}else if(n)o=p3e(n);else return;o&&mW(o),a instanceof Th?a.pause():r&&a instanceof Tr&&pW(t)}function pW(t){const{viewport:e}=_e(t);if(e instanceof ur){const r=M8(e);if(r!=null&&r.isDynamicVolume()){const n=tT.get(r.volumeId);tT.delete(r.volumeId),n&&n!==t&&gW(n)}}}function v3e(t,e){let r,n,i,o=0;const a=t.length,s=[];let c=!1;for((typeof e!="number"||e<=0)&&(e=1),r=1;r0&&(c?i=o/s.length|0:i=s[0],s.push(i)),{timeouts:s,isTimeVarying:c}}function mW(t){const e=t.intervalId;typeof e<"u"&&(t.intervalId=void 0,t.usingFrameTimeVector?clearTimeout(e):clearInterval(e))}function M8(t){if(!(t instanceof ur))return;const e=t.getAllVolumeIds();if(!(e!=null&&e.length))return;const n=e.find(i=>{var o;return(o=$e.getVolume(i))==null?void 0:o.isDynamicVolume()})??e[0];return $e.getVolume(n)}function y3e(t,e){const r=t.getImageIds();return{get numScrollSteps(){return r.length},get currentStepIndex(){return t.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){if(this.waitForRenderedCount<=e&&t.viewportStatus!==dW.RENDERED){this.waitForRenderedCount++;return}this.waitForRenderedCount=0,sc(t,{delta:n,debounceLoading:hW})}}}function w3e(t,e){return{get numScrollSteps(){return t.getNumberOfSlices()},get currentStepIndex(){return t.getSliceIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(r){if(this.waitForRenderedCount<=e&&t.viewportStatus!==dW.RENDERED){this.waitForRenderedCount++;return}this.waitForRenderedCount=0,sc(t,{delta:r,debounceLoading:hW})},play(r){return r&&t.setPlaybackRate(r/24),t.play(),t.getFrameRate()}}}function x3e(t,e){const{volumeId:r}=e,n={viewPlaneNormal:Ke(),scrollInfo:null},i=()=>{const o=t.getCamera();if(!n.scrollInfo||!aS(o.viewPlaneNormal,n.viewPlaneNormal)){const s=ud(t,r);n.viewPlaneNormal=o.viewPlaneNormal,n.scrollInfo=s}return n.scrollInfo};return{get numScrollSteps(){return i().numScrollSteps},get currentStepIndex(){return i().currentStepIndex},get frameTimeVectorEnabled(){const o=t.getCamera(),a=e.direction.slice(6,9).map(c=>-c),s=kt(a,o.viewPlaneNormal);return of(s,1)},scroll(o){i().currentStepIndex+=o,sc(t,{delta:o})}}}function C3e(t){return{get numScrollSteps(){return t.numDimensionGroups},get currentStepIndex(){return t.dimensionGroupNumber-1},get frameTimeVectorEnabled(){return!1},scroll(e){t.scroll(e)}}}function S3e(t,e){if(t instanceof lr)return y3e(t,e.waitForRendered??30);if(t instanceof ur){const r=M8(t);return e.dynamicCineEnabled&&(r!=null&&r.isDynamicVolume())?C3e(r):x3e(t,r)}if(t instanceof Th)return w3e(t,e.waitForRendered??30);throw new Error("Unknown viewport type")}const T3e=Object.freeze(Object.defineProperty({__proto__:null,Events:ah,addToolState:fW,getToolState:O8,playClip:m3e,stopClip:gW},Symbol.toStringTag,{value:"Module"}));function _3e(t,e){var n,i,o;const r=(e==null?void 0:e.knotsRatioPercentage)||30;return!((o=(i=(n=t==null?void 0:t.data)==null?void 0:n.contour)==null?void 0:i.polyline)!=null&&o.length)||r<=0}function E3e(t,e){const r=ba(),n=ri(Ke(),e,t),i=Math.abs(t[0])>.1?Ft(-t[1],t[0],0):Ft(0,-t[2],t[1]);return i4(r,e,n,i),r}function Hv(t,e=Math.floor(Math.random()*(t.length-1))){if(e===0)return 0;const r=[...t],{length:n}=t;for(let i=0;i{const u=Yt(Ke(),f,o);return[u[0],u[1]]});let s=n?Hv(a):0,c=HS(a,0,a.length,(e==null?void 0:e.knotsRatioPercentage)||30);if(c===a)return!1;Hv(c,-s);for(let f=1;f<(e==null?void 0:e.loop);f++)s=n?Hv(c):0,c=HS(c,0,a.length,(e==null?void 0:e.knotsRatioPercentage)||30),Hv(c,-s);const l=$r(ba(),o);return t.data.contour.polyline=c.map(f=>Yt([0,0,0],[...f,0],l)),!0}const b3e={smoothAnnotation:vW},D3e=Object.freeze(Object.defineProperty({__proto__:null,default:b3e,smoothAnnotation:vW},Symbol.toStringTag,{value:"Module"})),I3e=Object.freeze(Object.defineProperty({__proto__:null,getBoundsIJKFromRectangleAnnotations:LG,isAxisAlignedRectangle:qG},Symbol.toStringTag,{value:"Module"})),yW={};function wW(t,e){const r=_e(t),{viewportId:n}=r;yW[n]=e}function sg(t){const e=_e(t),{viewportId:r}=e;return yW[r]}const gd=pn.Prefetch,xW=0;function O3e(t,e){t=Math.round(t)||0,e=Math.round(e)||0;const r=[];let n=e-t+1;if(n<=0)return r;for(;n--;)r[n]=e--;return r}function M3e(t,e){let r=0,n=t.length-1;return t.forEach((i,o)=>{ie&&(n=Math.min(o,n))}),{low:r,high:n}}function cg(t){const e=_e(t);if(!e)return null;const{viewport:r}=e;return r instanceof lr?{currentImageIdIndex:r.getCurrentImageIdIndex(),imageIds:r.getImageIds()}:null}function tx(t){return function(e){const r=e.detail;let n;try{n=cg(t)}catch{return}if(!n||!n.imageIds||n.imageIds.length===0)return;const o=n.imageIds.indexOf(r.imageId);if(o<0)return;const a=sg(t);!a||!a.indicesToRequest||!a.indicesToRequest.length||a.indicesToRequest.push(o)}}const P3e=t=>{const e=new Set(t.imageIds);return r=>r.type!==gd||!e.has(r.additionalDetails.imageId)};let bp={maxImagesToPrefetch:1/0,preserveExistingPool:!0},rT;const R3e=10;function CW(t){var g,p;const e=sg(t);if(!e)return;const r=e||{},n=cg(t);if(!((g=n==null?void 0:n.imageIds)!=null&&g.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const{currentImageIdIndex:i}=n;if(r.enabled=r.enabled&&(((p=r.indicesToRequest)==null?void 0:p.length)??0)>0,r.enabled===!1)return;function o(v){const y=r.indicesToRequest.indexOf(v);y>-1&&r.indicesToRequest.splice(y,1)}if(e.indicesToRequest.sort((v,y)=>v-y),r.indicesToRequest.slice().forEach(function(v){const y=n.imageIds[v];if(!y)return;(Math.abs(i-v)<6?$e.getImageLoadObject(y):$e.isLoaded(y))&&o(v)}),!r.indicesToRequest.length)return;bp.preserveExistingPool||Bi.clearRequestStack(gd);const s=M3e(r.indicesToRequest,n.currentImageIdIndex);let c,l,f=s.low,u=s.high;const d=[];for(;f>=0||ubp.maxImagesToPrefetch,m=r.indicesToRequest[u]-v>bp.maxImagesToPrefetch,w=!y&&f>=0,x=!m&&u_s(v,y);d.forEach(v=>{const y={requestType:gd};Bi.addRequest(h.bind(null,v,y),gd,{imageId:v},xW)})}function iT(t){clearTimeout(rT),rT=setTimeout(function(){const e=t.target;try{CW(e)}catch{return}},R3e)}function L3e(t){const e=cg(t);if(!e||!e.imageIds||e.imageIds.length===0){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const r={indicesToRequest:O3e(0,e.imageIds.length-1),enabled:!0,direction:1},n=r.indicesToRequest.indexOf(e.currentImageIdIndex);r.indicesToRequest.splice(n,1),wW(t,r),CW(t),t.removeEventListener(rt.STACK_NEW_IMAGE,iT),t.addEventListener(rt.STACK_NEW_IMAGE,iT);const i=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,i),et.addEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,i)}function A3e(t){clearTimeout(rT),t.removeEventListener(rt.STACK_NEW_IMAGE,iT);const e=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,e);const r=sg(t);r&&r.indicesToRequest.length&&(r.enabled=!1,Bi.clearRequestStack(gd))}function N3e(){return bp}function k3e(t){bp=t}const V3e={enable:L3e,disable:A3e,getConfiguration:N3e,setConfiguration:k3e};let V1={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1},oT;const F3e=5,U3e=t=>{var n;const e=cg(t);if(!e)return;if(!((n=e.imageIds)!=null&&n.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}R8(t),P8(t),t.removeEventListener(rt.STACK_NEW_IMAGE,aT),t.addEventListener(rt.STACK_NEW_IMAGE,aT);const r=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,r),et.addEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,r)};function P8(t){var l,f;const e=cg(t);if(!e)return;if(!((l=e==null?void 0:e.imageIds)!=null&&l.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const r=sg(t);if(!r)return;const n=r||{};if(n.enabled=n.enabled&&(((f=n.indicesToRequest)==null?void 0:f.length)??0)>0,n.enabled===!1)return;function i(u){const d=n.indicesToRequest.indexOf(u);d>-1&&n.indicesToRequest.splice(d,1)}const o=n.indicesToRequest.slice(),{currentImageIdIndex:a}=e;if(o.forEach(u=>{const d=e.imageIds[u];if(!d)return;(Math.abs(a-u)<6?$e.getImageLoadObject(d):$e.isLoaded(d))&&i(u)}),!n.indicesToRequest.length)return;V1.preserveExistingPool||Bi.filterRequests(P3e(e));function s(u){var v,y;const d=e.imageIds.indexOf(u);i(d);const h=$e.getCachedImageBasedOnImageURI(u),{stats:g}=n,p=((v=h==null?void 0:h.image)==null?void 0:v.decodeTimeInMS)||0;if(p){g.imageIds.set(u,p),g.decodeTimeInMS+=p;const m=((y=h==null?void 0:h.image)==null?void 0:y.loadTimeInMS)||0;g.loadTimeInMS+=m}if(!n.indicesToRequest.length&&h!=null&&h.sizeInBytes){const{sizeInBytes:m}=h,w=$e.getMaxCacheSize()/4/m;if(!n.cacheFill)g.initialTime=Date.now()-g.start,g.initialSize=g.imageIds.size,R8(t,w),P8(t);else if(g.imageIds.size){g.fillTime=Date.now()-g.start;const{size:x}=g.imageIds;g.fillSize=x}}}const c=(u,d)=>_s(u,d).then(()=>s(u));n.indicesToRequest.forEach(u=>{const d=e.imageIds[u],h={requestType:gd};Bi.addRequest(c.bind(null,d,h),gd,{imageId:d},xW)})}function aT(t){clearTimeout(oT),oT=setTimeout(function(){const e=t.target;try{R8(e),P8(e)}catch{return}},F3e)}const B3e=t=>t<0?-1:1,R8=(t,e)=>{var d;const r=cg(t);if(!r)return;if(!((d=r.imageIds)!=null&&d.length)){console.warn("CornerstoneTools.stackPrefetch: No images in stack.");return}const{currentImageIdIndex:n}=r;let{maxAfter:i=2,minBefore:o=2}=V1;const{directionExtraImages:a=10}=V1,s=sg(t)||{indicesToRequest:[],currentImageIdIndex:n,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},c=n-s.currentImageIdIndex;if(s.direction=B3e(c),s.currentImageIdIndex=n,s.enabled=!0,s.stackCount<100&&(s.stackCount+=a),Math.abs(c)>i||!c)if(s.stackCount=0,e){const h=n/r.imageIds.length;o=Math.ceil(e*h),i=Math.ceil(e*(1-h)),s.cacheFill=!0}else s.cacheFill=!1;else c<0?(o+=s.stackCount,i=0):(i+=s.stackCount,o=0);const l=Math.max(0,n-o),f=Math.min(r.imageIds.length-1,n+i),u=[];for(let h=n+1;h<=f;h++)u.push(h);for(let h=n-1;h>=l;h--)u.push(h);s.indicesToRequest=u,wW(t,s)};function G3e(t){clearTimeout(oT),t.removeEventListener(rt.STACK_NEW_IMAGE,aT);const e=tx(t);et.removeEventListener(rt.IMAGE_CACHE_IMAGE_REMOVED,e);const r=sg(t);r&&(r.enabled=!1)}function W3e(){return V1}function z3e(t){V1=t}const $3e={enable:U3e,disable:G3e,getConfiguration:W3e,setConfiguration:z3e},j3e=Object.freeze(Object.defineProperty({__proto__:null,isViewportPreScaled:lu},Symbol.toStringTag,{value:"Module"}));function H3e(t,e){let r;const n=e.dimensionGroupNumbers||e.frameNumbers||Array.from({length:t.numDimensionGroups},(i,o)=>o+1);if(e.frameNumbers&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead."),!e.maskVolumeId&&!e.worldCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(e.maskVolumeId&&e.worldCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(e.maskVolumeId){const i=$e.getVolume(e.maskVolumeId);if(!i)throw new Error("Segmentation volume not found");const[o,a]=q3e(n,t,i);return[o,a]}return e.worldCoordinate?K3e(n,e.worldCoordinate,t):r}function K3e(t,e,r){const{dimensions:n,imageData:i}=r,o=i.worldToIndex(e);if(o[0]=Math.floor(o[0]),o[1]=Math.floor(o[1]),o[2]=Math.floor(o[2]),!hr(o,n))throw new Error("outside bounds");const a=n[0],s=n[0]*n[1],c=[];return t.forEach(l=>{const f=o[2]*s+o[1]*a+o[0];c.push(r.voxelManager.getAtIndexAndDimensionGroup(f,l))}),c}function q3e(t,e,r){const{imageData:n}=r,i=r.voxelManager,o=i.getScalarDataLength(),a=[];a.length=o;let s=0;for(let d=0,h=o;d{if(h===0)return;const p=RE(e.imageData,e.dimensions,e.spacing,d);let v=0;const y=new Map;t.forEach(x=>y.set(x,0));const m=({index:x})=>{for(let C=0;C{w.push(x/v)}),f.push(g),c.push(w)};return r.voxelManager.forEach(u,{imageData:n}),[c,f]}function SW(t,e){const r=t.getScalarDataLength(),n=new Float32Array(r);for(const i of e){const o=t.getDimensionGroupScalarData(i);for(let a=0;a{const n=SW(t,e);for(let i=0;i{const n=X3e(t,e);for(let i=0;i{if(e.length!==2)throw new Error("Please provide only 2 dimension groups for subtraction.");const n=t.getScalarDataLength(),i=t.getDimensionGroupScalarData(e[0]),o=t.getDimensionGroupScalarData(e[1]);for(let a=0;au+1);if(o.length<=1)throw new Error("Please provide two or more dimension groups");const a=t.voxelManager,s=a.getScalarDataLength(),c=TW[e];if(!c)throw new Error(`Unsupported operation: ${e}`);const l=new Float32Array(s);return c(a,o,(f,u)=>{l[f]=u}),l}function J3e(t,e,r){const{dimensionGroupNumbers:n,frameNumbers:i,targetVolume:o}=r;if(!o)throw new Error("A target volume must be provided");i&&console.warn("Warning: frameNumbers parameter is deprecated. Please use dimensionGroupNumbers instead.");const a=n||i||Array.from({length:t.numDimensionGroups},(f,u)=>u+1);if(a.length<=1)throw new Error("Please provide two or more dimension groups");const s=t.voxelManager,c=o.voxelManager,l=TW[e];if(!l)throw new Error(`Unsupported operation: ${e}`);l(s,a,(f,u)=>{c.setAtIndex(f,u)}),c.resetModifiedSlices();for(let f=0;f{for(const[c,l]of s.entries())if(l!==void 0)return c;return-1};let a=o(n);for(;a!==-1;){const s=[a];for(;n.has(a);){const c=n.get(a)[1];n.has(c)&&s.push(c),n.delete(a),a=c}i.push(s),a=o(n)}return i.length?i:void 0}function bW(t){const e=EW(t);if(!e)return;const r=t.getPoints().getData();return e.map(n=>n.map(i=>_W(r,i)))}const Q3e=Object.freeze(Object.defineProperty({__proto__:null,getPoint:_W,getPolyDataPointIndexes:EW,getPolyDataPoints:bW},Symbol.toStringTag,{value:"Module"}));var $a;(function(t){t.Top="top",t.Left="left",t.Bottom="bottom",t.Right="right"})($a||($a={}));const eSe=Object.freeze(Object.defineProperty({__proto__:null,get ColorbarRangeTextPosition(){return $a}},Symbol.toStringTag,{value:"Module"})),Bl=t=>t&&t.upper>t.lower,C5=t=>!!t&&t.width>0&&t.height>0,F1=(t,e)=>!!t&&!!e&&t.lower===e.lower&&t.upper===e.upper,DW=(t,e)=>!!t&&!!e&&t.width===e.width&&t.height===e.height,tSe=(t,e,r)=>[t[0]*(1-r)+e[0]*r,t[1]*(1-r)+e[1]*r,t[2]*(1-r)+e[2]*r],{clamp:nSe}=Rn;class L8{constructor(e){L8.validateProps(e);const{colormap:r,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:s=!1}=e;this._colormap=r,this._imageRange=i,this._voiRange=o,this._showFullImageRange=s,this._canvas=this._createRootElement(n),a&&this.appendTo(a)}get colormap(){return this._colormap}set colormap(e){this._colormap=e,this.render()}get size(){const{width:e,height:r}=this._canvas;return{width:e,height:r}}set size(e){const{_canvas:r}=this;!C5(e)||DW(r,e)||(this._setCanvasSize(r,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!Bl(e)||F1(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!Bl(e)||F1(e,this._voiRange)||(this._voiRange=e,this.render())}get showFullImageRange(){return this._showFullImageRange}set showFullImageRange(e){e!==this._showFullImageRange&&(this._showFullImageRange=e,this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}dispose(){const{_canvas:e}=this,{parentElement:r}=e;r==null||r.removeChild(e)}static validateProps(e){const{size:r,imageRange:n,voiRange:i}=e;if(r&&!C5(r))throw new Error('Invalid "size"');if(n&&!Bl(n))throw new Error('Invalid "imageRange"');if(i&&!Bl(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,r){const{width:n,height:i}=r;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createRootElement(e){const r=document.createElement("canvas");return Object.assign(r.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(r,e),r}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:r}=e,n=r.length/4,i=v=>{const y=4*v;if(!(v<0||v>=n))return{index:v,position:r[y],color:[r[y+1],r[y+2],r[y+3]]}},{width:o,height:a}=this._canvas,s=this._canvas.getContext("2d");if(!s)return;const c=o>a,l=c?o:a,{_voiRange:f}=this,u=this._showFullImageRange?this._imageRange:{...f};let d,h=i(0);const g=(u.upper-u.lower)/(l-1);let p=u.lower;for(let v=0;vnSe(Math.round(x*255),0,255));s.fillStyle=`rgb(${w[0]}, ${w[1]}, ${w[2]})`,c?s.fillRect(v,0,1,a):s.fillRect(0,a-v-1,o,1),p+=g}}}const Ff={FONT:"10px Arial",COLOR:"white",TICK_SIZE:5,TICK_WIDTH:1,TICK_LABEL_MARGIN:3,MAX_NUM_TICKS:8,TICKS_STEPS:[1,2.5,5,10]};class A8{constructor(e){A8.validateProps(e);const{top:r=0,left:n=0,size:i={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:a={lower:0,upper:1},ticks:s,container:c,showFullPixelValueRange:l=!1}=e,{style:f,position:u}=s??{};this._imageRange=o,this._voiRange=a,this._font=(f==null?void 0:f.font)??Ff.FONT,this._color=(f==null?void 0:f.color)??Ff.COLOR,this._tickSize=(f==null?void 0:f.tickSize)??Ff.TICK_SIZE,this._tickWidth=(f==null?void 0:f.tickWidth)??Ff.TICK_WIDTH,this._labelMargin=(f==null?void 0:f.labelMargin)??Ff.TICK_LABEL_MARGIN,this._maxNumTicks=(f==null?void 0:f.maxNumTicks)??Ff.MAX_NUM_TICKS,this._rangeTextPosition=u??$a.Right,this._showFullPixelValueRange=l,this._canvas=this._createCanvasElement(i,r,n),c&&this.appendTo(c)}get size(){const{width:e,height:r}=this._canvas;return{width:e,height:r}}set size(e){const{_canvas:r}=this;!C5(e)||DW(r,e)||(this._setCanvasSize(r,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:r}=this,n=this.top;e!==n&&(r.style.top=`${e}px`,this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:r}=this,n=this.left;e!==n&&(r.style.left=`${e}px`,this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){!Bl(e)||F1(e,this._imageRange)||(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){!Bl(e)||F1(e,this._voiRange)||(this._voiRange=e,this.render())}get tickSize(){return this._tickSize}set tickSize(e){e!==this._tickSize&&(this._tickSize=e,this.render())}get tickWidth(){return this._tickWidth}set tickWidth(e){e!==this._tickWidth&&(this._tickWidth=e,this.render())}get color(){return this._color}set color(e){e!==this._color&&(this._color=e,this.render())}get showFullPixelValueRange(){return this._showFullPixelValueRange}set showFullPixelValueRange(e){e!==this._showFullPixelValueRange&&(this._showFullPixelValueRange=e,this.render())}get visible(){return this._canvas.style.display==="block"}set visible(e){e!==this.visible&&(this._canvas.style.display=e?"block":"none",e&&this.render())}appendTo(e){e.appendChild(this._canvas),this.render()}static validateProps(e){const{size:r,imageRange:n,voiRange:i}=e;if(r&&!C5(r))throw new Error('Invalid "size"');if(n&&!Bl(n))throw new Error('Invalid "imageRange"');if(i&&!Bl(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,r){const{width:n,height:i}=r;e.width=n,e.height=i,Object.assign(e.style,{width:`${n}px`,height:`${i}px`})}_createCanvasElement(e,r,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:`${r}px`,left:`${n}px`}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:r,upper:n}=e,o=(n-r)/(this._maxNumTicks-1),a=Math.pow(10,-Math.floor(Math.log10(Math.abs(o)))),s=o*a,l=Ff.TICKS_STEPS.find(g=>g>=s)/a,f=Math.ceil(n/l)*l,u=Math.floor(r/l)*l,d=Math.round((f-u)/l)+1,h=[];for(let g=0;g=n,o=i?r:n,a=e.getContext("2d"),{_voiRange:s}=this,c=this._showFullPixelValueRange?this._imageRange:{...s},l=c.upper-c.lower,{ticks:f}=this._getTicks(c);a.clearRect(0,0,r,n),a.font=this._font,a.textBaseline=i?"top":"middle",a.textAlign=i?"center":"left",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,f.forEach(u=>{let d=Math.round(o*((u-c.lower)/l));if(i||(d=n-d),d<0||d>o)return;const h=u.toString(),g=a.measureText(h);let p;i?this._rangeTextPosition===$a.Top?p=this._getTopTickInfo({position:d,labelMeasure:g}):p=this._getBottomTickInfo({position:d,labelMeasure:g}):this._rangeTextPosition===$a.Left?p=this._getLeftTickInfo({position:d,labelMeasure:g}):p=this._getRightTickInfo({position:d});const{labelPoint:v,tickPoints:y}=p,{start:m,end:w}=y;return a.beginPath(),a.moveTo(m[0],m[1]),a.lineTo(w[0],w[1]),a.fillText(h,v[0],v[1]),a.stroke(),d})}}function rSe(t,e,r){return(t>=e?[$a.Top,$a.Bottom]:[$a.Left,$a.Right]).includes(r)}class iSe{constructor({id:e,container:r}){this._containerResizeCallback=n=>{let i,o;const{contentRect:a,contentBoxSize:s}=n[0];a?(i=a.width,o=a.height):s!=null&&s.length&&(i=s[0].inlineSize,o=s[0].blockSize),this._containerSize={width:i,height:o},this.onContainerResize()},this._id=e,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(e),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),r&&this.appendTo(r)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:r,_containerResizeObserver:n}=this,{parentElement:i}=r;!e||e===i||(i&&n.unobserve(i),e.appendChild(r),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:r}=this,{parentElement:n}=e;n==null||n.removeChild(e),r.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const r=document.createElement("div");return r.id=e,r.classList.add("widget"),Object.assign(r.style,{width:"100%",height:"100%"}),r}onContainerResize(){}}const Ng={MULTIPLIER:1,RANGE_TEXT_POSITION:$a.Right,TICKS_BAR_SIZE:50};class U1 extends iSe{constructor(e){var r;super(e),this._isMouseOver=!1,this._isInteracting=!1,this._mouseOverCallback=n=>{this._isMouseOver=!0,this.showTicks(),n.stopPropagation()},this._mouseOutCallback=n=>{this._isMouseOver=!1,this.hideTicks(),n.stopPropagation()},this._mouseDownCallback=n=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(n),n.stopPropagation()},this._mouseDragCallback=(n,i)=>{const o=this.getVOIMultipliers(),a=this._getPointsFromMouseEvent(n),{points:s,voiRange:c}=i,l=xs(rn(),a.local,s.local),f=l[0]*o[0],u=l[1]*o[1];if(!f&&!u)return;const{lower:d,upper:h}=c;let{windowWidth:g,windowCenter:p}=im(d,h);g=Math.max(g+f,1),p+=u;const v=Xu(g,p);this.voiRange=v,n.stopPropagation(),n.preventDefault()},this._mouseUpCallback=n=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),n.stopPropagation()},this._eventListenersManager=new fV,this._colormaps=U1.getColormapsMap(e),this._activeColormapName=U1.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=((r=e.ticks)==null?void 0:r.position)??Ng.RANGE_TEXT_POSITION,this._canvas.appendTo(this.rootElement),this._ticksBar.appendTo(this.rootElement),this._addRootElementEventListeners()}get activeColormapName(){return this._activeColormapName}set activeColormapName(e){if(e===this._activeColormapName)return;const r=this._colormaps.get(e);if(!r){console.warn(`Invalid colormap name (${e})`);return}this._activeColormapName=e,this._canvas.colormap=r}get imageRange(){return this._canvas.imageRange}set imageRange(e){this._canvas.imageRange=e,this._ticksBar.imageRange=e}get voiRange(){return this._canvas.voiRange}set voiRange(e){const{voiRange:r}=this._canvas;!Bl(e)||F1(e,r)||(this._canvas.voiRange=e,this._ticksBar.voiRange=e,this.onVoiChange(e))}get showFullImageRange(){return this._canvas.showFullImageRange}set showFullImageRange(e){this._canvas.showFullImageRange=e,this._ticksBar.showFullPixelValueRange=e}destroy(){super.destroy(),this._eventListenersManager.reset()}createRootElement(){const e=document.createElement("div");return Object.assign(e.style,{position:"relative",fontSize:"0",width:"100%",height:"100%"}),e}onContainerResize(){super.onContainerResize(),this.updateTicksBar(),this._canvas.size=this.containerSize}getVOIMultipliers(){return[Ng.MULTIPLIER,Ng.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:r}=e;return r.reduce((n,i)=>n.set(i.Name,i),new Map)}static getInitialColormapName(e){const{activeColormapName:r,colormaps:n}=e;return!!r&&n.some(o=>o.Name===r)?r:n[0].Name}_createCanvas(e){const{imageRange:r,voiRange:n,showFullPixelValueRange:i}=e,o=this._colormaps.get(this._activeColormapName);return new L8({colormap:o,imageRange:r,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const r=e.ticks;return new A8({imageRange:e.imageRange,voiRange:e.voiRange,ticks:r,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:r}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=r.getBoundingClientRect(),a=[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset];return{client:n,page:i,local:a}}updateTicksBar(){const{width:e,height:r}=this.containerSize;if(e===0&&r===0)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=r,a=o?e:Ng.TICKS_BAR_SIZE,s=o?Ng.TICKS_BAR_SIZE:r;if(!rSe(e,r,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let c,l;n.size={width:a,height:s},o?(l=0,c=i===$a.Top?-s:r):(c=0,l=i===$a.Left?-a:e),n.top=c,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:r}=this;e.addEventListener(r,"mouseover",this._mouseOverCallback),e.addEventListener(r,"mouseout",this._mouseOutCallback),e.addEventListener(r,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:r}=this,n=this._getPointsFromMouseEvent(e),i={...this._canvas.voiRange},o={points:n,voiRange:i};this._removeVOIEventListeners(),r.addEventListener(document,"voi.mouseup",this._mouseUpCallback),r.addEventListener(document,"voi.mousemove",a=>this._mouseDragCallback(a,o))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const NC=4;function oSe(t,e,r){if(EV(t,e)==="PT"){const{clientWidth:i,clientHeight:o}=t.element,a=5/Math.max(i,o),s=lu(t,e),{fixedPTWindowWidth:c=!0}=r??{},l=c?0:a;return s?[l,a]:[l,NC]}return[NC,NC]}const{Events:yu}=Qa,Kv={lower:-1e3,upper:1e3};class D0 extends U1{constructor(e){const{element:r,volumeId:n}=e,i=D0._getImageRange(r,n),o=D0._getVOIRange(r,n);super({...e,imageRange:i,voiRange:o}),this.autoHideTicks=()=>{if(this._hideTicksTimeoutId)return;const a=this._hideTicksTime-Date.now();a<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout(()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()},a)},this._stackNewImageCallback=()=>{this.imageRange=D0._getImageRange(this._element)},this._imageVolumeModifiedCallback=a=>{const{volumeId:s}=a.detail;if(s!==this._volumeId)return;const{_element:c}=this;this.imageRange=D0._getImageRange(c,s)},this._viewportVOIModifiedCallback=a=>{const{viewportId:s,volumeId:c,range:l,colormap:f}=a.detail,{viewport:u}=this.enabledElement;s!==u.id||c!==this._volumeId||(this.voiRange=l,f&&(this.activeColormapName=f.name),this.showAndAutoHideTicks())},this._viewportColormapModifiedCallback=a=>{const{viewportId:s,colormap:c,volumeId:l}=a.detail,{viewport:f}=this.enabledElement;s!==f.id||l!==this._volumeId||(this.activeColormapName=c.name)},this._element=r,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return _e(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return oSe(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:r}=this.enabledElement;if(r instanceof lr)r.setProperties({voiRange:e}),r.render();else if(r instanceof ur){const{_volumeId:n}=this,i=sm(n);r.setProperties({voiRange:e},n),i.forEach(o=>o.render())}}static _getImageRange(e,r){const n=_e(e),{viewport:i}=n,o=i.getImageActor(r);if(!o)return Kv;const s=o.getMapper().getInputData().getPointData().getScalars();let c;if(s)c=s.getRange();else{if(!r)throw new Error("volumeId is required when scalarData is not available");const l=$e.getVolume(r),[f,u]=l.voxelManager.getRange();c=[f,u]}return c[0]===0&&c[1]===0?Kv:{lower:c[0],upper:c[1]}}static _getVOIRange(e,r){const n=_e(e),{viewport:i}=n,o=i.getImageActor(r);if(!o)return Kv;const a=o.getProperty().getRGBTransferFunction(0).getRange();return a[0]===0&&a[1]===0?Kv:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(e=1e3){this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;et.addEventListener(yu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(yu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(yu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(yu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}destroy(){super.destroy();const{_element:e}=this;et.removeEventListener(yu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.removeEventListener(yu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.removeEventListener(yu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.removeEventListener(yu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}const aSe=Object.freeze(Object.defineProperty({__proto__:null,Colorbar:U1,Enums:eSe,ViewportColorbar:D0},Symbol.toStringTag,{value:"Module"}));function IW(t,e,r,n,i){const o=[];let a=0;const s=t.scalarData;let c,l,f;if(t.color)for(l=0;lUG(s,f),imageData:t})}function dSe(t,e,r){const[n,i]=t,o=Ft((n[0]+i[0])/2,(n[1]+i[1])/2,(n[2]+i[2])/2),a=Qi(n,i)/2;let s;if(!r){const c=sT(e,o),l=e.getSpacing(),f=Math.min(...l),u=Math.ceil(a/f);return s=[[c[0]-u,c[0]+u],[c[1]-u,c[1]+u],[c[2]-u,c[2]+u]],{boundsIJK:s,centerWorld:o,radiusWorld:a}}return s=hSe(e,r,t,o,a),{boundsIJK:s,centerWorld:o,radiusWorld:a}}function hSe(t,e,r,n,i){const[o,a]=r,s=t.getDimensions(),c=e.getCamera(),l=Ft(c.viewUp[0],c.viewUp[1],c.viewUp[2]),f=Ft(c.viewPlaneNormal[0],c.viewPlaneNormal[1],c.viewPlaneNormal[2]),u=Ke();kn(u,l,f);const d=Ke(),h=Ke();On(d,a,f,i),On(h,o,f,-i),On(d,d,u,-i),On(h,h,u,i);const g=[sT(t,d),sT(t,h)];return cf(g,s)}function PW(t){if(!Array.isArray(t)||t.length!==9)throw new Error("Matrix must be an array of 9 numbers");if(!t.every(e=>typeof e=="number"&&!isNaN(e)))throw new Error("Matrix must contain only valid numbers")}function RW(t){PW(t);const e=[[t[0],t[1],t[2]],[t[3],t[4],t[5]],[t[6],t[7],t[8]]],r=e[0][0]*(e[1][1]*e[2][2]-e[1][2]*e[2][1])-e[0][1]*(e[1][0]*e[2][2]-e[1][2]*e[2][0])+e[0][2]*(e[1][0]*e[2][1]-e[1][1]*e[2][0]);if(Math.abs(r)<1e-10)throw new Error("Matrix is not invertible (determinant is zero)");const n=[[e[1][1]*e[2][2]-e[1][2]*e[2][1],-(e[0][1]*e[2][2]-e[0][2]*e[2][1]),e[0][1]*e[1][2]-e[0][2]*e[1][1]],[-(e[1][0]*e[2][2]-e[1][2]*e[2][0]),e[0][0]*e[2][2]-e[0][2]*e[2][0],-(e[0][0]*e[1][2]-e[0][2]*e[1][0])],[e[1][0]*e[2][1]-e[1][1]*e[2][0],-(e[0][0]*e[2][1]-e[0][1]*e[2][0]),e[0][0]*e[1][1]-e[0][1]*e[1][0]]],i=[];for(let o=0;o<3;o++)for(let a=0;a<3;a++)i.push(n[o][a]/r);return i}function kC(t){const e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);return t.map(r=>r/e)}function gSe(t){PW(t);const e=t.slice(0,3),r=t.slice(3,6),n=t.slice(6,9),i=kC(e),o=kC(r),a=kC(n),s={x:[1,0,0],y:[0,1,0],z:[0,0,1]},c=1e-10,l=i.every((u,d)=>Math.abs(u-s.x[d])Math.abs(u-s.y[d])Math.abs(u-s.z[d]){ri(s,s,Ir(Ke(),[-o[0],-o[1],-o[2]],a))}),e instanceof lr&&(t.metadata.referencedImageId=e.getCurrentImageId()),t}function wSe(t,e,r){const n=e*r,i=t.length/n;if(![1,3,4].includes(i))throw new Error("Buffer must be 1, 3, or 4 channels per pixel");const o=Array.from({length:r},()=>new Array(e).fill(!1));for(let v=0;v0){x=!0;break}o[v][y]=x}const a=Array.from({length:r},()=>new Array(e).fill(0));let s=0;const c={};for(let v=0;vC<0||C>=e||S<0||S>=r?!1:o[S][C]&&a[S][C]===0;let w=0;_8(m,[y,v],{onFlood:(C,S)=>{a[S][C]=s,w++},diagonals:!1}),c[s]=w}if(s===0)return[];const l=Object.keys(c).reduce((v,y)=>c[v]>c[y]?v:y);function f(v,y){if(a[y][v]!==+l)return!1;for(const[m,w]of[[1,0],[-1,0],[0,1],[0,-1]]){const x=v+m,C=y+w;if(x<0||x>=e||C<0||C>=r||a[C][x]!==+l)return!0}return!1}let u=null;e:for(let v=0;vx[0]===v&&x[1]===y);m<0&&(m=0);let w=null;for(let x=1;x<=8;x++){const[C,S]=d[(m+x)%8],T=g[0]+C,_=g[1]+S;if(T>=0&&T=0&&_(y+1)%r,i=(y,m)=>{const w=[];for(let x=y;w.push(x),x!==m;x=n(x));return w};let o=0,a=0;for(let y=1;yt[a][0]&&(a=y);const s=t[o],c=t[a],l=i(o,a),f=i(a,o),u=Math.min(...t.map(y=>y[1])),d=l.some(y=>t[y][1]===u)?l:f,h=Math.min(...d.map(y=>t[y][1]));let g=d.map(y=>t[y]).filter(y=>Math.abs(y[1]-h)<=e);g.length<2&&(g=d.map(y=>t[y]).sort((y,m)=>y[1]-m[1]).slice(0,2));const p=g.reduce((y,m)=>m[0]m[0]>y[0]?m:y,g[0]);return{P1:p,P2:s,P3:c,P4:v}}function SSe(t,e,r,n,i,o={}){const{maxDist:a=15,slack:s=2}=o,c={P1:{dx:-1,dy:-1},P2:{dx:-1,dy:1},P3:{dx:1,dy:1},P4:{dx:1,dy:-1}};function l(f,{dx:u,dy:d},h=5){const g=u<0?f[0]-a:f[0]-s,p=u<0?f[0]+s:f[0]+a,v=d<0?f[1]-a:f[1]-s,y=d<0?f[1]+s:f[1]+a;let m=f;for(const[w,x]of i){if(wp||xy)continue;const C=Math.round(w),S=Math.round(x);if(C<0||C>=e||S<0||S>=r)continue;const T=(C-m[0])*u,_=(S-m[0])*d;t[S*e+C]>h&&(T>0||_>0)&&(m=[w,x])}return m}return{P1:l(n.P1,c.P1),P2:l(n.P2,c.P2),P3:l(n.P3,c.P3),P4:l(n.P4,c.P4)}}function TSe(t,e,r,n,i){const o=CSe(n);return SSe(t,e,r,o,i,{maxDist:20})}function a7(t,e){return Math.atan2(e[1]-t[1],e[0]-t[0])}function _Se(t){const{P1:e,P2:r,P3:n,P4:i}=t,o=c5(e,r,i,n,!0);if(!o)throw new Error("Fan edges appear parallel — no apex found");const a=o;let s=a7(a,e)*(180/Math.PI),c=a7(a,i)*(180/Math.PI);if(c<=s){const p=s;s=c,c=p}const l=Math.hypot(e[0]-a[0],e[1]-a[1]),f=Math.hypot(i[0]-a[0],i[1]-a[1]),u=Math.hypot(r[0]-a[0],r[1]-a[1]),d=Math.hypot(n[0]-a[0],n[1]-a[1]),h=Math.min(l,f),g=Math.max(u,d);return{center:a,startAngle:s,endAngle:c,innerRadius:h,outerRadius:g}}function np(t,e,r,n,i={}){const{strokeStyle:o="#f00",lineWidth:a=2,quality:s=.92}=i,c=document.createElement("canvas");c.width=e,c.height=r;const l=c.getContext("2d"),f=e*r,u=t.length/f,d=l.createImageData(e,r),h=d.data;for(let g=0;g0){l.strokeStyle=o,l.lineWidth=a,l.beginPath(),l.moveTo(n[0][0]+.5,n[0][1]+.5);for(let g=1;g=h;C-=.01){const S=o[0]+l*Math.cos(C),T=o[1]+l*Math.sin(C);v.lineTo(S,T)}return v.closePath(),v.strokeStyle=f,v.lineWidth=u,v.stroke(),p.toDataURL("image/jpeg",d)}function bSe(t,e=5){const{contour:r,simplified:n,hull:i,refined:o,fanGeometry:a}=k8(t),{pixelData:s,width:c,height:l}=N8(t)||{};if(!s)return;let f;e===1?f=np(s,c,l,r):e===2?f=np(s,c,l,n):e===3?f=np(s,c,l,i):e===4?f=np(s,c,l,[o.P1,o.P2,o.P3,o.P4]):f=ESe(s,c,l,a,{strokeStyle:"#f00",lineWidth:3,quality:.95}),AW(f,"contour.jpg")}function k8(t){const{pixelData:e,width:r,height:n}=N8(t)||{};if(!e)return;const i=wSe(e,r,n),{simplified:o,hull:a}=xSe(i),s=TSe(e,r,n,a,o),c=_Se({P1:s.P1,P2:s.P2,P3:s.P3,P4:s.P4});return{contour:i,simplified:o,hull:a,refined:s,fanGeometry:c}}const DSe=Object.freeze(Object.defineProperty({__proto__:null,calculateFanGeometry:k8,default:AW,downloadFanJpeg:bSe,exportContourJpeg:np,getPixelData:N8},Symbol.toStringTag,{value:"Module"})),ISe=un,OSe=Object.freeze(Object.defineProperty({__proto__:null,AnnotationMultiSlice:Lwe,IslandRemoval:Pd,annotationHydration:y1e,boundingBox:Mwe,calibrateImageSpacing:Owe,cine:T3e,contourSegmentation:eve,contours:uxe,debounce:Yh,drawing:rye,dynamicVolume:Z3e,geometricSurfaceUtils:vSe,getAnnotationNearPoint:bwe,getAnnotationNearPointOnEnabledElement:sG,getCalibratedAspect:c8,getCalibratedLengthUnitsAndScale:Ia,getCalibratedProbeUnitsAndValue:g5,getClosestImageIdForStackViewport:BE,getOrCreateImageVolume:Yw,getPixelValueUnits:uu,getPixelValueUnitsImageId:vB,getSphereBoundsInfo:uG,getViewportForAnnotation:F2,isObject:VE,math:pme,moveAnnotationToViewPlane:ySe,normalizeViewportPlane:NG,orientation:g3e,planar:Gve,planarFreehandROITool:D3e,pointInSurroundingSphereCallback:fSe,pointToString:fG,polyDataUtils:Q3e,rectangleROITool:I3e,roundNumber:ISe,segmentation:f3e,setAnnotationLabel:LW,stackContextPrefetch:$3e,stackPrefetch:V3e,throttle:Wo,touch:kpe,triggerAnnotationRender:Jh,triggerAnnotationRenderForToolGroupIds:dB,triggerAnnotationRenderForViewportIds:Be,triggerEvent:ut,usFanExtraction:DSe,viewport:j3e,viewportFilters:Fme,voi:uSe},Symbol.toStringTag,{value:"Module"})),MSe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function NW(t,e){const r=rr;t.forEach(n=>{r.updateSegmentation(n.segmentationId,n.payload),e||es(n.segmentationId)})}function PSe(t,e,r){rr.setSegmentationRepresentationVisibility(t,e,r)}function RSe(t,e,r){const n=Ea(t,e);n&&n.forEach(i=>{PSe(t,{segmentationId:i.segmentationId,type:i.type},r)})}function LSe(t,e){return pB(t,e)}function ASe(t,e,r,n){const i=Ea(t,e);i&&(i.forEach(o=>{o.segments[r].visible=n}),Hw(e.segmentationId),qc(t,e.segmentationId))}function NSe(t,e,r){return!kW(t,e).has(r)}function kW(t,e){const r=NE(t,e);return r?Object.entries(r.segments).reduce((i,[o,a])=>(a.visible||i.add(Number(o)),i),new Set):new Set}const kSe=Object.freeze(Object.defineProperty({__proto__:null,getHiddenSegmentIndices:kW,getSegmentIndexVisibility:NSe,getSegmentationRepresentationVisibility:LSe,setSegmentIndexVisibility:ASe,setSegmentationRepresentationVisibility:RSe},Symbol.toStringTag,{value:"Module"}));function VSe(t){return Ha.getStyle(t)}function FSe(t,e){Ha.setStyle(t,e),!t.viewportId&&!t.segmentationId&&Xw().forEach(n=>{tg(n.segmentationId)}),qc(t.viewportId,t.segmentationId,t.type)}function USe(t,e){Ha.setRenderInactiveSegmentations(t,e),tg(t),CG(t).forEach(n=>{qc(t,n.segmentationId)})}function BSe(t){return Ha.getRenderInactiveSegmentations(t)}function GSe(){Ha.resetToGlobalStyle(),tg()}function WSe(t){return Ha.hasCustomStyle(t)}const zSe=Object.freeze(Object.defineProperty({__proto__:null,getRenderInactiveSegmentations:BSe,getStyle:VSe,hasCustomStyle:WSe,resetToGlobalStyle:GSe,setRenderInactiveSegmentations:USe,setStyle:FSe},Symbol.toStringTag,{value:"Module"})),$Se=Object.freeze(Object.defineProperty({__proto__:null,color:Nye,style:zSe,visibility:kSe},Symbol.toStringTag,{value:"Module"}));function S5(t,e){const r=Vn(t);typeof e=="string"&&(console.warn("segmentIndex is a string, converting to number"),e=Number(e)),Object.values(r.segments).forEach(i=>{i.active=!1}),r.segments[e]||(r.segments[e]={segmentIndex:e,label:"",locked:!1,cachedStats:{},active:!1}),r.segments[e].active!==!0&&(r.segments[e].active=!0,es(t));const n=eg(t);n.forEach(i=>{Ea(i,{segmentationId:t}).forEach(a=>{a.segments[e]||(a.segments[e]={visible:!0})})}),n.forEach(i=>{const o=Pr(i);QG(o.id)})}const jSe=Object.freeze(Object.defineProperty({__proto__:null,getActiveSegmentIndex:Da,setActiveSegmentIndex:S5},Symbol.toStringTag,{value:"Module"}));async function HSe(t){const e=a1e(t);return es(t.segmentationId),e}function VW(t,e){const r=Vn(t);if(r.representationData.Labelmap){const{representationData:n}=r,i=n.Labelmap;("imageIds"in i||"volumeId"in i)&&("imageIds"in i?i.imageIds.map(a=>$e.getImage(a)):[$e.getVolume(i.volumeId)]).forEach(a=>{if(!a)return;const{voxelManager:s}=a;s.forEach(({value:c,index:l})=>{c===e&&s.setAtIndex(l,0)})}),To(t)}else throw new Error("Invalid segmentation type, only labelmap is supported right now")}function KSe(t,e,r={setNextSegmentAsActive:!0}){VW(t,e);const n=Da(t)===e,i=Vn(t),{segments:o}=i;delete o[e];const a={...o};if(NW([{segmentationId:t,payload:{segments:a}}]),n&&r.setNextSegmentAsActive){const c=Object.keys(o).map(Number).sort((d,h)=>d-h),l=c.indexOf(e),f=c[l+1],u=c[l-1];f!==void 0?S5(t,f):u!==void 0&&S5(t,u)}eg(t).forEach(c=>{Ea(c,{segmentationId:t}).forEach(f=>{delete f.segments[e]})})}function qSe(t){const e=rr,r=Vn(t);return e.getLabelmapImageIds(r.representationData)}const XSe={clearSegmentValue:VW,convertStackToVolumeLabelmap:HSe,computeVolumeLabelmapFromStack:uW,convertVolumeToStackLabelmap:i3e},YSe=Object.freeze(Object.defineProperty({__proto__:null,activeSegmentation:Tve,addContourRepresentationToViewport:D8,addContourRepresentationToViewportMap:QCe,addLabelmapRepresentationToViewport:cW,addLabelmapRepresentationToViewportMap:e3e,addRepresentationData:kE,addSegmentationRepresentations:ag,addSegmentations:hG,addSurfaceRepresentationToViewport:lW,addSurfaceRepresentationToViewportMap:t3e,config:$Se,defaultSegmentationStateManager:rr,getActiveSegmentation:Od,getCurrentLabelmapImageIdsForViewport:ru,getLabelmapImageIds:qSe,getLabelmapImageIdsForImageId:gve,helpers:XSe,removeAllSegmentationRepresentations:mG,removeAllSegmentations:xG,removeContourRepresentation:yG,removeLabelmapRepresentation:vG,removeSegment:KSe,removeSegmentation:x8,removeSegmentationRepresentation:rg,removeSegmentationRepresentations:gG,removeSurfaceRepresentation:wG,segmentIndex:jSe,segmentLocking:Rye,segmentationStyle:Ha,state:Jwe,strategies:iCe,triggerSegmentationEvents:Zpe,updateSegmentations:NW},Symbol.toStringTag,{value:"Module"}));class V8{constructor(e){this._controlPoints=[],this._invalidated=!1,this._length=0,this._controlPoints=[],this._resolution=(e==null?void 0:e.resolution)??20,this._fixedResolution=(e==null?void 0:e.fixedResolution)??!1,this._closed=(e==null?void 0:e.closed)??!1,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._fixedResolution||this._resolution===e||(this._resolution=e,this.invalidated=!0)}get fixedResolution(){return this._fixedResolution}get closed(){return this._closed}set closed(e){this._closed!==e&&(this._closed=e,this.invalidated=!0)}get aabb(){return this._update(),this._aabb}get length(){return this._update(),this._length}get invalidated(){return this._invalidated}set invalidated(e){this._invalidated=e}hasTangentPoints(){return!1}addControlPoint(e){this._controlPoints.push([e[0],e[1]]),this.invalidated=!0}addControlPoints(e){e.forEach(r=>this.addControlPoint(r))}addControlPointAtU(e){const r=this._getLineSegmentAt(e),{start:n,end:i}=r.points,o=Math.floor(e),a=this._curveSegments[o],s=e-Math.floor(o),c=[n[0]+s*(i[0]-n[0]),n[1]+s*(i[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,c),this.invalidated=!0,{index:l,point:c}}deleteControlPointByIndex(e){const r=this._closed?3:1;return e>=0&&er?(this._controlPoints.splice(e,1),this.invalidated=!0,!0):!1}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,r){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...r],this.invalidated=!0}getControlPoints(){return this._controlPoints.map(e=>[e[0],e[1]])}getClosestControlPoint(e){const r=this._controlPoints;let n=1/0,i=-1;for(let o=0,a=r.length;ou.distanceSquared-d.distanceSquared);let n,i=-1,o=1/0,a,s;for(let u=0;uo)continue;const{curveSegmentIndex:h,curveSegment:g}=d,{lineSegments:p}=g;for(let v=0;v=c.minY&&e[1]=h.minY&&e[1]=l.maxX?o:l.maxX,a=a>=l.maxY?a:l.maxY,r+=f}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=r,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const r=[];return e.forEach(({lineSegments:n},i)=>{n.forEach((o,a)=>{i===0&&a===0&&r.push([...o.points.start]),r.push([...o.points.end])})}),r}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const r=[],{_curveSegments:n}=this;for(let i=0;in)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let a=0,s=i.length;a=c.previousLineSegmentsLength&&a<=l)return c}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,r=e[0],n=e[e.length-1],i={points:{start:[...r],end:[...n]},aabb:{minX:Math.min(r[0],n[0]),minY:Math.min(r[1],n[1]),maxX:Math.max(r[0],n[0]),maxY:Math.max(r[1],n[1])}};return{aabb:{minX:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}const JSe=1e-8;class F8 extends V8{getPreviewCurveSegments(e,r){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=r?n:n-1,a=this.getTransformMatrix(),s=[...this.controlPoints],c=[];r||s.push(e);for(let l=i;l<=o;l++){const f=this._getCurveSegment(l,a,s,r);c.push(f)}return c}getSplineCurves(){const e=this._getNumCurveSegments(),r=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let i=0;for(let o=0;o=o)if(this.closed)s=(o+s)%o;else return;const{p0:f,p1:u,p2:d,p3:h}=this._getCurveSegmentPoints(s,n,i),g=c*c,p=g*c,v=C2(1,c,g,p),y=ku(BR(),v,r);return[$6(y,C2(f[0],u[0],d[0],h[0])),$6(y,C2(f[1],u[1],d[1],h[1]))]}_getCurveSegmentPoints(e,r=this.controlPoints,n=this.closed){const i=this._getNumCurveSegments(r,n),o=e,a=o-1,s=n?(o+1)%i:o+1,c=s+1,l=r[o],f=r[s];let u,d;return a>=0?u=r[a]:u=n?r[r.length-1]:GS(f,l),cl?l:p;const v=this._getPoint(p,r,n,i);if(!g){u=v;continue}d=v;const y=d[0]-u[0],m=d[1]-u[1],w=Math.sqrt(y**2+m**2),x={minX:u[0]<=d[0]?u[0]:d[0],maxX:u[0]>=d[0]?u[0]:d[0],minY:u[1]<=d[1]?u[1]:d[1],maxY:u[1]>=d[1]?u[1]:d[1]};f.push({points:{start:u,end:d},aabb:x,length:w,previousLineSegmentsLength:h}),u=d,h+=w}return f}_getCurveSegment(e,r=this.getTransformMatrix(),n=this.controlPoints,i=this.closed){const{p0:o,p1:a,p2:s,p3:c}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,r,n,i);let f=0,u=1/0,d=1/0,h=-1/0,g=-1/0;return l.forEach(({aabb:p,length:v})=>{u=Math.min(u,p.minX),d=Math.min(d,p.minY),h=Math.max(h,p.maxX),g=Math.max(g,p.maxY),f+=v}),{controlPoints:{p0:o,p1:a,p2:s,p3:c},aabb:{minX:u,minY:d,maxX:h,maxY:g},length:f,previousCurveSegmentsLength:0,lineSegments:l}}}const ZSe=kR(ba(),J_(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class FW extends F8{getTransformMatrix(){return ZSe}}class B1 extends F8{constructor(e){super(e),this._scale=(e==null?void 0:e.scale)??.5,this._fixedScale=(e==null?void 0:e.fixedScale)??!1}get scale(){return this._scale}set scale(e){this._fixedScale||this._scale===e||(this._scale=e,this.invalidated=!0)}get fixedScale(){return this._fixedScale}getTransformMatrix(){const{scale:e}=this,r=2*e;return[0,1,0,0,-e,0,e,0,r,e-3,3-r,-e,-e,2-e,e-2,e]}}class UW extends B1{constructor(){super({scale:.5,fixedScale:!0})}}class BW extends B1{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class GW extends V8{getSplineCurves(){return[]}getLineSegments(){return[]}getPreviewCurveSegments(e,r){return[]}}const QSe=[1,0,0,-2,2,0,1,-2,1];class eTe extends GW{hasTangentPoints(){return!0}getTransformMatrix(){return QSe}}const tTe=Object.freeze(Object.defineProperty({__proto__:null,BSpline:FW,CardinalSpline:B1,CatmullRomSpline:UW,CubicSpline:F8,LinearSpline:BW,QuadraticBezier:eTe,QuadraticSpline:GW,Spline:V8},Symbol.toStringTag,{value:"Module"}));class Qu extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r)}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:r,deltaPoints:n}=e.detail,i=_e(r),o=n.world;if(o[0]===0&&o[1]===0&&o[2]===0)return;const a=i.viewport.getCamera(),{focalPoint:s,position:c}=a,l=[c[0]-o[0],c[1]-o[1],c[2]-o[2]],f=[s[0]-o[0],s[1]-o[1],s[2]-o[2]];i.viewport.setCamera({focalPoint:f,position:l}),i.viewport.render()}}Qu.toolName="Pan";class WW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2,rotateSampleDistanceFactor:2}}){super(e,r),this._resizeObservers=new Map,this._hasResolutionChanged=!1,this.preMouseDownCallback=n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a,f=s.getDefaultActor().actor.getMapper();if(!("getSampleDistance"in f||"getCurrentSampleDistance"in f))return!0;const d=f.getSampleDistance();if(!this._hasResolutionChanged){const{rotateSampleDistanceFactor:h}=this.configuration;f.setSampleDistance(d*h),this._hasResolutionChanged=!0,this.cleanUp!==null&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{f.setSampleDistance(d),s.render(),this._hasResolutionChanged=!1},document.addEventListener("mouseup",this.cleanUp,{once:!0})}return!0},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.onSetToolActive=()=>{const n=()=>{this._getViewportsInfo().forEach(({viewportId:o,renderingEngineId:a})=>{if(!this._resizeObservers.has(o)){const{viewport:s}=Oi(o,a)||{viewport:null};if(!s)return;const{element:c}=s,l=new ResizeObserver(()=>{const f=Oi(o,a);if(!f)return;const{viewport:u}=f,d=u.getViewPresentation();u.resetCamera(),u.setViewPresentation(d),u.render()});l.observe(c),this._resizeObservers.set(o,l)}})};n(),this._viewportAddedListener=i=>{i.detail.toolGroupId===this.toolGroupId&&n()},et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener)},this.onSetToolDisabled=()=>{this._resizeObservers.forEach((n,i)=>{n.disconnect(),this._resizeObservers.delete(i)}),this._viewportAddedListener&&(et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this._viewportAddedListener),this._viewportAddedListener=null)},this.rotateCamera=(n,i,o,a)=>{const s=n.getVtkActiveCamera(),c=s.getViewUp(),l=s.getFocalPoint(),f=s.getPosition(),u=[0,0,0],d=[0,0,0],h=[0,0,0],g=Wt(new Float32Array(16));dr(g,g,i),Ro(g,g,a,o),dr(g,g,[-i[0],-i[1],-i[2]]),Yt(u,f,g),Yt(d,l,g),Wt(g),Ro(g,g,a,o),Yt(h,c,g),n.setCamera({position:u,viewUp:h,focalPoint:d})},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:r,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:s}=this.configuration,c=_e(r),{viewport:l}=c,f=l.getCamera(),u=r.clientWidth,d=r.clientHeight,h=[o[0]/u,o[1]/d],g=[a[0]/u,a[1]/d],p=[u*.5,d*.5],v=l.canvasToWorld(p),m=(1+Math.abs([.5,.5][0]))**2,w=[g[0],0,0],x=[h[0],0,0],C=w[0]**2,S=x[0]**2,T=C>m?0:Math.sqrt(m-C),_=S>m?0:Math.sqrt(m-S),E=[w[0],0,T];nn.normalize(E);const b=[x[0],0,_];nn.normalize(b);const D=nn.dot(E,b);if(Math.abs(D)>1e-4){const I=-2*Math.acos(nn.clampValue(D,-1,1))*Math.sign(h[0]-g[0])*s,P=f.viewUp,O=f.viewPlaneNormal,A=[0,0,0],V=[0,0,0];nn.cross(P,O,A),nn.normalize(A),nn.cross(O,A,V),nn.normalize(V),nn.normalize(P),this.rotateCamera(l,v,V,I);const G=(g[1]-h[1])*s;this.rotateCamera(l,v,A,G),l.render()}}}WW.toolName="TrackballRotate";const VC=4,nTe=1024,rTe="PT";class Oh extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this._getImageDynamicRangeFromMiddleSlice=(n,i)=>{const o=Math.floor(i[2]/2),a=i[0]*i[1];let s,c;n instanceof Float32Array?(s=4,c=Float32Array):n instanceof Uint8Array?(s=1,c=Uint8Array):n instanceof Uint16Array?(s=2,c=Uint16Array):n instanceof Int16Array&&(s=2,c=Int16Array);const l=n.buffer,f=o*a*s,u=new c(l,f,a),{max:d,min:h}=this._getMinMax(u,a);return d-h}}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){var g,p;const{element:r,deltaPoints:n}=e.detail,i=_e(r),{viewport:o}=i;let a,s,c,l,f,u,d=!1;const h=o.getProperties();if(o instanceof ur){a=o.getVolumeId(),u=sm(a),{lower:s,upper:c}=h.voiRange;const v=$e.getVolume(a);if(!v)throw new Error("Volume not found "+a);l=v.metadata.Modality,d=v.scaling&&Object.keys(v.scaling).length>0}else if(h.voiRange){l=o.modality,{lower:s,upper:c}=h.voiRange;const{preScale:v={scaled:!1}}=((g=o.getImageData)==null?void 0:g.call(o))||{};d=v.scaled&&((p=v.scalingParameters)==null?void 0:p.suvbw)!==void 0}else throw new Error("Viewport is not a valid type");if(l===rTe&&d?f=this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:c,clientHeight:r.clientHeight,isPreScaled:d,viewport:o,volumeId:a}):f=this.getNewRange({viewport:o,deltaPointsCanvas:n.canvas,volumeId:a,lower:s,upper:c}),!(f.lower>=f.upper)&&(o.setProperties({voiRange:f}),o.render(),o instanceof ur)){u.forEach(v=>{o!==v&&v.render()});return}}getPTScaledNewRange({deltaPointsCanvas:e,lower:r,upper:n,clientHeight:i,viewport:o,volumeId:a,isPreScaled:s}){let c=VC;s?c=5/i:c=this._getMultiplierFromDynamicRange(o,a)||VC;const f=e[1]*c;return n-=f,n=s?Math.max(n,.1):n,{lower:r,upper:n}}getNewRange({viewport:e,deltaPointsCanvas:r,volumeId:n,lower:i,upper:o}){const a=this._getMultiplierFromDynamicRange(e,n)||VC,s=r[0]*a,c=r[1]*a;let{windowWidth:l,windowCenter:f}=im(i,o);l+=s,f+=c,l=Math.max(l,1);const u=e.getProperties().VOILUTFunction;return Xu(l,f,u)}_getMultiplierFromDynamicRange(e,r){var o;let n;if(r){const a=$e.getVolume(r),{voxelManager:s}=e.getImageData(),l=s.getMiddleSliceData().reduce((d,h)=>[Math.min(d[0],h),Math.max(d[1],h)],[1/0,-1/0]),f=(o=a==null?void 0:a.metadata)==null?void 0:o.BitsStored,u=f?2**f:1/0;n=Math.min(l,u)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/nTe;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:r,voxelManager:n}=e.getImageData();if(n!=null&&n.getRange){const s=n.getRange();return s[1]-s[0]}const i=r.getDimensions();if(r.getRange){const s=r.getRange();return s[1]-s[0]}let o;if(r.getScalarData?o=r.getScalarData():o=r.getPointData().getScalars().getData(),i[2]!==1)return this._getImageDynamicRangeFromMiddleSlice(o,i);let a;if(o.getRange)a=o.getRange();else{const{min:s,max:c}=this._getMinMax(o,o.length);a=[s,c]}return a[1]-a[0]}_getMinMax(e,r){let n=1/0,i=-1/0;for(let o=0;oi&&(i=a)}return{max:i,min:n}}}Oh.toolName="WindowLevel";class zW extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{minWindowWidth:10}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=this.getReferencedImageId(l,s,u,d),g=l.getFrameOfReferenceUID(),p={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...s],[...s],[...s],[...s]]},cachedStats:{}}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,viewportIdsToRender:v},this._activateDraw(a),Gt(a),n.preventDefault(),Be(v),p},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData;this._deactivateDraw(o),Jt(o),this.editData=null,this.isDrawing=!1,mn(a.annotationUID),Be(s),Un(a),this.applyWindowLevelRegion(a,o)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData,{data:c}=a,{currentPoints:l}=i,f=_e(o),{worldToCanvas:u,canvasToWorld:d}=f.viewport,h=l.world,{points:g}=c.handles,p=3;g[p]=[...h];const v=u(g[0]),y=u(g[3]),m=[y[0],v[1]],w=[v[0],y[1]],x=d(m),C=d(w);g[1]=x,g[2]=C,a.invalidated=!0,Be(s)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(C));l.annotationUID=d;const{color:v,lineWidth:y,lineDash:m}=this.getAnnotationStyle({annotation:u,styleSpecifier:l});if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const w=`${d}-rect`;Em(i,d,"0",p[0],p[3],{color:v,lineDash:m,lineWidth:y},w),o=!0}return o},this.applyWindowLevelRegion=(n,i)=>{const o=_e(i),{viewport:a}=o,s=MW(a),{data:c}=n,{points:l}=c.handles,f=l.map(T=>a.worldToCanvas(T)),u=f[0],d=f[3];let h=Math.min(u[0],d[0]),g=Math.min(u[1],d[1]),p=Math.abs(u[0]-d[0]),v=Math.abs(u[1]-d[1]);h=jy(h,0,s.width),g=jy(g,0,s.height),p=Math.floor(Math.min(p,Math.abs(s.width-h))),v=Math.floor(Math.min(v,Math.abs(s.height-g)));const y=IW(s,Math.round(h),Math.round(g),p,v),m=OW(y,s.minPixelValue,s.maxPixelValue);this.configuration.minWindowWidth===void 0&&(this.configuration.minWindowWidth=10);const w=Math.max(Math.abs(m.max-m.min),this.configuration.minWindowWidth),x=m.mean,C=a.getProperties().VOILUTFunction,S=Xu(w,x,C);a.setProperties({voiRange:S}),a.render()},this.cancel=()=>null,this.isPointNearTool=()=>null,this.toolSelectedCallback=()=>null,this.handleSelectedCallback=()=>null,this._activateModify=()=>null,this._deactivateModify=()=>null}}zW.toolName="WindowLevelRegion";class Ld extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}){super(e,r),this.deltaY=1}mouseWheelCallback(e){this._scroll(e)}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){this._scrollDrag(e)}_scrollDrag(e){const{deltaPoints:r,viewportId:n,renderingEngineId:i}=e.detail,{viewport:o}=Oi(n,i),{debounceIfNotLoaded:a,invert:s,loop:c}=this.configuration,l=r.canvas[1];let f;o instanceof ur&&(f=o.getVolumeId());const u=this._getPixelPerImage(o),d=l+this.deltaY;if(u)if(Math.abs(d)>=u){const h=Math.round(d/u);sc(o,{delta:s?-h:h,volumeId:f,debounceLoading:a,loop:c}),this.deltaY=d%u}else this.deltaY=d}_scroll(e){const{wheel:r,element:n}=e.detail,{direction:i}=r,{invert:o}=this.configuration,{viewport:a}=_e(n),s=i*(o?-1:1);sc(a,{delta:s,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:a instanceof Tr?a.getVolumeId():void 0,scrollSlabs:this.configuration.scrollSlabs})}_getPixelPerImage(e){const{element:r}=e,n=e.getNumberOfSlices();return Math.max(2,r.offsetHeight/Math.max(n,8))}}Ld.toolName="StackScroll";class Mh extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.mouseWheelCallback=n=>{const{element:i,wheel:o}=n.detail,a=_e(i),{viewport:s}=a,{invert:c}=this.configuration,l=o.direction*10*(c?-1:1);this.setAngle(s,l)},this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:r,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,s=_e(r),{viewport:c}=s,l=c.getCamera(),f=r.clientWidth,u=r.clientHeight,d=[f*.5,u*.5],h=c.canvasToWorld(d);let g=oh([a,h],[h,o]);const{viewPlaneNormal:p}=l,v=Mn(Ke(),h,a),y=Mn(Ke(),h,o),m=kn(Ke(),v,y);kt(p,m)>0&&(g=-g),!Number.isNaN(g)&&this.setAngle(c,g)}setAngle(e,r){const{viewPlaneNormal:n,viewUp:i}=e.getCamera();if(e instanceof Tr){const o=(r+360)%360*Math.PI/180,a=Wt(new Float32Array(16));Ro(a,a,o,n);const s=Yt(Ke(),i,a);e.setCamera({viewUp:s})}else{const{rotation:o}=e.getViewPresentation();e.setViewPresentation({rotation:(o+r+360)%360})}e.render()}}Mh.toolName="PlanarRotate";class Gl extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.001,maxZoomScale:3e3,pinchToZoom:!0,pan:!0,invert:!1}}){super(e,r),this.preMouseDownCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=a.world,l=_e(o).viewport.getCamera(),{focalPoint:f}=l;this.initialMousePosWorld=s;let u=Ft(f[0]-s[0],f[1]-s[1],f[2]-s[2]);return u=Qn(Ke(),u),this.dirVec=u,!1},this.preTouchStartCallback=n=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(n)},this._dragParallelProjection=(n,i,o,a=!1)=>{var T,_,E;const{element:s,deltaPoints:c}=n.detail,l=a?n.detail.deltaDistance.canvas:c.canvas[1],f=[s.clientWidth,s.clientHeight],{parallelScale:u,focalPoint:d,position:h}=o,g=5/f[1],p=l*g*(this.configuration.invert?-1:1),v=(1-p)*u;let y=d,m=h;if(!this.configuration.zoomToCenter){const b=Qi(d,this.initialMousePosWorld);m=On(Ke(),h,this.dirVec,-b*p),y=On(Ke(),d,this.dirVec,-b*p)}const w=i.getImageData();let x=[1,1,1],C=v,S=!1;if(w){x=w.spacing;const{dimensions:b}=w,D=b[0]*x[0],I=b[1]*x[1],P=f[0]/f[1],O=(T=i.options)==null?void 0:T.displayArea,A=((_=O==null?void 0:O.imageArea)==null?void 0:_[0])??1.1,V=((E=O==null?void 0:O.imageArea)==null?void 0:E[1])??1.1,G=D*A,R=I*V,N=G/R;let F;N>P?F=G/P*.5:F=R*.5;const{minZoomScale:j,maxZoomScale:te}=this.configuration,ie=F/te,he=F/j;vhe&&(C=he,S=!0)}i.setCamera({parallelScale:C,focalPoint:S?d:y,position:S?h:m})},this._dragPerspectiveProjection=(n,i,o,a=!1)=>{const{element:s,deltaPoints:c}=n.detail,l=a?n.detail.deltaDistance.canvas:c.canvas[1],f=[s.clientWidth,s.clientHeight],{position:u,focalPoint:d,viewPlaneNormal:h}=o,g=nn.distance2BetweenPoints(u,d),p=Math.sqrt(g)/f[1],v=[-h[0],-h[1],-h[2]],y=this.configuration.invert?l/p:l*p;let m=y*v[0];u[0]+=m,d[0]+=m,m=y*v[1],u[1]+=m,d[1]+=m,m=y*v[2],u[2]+=m,d[2]+=m,i.setCamera({position:u,focalPoint:d})},this.initialMousePosWorld=[0,0,0],this.dirVec=[0,0,0],this.configuration.pinchToZoom?this.touchDragCallback=this._pinchCallback.bind(this):this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}mouseWheelCallback(e){this._zoom(e)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:n,currentPoints:i}=e.detail,o=_e(n),{viewport:a}=o,s=a.getCamera(),c=i.world,{focalPoint:l}=s;this.initialMousePosWorld=c;let f=Ft(l[0]-c[0],l[1]-c[1],l[2]-c[2]);f=Qn(Ke(),f),this.dirVec=f,s.parallelProjection?this._dragParallelProjection(e,a,s,!0):this._dragPerspectiveProjection(e,a,s,!0),a.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:r}=e.detail,n=_e(r),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_zoom(e){const{element:r,points:n}=e.detail,i=_e(r),{viewport:o}=i;o.getCamera();const s=e.detail.wheel.direction,c={detail:{element:r,eventName:k.MOUSE_WHEEL,renderingEngineId:i.renderingEngineId,viewportId:o.id,camera:{},deltaPoints:{page:n.page,client:n.client,world:n.world,canvas:[0,-s*5]},startPoints:n,lastPoints:n,currentPoints:n}};o.type===vr.STACK&&this.preMouseDownCallback(c),this._dragCallback(c)}_panCallback(e){const{element:r,deltaPoints:n}=e.detail,i=_e(r),o=n.world,a=i.viewport.getCamera(),{focalPoint:s,position:c}=a,l=[c[0]-o[0],c[1]-o[1],c[2]-o[2]],f=[s[0]-o[0],s[1]-o[1],s[2]-o[2]];i.viewport.setCamera({focalPoint:f,position:l}),i.viewport.render()}}Gl.toolName="Zoom";class $W extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}}){super(e,r)}mouseClickCallback(e){const{element:r,currentPoints:n}=e.detail,i=_e(r),{viewport:o,renderingEngine:a}=i,s=o.getVolumeId();if(!s)throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");let c=-1/0;const l=(g,p)=>{if(g>c)return c=g,p},f=l8(o,n.world,s,l);if(!f||!f.length)return;const{targetViewportIds:u,toolGroupId:d}=this.configuration;a.getViewports().filter(g=>{if((u==null?void 0:u.indexOf(g.id))>=0)return!0;const p=Pr(g.id,a.id);return!!(d&&d===(p==null?void 0:p.id))}).forEach(g=>{g instanceof ur?g.jumpToWorld(f):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")})}}$W.toolName="MIPJumpToClickTool";const{RENDERING_DEFAULTS:FC}=wf;function iTe(){return"rgb(0, 200, 0)"}function oTe(){return!0}function aTe(){return!0}function sTe(){return!0}const js={DRAG:1,ROTATE:2,SLAB:3};class jc extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!1,viewportIndicatorsConfig:{radius:5,x:null,y:null},autoPan:{enabled:!1,panSize:10},handleRadius:3,enableHDPIHandles:!1,referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:Zc.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}){var n,i,o,a;super(e,r),this.toolCenter=[0,0,0],this.initializeViewport=({renderingEngineId:s,viewportId:c})=>{const l=Oi(c,s);if(!l)return;const{FrameOfReferenceUID:f,viewport:u}=l,{element:d}=u,{position:h,focalPoint:g,viewPlaneNormal:p}=u.getCamera();let v=this._getAnnotations(l);v=this.filterInteractableAnnotationsForElement(d,v),v!=null&&v.length&&mn(v[0].annotationUID);const y={highlighted:!1,metadata:{cameraPosition:[...h],cameraFocalPoint:[...g],FrameOfReferenceUID:f,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:c}};return ln(y,d),{normal:p,point:u.canvasToWorld([u.canvas.clientWidth/2,u.canvas.clientHeight/2])}},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.resetCrosshairs=()=>{const s=this._getViewportsInfo();for(const c of s){const{viewportId:l,renderingEngineId:f}=c,u=Oi(l,f),d=u.viewport;d.resetCamera({resetPan:!0,resetZoom:!0,resetToCenter:!0,resetRotation:!0,suppressEvents:!0}),d.resetSlabThickness();const{element:m}=d;let w=this._getAnnotations(u);w=this.filterInteractableAnnotationsForElement(m,w),w.length&&mn(w[0].annotationUID),d.render()}this._computeToolCenter(s)},this.computeToolCenter=()=>{const s=this._getViewportsInfo();this._computeToolCenter(s)},this._computeToolCenter=s=>{if(!s.length||s.length===1){console.warn("For crosshairs to operate, at least two viewports must be given.");return}const[c,l,f]=s,{normal:u,point:d}=this.initializeViewport(c),{normal:h,point:g}=this.initializeViewport(l);let p=[0,0,0],v=Ke();f?{normal:p,point:v}=this.initializeViewport(f):(ri(v,d,g),Ir(v,v,.5),kn(p,u,h));const y=nl(u,d),m=nl(h,g),w=nl(p,v),x=yk(y,m,w);this.setToolCenter(x)},this.addNewAnnotation=s=>{const c=s.detail,{element:l}=c,{currentPoints:f}=c,u=f.world,d=_e(l),{viewport:h}=d;this._jump(d,u);const g=this._getAnnotations(d),p=this.filterInteractableAnnotationsForElement(h.element,g),{data:v}=p[0],{rotationPoints:y}=v.handles,m=[];for(let w=0;w{console.log("Not implemented yet")},this.handleSelectedCallback=(s,c)=>{const l=s.detail,{element:f}=l;c.highlighted=!0,this._activateModify(f),Gt(f),s.preventDefault()},this.isPointNearTool=(s,c,l,f)=>!!this._pointNearTool(s,c,l,6),this.toolSelectedCallback=(s,c,l)=>{const f=s.detail,{element:u}=f;c.highlighted=!0,this._activateModify(u),Gt(u),s.preventDefault()},this.onCameraModified=s=>{var E;const c=s.detail,{element:l}=c,f=_e(l),{renderingEngine:u}=f,d=f.viewport,h=this._getAnnotations(f),p=this.filterInteractableAnnotationsForElement(l,h)[0];if(!p)return;const v=d.getCamera(),y=p.metadata.cameraPosition,m=[0,0,0];nn.subtract(v.position,y,m);const w=p.metadata.cameraFocalPoint,x=[0,0,0];nn.subtract(v.focalPoint,w,x),p.metadata.cameraPosition=[...v.position],p.metadata.cameraFocalPoint=[...v.focalPoint];const C=this._getReferenceLineControllable(d.id),S=this._getReferenceLineDraggableRotatable(d.id);if(!Zt(v.position,y,.001)&&C&&S){let b=!1;Zt(m,x,.001)||(b=!0);const I=Math.abs(nn.dot(m,v.viewPlaneNormal))<.01;!b&&!I&&(this.toolCenter[0]+=m[0],this.toolCenter[1]+=m[1],this.toolCenter[2]+=m[2],ut(et,k.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter}))}(E=this.configuration.autoPan)!=null&&E.enabled&&Pr(d.id,u.id).getViewportIds().filter(I=>I!==d.id).forEach(I=>{this._autoPanViewportIfNecessary(I,u)});const _=At(l,this.getToolName(),!1);Be(_)},this.onResetCamera=s=>{this.resetCrosshairs()},this.mouseMoveCallback=(s,c)=>{const{element:l,currentPoints:f}=s.detail,u=f.canvas;let d=!1;for(let h=0;h0?[...p.activeViewportIds]:[];p.activeViewportIds=[],p.handles.activeOperation=null;const w=this.getHandleNearImagePoint(l,g,u,6);let x=!1;w?x=!0:x=this._pointNearTool(l,g,u,6),x&&!v||!x&&v?(g.highlighted=!v,d=!0):(p.handles.activeOperation!==y||!this._areViewportIdArraysEqual(p.activeViewportIds,m))&&(d=!0)}return d},this.filterInteractableAnnotationsForElement=(s,c)=>{if(!c||!c.length)return[];const l=_e(s),{viewportId:f}=l;return c.filter(d=>d.data.viewportId===f)},this.renderAnnotation=(s,c)=>{let l=!1;const{viewport:f,renderingEngine:u}=s,{element:d}=f,h=this._getAnnotations(s),g=f.getCamera(),v=this.filterInteractableAnnotationsForElement(d,h)[0];if(!(h!=null&&h.length)||!(v!=null&&v.data))return l;const y=v.annotationUID,{clientWidth:m,clientHeight:w}=f.canvas,x=Math.sqrt(m*m+w*w),C=Math.min(m,w),S=v.data,T=f.worldToCanvas(this.toolCenter),_=this._filterAnnotationsByUniqueViewportOrientations(s,h),E=[],b=[0,0,m,w];_.forEach(A=>{const{data:V}=A;V.handles.toolCenter=this.toolCenter;const G=u.getViewport(V.viewportId),R=G.getCamera(),N=this._getReferenceLineControllable(G.id),F=this._getReferenceLineDraggableRotatable(G.id),j=this._getReferenceLineSlabThicknessControlsOn(G.id),{clientWidth:te,clientHeight:ie}=G.canvas,he=Math.sqrt(te*te+ie*ie),ue=[te*.5,ie*.5],ve=G.canvasToWorld(ue),Me=[0,0,0];nn.cross(g.viewPlaneNormal,R.viewPlaneNormal,Me),nn.normalize(Me),nn.multiplyScalar(Me,he);const Ue=[0,0,0];nn.add(ve,Me,Ue);const be=[0,0,0];nn.subtract(ve,Me,be);const B=f.worldToCanvas(Ue),M=f.worldToCanvas(ve),$=rn();Jr($,B,M),Fl($,$);const W=rn();Ll(W,$,x*100);const Y=rn();Ll(Y,$,C*.4);const ne=rn();Ll(ne,$,C*.2);const re=rn(),Se=this.configuration.referenceLinesCenterGapRadius;Ll(re,$,_.length===2?Se:0);const Re=rn(),je=rn(),qe=rn(),oe=rn();let ce=Qm(T);(!F||!N)&&(ce=Qm(M)),mo(Re,ce,re),mo(je,ce,W),Jr(qe,ce,re),Jr(oe,ce,W),ep(Re,je,b),ep(qe,oe,b);const Te=rn();Jr(Te,T,Y);const ae=rn();mo(ae,T,Y);let we=Qm(T);!F&&j&&(we=Qm(M));let Ze=[...this.toolCenter];!F&&j&&(Ze=[...ve]);const le=[0,0,0];nn.subtract(Ue,be,le),nn.normalize(le);const{viewPlaneNormal:Tt}=g,{matrix:Ot}=Yi.buildFromDegree().rotate(90,Tt),_t=[0,0,0];Yt(_t,le,Ot);const Ae=G.getSlabThickness(),tt=[..._t];nn.multiplyScalar(tt,Ae);const gt=[0,0,0];nn.add(Ze,tt,gt);const ht=f.worldToCanvas(gt),xt=rn();Jr(xt,we,ht);const jt=rn();Jr(jt,we,W),mo(jt,jt,xt);const Pt=rn();mo(Pt,we,W),mo(Pt,Pt,xt),ep(jt,Pt,b);const Kt=rn();mo(Kt,we,W),Jr(Kt,Kt,xt);const en=rn();Jr(en,we,W),Jr(en,en,xt),ep(Kt,en,b);const Dn=rn(),Xn=rn(),fn=rn(),Nn=rn();Jr(Dn,we,ne),mo(Dn,Dn,xt),mo(Xn,we,ne),mo(Xn,Xn,xt),Jr(fn,we,ne),Jr(fn,fn,xt),mo(Nn,we,ne),Jr(Nn,Nn,xt),E.push([G,Re,je,qe,oe,jt,Pt,Kt,en,Te,ae,Dn,Xn,fn,Nn])});const D=[],I=[],P=this._getReferenceLineColor(f.id),O=P!==void 0?P:"rgb(200, 200, 200)";if(E.forEach((A,V)=>{var Me,Ue,be,B;const G=A[0],R=this._getReferenceLineColor(G.id),N=this._getReferenceLineControllable(G.id),F=this._getReferenceLineDraggableRotatable(G.id)||((Me=this.configuration.mobile)==null?void 0:Me.enabled),j=this._getReferenceLineSlabThicknessControlsOn(G.id)||((Ue=this.configuration.mobile)==null?void 0:Ue.enabled),te=S.activeViewportIds.find(M=>M===G.id);let ie=R!==void 0?R:"rgb(200, 200, 200)",he=1;const ue=S.handles.activeOperation!==null&&S.handles.activeOperation===js.DRAG&&te;ue&&(he=2.5);let ve=`${V}`;if(N&&F?(ve=`${V}One`,Sn(c,y,ve,A[1],A[2],{color:ie,lineWidth:he}),ve=`${V}Two`,Sn(c,y,ve,A[3],A[4],{color:ie,lineWidth:he})):Sn(c,y,ve,A[2],A[4],{color:ie,lineWidth:he}),N){ie=R!==void 0?R:"rgb(200, 200, 200)";const M=S.handles.activeOperation===js.ROTATE,$=[A[9],A[10]],W=[f.canvasToWorld(A[9]),G,A[1],A[2]],Y=[f.canvasToWorld(A[10]),G,A[3],A[4]];D.push(W,Y);const ne=S.handles.activeOperation===js.SLAB,re=[A[11],A[12],A[13],A[14]],Se=[f.canvasToWorld(A[11]),G,A[5],A[6]],Re=[f.canvasToWorld(A[12]),G,A[5],A[6]],je=[f.canvasToWorld(A[13]),G,A[7],A[8]],qe=[f.canvasToWorld(A[14]),G,A[7],A[8]];I.push(Se,Re,je,qe);let oe=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1),ce=1;if((be=this.configuration.mobile)!=null&&be.enabled&&(oe=this.configuration.mobile.handleRadius,ce=this.configuration.mobile.opacity),(ue||(B=this.configuration.mobile)!=null&&B.enabled)&&!M&&!ne&&F&&j){let ae=`${V}One`;or(c,y,ae,$,{color:ie,handleRadius:oe,opacity:ce,type:"circle"}),ae=`${V}Two`,or(c,y,ae,re,{color:ie,handleRadius:oe,opacity:ce,type:"rect"})}else if(ue&&!M&&!ne&&F){const ae=`${V}`;or(c,y,ae,$,{color:ie,handleRadius:oe,opacity:ce,type:"circle"})}else if(te&&!M&&!ne&&j){const ae=`${V}`;or(c,y,ae,re,{color:ie,handleRadius:oe,opacity:ce,type:"rect"})}else if(M&&F){const ae=`${V}`,we=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1);or(c,y,ae,$,{color:ie,handleRadius:we,fill:ie,type:"circle"})}else if(ne&&te&&j){const ae=this.configuration.handleRadius*(this.configuration.enableHDPIHandles?window.devicePixelRatio:1);or(c,y,ve,re,{color:ie,handleRadius:ae,fill:ie,type:"rect"})}G.getSlabThickness()>.5&&j&&(ve=`${V}STOne`,Sn(c,y,ve,A[5],A[6],{color:ie,width:1,lineDash:[2,3]}),ve=`${V}STTwo`,Sn(c,y,ve,A[7],A[8],{color:ie,width:A,lineDash:[2,3]}))}}),l=!0,S.handles.rotationPoints=D,S.handles.slabThicknessPoints=I,this.configuration.viewportIndicators){const{viewportIndicatorsConfig:A}=this.configuration,V=(A==null?void 0:A.xOffset)||.95,G=(A==null?void 0:A.yOffset)||.05,R=[m*V,w*G],N=(A==null?void 0:A.circleRadius)||x*.01;ia(c,y,"0",R,N,{color:O,fill:O})}return l},this._getAnnotations=s=>{const{viewport:c}=s,l=hn(this.getToolName(),c.element)||[],f=this._getViewportsInfo().map(({viewportId:d})=>d);return l.filter(d=>{const{data:h}=d;return f.includes(h.viewportId)})},this._onNewVolume=()=>{const s=this._getViewportsInfo();this._computeToolCenter(s)},this._areViewportIdArraysEqual=(s,c)=>s.length!==c.length?!1:(s.forEach(l=>{let f=!1;for(let u=0;u{const{viewportId:l,renderingEngine:f,viewport:u}=s,d=c.filter(y=>y.data.viewportId!==l);if(!d||!d.length)return[];const h=u.getCamera(),{viewPlaneNormal:g,position:p}=h;return d.filter(y=>{const{viewportId:m}=y.data,x=f.getViewport(m).getCamera();return!(Zt(x.viewPlaneNormal,g,.01)&&Zt(x.position,p,1))})},this._filterViewportWithSameOrientation=(s,c,l)=>{const{renderingEngine:f}=s,{data:u}=c,d=f.getViewport(u.viewportId),h=l.filter(y=>{const{data:m}=y,w=f.getViewport(m.viewportId);return this._getReferenceLineControllable(w.id)===!0});if(!h||!h.length)return[];const g=d.getCamera(),p=g.viewPlaneNormal;return nn.normalize(p),h.filter(y=>{const{viewportId:m}=y.data,x=f.getViewport(m).getCamera(),C=x.viewPlaneNormal;return nn.normalize(C),Zt(p,C,.01)&&Zt(g.viewUp,x.viewUp,.01)})},this._filterAnnotationsByUniqueViewportOrientations=(s,c)=>{const{renderingEngine:l,viewport:f}=s,d=f.getCamera().viewPlaneNormal;nn.normalize(d);const h=c.filter(y=>{const{data:m}=y,w=l.getViewport(m.viewportId),x=this._getReferenceLineControllable(w.id);return f!==w&&x===!0}),g=[];for(let y=0;y{const{data:m}=y,w=l.getViewport(m.viewportId),x=this._getReferenceLineControllable(w.id);return f!==w&&x!==!0});for(let y=0;y_===m))continue;const{viewportId:w}=m.data,C=l.getViewport(w).getCamera(),S=C.viewPlaneNormal;if(nn.normalize(S),Zt(d,S,.01)||Qg(d,S,.01))continue;let T=!1;for(let _=0;_{const l=s.getAllVolumeIds(),f=c.getAllVolumeIds();return l.length===f.length&&l.every(u=>f.includes(u))},this._jump=(s,c)=>{Ye.isInteractingWithTool=!0;const{viewport:l,renderingEngine:f}=s,u=this._getAnnotations(s),d=[0,0,0];nn.subtract(c,this.toolCenter,d);const g=this._getAnnotationsForViewportsWithDifferentCameras(s,u).filter(p=>{const{data:v}=p,y=f.getViewport(v.viewportId),m=this._checkIfViewportsRenderingSameScene(l,y);return this._getReferenceLineControllable(y.id)&&this._getReferenceLineDraggableRotatable(y.id)&&m});return g.length===0?(Ye.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(f,g,d),Ye.isInteractingWithTool=!1,!0)},this._activateModify=s=>{var c;Ye.isInteractingWithTool=!((c=this.configuration.mobile)!=null&&c.enabled),s.addEventListener(k.MOUSE_UP,this._endCallback),s.addEventListener(k.MOUSE_DRAG,this._dragCallback),s.addEventListener(k.MOUSE_CLICK,this._endCallback),s.addEventListener(k.TOUCH_END,this._endCallback),s.addEventListener(k.TOUCH_DRAG,this._dragCallback),s.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=s=>{Ye.isInteractingWithTool=!1,s.removeEventListener(k.MOUSE_UP,this._endCallback),s.removeEventListener(k.MOUSE_DRAG,this._dragCallback),s.removeEventListener(k.MOUSE_CLICK,this._endCallback),s.removeEventListener(k.TOUCH_END,this._endCallback),s.removeEventListener(k.TOUCH_DRAG,this._dragCallback),s.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._endCallback=s=>{const c=s.detail,{element:l}=c;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(l),Jt(l),this.editData=null;const u=At(l,this.getToolName(),!1);Be(u)},this._dragCallback=s=>{const c=s.detail,l=c.deltaPoints.world;if(Math.abs(l[0])<.001&&Math.abs(l[1])<.001&&Math.abs(l[2])<.001)return;const{element:f}=c,u=_e(f),{renderingEngine:d,viewport:h}=u,g=this._getAnnotations(u),v=this.filterInteractableAnnotationsForElement(f,g)[0];if(!v)return;const{handles:y}=v.data,{currentPoints:m}=s.detail,w=m.canvas;if(y.activeOperation===js.DRAG){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(S=>{const{data:T}=S,_=d.getViewport(T.viewportId),E=this._getReferenceLineControllable(_.id),b=this._getReferenceLineDraggableRotatable(_.id);return E===!0&&b===!0&&v.data.activeViewportIds.find(D=>D===_.id)});this._applyDeltaShiftToSelectedViewportCameras(d,C,l)}else if(y.activeOperation===js.ROTATE){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(V=>{const{data:G}=V,R=d.getViewport(G.viewportId),N=this._getReferenceLineControllable(R.id),F=this._getReferenceLineDraggableRotatable(R.id);return N===!0&&F===!0}),S=rn(),T=rn(),_=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],E=h.worldToCanvas(_),b=c.currentPoints.canvas,D=rn();xs(D,b,c.deltaPoints.canvas),xs(S,D,E),xs(T,b,E);let I=$Y(S,T);this._isClockWise(E,D,b)&&(I*=-1),I=Math.round(I*100)/100;const P=h.getCamera().viewPlaneNormal,{matrix:O}=Yi.buildFromRadian().translate(_[0],_[1],_[2]).rotate(I,P).translate(-_[0],-_[1],-_[2]),A=[];C.forEach(V=>{const{data:G}=V;G.handles.toolCenter=_;const R=d.getViewport(G.viewportId),N=R.getCamera(),{viewUp:F,position:j,focalPoint:te}=N;F[0]+=j[0],F[1]+=j[1],F[2]+=j[2],Yt(te,te,O),Yt(j,j,O),Yt(F,F,O),F[0]-=j[0],F[1]-=j[1],F[2]-=j[2],R.setCamera({position:j,viewUp:F,focalPoint:te}),A.push(R.id)}),d.renderViewports(A)}else if(y.activeOperation===js.SLAB){const C=this._getAnnotationsForViewportsWithDifferentCameras(u,g).filter(_=>{const{data:E}=_,b=d.getViewport(E.viewportId),D=this._getReferenceLineControllable(b.id),I=this._getReferenceLineSlabThicknessControlsOn(b.id);return D===!0&&I===!0&&v.data.activeViewportIds.find(P=>P===b.id)});if(C.length===0)return;const S=this._filterViewportWithSameOrientation(u,C[0],g),T=[];T.push(h.id),S.forEach(_=>{const{data:E}=_,b=d.getViewport(E.viewportId),I=b.getCamera().viewPlaneNormal,P=nn.dot(l,I),O=[...I];if(nn.multiplyScalar(O,P),Math.abs(O[0])>.001||Math.abs(O[1])>.001||Math.abs(O[2])>.001){const A=Math.sqrt(O[0]*O[0]+O[1]*O[1]+O[2]*O[2]),V=c.lastPoints.world,G=[0,0,0],R=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(b.id)){const{rotationPoints:Ue}=this.editData.annotation.data.handles,be=Ue.filter(B=>B[1].uid===b.id);if(be.length===2){const B=h.canvasToWorld(be[0][3]),M=h.canvasToWorld(be[1][3]);nn.add(B,M,R),nn.multiplyScalar(R,.5)}}nn.subtract(V,R,G);const F=nn.dot(G,I),j=[...I];nn.multiplyScalar(j,F);const te=[j[0],j[1],j[2]];Qn(te,te);const ie=[O[0],O[1],O[2]];Qn(ie,ie);let he=b.getSlabThickness();Qg(te,ie,.001)?he-=A:he+=A,he=Math.abs(he),he=Math.max(FC.MINIMUM_SLAB_THICKNESS,he),this._pointNearReferenceLine(v,w,6,b)&&(he=FC.MINIMUM_SLAB_THICKNESS),Pr(b.id,d.id).getToolInstance(this.getToolName()).setSlabThickness(b,he),T.push(b.id)}}),d.renderViewports(T)}},this._pointNearReferenceLine=(s,c,l,f)=>{const{data:u}=s,{rotationPoints:d}=u.handles;for(let h=0;h{const i=Oi(n,r);if(!i)return;const o=this._getAnnotations(i);o!=null&&o.length&&o.forEach(a=>{mn(a.annotationUID)})})}setToolCenter(e,r=!1){this.toolCenter=e;const n=this._getViewportsInfo();Be(n.map(({viewportId:i})=>i)),r||ut(et,k.CROSSHAIR_TOOL_CENTER_CHANGED,{toolGroupId:this.toolGroupId,toolCenter:this.toolCenter})}getHandleNearImagePoint(e,r,n,i){const o=_e(e),{viewport:a}=o;let s=this._getRotationHandleNearImagePoint(a,r,n,i);if(s!==null||(s=this._getSlabThicknessHandleNearImagePoint(a,r,n,i),s!==null))return s}_unsubscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:r,renderingEngineId:n})=>{const{viewport:i}=Oi(r,n),{element:o}=i;o.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_subscribeToViewportNewVolumeSet(e){e.forEach(({viewportId:r,renderingEngineId:n})=>{const{viewport:i}=Oi(r,n),{element:o}=i;o.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)})}_autoPanViewportIfNecessary(e,r){const n=r.getViewport(e),{clientWidth:i,clientHeight:o}=n.canvas,a=n.worldToCanvas(this.toolCenter),s=this.configuration.autoPan.panSize,c=[a[0],a[1]];if(a[0]<0?c[0]=s:a[0]>i&&(c[0]=i-s),a[1]<0?c[1]=s:a[1]>o&&(c[1]=o-s),c[0]===a[0]&&c[1]===a[1])return;const l=n.canvasToWorld(c),f=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],u=n.getCamera(),{focalPoint:d,position:h}=u,g=[h[0]-f[0],h[1]-f[1],h[2]-f[2]],p=[d[0]-f[0],d[1]-f[1],d[2]-f[2]];n.setCamera({focalPoint:p,position:g}),n.render()}setSlabThickness(e,r){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;r===FC.MINIMUM_SLAB_THICKNESS&&(o=Zc.COMPOSITE),e.setBlendMode(o,n,!1),e.setSlabThickness(r,n)}_isClockWise(e,r,n){return(r[0]-e[0])*(n[1]-e[1])-(r[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,r,n){r.forEach(i=>{this._applyDeltaShiftToViewportCamera(e,i,n)})}_applyDeltaShiftToViewportCamera(e,r,n){const{data:i}=r,o=e.getViewport(i.viewportId),a=o.getCamera(),s=a.viewPlaneNormal,c=nn.dot(n,s),l=[...s];if(nn.multiplyScalar(l,c),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const f=[0,0,0],u=[0,0,0];nn.add(a.focalPoint,l,f),nn.add(a.position,l,u),o.setCamera({focalPoint:f,position:u}),o.render()}}_getRotationHandleNearImagePoint(e,r,n,i){const{data:o}=r,{rotationPoints:a}=o.handles;for(let s=0;sP===p.id))continue;const v=this._getReferenceLineControllable(p.id),y=this._getReferenceLineSlabThicknessControlsOn(p.id);if(!v||!y)continue;const m=d[g][2],w=d[g][3],x=rn();mo(x,m,w),Ll(x,x,.5);const C=rn();Jr(C,m,x),Fl(C,C);const S=rn();Ll(S,C,l*.05);const T=rn(),_=rn();mo(T,x,S),Jr(_,x,S);const E={start:{x:T[0],y:T[1]},end:{x:m[0],y:m[1]}},b=Ii([E.start.x,E.start.y],[E.end.x,E.end.y],[n[0],n[1]]),D={start:{x:_[0],y:_[1]},end:{x:w[0],y:w[1]}},I=Ii([D.start.x,D.start.y],[D.end.x,D.end.y],[n[0],n[1]]);(b<=i||I<=i)&&(h.push(p.id),f.handles.activeOperation=null),g++}return f.activeViewportIds=[...h],this.editData={annotation:r},f.handles.activeOperation===js.DRAG}}jc.toolName="Crosshairs";const qv="magnify-viewport";class jW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}){super(e,r),this._hasBeenRemoved=!1,this.preMouseDownCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o),{viewport:c,renderingEngine:l}=s;if(!(c instanceof lr))throw new Error("MagnifyTool only works on StackViewports");const f=this._getReferencedImageId(c);if(!f)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const u=At(o,this.getToolName());return this.editData={referencedImageId:f,viewportIdsToRender:u,enabledElement:s,renderingEngine:l,currentPoints:a},this._createMagnificationViewport(),this._activateDraw(o),Gt(o),n.preventDefault(),Be(u),!0},this.preTouchStartCallback=n=>{this.preMouseDownCallback(n)},this._createMagnificationViewport=()=>{const{enabledElement:n,referencedImageId:i,viewportIdsToRender:o,renderingEngine:a,currentPoints:s}=this.editData,{viewport:c}=n,{element:l}=c,f=c.getProperties(),{rotation:u}=c.getViewPresentation(),{canvas:d,world:h}=s;let g;if(g=l.querySelector(".magnifyTool"),g===null){const v=document.createElement("div");v.classList.add("magnifyTool"),v.style.display="block",v.style.width=`${this.configuration.magnifyWidth}px`,v.style.height=`${this.configuration.magnifyHeight}px`,v.style.position="absolute",g=v,l.querySelector(".viewport-element").appendChild(v);const m={viewportId:qv,type:vr.STACK,element:g};a.enableElement(m)}g.style.top=`${d[1]-this.configuration.magnifyHeight/2}px`,g.style.left=`${d[0]-this.configuration.magnifyWidth/2}px`;const p=a.getViewport(qv);p.setStack([i]).then(()=>{if(this._hasBeenRemoved)return;p.setProperties(f),p.setViewPresentation({rotation:u});const{parallelScale:v}=c.getCamera(),{focalPoint:y,position:m,viewPlaneNormal:w}=p.getCamera(),x=Math.sqrt(Math.pow(y[0]-m[0],2)+Math.pow(y[1]-m[1],2)+Math.pow(y[2]-m[2],2)),C=[h[0],h[1],h[2]],S=[C[0]+x*w[0],C[1]+x*w[1],C[2]+x*w[2]];p.setCamera({parallelScale:v*(1/this.configuration.magnifySize),focalPoint:C,position:S}),p.render()}),g.style.display="block",Be(o)},this._dragCallback=n=>{const i=n.detail,{deltaPoints:o,element:a,currentPoints:s}=i,c=o.world,l=s.canvas,f=_e(a),{renderingEngine:u}=f,d=u.getViewport(qv),h=a.querySelector(".magnifyTool");if(!h)return;h.style.top=`${l[1]-this.configuration.magnifyHeight/2}px`,h.style.left=`${l[0]-this.configuration.magnifyWidth/2}px`;const{focalPoint:g,position:p}=d.getCamera(),v=[p[0]+c[0],p[1]+c[1],p[2]+c[2]],y=[g[0]+c[0],g[1]+c[1],g[2]+c[2]];d.setCamera({focalPoint:y,position:v}),d.render()},this._dragEndCallback=n=>{const{element:i}=n.detail,o=_e(i),{renderingEngine:a}=o;a.disableElement(qv);const s=i.querySelector(".viewport-element"),c=s.querySelector(".magnifyTool");s.removeChild(c),this._deactivateDraw(i),Jt(i),this._hasBeenRemoved=!0},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,this._hasBeenRemoved=!1,n.addEventListener(k.MOUSE_UP,this._dragEndCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._dragEndCallback),n.addEventListener(k.TOUCH_END,this._dragEndCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._dragEndCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._dragEndCallback),n.removeEventListener(k.TOUCH_END,this._dragEndCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)}}_getReferencedImageId(e){const r=this.getTargetId(e);let n;return e instanceof lr&&(n=r.split("imageId:")[1]),n}}jW.toolName="Magnify";const cTe="advancedMagnifyTool",lTe=125,{Events:wu}=Qa,s7=t=>t.uid!==t.referencedId;var cT;(function(t){t.ShowZoomFactorsList="showZoomFactorsList"})(cT||(cT={}));const uTe="AdvancedMagnify",fTe=1-qa,rb=class rb extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:3,zoomFactorList:[1.5,2,2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:fl.Secondary,modifierKey:Ki.Shift}]}}}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=_e(a),{viewport:c,renderingEngine:l}=s,f=o.world,u=o.canvas,{magnifyingGlass:d}=this.configuration,{radius:h,zoomFactor:g,autoPan:p}=d,v=this._getCanvasHandlePoints(u,h),y=c.getCamera(),{viewPlaneNormal:m,viewUp:w}=y,x=this.getReferencedImageId(c,f,m,w),C=Pn(),S=Pn(),T=c.getFrameOfReferenceUID(),_={annotationUID:C,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...w],FrameOfReferenceUID:T,referencedImageId:x},data:{sourceViewportId:c.id,magnifyViewportId:S,zoomFactor:g,isCanvasAnnotation:!0,handles:{points:v,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(_,{magnifyViewportId:S,sourceEnabledElement:s,position:u,radius:h,zoomFactor:g,autoPan:{enabled:p.enabled,padding:p.padding,callback:b=>{const D=_.data.handles.points,{canvas:I}=b.delta;for(let P=0,O=D.length;P{this.magnifyViewportManager.dispose(),mm().forEach(i=>{i.metadata.toolName===this.getToolName()&&mn(i.annotationUID)})},this.isPointNearTool=(n,i,o,a)=>{const{data:s}=i,{points:c}=s.handles,l=c,f=l[0],u=l[2],d=l[3],h=Math.abs(u[1]-f[1])*.5,g=[d[0]+h,f[1]+h],p=Zu([g,o]);return Math.abs(p-h){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},Gt(a),this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;const{points:l}=c.handles,f=l.findIndex(d=>d===o),u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f},this._activateModify(s),Gt(s),Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{data:l}=a;l.handles.activeHandleIndex=null,this._deactivateModify(o),Jt(o),this.editData=null,this.isDrawing=!1,Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{deltaPoints:o}=i,a=(o==null?void 0:o.canvas)??[0,0,0],{annotation:s,viewportIdsToRender:c}=this.editData,{points:l}=s.data.handles;l.forEach(f=>{f[0]+=a[0],f[1]+=a[1]}),s.invalidated=!0,this.editData.hasMoved=!0,Be(c)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c}=this.editData,{data:l}=a;if(c===void 0){const{deltaPoints:f}=i,u=f.canvas;l.handles.points.forEach(h=>{h[0]+=u[0],h[1]+=u[1]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;Be(s)},this._dragHandle=n=>{const i=n.detail,{annotation:o}=this.editData,{data:a}=o,{points:s}=a.handles,c=s,l=c[0],f=c[2],u=c[3],d=Math.abs(f[1]-l[1])*.5,h=[u[0]+d,l[1]+d],{currentPoints:g}=i,p=g.canvas,v=Zu([h,p]),y=this._getCanvasHandlePoints(h,v);s[0]=y[0],s[1]=y[1],s[2]=y[2],s[3]=y[3]},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length))return o;c=c==null?void 0:c.filter(u=>u.data.sourceViewportId===a.id);const l=this.filterInteractableAnnotationsForElement(s,c);if(!(l!=null&&l.length))return o;const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let u=0;u[[n[0],n[1]-i,0],[n[0]+i,n[1],0],[n[0],n[1]+i,0],[n[0]-i,n[1],0]],this.magnifyViewportManager=I0.getInstance()}showZoomFactorsList(e,r){const{element:n,currentPoints:i}=e.detail,o=_e(n),{viewport:a}=o,{canvas:s}=i,c=n.querySelector(":scope .viewport-element"),l=r.data.zoomFactor,f=()=>u.parentElement.removeChild(u),u=this._getZoomFactorsListDropdown(l,d=>{d!==void 0&&(r.data.zoomFactor=Number.parseFloat(d),r.invalidated=!0),f(),a.render()});Object.assign(u.style,{left:`${s[0]}px`,top:`${s[1]}px`}),c.appendChild(u),u.focus()}_getZoomFactorsListDropdown(e,r){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach(o=>{i.addEventListener(o,a=>a.stopPropagation())}),i.addEventListener("change",o=>{o.stopPropagation(),r(i.value)}),i.addEventListener("keydown",o=>{var s;((o.keyCode??o.which===27)||((s=o.key)==null?void 0:s.toLowerCase())==="escape")&&(o.stopPropagation(),r())}),n.forEach(o=>{const a=document.createElement("option");a.label=o,a.title=`Zoom factor ${o.toFixed(1)}`,a.value=o,a.defaultSelected=o===e,i.add(a)}),i}};rb.Actions=cT;let G1=rb;class I0{constructor(){this.createViewport=(e,r)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:s,autoPan:c}=r,{viewport:l}=i,{element:f}=l,u=new dTe({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:s,autoPan:c});return this._addSourceElementEventListener(f),this._magnifyViewportsMap.set(u.viewportId,{annotation:e,magnifyViewport:u,magnifyViewportInfo:r}),u},this._annotationRemovedCallback=e=>{const{annotation:r}=e.detail;r.metadata.toolName===uTe&&this.destroyViewport(r.data.magnifyViewportId)},this._newStackImageCallback=e=>{const{viewportId:r,imageId:n}=e.detail,i=this._getMagnifyViewportsMapEntriesBySourceViewportId(r),{viewport:o}=Wn(r);o.stackActorReInitialized&&this._reset(r),i.forEach(({annotation:a})=>{a.metadata.referencedImageId=n,a.invalidated=!0})},this._newVolumeImageCallback=e=>{const{renderingEngineId:r,viewportId:n}=e.detail,o=jr(r).getViewport(n),{viewPlaneNormal:a}=o.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach(({annotation:c})=>{const{viewPlaneNormal:l}=c.metadata;if(!(Math.abs(kt(l,a))>fTe))return;const{handles:u}=c.data,d=o.canvasToWorld([0,0]),h=Mn(Ke(),d,u.points[0]),g=kt(h,a),p=Ir(Ke(),a,g);for(let v=0,y=u.points.length;vthis.destroyViewport(r))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter(({magnifyViewport:n})=>{const{viewport:i}=n.sourceEnabledElement;return i.id===e})}_reset(e){this._getMagnifyViewportsMapEntriesBySourceViewportId(e).forEach(({magnifyViewport:n,annotation:i,magnifyViewportInfo:o})=>{this.destroyViewport(n.viewportId);const a=Wn(e);this.createViewport(i,{...o,sourceEnabledElement:{...a}})})}_addEventListeners(){et.addEventListener(k.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){et.removeEventListener(k.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(wu.STACK_NEW_IMAGE,this._newStackImageCallback);const r=i=>{const{viewportId:o}=i.detail;this._reset(o)};e.addEventListener(wu.VIEWPORT_NEW_IMAGE_SET,r);const n=i=>{const{viewportId:o}=i.detail;this._reset(o)};e.addEventListener(wu.VOLUME_VIEWPORT_NEW_VOLUME,n),e.addEventListener(wu.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.newStackHandler=r,e.newVolumeHandler=n}_removeSourceElementEventListener(e){e.removeEventListener(wu.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(wu.VOLUME_NEW_IMAGE,this._newVolumeImageCallback),e.removeEventListener(wu.VIEWPORT_NEW_IMAGE_SET,e.newStackHandler),e.removeEventListener(wu.VOLUME_VIEWPORT_NEW_VOLUME,e.newVolumeHandler),delete e.newStackHandler,delete e.newVolumeHandler}_initialize(){this._addEventListeners()}}class dTe{constructor({magnifyViewportId:e,sourceEnabledElement:r,radius:n=lTe,position:i=[0,0],zoomFactor:o,autoPan:a}){this._enabledElement=null,this._sourceToolGroup=null,this._magnifyToolGroup=null,this._isViewportReady=!1,this._radius=0,this._resized=!1,this._canAutoPan=!1,this._viewportId=e??Pn(),this._sourceEnabledElement=r,this._autoPan=a,this.radius=n,this.position=i,this.zoomFactor=o,this.visible=!0,this._browserMouseDownCallback=this._browserMouseDownCallback.bind(this),this._browserMouseUpCallback=this._browserMouseUpCallback.bind(this),this._handleToolModeChanged=this._handleToolModeChanged.bind(this),this._mouseDragCallback=this._mouseDragCallback.bind(this),this._resizeViewportAsync=Yh(this._resizeViewport.bind(this),1),this._initialize()}get sourceEnabledElement(){return this._sourceEnabledElement}get viewportId(){return this._viewportId}get radius(){return this._radius}set radius(e){Math.abs(this._radius-e)>1e-5&&(this._radius=e,this._resized=!0)}update(){const{radius:e,position:r,visible:n}=this,{viewport:i}=this._enabledElement,{element:o}=i,a=2*e,[s,c]=r;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.style,{display:n?"block":"hidden",width:`${a}px`,height:`${a}px`,left:`${-e}px`,top:`${-e}px`,transform:`translate(${s}px, ${c}px)`}),this._isViewportReady&&(this._syncViewports(),i.render())}dispose(){const{viewport:e}=this._enabledElement,{element:r}=e,n=e.getRenderingEngine();this._removeEventListeners(r),n.disableElement(e.id),r.parentNode&&r.parentNode.removeChild(r)}_handleToolModeChanged(e){var s;const{_magnifyToolGroup:r}=this,{toolGroupId:n,toolName:i,mode:o,toolBindingsOptions:a}=e.detail;if(((s=this._sourceToolGroup)==null?void 0:s.id)===n)switch(o){case Fn.Active:r.setToolActive(i,a);break;case Fn.Passive:r.setToolPassive(i);break;case Fn.Enabled:r.setToolEnabled(i);break;case Fn.Disabled:r.setToolDisabled(i);break;default:throw new Error(`Unknow tool mode (${o})`)}}_inheritBorderRadius(e){const r=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");r.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:r}=this,n=r*2;return e.classList.add(cTe),Object.assign(e.style,{display:"block",width:`${n}px`,height:`${n}px`,position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:`${-r}px`,top:`${-r}px`,transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParallelScale(e,r,n){const{parallelScale:i}=e.getCamera(),o=r.canvas.offsetWidth/e.canvas.offsetWidth;return i*(1/n)*o}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,r){const n=e.getActors(),i=`${r.id}-toolGroup`,o=Pr(e.id,e.renderingEngineId),a=o.clone(i,s=>{const c=o.getToolInstance(s);return c instanceof cr&&!(c instanceof G1)});return a.addViewport(r.id,r.renderingEngineId),n.filter(s7).forEach(s=>{ag(this.viewportId,[{segmentationId:s.referencedId,type:Vt.Labelmap}])}),{sourceToolGroup:o,magnifyToolGroup:a}}_cloneStack(e,r){const n=e.getImageIds();r.setStack(n).then(()=>{this._isViewportReady=!0,this.update()})}_cloneVolumes(e,r){const i=e.getActors().filter(o=>!s7(o)).map(o=>({volumeId:o.uid}));return r.setVolumes(i).then(()=>{this._isViewportReady=!0,this.update()}),r}_cloneViewport(e,r){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:r,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const s=i.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,s):this._isVolumeViewport(e)&&this._cloneVolumes(e,s),this._inheritBorderRadius(r);const c=this._cloneToolGroups(e,s);this._sourceToolGroup=c.sourceToolGroup,this._magnifyToolGroup=c.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:r}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),r.addEventListener("mouseup",this._cancelMouseEventCallback),r.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){var n;const{element:r}=this._enabledElement.viewport;this._canAutoPan=!!((n=e.target)!=null&&n.closest(".advancedMagnifyTool")),document.addEventListener("mouseup",this._browserMouseUpCallback),r.removeEventListener("mouseup",this._cancelMouseEventCallback),r.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!Ye.isInteractingWithTool)return;const{_autoPan:r}=this;if(!r.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:s}=this,c=[s,s],l=ko(c,a),f=s-r.padding;if(l<=f)return;const u=l-f,d=xs(rn(),a,c);Fl(d,d),Ll(d,d,u);const h=mo(rn(),this.position,d),g=o(this.position),p=o(h),v=Mn(Ke(),p,g),y={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:h,world:p}},delta:{canvas:d,world:v}};r.callback(y)}_addBrowserEventListeners(e){document.addEventListener("mousedown",this._browserMouseDownCallback,!0),e.addEventListener("mousedown",this._cancelMouseEventCallback),e.addEventListener("mouseup",this._cancelMouseEventCallback),e.addEventListener("mousemove",this._cancelMouseEventCallback),e.addEventListener("dblclick",this._cancelMouseEventCallback)}_removeBrowserEventListeners(e){document.removeEventListener("mousedown",this._browserMouseDownCallback,!0),document.removeEventListener("mouseup",this._browserMouseUpCallback),e.removeEventListener("mousedown",this._cancelMouseEventCallback),e.removeEventListener("mouseup",this._cancelMouseEventCallback),e.removeEventListener("mousemove",this._cancelMouseEventCallback),e.removeEventListener("dblclick",this._cancelMouseEventCallback)}_addEventListeners(e){et.addEventListener(k.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(k.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(k.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){et.removeEventListener(k.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(k.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(k.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:r}=e,{canvas:n}=r,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(r,i),this._enabledElement=_e(i)}_syncViewportsCameras(e,r){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParallelScale(e,r,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:s}=r.getCamera(),c=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],f=[l[0]+c*s[0],l[1]+c*s[1],l[2]+c*s[2]];r.setCamera({parallelScale:i,focalPoint:l,position:f})}_syncStackViewports(e,r){r.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:r}=this._enabledElement,n=e.getProperties();r.getImageData()&&(r.setProperties(n),this._syncViewportsCameras(e,r),this._isStackViewport(e)&&this._syncStackViewports(e,r),this._syncViewportsCameras(e,r),r.render())}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}G1.toolName="AdvancedMagnify";const{EPSILON:UC}=wf;class pd extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",enforceSameFrameOfReference:!0,showFullDimension:!1}}){super(e,r),this.editData=null,this._init=()=>{var h;const i=Bo()[0];if(!i)return;let o=i.getViewports();o=Vw(o,this.getToolName());const a=i.getViewport(this.configuration.sourceViewportId);if(!(a!=null&&a.getImageData()))return;const{element:s}=a,{viewUp:c,viewPlaneNormal:l}=a.getCamera(),f=$y(a);let u=(h=this.editData)==null?void 0:h.annotation;const d=a.getFrameOfReferenceUID();if(u)this.editData.annotation.data.handles.points=f;else{const g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...c],FrameOfReferenceUID:d,referencedImageId:null},data:{handles:{points:f}}};ln(g,s),u=g}this.editData={sourceViewportId:a.id,renderingEngine:i,annotation:u},Be(o.filter(g=>g.id!==a.id).map(g=>g.id))},this.onSetToolEnabled=()=>{this._init()},this.onSetToolConfiguration=()=>{this._init()},this.onCameraModified=n=>{this._init()},this.renderAnnotation=(n,i)=>{var F,j;const{viewport:o}=n;if(!this.editData)return!1;const{annotation:a,sourceViewportId:s}=this.editData;let c=!1;const{viewport:l}=Wn(s)||{};if(!l||l.id===o.id||!a||!((j=(F=a==null?void 0:a.data)==null?void 0:F.handles)!=null&&j.points)||this.configuration.enforceSameFrameOfReference&&l.getFrameOfReferenceUID()!==o.getFrameOfReferenceUID())return c;const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=a.data.handles.points[0],d=a.data.handles.points[1],h=a.data.handles.points[2],g=a.data.handles.points[3],{focalPoint:p,viewPlaneNormal:v,viewUp:y}=o.getCamera(),{viewPlaneNormal:m}=l.getCamera();if(this.isParallel(v,m))return c;const w=nl(v,p),x=[u,h,d,g],C=[u,d,h,g];let S=x,T=qn(Ke(),x[0],x[1]);T=Qn(Ke(),T);let _=qn(Ke(),x[2],x[0]);_=Qn(Ke(),_);const E=kn(Ke(),T,_);if(this.isParallel(E,v))return c;this.isPerpendicular(T,v)&&(S=C);const b=Ch(S[0],S[1],w),D=Ch(S[2],S[3],w),{annotationUID:I}=a;f.annotationUID=I;const P=this.getStyle("lineWidth",f,a),O=this.getStyle("lineDash",f,a),A=this.getStyle("color",f,a),V=this.getStyle("shadow",f,a);let G=[b,D].map(te=>o.worldToCanvas(te));if(this.configuration.showFullDimension&&(G=this.handleFullDimension(o,b,v,y,D,G)),G.length<2)return c;const R=`${I}-line`;return Sn(i,I,"1",G[0],G[1],{color:A,width:P,lineDash:O,shadow:V},R),c=!0,c},this.isPerpendicular=(n,i)=>{const o=kt(n,i);return Math.abs(o)RS(l,m)),[v,y]=[r,o].map(m=>RS(l,m));a=[[d,h],[h,g],[p,g],[d,p]].map(([m,w])=>this.intersectInfiniteLines(m,w,v,y)).filter(m=>m&&this.isInBound(m,u)).map(m=>{const w=yV(l,m);return e.worldToCanvas(w)})}catch(f){console.log(f)}return a}intersectInfiniteLines(e,r,n,i){const[o,a]=e,[s,c]=r,[l,f]=n,[u,d]=i,h=c-a,g=o-s,p=s*a-o*c,v=d-f,y=l-u,m=u*f-l*d;if(Math.abs(h*y-v*g)1-UC}isInBound(e,r){return e[0]>=0&&e[0]<=r[0]&&e[1]>=0&&e[1]<=r[1]}}pd.toolName="ReferenceLines";const{EPSILON:c7}=wf;class HW extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}){super(e,r),this.onSetToolEnabled=()=>{this._init()},this.onSetToolActive=()=>{this._init()},this._init=()=>{const n=this.configuration.sourceImageIds;if(!(n!=null&&n.length)){console.warn("OverlayGridTool: No sourceImageIds provided in configuration");return}const i=wt("imagePlaneModule",n[0]);if(!i){console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");return}const{frameOfReferenceUID:o}=i,a=ni(this.toolGroupId).viewportsInfo;if(!(a!=null&&a.length)){console.warn("OverlayGridTool: No viewports found");return}const s=hn(this.getToolName(),o);if(!(s!=null&&s.length)){const c=n.map(f=>this.calculateImageIdPointSets(f)),l={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{viewportData:new Map,pointSets:c}};ln(l,o)}Be(a.map(({viewportId:c})=>c))},this.calculateImageIdPointSets=n=>{const{imagePositionPatient:i,rows:o,columns:a,rowCosines:s,columnCosines:c,rowPixelSpacing:l,columnPixelSpacing:f}=wt("imagePlaneModule",n),u=[...i],d=[...i],h=[...i],g=[...i];return On(d,i,c,a*f),On(h,i,s,o*l),On(g,h,c,a*f),{pointSet1:[u,h,d,g],pointSet2:[u,d,h,g]}},this.renderAnnotation=(n,i)=>{const o=this.configuration.sourceImageIds;let a=!1;if(!(o!=null&&o.length))return a;const{viewport:s,FrameOfReferenceUID:c}=n;if(s.getImageIds().length<2)return a;const f=hn(this.getToolName(),c);if(!(f!=null&&f.length))return a;const u=f[0],{annotationUID:d}=u,{focalPoint:h,viewPlaneNormal:g}=s.getCamera(),p={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},v=this.getImageIdNormal(o[0]);if(this.isParallel(g,v))return a;const y=nl(g,h),m=u.data.pointSets,w=u.data.viewportData;for(let x=0;xs.worldToCanvas(G)),A=`${d}-line`,V=`${x}`;Sn(i,d,V,O[0],O[1],{color:I,width:b,lineDash:D,shadow:P},A)}return a=!0,a},this.initializeViewportData=(n,i)=>(n.set(i,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),n.get(i)),this.isPerpendicular=(n,i)=>{const o=kt(n,i);return Math.abs(o)1-c7}getImageIdNormal(e){const{imageOrientationPatient:r}=wt("imagePlaneModule",e),n=Ft(r[0],r[1],r[2]),i=Ft(r[3],r[4],r[5]);return kn(Ke(),n,i)}}HW.toolName="OverlayGrid";class KW extends _f{constructor(e={},r={configuration:{opacity:.5}}){super(e,r),this._init=()=>{var s;const n=ni(this.toolGroupId).viewportsInfo;if(!(n!=null&&n.length)){console.warn(this.getToolName()+"Tool: No viewports found");return}const i=(s=jr(n[0].renderingEngineId))==null?void 0:s.getViewport(n[0].viewportId);if(!i)return;const o=i.getFrameOfReferenceUID(),a=hn(this.getToolName(),o);if(!(a!=null&&a.length)){const c=new Map;hTe(c,n);const l={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{actorsWorldPointsMap:c}};ln(l,o)}Be(n.map(({viewportId:c})=>c))},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=n=>{this._init()},this.renderAnnotation=(n,i)=>{const{viewport:o,FrameOfReferenceUID:a}=n;let s=!1;const c=hn(this.getToolName(),a);if(!(c!=null&&c.length))return s;const l=c[0],{annotationUID:f}=l,u=l.data.actorsWorldPointsMap;qW(u,o);const d=o.getActors(),h=XW(o);return d.forEach(g=>{if(!(g!=null&&g.clippingFilter))return;const p=u.get(g.uid);if(!p||!p.get(h))return;let v=1;const{worldPointsSet:y,color:m}=p.get(h);for(let w=0;wo.worldToCanvas(_)),S={color:m,fillColor:m,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},T=g.uid+"#"+v;Hl(i,f,T,C,S),v++}}),s=!0,s}}}function hTe(t,e){e.forEach(({viewportId:r,renderingEngineId:n})=>{var o;const i=(o=jr(n))==null?void 0:o.getViewport(r);qW(t,i)})}function qW(t,e){const r=e.getActors(),n=XW(e);r.forEach(i=>{if(!(i!=null&&i.clippingFilter))return;let o=t.get(i.uid);if(o||(o=new Map,t.set(i.uid,o)),!o.get(n)){const a=i.clippingFilter.getOutputData(),s=bW(a);if(!s)return;const c=i.actor.getProperty().getColor(),l=gTe(c);o.set(n,{worldPointsSet:s,color:l})}})}function XW(t){const{viewPlaneNormal:e}=t.getCamera(),r=t.getCurrentImageIdIndex();return`${t.id}-${fG(e)}-${r}`}function gTe(t){function e(r){let n=Math.floor(r*255).toString(16);return n.length===1&&(n="0"+n),n}return"#"+e(t[0])+e(t[1])+e(t[2])}KW.toolName="SegmentationIntersection";class Ba extends _f{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}){super(e,r),this.isDrawing=!1,this.isHandleOutsideImage=!1,this._elementWithCursor=null,this._currentCursorWorldPosition=null,this._currentCanvasPosition=null,this._disableCursorEnabled=!1,this.mouseMoveCallback=n=>{const{detail:i}=n,{element:o,currentPoints:a}=i;this._currentCursorWorldPosition=a.world,this._currentCanvasPosition=a.canvas,this._elementWithCursor=o;const s=this.getActiveAnnotation(o);return s===null?(this.createInitialAnnotation(a.world,o),!1):(this.updateAnnotationPosition(o,s),!1)},this.createInitialAnnotation=(n,i)=>{const o=_e(i);if(!o)throw new Error("No enabled element found");const{viewport:a,renderingEngine:s}=o;this.isDrawing=!0;const c=a.getCamera(),{viewPlaneNormal:l,viewUp:f}=c;if(!l||!f)throw new Error("Camera not found");const u=this.getReferencedImageId(a,n,l,f),d=a.getFrameOfReferenceUID(),h={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...f],FrameOfReferenceUID:d,referencedImageId:u},data:{label:"",handles:{points:[[...n]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}};if(hn(this.getToolName(),i).length>0)return null;if(ln(h,i)===null)return;const v=At(i,this.getToolName(),!1);Be(v)},this.onCameraModified=n=>{const i=n.detail,{element:o,previousCamera:a,camera:s}=i,l=_e(o).viewport;if(o!==this._elementWithCursor)return;const f=a.focalPoint,u=s.viewPlaneNormal,d=s.focalPoint,h=[0,0,0];if(nn.subtract(d,f,h),h.reduce((v,y)=>v+y,0)===0)return;const g=nn.dot(h,u);if(Math.abs(g)<.01||!this._currentCanvasPosition)return;const p=l.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=p,this.updateAnnotationPosition(o,this.getActiveAnnotation(o))},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a,FrameOfReferenceUID:s}=n,c=this._elementWithCursor===a.element;this.configuration.positionSync&&!c&&this.updateViewportImage(a);const{element:l}=a;let f=hn(this.getToolName(),l);if(!(f!=null&&f.length)||(f=this.filterInteractableAnnotationsForElement(l,f),!(f!=null&&f.length)))return o;const u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;disNaN(I)))return o;const S=y.map(I=>a.worldToCanvas(I));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(g))continue;const T={upper:"upper",right:"right",lower:"lower",left:"left"},[_,E]=S[0],b=c?20:7,D=c?5:7;Sn(i,g,T.upper,[_,E-(b/2+D)],[_,E-b/2],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.lower,[_,E+(b/2+D)],[_,E+b/2],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.right,[_+(b/2+D),E],[_+b/2,E],{color:C,lineDash:x,lineWidth:w}),Sn(i,g,T.left,[_-(b/2+D),E],[_-b/2,E],{color:C,lineDash:x,lineWidth:w}),o=!0}return o},this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=ni(this.toolGroupId).viewportsInfo;if(!e)return;e.map(n=>Oi(n.viewportId,n.renderingEngineId)).forEach(n=>{n&&Gt(n.viewport.element)})}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=ni(this.toolGroupId).viewportsInfo;if(!e)return;e.map(n=>Oi(n.viewportId,n.renderingEngineId)).forEach(n=>{n&&Jt(n.viewport.element)})}getActiveAnnotation(e){const r=hn(this.getToolName(),e);return r.length?r[0]:null}updateAnnotationPosition(e,r){var a,s;const n=this._currentCursorWorldPosition;if(!n||!((s=(a=r.data)==null?void 0:a.handles)!=null&&s.points))return;r.data.handles.points=[[...n]],r.invalidated=!0;const i=At(e,this.getToolName(),!1);_e(e)&&Be(i)}filterInteractableAnnotationsForElement(e,r){var d,h,g;if(!(r instanceof Array)||r.length===0)return[];const n=r[0],i=(d=_e(e))==null?void 0:d.viewport;if(!i)return[];const o=i.getCamera(),{viewPlaneNormal:a,focalPoint:s}=o;if(!a||!s)return[];const c=(g=(h=n.data)==null?void 0:h.handles)==null?void 0:g.points;if(!(c instanceof Array)||c.length!==1)return[];const l=c[0],f=nl(a,s);return m1(f,l)isNaN(n)))){if(e instanceof lr){const n=dE(r,e);if(n===null)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ur){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=nl(i,n),a=m1(o,r,!0);if(Math.abs(a)<.5)return;const s=Qn(Ke(),Ft(...i)),c=Ir(Ke(),s,a),l=ri(Ke(),Ft(...n),c);{e.setCamera({focalPoint:l});const f=e.getRenderingEngine();f&&f.renderViewport(e.id)}}}}}Ba.toolName="ReferenceCursors";const l7=[];class YW extends _f{constructor(e={},r={configuration:{viewportId:"",scaleLocation:"bottom"}}){super(e,r),this.editData=null,this._init=()=>{var g,p;const i=Bo()[0];if(!i)return;const o=ni(this.toolGroupId).viewportsInfo;if(!o)return;const a=o.map(v=>Oi(v.viewportId,v.renderingEngineId));let{viewport:s}=a[0];const{FrameOfReferenceUID:c}=a[0];if(this.configuration.viewportId&&a.forEach(v=>{v.viewport.id==this.configuration.viewportId&&(s=v.viewport)}),!s)return;const{viewUp:l,viewPlaneNormal:f}=s.getCamera(),u=$y(s);let d=(g=this.editData)==null?void 0:g.annotation;const h=hn(this.getToolName(),s.element);h.length&&(d=h.filter(v=>v.data.viewportId==s.id)[0]),a.forEach(v=>{const{viewport:y}=v;if(!l7.includes(y.id)){const m={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...f],viewUp:[...l],FrameOfReferenceUID:c,referencedImageId:null},data:{handles:{points:$y(y)},viewportId:y.id}};l7.push(y.id),ln(m,y.element),d=m}}),(p=this.editData)!=null&&p.annotation&&this.editData.annotation.data.viewportId==s.id&&(this.editData.annotation.data.handles.points=u,this.editData.annotation.data.viewportId=s.id),this.editData={viewport:s,renderingEngine:i,annotation:d}},this.onSetToolEnabled=()=>{this._init()},this.onCameraModified=n=>{this.configuration.viewportId=n.detail.viewportId,this._init()},this.computeScaleSize=(n,i,o)=>{const a=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let s;return o=="top"||o=="bottom"?s=a.filter(c=>cn*.2):s=a.filter(c=>ci*.2),s[0]},this.computeEndScaleTicks=(n,i)=>{const o={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]},a=[[n[1][0]+o[i][0][0],n[1][1]+o[i][0][0]],[n[1][0]+o[i][1][0],n[1][1]+o[i][1][1]]],s=[[n[0][0]+o[i][0][0],n[0][1]+o[i][0][0]],[n[0][0]+o[i][1][0],n[0][1]+o[i][1][1]]];return{endTick1:a,endTick2:s}},this.computeInnerScaleTicks=(n,i,o,a,s)=>{let c;i=="bottom"||i=="top"?c=s[0][0]-a[0][0]:(i=="left"||i=="right")&&(c=s[0][1]-a[0][1]);const l=[],f=[],u=[];let d=n;n>=50&&(d=n/10);const h=c/d;for(let g=0;g{let a,s=qn(Ke(),o[0],o[1]);s=Qn(Ke(),s);let c=qn(Ke(),o[2],o[0]);c=Qn(Ke(),c);const l={bottom:[o[1],o[2]],top:[o[0],o[3]],right:[o[2],o[3]],left:[o[0],o[1]]},f=ri(Ke(),l[i][0],l[i][0]).map(d=>d/2),u=n/2/Math.sqrt(Math.pow(s[0],2)+Math.pow(s[1],2)+Math.pow(s[2],2));return i=="top"||i=="bottom"?a=[qn(Ke(),f,c.map(d=>d*u)),ri(Ke(),f,c.map(d=>d*u))]:(i=="left"||i=="right")&&(a=[ri(Ke(),f,s.map(d=>d*u)),qn(Ke(),f,s.map(d=>d*u))]),a},this.computeCanvasScaleCoordinates=(n,i,o,a,s)=>{let c;if(s=="top"||s=="bottom"){const l=i[0][0]-i[1][0];c=[[n.width/2-l/2,o.height],[n.width/2+l/2,o.height]]}else if(s=="left"||s=="right"){const l=i[0][1]-i[1][1];c=[[a.width,n.height/2-l/2],[a.width,n.height/2+l/2]]}return c},this.computeScaleBounds=(n,i,o,a)=>{const s=i*Math.min(1e3,n.width),c=o*Math.min(1e3,n.height),l={bottom:[-c,-s],top:[c,s],left:[c,s],right:[-c,-s]},f={bottom:[n.height,n.width],top:[0,n.width],left:[n.height,0],right:[n.height,n.width]};return{height:f[a][0]+l[a][0],width:f[a][1]+l[a][1]}}}renderAnnotation(e,r){if(!this.editData||!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,a=hn(this.getToolName(),i.element).filter(ve=>ve.data.viewportId==i.id)[0],s=e.viewport.canvas,c=!1;if(!i)return c;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},f={width:s.width/window.devicePixelRatio||1,height:s.height/window.devicePixelRatio||1},u=a.data.handles.points[0],d=a.data.handles.points[1],h=a.data.handles.points[2],g=a.data.handles.points[3],p=[u,h,d,g],v=Qi(h,g),y=Qi(u,h),m=this.computeScaleBounds(f,.05,.05,n),w=this.computeScaleBounds(f,.05,.05,n),x=this.computeScaleSize(v,y,n),C=this.computeWorldScaleCoordinates(x,n,p).map(ve=>i.worldToCanvas(ve)),S=this.computeCanvasScaleCoordinates(f,C,w,m,n),T=this.computeEndScaleTicks(S,n),{annotationUID:_}=a;l.annotationUID=_;const E=this.getStyle("lineWidth",l,a),b=this.getStyle("lineDash",l,a),D=this.getStyle("color",l,a),I=this.getStyle("shadow",l,a),P=`${_}-scaleline`;Sn(r,_,"1",S[0],S[1],{color:D,width:E,lineDash:b,shadow:I},P);const A=`${_}-left`;Sn(r,_,"2",T.endTick1[0],T.endTick1[1],{color:D,width:E,lineDash:b,shadow:I},A);const G=`${_}-right`;Sn(r,_,"3",T.endTick2[0],T.endTick2[1],{color:D,width:E,lineDash:b,shadow:I},G);const N={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},F=[S[0][0]+N[n][0],S[0][1]+N[n][1]],j=this._getTextLines(x),{tickIds:te,tickUIDs:ie,tickCoordinates:he}=this.computeInnerScaleTicks(x,n,_,T.endTick1,T.endTick2);for(let ve=0;ve=50?(r=e/10,n=" cm"):(r=e,n=" mm"),[r.toString().concat(n)]}}YW.toolName="ScaleOverlay";const JW=(t,e,r)=>{var a,s,c;if(!((c=(s=(a=e==null?void 0:e.data)==null?void 0:a.contour)==null?void 0:s.polyline)!=null&&c.length))return;const{polyline:n}=e.data.contour,{length:i}=n;let o=1/0;for(let l=0;lthis.toolInfo.toolSize||(this.pushOneHandle(s,a,r),o.first===void 0&&(o.first=s),o.last=s)}if(o.first!==void 0&&o.last!==void 0)for(let s=0;s0&&(i.toolSize=Math.min(i.maxToolSize,o))}getMaxSpacing(e){return Math.max(this.toolInfo.toolSize/4,e)}getInsertPosition(e,r,n){let i;const{points:o,element:a,mouseCanvasPoint:s}=n,c=this.toolInfo.toolSize,l=_e(a),{viewport:f}=l,u=f.worldToCanvas(o[e]),d=f.worldToCanvas(o[r]),h=[(u[0]+d[0])/2,(u[1]+d[1])/2],g=ko(s,h);if(g=0;l--){if(l>=s-1||l<0)continue;const f=l+1,u=ko(n[l],n[f]);if(u>c){const d=this.directionalVector(n[l],n[f]),g=(u-e.meanDistance)/e.meanDistance*e.meanDistance*Wc.CHAIN_PULL_STRENGTH_FACTOR;n[l][0]+=d[0]*g,n[l][1]+=d[1]*g,n[l][2]+=d[2]*g}}for(let l=a+1;l=s||l<=0)continue;const f=l-1,u=ko(n[l],n[f]);if(u>c){const d=this.directionalVector(n[l],n[f]),g=(u-e.meanDistance)/e.meanDistance*e.meanDistance*Wc.CHAIN_PULL_STRENGTH_FACTOR;n[l][0]+=d[0]*g,n[l][1]+=d[1]*g,n[l][2]+=d[2]*g}}}};Wc.shapeName="Circle",Wc.CHAIN_MAINTENANCE_ITERATIONS=3,Wc.CHAIN_PULL_STRENGTH_FACTOR=.3,Wc.MAX_INTER_DISTANCE_FACTOR=1.2;let Dp=Wc;class Ph extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{minSpacing:1,referencedToolNames:["PlanarFreehandROI","PlanarFreehandContourSegmentationTool"],toolShape:"circle",referencedToolName:"PlanarFreehandROI",updateCursorSize:"dynamic"}}){super(e,r),this.registeredShapes=new Map,this.isActive=!1,this.commonData={activeAnnotationUID:null,viewportIdsToRender:[],isEditingOpenContour:!1,canvasLocation:void 0},this.preMouseDownCallback=n=>{const i=n.detail,o=i.element;if(this.configureToolSize(n),this.selectFreehandTool(i),this.commonData.activeAnnotationUID!==null)return this.isActive=!0,Gt(o),this.activateModify(o),!0},this.mouseMoveCallback=n=>{this.mode===Fn.Active?(this.configureToolSize(n),this.updateCursor(n)):this.commonData.canvasLocation=void 0},this.endCallback=n=>{const i=n.detail,{element:o}=i,a=this.configuration,s=_e(o);this.isActive=!1,this.deactivateModify(o),Jt(o);const{renderingEngineId:c,viewportId:l}=s,u=Pr(l,c).getToolInstance(a.referencedToolName),h=this.filterSculptableAnnotationsForElement(o).find(g=>g.annotationUID===this.commonData.activeAnnotationUID);u.configuration.calculateStats&&(h.invalidated=!0),cn(h,o,Qt.HandlesUpdated)},this.dragCallback=n=>{const i=n.detail,o=i.element;this.updateCursor(n);const a=this.filterSculptableAnnotationsForElement(o),s=a.find(l=>l.annotationUID===this.commonData.activeAnnotationUID);if(!(a!=null&&a.length)||!this.isActive)return;const c=s.data.contour.polyline;this.sculpt(i,c)},this.registerShapes(Dp.shapeName,Dp),this.setToolShape(this.configuration.toolShape)}registerShapes(e,r){const n=new r;this.registeredShapes.set(e,n)}sculpt(e,r){const n=this.configuration,i=e.element,o=_e(i),{viewport:a}=o,s=this.registeredShapes.get(this.selectedShape);this.sculptData={mousePoint:e.currentPoints.world,mouseCanvasPoint:e.currentPoints.canvas,deltaWorld:e.deltaPoints.world,points:r,maxSpacing:s.getMaxSpacing(n.minSpacing),element:i};const c=s.pushHandles(a,this.sculptData);c.first!==void 0&&this.insertNewHandles(c)}interpolatePointsWithinMaxSpacing(e,r,n,i){const{element:o}=this.sculptData,a=_e(o),{viewport:s}=a,c=u7(e+1,r.length),l=s.worldToCanvas(r[e]),f=s.worldToCanvas(r[c]);ko(l,f)>i&&n.push(e)}updateCursor(e){const r=e.detail,n=r.element,i=_e(n),{renderingEngine:o,viewport:a}=i;this.commonData.viewportIdsToRender=[a.id];const s=this.filterSculptableAnnotationsForElement(n);if(!(s!=null&&s.length))return;const c=s.find(l=>l.annotationUID===this.commonData.activeAnnotationUID);if(this.commonData.canvasLocation=r.currentPoints.canvas,this.isActive)c.highlighted=!0;else{const l=this.registeredShapes.get(this.selectedShape),f=r.currentPoints.canvas;this.configuration.updateCursorSize==="dynamic"&&l.updateToolSize(f,a,c)}Be(this.commonData.viewportIdsToRender)}filterSculptableAnnotationsForElement(e){const r=this.configuration,n=_e(e),{renderingEngineId:i,viewportId:o}=n,a=[],c=Pr(o,i).getToolInstance(r.referencedToolName);return r.referencedToolNames.forEach(l=>{const f=hn(l,e);f&&a.push(...f)}),c.filterInteractableAnnotationsForElement(e,a)}configureToolSize(e){this.registeredShapes.get(this.selectedShape).configureToolSize(e)}insertNewHandles(e){const r=this.findNewHandleIndices(e);let n=0;for(let i=0;i<(r==null?void 0:r.length);i++){const o=r[i]+1+n;this.insertHandleRadially(o),n++}}findNewHandleIndices(e){const{points:r,maxSpacing:n}=this.sculptData,i=[];for(let o=e.first;o<=e.last;o++)this.interpolatePointsWithinMaxSpacing(o,r,i,n);return i}insertHandleRadially(e){const{points:r}=this.sculptData;if(e>r.length-1&&this.commonData.isEditingOpenContour)return;const n=this.registeredShapes.get(this.selectedShape),i=e-1,o=u7(e,r.length),s=n.getInsertPosition(i,o,this.sculptData);r.splice(e,0,s)}selectFreehandTool(e){const r=this.getClosestFreehandToolOnElement(e);r!==void 0&&(this.commonData.activeAnnotationUID=r)}getClosestFreehandToolOnElement(e){const{element:r}=e,n=_e(r),{viewport:i}=n,o=this.configuration,a=this.filterSculptableAnnotationsForElement(r);if(!(a!=null&&a.length))return;const s=e.currentPoints.canvas,c={distance:1/0,toolIndex:void 0,annotationUID:void 0};for(let l=0;l<(a==null?void 0:a.length);l++){if(a[l].isLocked||!a[l].isVisible)continue;const f=JW(i,a[l],s);f!==-1&&f(t+e)%e;Ph.toolName="SculptorTool";const pTe={Z:[0,0,1]};class ZW extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:pTe.Z,rotateIncrementDegrees:30}}){super(e,r)}mouseWheelCallback(e){const{element:r,wheel:n}=e.detail,i=_e(r),{viewport:o}=i,{direction:a,rotateIncrementDegrees:s}=this.configuration,c=o.getCamera(),{viewUp:l,position:f,focalPoint:u}=c,{direction:d}=n,[h,g,p]=u,[v,y,m]=a,w=d*(s*Math.PI)/180,x=[0,0,0],C=[0,0,0],S=[0,0,0],T=Wt(new Float32Array(16));dr(T,T,[h,g,p]),Ro(T,T,w,[v,y,m]),dr(T,T,[-h,-g,-p]),Yt(x,f,T),Yt(C,u,T),Wt(T),Ro(T,T,w,[v,y,m]),Yt(S,l,T),o.setCamera({position:x,viewUp:S,focalPoint:C}),o.render()}}ZW.toolName="VolumeRotateMouseWheel";const Vp=class Vp extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:mTe,changeTextCallback:vTe,preventHandleOutsideImage:!1}}){super(e,r),this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{annotationUID:l}=i,f=i.data.handles.points[0],u=c.worldToCanvas(f);if(Sr(o,u)=x&&o[0]<=x+v.width&&o[1]>=C&&o[1]<=C+v.height},this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=this.getReferencedImageId(l,s,u,d),g=l.getFrameOfReferenceUID(),p={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h,...l.getViewReference({points:[s]})},data:{text:"",handles:{points:[[...s],[...s]]},label:""}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,newAnnotation:!0,viewportIdsToRender:v,offset:[0,0,0]},n.preventDefault(),Be(v),this.configuration.getTextCallback(y=>{if(!y){mn(p.annotationUID),Be(v),this.isDrawing=!1;return}Jt(a),p.data.text=y,Un(p),Be(v)}),this.createMemo(a,p,{newAnnotation:!0}),p},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a,currentPoints:s}=o;i.highlighted=!0;const c=At(a,this.getToolName());let l=[0,0,0];if(s&&s.world){const f=s.world,u=i.data.handles.points[0];l=[u[0]-f[0],u[1]-f[1],u[2]-f[2]]}this.editData={annotation:i,viewportIdsToRender:c,offset:l},this._activateModify(a),Gt(a),Be(c),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData;this._deactivateDraw(o),this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragCallback=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,offset:f}=this.editData;f?c.data.handles.points[0]=[s[0]+f[0],s[1]+f[1],s[2]+f[2]]:c.data.handles.points[0]=[...s],c.invalidated=!0,Be(l),cn(c,a,Qt.LabelChange)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length))return o;c=this.filterInteractableAnnotationsForElement(s,c);const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;f{const o=Wn(e);if(!o)return;const{viewport:a}=o,s=a.getFrameOfReferenceUID(),{viewPlaneNormal:c,viewUp:l}=a.getCamera(),f=new Vp,u=f.getReferencedImageId(a,r,c,l),d={annotationUID:(i==null?void 0:i.annotationUID)||Pn(),data:{text:n,handles:{points:[r]}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:f.getToolName(),viewPlaneNormal:c,FrameOfReferenceUID:s,referencedImageId:u,...i}};ln(d,a.element),Be([a.id])};let T5=Vp;function mTe(t){return t(prompt("Enter your annotation:"))}function vTe(t,e,r){return r(prompt("Enter your annotation:"))}T5.toolName="Label";const{transformWorldToIndex:f7}=Rn,A0=class A0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:yTe,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:f,viewUp:u,position:d}=l.getCamera(),h=this.getReferencedImageId(l,s,f,u),g={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:h,viewUp:u,cameraPosition:d},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(g,a);const p=At(a,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(p),g},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=d.world;u.handles.points[c]=[...h],a.invalidated=!0}this.editData.hasMoved=!0,Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(N));if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let T;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(T=[S[y]]),T&&or(i,g,"0",S,{color:m,lineDash:x,lineWidth:w});const _=`${g}-line`;if(Sn(i,g,"1",S[0],S[1],{color:m,width:w,lineDash:x,shadow:C},_),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const b=this.getLinkedTextBoxStyle(u,h);if(!b.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const D=this.configuration.getTextLines(p,l);if(!p.handles.textBox.hasMoved){const N=Oa(S);p.handles.textBox.worldPosition=a.canvasToWorld(N)}const I=a.worldToCanvas(p.handles.textBox.worldPosition),O=ho(i,g,"1",D,I,S,{},b),{x:A,y:V,width:G,height:R}=O;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([A,V]),topRight:a.canvasToWorld([A+G,V]),bottomLeft:a.canvasToWorld([A,V+R]),bottomRight:a.canvasToWorld([A+G,V+R])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(f=>f===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o),Be(l),e.preventDefault()}_calculateLength(e,r){const n=e[0]-r[0],i=e[1]-r[1],o=e[2]-r[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],s=i.handles.points[1],{cachedStats:c}=i,l=Object.keys(c);for(let u=0;u{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=A0.hydrateBase(A0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let gf=A0;function yTe(t,e){const r=t.cachedStats[e],{length:n,unit:i}=r;return n==null||isNaN(n)?void 0:[`${un(n)} ${i}`]}const{transformWorldToIndex:d7}=Rn,ib=class ib extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:wTe}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:u,viewUp:d,position:h}=l.getCamera(),g=this.getReferencedImageId(l,s,u,d),p={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:g,viewUp:d,cameraPosition:h},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(p,a);const v=At(a,this.getToolName());return this.editData={annotation:p,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(v),p},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),_e(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l}=this.editData,{data:f}=a;if(l){const{deltaPoints:h}=i,g=h.world,{textBox:p}=f.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(c===void 0){const{deltaPoints:h}=i,g=h.world;f.handles.points.forEach(v=>{v[0]+=g[0],v[1]+=g[1],v[2]+=g[2]}),a.invalidated=!0}else{const{currentPoints:h}=i,g=h.world;f.handles.points[c]=[...g],a.invalidated=!0}this.editData.hasMoved=!0;const u=_e(o),{renderingEngine:d}=u;Be(s)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,_e(n),Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(R));let T;if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!Kr(g))continue;if(!si(g)&&!this.editData&&y!==null&&(T=[S[y]]),T&&or(i,g,"0",S,{color:m,lineDash:x,lineWidth:w}),BU(i,g,"0",S[0],S[1],{color:m,width:w,lineDash:x}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const E=this.getLinkedTextBoxStyle(u,h);if(!E.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const b=this.configuration.getTextLines(p,l);if(!p.handles.textBox.hasMoved){const R=Oa(S);p.handles.textBox.worldPosition=a.canvasToWorld(R)}const D=a.worldToCanvas(p.handles.textBox.worldPosition),P=ho(i,g,"1",b,D,S,{},E),{x:O,y:A,width:V,height:G}=P;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([O,A]),topRight:a.canvasToWorld([O+V,A]),bottomLeft:a.canvasToWorld([O,A+G]),bottomRight:a.canvasToWorld([O+V,A+G])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_calculateHeight(e,r){const n=r[0]-e[0],i=r[1]-e[1],o=r[2]-e[2];if(n==0)return i!=0?Math.abs(o):0;if(i==0)return Math.abs(o);if(o==0)return Math.abs(i)}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport,a=i.handles.points[0],s=i.handles.points[1],{cachedStats:c}=i,l=Object.keys(c);for(let u=0;u{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=this.constructor.createAnnotationForViewport(l,{data:{handles:{points:[[...s]]}}});ln(f,a);const u=At(a,this.getToolName());return this.editData={annotation:f,newAnnotation:!0,viewportIdsToRender:u},this._activateModify(a),Gt(a),n.preventDefault(),Be(u),f},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{viewportId:l,renderingEngine:f}=_e(o);this.eventDispatchDetail={viewportId:l,renderingEngineId:f.id},this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,newAnnotation:f}=this.editData,{data:u}=c;this.createMemo(a,c,{newAnnotation:f}),u.handles.points[0]=[...s],c.invalidated=!0,Be(l)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;d{const I=Ur(T),P=D.hasImageURI(I),O=Ur(D.getCurrentImageId());return P&&O!==I})&&delete p.cachedStats[_]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(g))continue;or(i,g,"0",[y],{color:m,lineWidth:w,handleRadius:this.configuration.handleRadius}),o=!0;const C=this.getLinkedTextBoxStyle(u,h);if(!C.visibility)continue;const S=this.configuration.getTextLines(p,l);if(S){const T=[y[0]+this.configuration.textCanvasOffset.x,y[1]+this.configuration.textCanvasOffset.y];ff(i,g,"0",S,[T[0],T[1]],C)}}return o}}isPointNearTool(e,r,n,i){const o=_e(e),{viewport:a}=o,{data:s}=r,c=s.handles.points[0],l=a.worldToCanvas(c);return Sr(n,l)D!==null);T=b?E.values:T,_=b?E.units:"raw"}else _=uu(C,e.metadata.referencedImageId,p);f[g]={index:S,value:T,Modality:C,modalityUnit:_}}else this.isHandleOutsideImage=!0,f[g]={index:S,Modality:C}}const d=e.invalidated;return e.invalidated=!1,d&&cn(e,c,i),f}};bu.toolName="Probe",bu.probeDefaults={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:CTe,handleRadius:"6",textCanvasOffset:{x:6,y:-6}}},bu.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,viewUp:c,instance:l,viewport:f}=bu.hydrateBase(bu,i,r,n),{toolInstance:u,...d}=n||{},h={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...d}};ln(h,f.element),Be([f.id])};let au=bu;function CTe(t,e){const r=t.cachedStats[e],{index:n,value:i,modalityUnit:o}=r;if(i===void 0||!n)return;const a=[];if(a.push(`(${n[0]}, ${n[1]}, ${n[2]})`),i instanceof Array&&o instanceof Array)for(let s=0;s{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:l.getFrameOfReferenceUID(),referencedImageId:g},data:{label:"",handles:{points:[[...s]]},cachedStats:{}}},v=At(a,this.getToolName());return this.editData={annotation:p,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(a),Gt(a),n.preventDefault(),Be(v),p},this.postTouchStartCallback=n=>this.postMouseDownCallback(n),this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;if(!this.editData)return o;const s=this.filterInteractableAnnotationsForElement(a.element,[this.editData.annotation]);if(!(s!=null&&s.length))return o;const c=this.getTargetId(a),l=a.getRenderingEngine(),f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=this.editData.annotation,d=u.annotationUID,h=u.data,g=h.handles.points[0],p=a.worldToCanvas(g);f.annotationUID=d;const{color:v}=this.getAnnotationStyle({annotation:u,styleSpecifier:f});if(!h.cachedStats[c]||h.cachedStats[c].value===null?(h.cachedStats[c]={Modality:null,index:null,value:null},this._calculateCachedStats(u,l,n)):u.invalidated&&this._calculateCachedStats(u,l,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;or(i,d,"0",[p],{color:v}),o=!0;const m=this.configuration.getTextLines(h,c);if(m){const w=[p[0]+6,p[1]-6];ff(i,d,"0",m,[w[0],w[1]],this.getLinkedTextBoxStyle(f,u))}return o}}};ob.toolName="DragProbe";let uT=ob;function STe(t,e){const r=t.cachedStats[e],{index:n,value:i,modalityUnit:o}=r;if(i===void 0)return;const a=[];return a.push(`(${n[0]}, ${n[1]}, ${n[2]})`),a.push(`${i.toFixed(2)} ${o}`),a}const{transformWorldToIndex:h7}=Rn,N0=class N0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:TTe,statsCalculator:dl}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world;o.canvas;const c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},cachedStats:{},initialRotation:l.getRotation()}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,centerWorld:s,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=f.map(_=>c.worldToCanvas(_)),[d,h,g,p]=u,v=Math.hypot(g[0]-p[0],g[1]-p[1]),y=Math.hypot(h[0]-d[0],h[1]-d[1]),m=Math.atan2(g[1]-p[1],g[0]-p[0]),w=[(g[0]+p[0])/2,(h[1]+d[1])/2],x={center:w,xRadius:(v-a)/2,yRadius:(y-a)/2,angle:m},C={center:w,xRadius:(v+a)/2,yRadius:(y+a)/2,angle:m},S=this._pointInEllipseCanvas(x,o);return!!(this._pointInEllipseCanvas(C,o)&&!S)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f,u,d,h,g,p;if(o.worldPosition)l=!0;else{const{points:y}=c.handles,{viewport:m}=_e(s),{worldToCanvas:w,canvasToWorld:x}=m;f=y.findIndex(S=>S===o);const C=y.map(w);p=C[f],h=Math.abs(C[2][0]-C[3][0]),g=Math.abs(C[0][1]-C[1][1]),u=[(C[2][0]+C[3][0])/2,(C[0][1]+C[1][1])/2],d=x(u)}const v=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:v,handleIndex:f,canvasWidth:h,canvasHeight:g,centerWorld:d,originalHandleCanvas:p,movingTextBox:l},this._activateModify(s),Gt(s),Be(v),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(this.doneEditMemo(),a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a))},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{viewport:l}=c,{canvasToWorld:f}=l,{annotation:u,viewportIdsToRender:d,centerWorld:h,newAnnotation:g}=this.editData;this.createMemo(o,u,{newAnnotation:g});const p=l.worldToCanvas(h),{data:v}=u,y=Math.abs(s[0]-p[0]),m=Math.abs(s[1]-p[1]),w=[p[0],p[1]-m],x=[p[0],p[1]+m],C=[p[0]-y,p[1]],S=[p[0]+y,p[1]];v.handles.points=[f(w),f(x),f(C),f(S)],u.invalidated=!0,this.editData.hasMoved=!0,Be(d),cn(u,o,Qt.HandlesUpdated)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,{viewport:a}=_e(o),{canvasToWorld:s,worldToCanvas:c}=a,{annotation:l,canvasWidth:f,canvasHeight:u,handleIndex:d,centerWorld:h,originalHandleCanvas:g}=this.editData,p=a.worldToCanvas(h),{data:v}=l,{points:y}=v.handles,{currentPoints:m}=i,w=m.canvas;if(d===0||d===1){const x=Math.abs(w[1]-p[1]),C=[p[0],p[1]-x],S=[p[0],p[1]+x];y[0]=s(C),y[1]=s(S);const T=w[0]-g[0],_=f/2+T,E=[p[0]-_,p[1]],b=[p[0]+_,p[1]];y[2]=s(E),y[3]=s(b)}else{const x=Math.abs(w[0]-p[0]),C=[p[0]-x,p[1]],S=[p[0]+x,p[1]];y[2]=s(C),y[3]=s(S);const T=w[1]-g[1],_=u/2+T,E=[p[0],p[1]-_],b=[p[0],p[1]+_];y[0]=s(E),y[1]=s(b)}},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(te)),T=a5(S),{centerPointRadius:_}=this.configuration;if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(h,a,f);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,a,f,n),a instanceof ur)){const{referencedImageId:te}=h.metadata;for(const ie in p.cachedStats)ie.startsWith("imageId")&&f.getStackViewports().find(ve=>{const Me=Ur(te),Ue=ve.hasImageURI(Me),be=Ur(ve.getCurrentImageId());return Ue&&be!==Me})&&delete p.cachedStats[ie]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let E;if(!Kr(g))continue;!si(g)&&!this.editData&&m!==null&&(E=[S[m]]),E&&or(i,g,"0",E,{color:w});const b=`${g}-ellipse`,D="0";if(QE(i,g,D,S,{color:w,lineDash:C,lineWidth:x},b),_>0&&Math.min(Math.abs(T[0][0]-T[1][0])/2,Math.abs(T[0][1]-T[1][1])/2)>3*_){const ie=this._getCanvasEllipseCenter(S);ia(i,g,`${D}-center`,ie,_,{color:w,lineDash:C,lineWidth:x})}o=!0;const I=this.getLinkedTextBoxStyle(u,h);if(!I.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const P=this.configuration.getTextLines(p,l);if(!P||P.length===0)continue;let O;p.handles.textBox.hasMoved||(O=Oa(T),p.handles.textBox.worldPosition=a.canvasToWorld(O));const A=a.worldToCanvas(p.handles.textBox.worldPosition),G=ho(i,g,"1",P,A,S,{},I),{x:R,y:N,width:F,height:j}=G;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+F,N]),bottomLeft:a.canvasToWorld([R,N+j]),bottomRight:a.canvasToWorld([R+F,N+j])}}return o},this._calculateCachedStats=(n,i,o)=>{var C,S,T,_;if(!this.configuration.calculateStats)return;const a=n.data,{element:s}=i,{points:c}=a.handles,l=c.map(E=>i.worldToCanvas(E)),{viewPlaneNormal:f,viewUp:u}=i.getCamera(),[d,h]=a5(l),g=i.canvasToWorld(d),p=i.canvasToWorld(h),{cachedStats:v}=a,y=Object.keys(v),m=g,w=p;for(let E=0;EAw(ve,Re,{fast:!0}),returnPoints:this.configuration.storePointData});const Se=this.configuration.statsCalculator.getStatistics();v[b]={Modality:O.Modality,area:W,mean:(C=Se.mean)==null?void 0:C.value,max:(S=Se.max)==null?void 0:S.value,min:(T=Se.min)==null?void 0:T.value,stdDev:(_=Se.stdDev)==null?void 0:_.value,statsArray:Se.array,pointsInShape:re,isEmptyArea:be,areaUnit:$,modalityUnit:ne}}const x=n.invalidated;return n.invalidated=!1,x&&cn(n,s,Qt.StatsUpdated),v},this._isInsideVolume=(n,i,o)=>hr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,r){const{xRadius:n,yRadius:i,center:o,angle:a}=e,s=zY(rn(),r,o,-a);if(n<=0||i<=0)return!1;const c=[s[0]-o[0],s[1]-o[1]];return c[0]*c[0]/(n*n)+c[1]*c[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[r,n,i,o]=e,a=[i[0],n[1]],s=[o[0],r[1]];return[(a[0]+s[0])/2,(a[1]+s[1])/2]}};N0.toolName="EllipticalROI",N0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=N0.hydrateBase(N0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let Ad=N0;function TTe(t,e){const r=t.cachedStats[e],{area:n,mean:i,stdDev:o,max:a,isEmptyArea:s,areaUnit:c,modalityUnit:l,min:f}=r,u=[];if(Ar(n)){const d=s?"Area: Oblique not supported":`Area: ${un(n)} ${c}`;u.push(d)}return Ar(i)&&u.push(`Mean: ${un(i)} ${l}`),Ar(a)&&u.push(`Max: ${un(a)} ${l}`),Ar(f)&&u.push(`Min: ${un(f)} ${l}`),Ar(o)&&u.push(`Std Dev: ${un(o)} ${l}`),u}const{transformWorldToIndex:g7}=Rn,k0=class k0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,storePointData:!1,centerPointRadius:0,calculateStats:!0,getTextLines:_Te,statsCalculator:dl}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s]],activeHandleIndex:null},cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=f.map(g=>c.worldToCanvas(g)),d=Zu(u),h=Zu([u[0],o]);return Math.abs(h-d){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:g}=c.handles;f=g.findIndex(p=>p===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Gt(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;this.doneEditMemo(),a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{viewport:l}=c,{canvasToWorld:f}=l,{annotation:u,viewportIdsToRender:d,newAnnotation:h}=this.editData;this.createMemo(o,u,{newAnnotation:h});const{data:g}=u;g.handles.points=[g.handles.points[0],f(s)],u.invalidated=!0,this.editData.hasMoved=!0,Be(d),cn(u,o,Qt.HandlesUpdated)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else this._dragHandle(n),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,a=_e(o),{canvasToWorld:s,worldToCanvas:c}=a.viewport,{annotation:l,handleIndex:f}=this.editData,{data:u}=l,{points:d}=u.handles,h=d.map(v=>c(v)),{currentPoints:g}=i,p=g.canvas;if(f===0){const v=p[0]-h[0][0],y=p[1]-h[0][1],m=p,w=[h[1][0]+v,h[1][1]+y];d[0]=s(m),d[1]=s(w)}else d[1]=s(p)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(he)),T=S[0],_=Zu(S),E=rh(S),{centerPointRadius:b}=this.configuration;if(!p.cachedStats[l]||p.cachedStats[l].areaUnit==null)p.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(h,a,f,n);else if(h.invalidated&&(this._throttledCalculateCachedStats(h,a,f,n),a instanceof ur)){const{referencedImageId:he}=h.metadata;for(const ue in p.cachedStats)ue.startsWith("imageId")&&f.getStackViewports().find(Ue=>{const be=Ur(he),B=Ue.hasImageURI(be),M=Ur(Ue.getCurrentImageId());return B&&M!==be})&&delete p.cachedStats[ue]}if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let D;if(!Kr(g))continue;!si(g)&&!this.editData&&m!==null&&(D=[S[m]]),D&&or(i,g,"0",D,{color:w});const I=`${g}-circle`,P="0";ia(i,g,P,T,_,{color:w,lineDash:C,lineWidth:x},I),b>0&&_>3*b&&ia(i,g,`${P}-center`,T,b,{color:w,lineDash:C,lineWidth:x}),o=!0;const O=this.getLinkedTextBoxStyle(u,h);if(!O.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const A=this.configuration.getTextLines(p,l);if(!A||A.length===0)continue;let V;p.handles.textBox.hasMoved||(V=Oa(E),p.handles.textBox.worldPosition=a.canvasToWorld(V));const G=a.worldToCanvas(p.handles.textBox.worldPosition),N=ho(i,g,"1",A,G,S,{},O),{x:F,y:j,width:te,height:ie}=N;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([F,j]),topRight:a.canvasToWorld([F+te,j]),bottomLeft:a.canvasToWorld([F,j+ie]),bottomRight:a.canvasToWorld([F+te,j+ie])}}return o},this._calculateCachedStats=(n,i,o,a)=>{var S,T,_,E;if(!this.configuration.calculateStats)return;const s=n.data,{element:c}=i,l=n.invalidated,{points:f}=s.handles,u=f.map(b=>i.worldToCanvas(b)),{viewPlaneNormal:d,viewUp:h}=i.getCamera(),[g,p]=rh(u),v=i.canvasToWorld(g),y=i.canvasToWorld(p),{cachedStats:m}=s,w=Object.keys(m),x=v,C=y;for(let b=0;bAw(B,ae,{fast:!0}),boundsIJK:ue,imageData:O,returnPoints:this.configuration.storePointData}));const Te=this.configuration.statsCalculator.getStatistics();m[D]={Modality:A.Modality,area:je,mean:(S=Te.mean)==null?void 0:S.value,max:(T=Te.max)==null?void 0:T.value,min:(_=Te.min)==null?void 0:_.value,pointsInShape:ce,stdDev:(E=Te.stdDev)==null?void 0:E.value,statsArray:Te.array,isEmptyArea:W,areaUnit:Se,radius:M/2/ne,radiusUnit:re,perimeter:2*Math.PI*(M/2)/ne,modalityUnit:oe}}else this.isHandleOutsideImage=!0,m[D]={Modality:A.Modality}}return n.invalidated=!1,l&&cn(n,c,Qt.StatsUpdated),m},this._isInsideVolume=(n,i,o)=>hr(n,o)&&hr(i,o),this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}};k0.toolName="CircleROI",k0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=k0.hydrateBase(k0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let _5=k0;function _Te(t,e){const r=t.cachedStats[e],{radius:n,radiusUnit:i,area:o,mean:a,stdDev:s,max:c,min:l,isEmptyArea:f,areaUnit:u,modalityUnit:d}=r,h=[];if(Ar(n)){const g=f?"Radius: Oblique not supported":`Radius: ${un(n)} ${i}`;h.push(g)}if(Ar(o)){const g=f?"Area: Oblique not supported":`Area: ${un(o)} ${u}`;h.push(g)}return Ar(a)&&h.push(`Mean: ${un(a)} ${d}`),Ar(c)&&h.push(`Max: ${un(c)} ${d}`),Ar(l)&&h.push(`Min: ${un(l)} ${d}`),Ar(s)&&h.push(`Std Dev: ${un(s)} ${d}`),h}const Xv=5,ab=class ab extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,degrees:[45,135,225,315],diameters:[10,30,60]}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{label:"",handles:{points:[[...s]]}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,newAnnotation:!0},this._activateDraw(a),Gt(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{points:f}=l.handles,u=c.worldToCanvas(f[0]),d=Zu([u,o]);return Math.abs(d){const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},Gt(a),this._activateModify(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const{renderingEngine:u}=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this._dragDrawCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h}=this.editData,{data:g}=d;g.handles.points=[u(s),u(s)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._dragModifyCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s}=this.editData,{data:c}=a,{deltaPoints:l}=i,f=l.world;c.handles.points.forEach(g=>{g[0]+=f[0],g[1]+=f[1],g[2]+=f[2]}),a.invalidated=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this._dragHandle=n=>{const i=n.detail,{element:o}=i,a=_e(o),{canvasToWorld:s,worldToCanvas:c}=a.viewport,{annotation:l}=this.editData,{data:f}=l,{points:u}=f.handles,d=u.map(w=>c(w)),{currentPoints:h}=i,g=h.canvas,p=g[0]-d[0][0],v=g[1]-d[0][1],y=g,m=[d[1][0]+p,d[1][1]+v];u[0]=s(y),u[1]=s(m)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;i.highlighted=!1,s.handles.activeHandleIndex=null;const{renderingEngine:c}=_e(n);return Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragModifyCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragModifyCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.addEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragDrawCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragDrawCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragDrawCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(D))[0];if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(d))continue;let C=`${d}-crosshair-vertical`,S=[x[0],x[1]+Xv],T=[x[0],x[1]-Xv];Sn(i,d,C,S,T,{color:v,lineDash:m,lineWidth:y}),C=`${d}-crosshair-horizontal`,S=[x[0]+Xv,x[1]],T=[x[0]-Xv,x[1]],Sn(i,d,C,S,T,{color:v,lineDash:m,lineWidth:y});const _=this.configuration.diameters.map(D=>this.worldMeasureToCanvas(D,a));for(let D=0;D<_.length;D++){const I=`${d}-circle-${D}`,P=`${d}-circle-${D}`;ia(i,d,P,x,_[D]/2,{color:v,lineDash:m,lineWidth:y},I)}const E=D=>D*Math.PI/180,b=this.configuration.degrees.map(D=>E(D));for(let D=0;D{const{instance:s}=i.data.spline;return s.isPointNearCurve(o,a)},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:d}=c.handles;f=d.findIndex(h=>h===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s),Be(u),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,contourHoleProcessingEnabled:l}=this.editData,{data:f}=a;a.autoGenerated=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),d=this.getTargetImageData(this.getTargetId(u.viewport)),{imageData:h,dimensions:g}=d;this.isHandleOutsideImage=f.handles.points.map(v=>zr(h,v)).some(v=>!hr(v,g)),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const p=c?Qt.Completed:Qt.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=a.annotationUID,this.fireChangeOnUpdate.changeType=p):this.fireChangeOnUpdate={annotationUID:a.annotationUID,changeType:p,contourHoleProcessingEnabled:l},Be(s),this.doneEditMemo(),this.editData=null,this.isDrawing=!1},this._keyDownCallback=n=>{const i=n.detail,{element:o}=i,a=i.key??"",{lastControlPointDeletionKeys:s}=this.configuration.spline;if(!s.includes(a))return;const{annotation:l}=this.editData,{data:f}=l;if(f.handles.points.length===p7){this.cancel(o);return}else{const u=f.handles.points.length-1;this._deleteControlPointByIndex(o,l,u)}n.preventDefault()},this._mouseMoveCallback=n=>{const{drawPreviewEnabled:i}=this.configuration.spline;if(!i)return;const{element:o}=n.detail,{renderingEngine:a}=_e(o),s=At(o,this.getToolName());this.editData.lastCanvasPoint=n.detail.currentPoints.canvas,Be(s),n.preventDefault()},this._mouseDownCallback=n=>{const i=n.type===k.MOUSE_DOUBLE_CLICK,{annotation:o,viewportIdsToRender:a}=this.editData,{data:s}=o;if(s.contour.closed)return;this.doneEditMemo();const c=n.detail,{currentPoints:l,element:f}=c,{canvas:u,world:d}=l;let h=s.handles.points.length>=2&&i,g=!0;if(s.handles.points.length&&this.createMemo(f,o,{newAnnotation:s.handles.points.length===1}),s.handles.points.length>=3){this.createMemo(f,o);const{instance:p}=s.spline,v=p.getClosestControlPointWithinDistance(u,m7);(v==null?void 0:v.index)===0&&(g=!1,h=!0)}g&&s.handles.points.push(d),s.contour.closed=s.contour.closed||h,o.invalidated=!0,Be(a),s.contour.closed&&this._endCallback(n),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;this.moveAnnotation(a,p)}else{const{currentPoints:g}=i,p=g.world;u.handles.points[c]=[...p],a.invalidated=!0}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this.triggerAnnotationCompleted=(n,i)=>{const o=k.ANNOTATION_COMPLETED,a={annotation:n,changeType:Qt.Completed,contourHoleProcessingEnabled:i};ut(et,o,a)},this.triggerAnnotationModified=(n,i,o=Qt.StatsUpdated)=>{const{viewportId:a,renderingEngineId:s}=i,c=k.ANNOTATION_MODIFIED;ut(et,c,{annotation:n,viewportId:a,renderingEngineId:s,changeType:o})},this.triggerChangeEvent=(n,i,o=Qt.StatsUpdated,a)=>{o===Qt.Completed?this.triggerAnnotationCompleted(n,a):this.triggerAnnotationModified(n,i,o)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.KEY_DOWN,this._keyDownCallback),n.addEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.KEY_DOWN,this._keyDownCallback),n.removeEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._renderStats=(n,i,o,a)=>{const s=n.data,c=this.getTargetId(i);if(!s.spline.instance.closed||!a.visibility)return;const l=this.configuration.getTextLines(s,c);if(!l||l.length===0)return;const f=s.handles.points.map(m=>i.worldToCanvas(m));if(!s.handles.textBox.hasMoved){const m=Oa(f);s.handles.textBox.worldPosition=i.canvasToWorld(m)}const u=i.worldToCanvas(s.handles.textBox.worldPosition),h=ho(o,n.annotationUID??"","textBox",l,u,f,{},a),{x:g,y:p,width:v,height:y}=h;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([g,p]),topRight:i.canvasToWorld([g+v,p]),bottomLeft:i.canvasToWorld([g,p+y]),bottomRight:i.canvasToWorld([g+v,p+y])}},this.addControlPointCallback=(n,i)=>{const{data:o}=i,a=o.spline.type,s=this._getSplineConfig(a),c=s.controlPointAdditionDistance;if(s.controlPointAdditionEnabled===!1)return;const l=n.detail,{element:f}=l,u=_e(f),{renderingEngine:d,viewport:h}=u,{canvasToWorld:g}=h,{instance:p}=o.spline,v=n.detail.currentPoints.canvas,y=p.getClosestPoint(v);if(y.distance>c)return;const{index:m,point:w}=p.addControlPointAtU(y.uValue);o.handles.points.splice(m,0,g(w)),i.invalidated=!0;const x=At(f,this.getToolName());Be(x)},this.deleteControlPointCallback=(n,i)=>{const o=i.data.spline.type,a=this._getSplineConfig(o),s=a.controlPointDeletionDistance;if(a.controlPointDeletionEnabled===!1)return;const c=n.detail,{element:l,currentPoints:f}=c,{canvas:u}=f,{instance:d}=i.data.spline,h=d.getClosestControlPointWithinDistance(u,s);h&&this._deleteControlPointByIndex(l,i,h.index)},this._calculateCachedStats=(n,i)=>{if(!this.configuration.calculateStats)return;const o=n.data;if(!o.contour.closed)return;const a=_e(i);if(!a)return;const{viewport:s}=a,{cachedStats:c}=o,{polyline:l}=o.contour,f=Object.keys(c);for(let d=0;ds.worldToCanvas(D)),y=v[0],m=s.canvasToWorld(y),w=s.canvasToWorld([y[0]+1,y[1]]),x=s.canvasToWorld([y[0],y[1]+1]),C=Qi(m,w),S=Qi(m,x),{imageData:T}=g,{scale:_,areaUnit:E}=Ia(g,()=>{const{maxX:D,maxY:I,minX:P,minY:O}=uf(v),A=s.canvasToWorld([P,O]),V=zr(T,A),G=s.canvasToWorld([D,I]),R=zr(T,G);return[V,R]});let b=_m(v)/_/_;b*=C*S,c[h]={Modality:p.Modality,area:b,areaUnit:E}}const u=n.invalidated;return n.invalidated=!1,u&&this.triggerAnnotationModified(n,a,Qt.StatsUpdated),c},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0}),this.annotationCompletedBinded=this.annotationCompleted.bind(this)}annotationCompleted(e){var n;const{sourceAnnotation:r}=e.detail;!this.splineToolNames.includes((n=r==null?void 0:r.metadata)==null?void 0:n.toolName)||!this.configuration.simplifiedSpline||!this.isContourSegmentationTool()||zE(r)}initializeListeners(){et.addEventListener(k.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}removeListeners(){et.removeEventListener(k.ANNOTATION_COMPLETED,this.annotationCompletedBinded)}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.removeListeners()}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{canvas:o}=n,a=Qh(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,s=_e(i),{renderingEngine:c}=s,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,i);const f=At(i,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:f,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:o,contourHoleProcessingEnabled:a},this._activateDraw(i),e.preventDefault(),Be(f),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Jt(e);const{annotation:r,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&mn(r.annotationUID),super.cancelAnnotation(r);const o=_e(e),{renderingEngine:a}=o;return Be(n),this.editData=null,r.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){var O,A,V;const{enabledElement:r,targetId:n,svgDrawingHelper:i,annotationStyle:o}=e,{viewport:a}=r,{worldToCanvas:s}=a,{element:c}=a,l=e.annotation,{annotationUID:f,data:u,highlighted:d}=l,{handles:h}=u,{points:g,activeHandleIndex:p}=h,v=(O=this.editData)==null?void 0:O.newAnnotation,{lineWidth:y,lineDash:m,color:w,locked:x}=o,C=g.map(G=>s(G)),{drawPreviewEnabled:S}=this.configuration.spline,T=l.data.spline.type,_=this._getSplineConfig(T),E=l.data.spline.instance,b=ym(l);if(b.findIndex(G=>!G)!==-1)throw new Error(`Can't find annotation for child ${l.childAnnotationUIDs.join()}`);[l,...b].filter(G=>this._isSplineROIAnnotation(G)).forEach(G=>{const N=this._updateSplineInstance(c,G).getPolylinePoints();this.updateContourPolyline(G,{points:N,closed:u.contour.closed,targetWindingDirection:ra.Clockwise},a,{updateWindingDirection:u.contour.closed})}),super.renderAnnotationInstance(e),!u.cachedStats[n]||u.cachedStats[n].areaUnit==null?(u.cachedStats[n]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(l,c)):l.invalidated&&this._throttledCalculateCachedStats(l,c);let P;if(!x&&!this.editData&&p!==null&&(P=[C[p]]),(P||v||d)&&or(i,f,"0",C,{color:w,lineWidth:y,handleRadius:"3"}),S&&E.numControlPoints>1&&((A=this.editData)!=null&&A.lastCanvasPoint)&&!E.closed){const{lastCanvasPoint:G}=this.editData,R=E.getPreviewPolylinePoints(G,m7);gc(i,f,"previewSplineChange",R,{color:"#9EA0CA",lineDash:m,lineWidth:1})}if(_.showControlPointsConnectors){const G=[...C];E.closed&&G.push(C[0]),gc(i,f,"controlPointsConnectors",G,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(l,a,i,o.textbox),((V=this.fireChangeOnUpdate)==null?void 0:V.annotationUID)===f&&(this.triggerChangeEvent(l,r,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),l.invalidated=!1,!0}createInterpolatedSplineControl(e){var o;if((o=e.data.handles.points)!=null&&o.length)return;const{polyline:r}=e.data.contour;if(!r||!r.length)return;e.data.handles.points=[];const{points:n}=e.data.handles,i=Math.max(10,Math.floor(r.length/20));for(let a=0;a({type:o.type,instance:a,resolution:o.resolution});let c;return(l=this.configuration.interpolation)!=null&&l.enabled&&(c=f=>{var u;(u=f.data).spline||(u.spline=s()),this.createInterpolatedSplineControl(f)}),Ui(r,{data:{handles:{points:[[...n]]},spline:s(),cachedStats:{}},onInterpolationComplete:c})}_deleteControlPointByIndex(e,r,n){const i=_e(e),{points:o}=r.data.handles;o.length===3?mn(r.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,s=At(e,this.getToolName());r.invalidated=!0,Be(s)}_isSplineROIAnnotation(e){var r;return!!((r=e.data)!=null&&r.spline)}_getSplineConfig(e){const{configuration:r}=this,n=r.spline.configuration;return Object.assign({type:e},ETe,n[e])}_updateSplineInstance(e,r){const n=_e(e),{viewport:i}=n,{worldToCanvas:o}=i,{data:a}=r,{type:s,instance:c}=r.data.spline,l=this._getSplineConfig(s),u=a.handles.points.map(o),d=l.resolution!==void 0?parseInt(l.resolution):void 0,h=l.scale!==void 0?parseFloat(l.scale):void 0;return c.setControlPoints(u),c.closed=!!a.contour.closed,!c.fixedResolution&&d!==void 0&&c.resolution!==d&&(c.resolution=d,r.invalidated=!0),c instanceof B1&&!c.fixedScale&&h!==void 0&&c.scale!==h&&(c.scale=h,r.invalidated=!0),c}};Du.toolName="SplineROI",Du.SplineTypes=Ml,Du.Actions=Ip,Du.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;if(r.lengthi,this._areEqual=typeof n=="function"?n:(i,o)=>i===o}push(e){const r=this._getBucketIndex(e),n=this._buckets[r],i={value:e,next:n};this._buckets[r]=i,this._size++}pop(){if(this._size===0)throw new Error("Cannot pop because the queue is empty.");for(;this._buckets[this._currentBucketIndex]===null;)this._currentBucketIndex=(this._currentBucketIndex+1)%this._bucketCount;const e=this._buckets[this._currentBucketIndex];return this._buckets[this._currentBucketIndex]=e.next,this._size--,e.value}remove(e){if(!e)return!1;const r=this._getBucketIndex(e),n=this._buckets[r];let i=n,o;for(;i!==null&&!this._areEqual(e,i.value);)o=i,i=i.next;return i===null?!1:(i===n?this._buckets[r]=i.next:o.next=i.next,this._size--,!0)}isEmpty(){return this._size===0}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const r=new Array(e);return r.fill(null),r}}const BC=4294967295,ITe=2/(3*Math.PI);class b5{constructor(e,r,n){this._getPointIndex=(o,a)=>{const{width:s}=this;return o*s+a},this._getPointCoordinate=o=>{const a=o%this.width,s=Math.floor(o/this.width);return[a,s]},this._getPointCost=o=>Math.round(this.searchGranularity*this.costs[o]);const i=e.length;this.searchGranularityBits=8,this.searchGranularity=1<.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(r-2,0)),i}_computeGradientX(){const{width:e,height:r}=this,n=new Float32Array(e*r);let i=0;for(let o=0;o=i||l<0||l>=o)return 1;if(a<0||s<0||a>=i||s>=o)return 0;const f=n(l,c);let u=this.gradMagnitude[f];(a===c||s===l)&&(u*=Math.SQRT1_2);const d=this.laplace[f],h=this._getGradientDirection(a,s,c,l);return .43*u+.43*d+.11*h}_getNeighborPoints(e){const{width:r,height:n}=this,i=[],o=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),s=Math.min(e[0]+1,r-1),c=Math.min(e[1]+1,n-1);for(let l=a;l<=c;l++)for(let f=o;f<=s;f++)(f!==e[0]||l!==e[1])&&i.push([f,l]);return i}static createInstanceFromRawPixelData(e,r,n,i){const o=e.length,a=new Float32Array(o),{lower:s,upper:c}=i,l=c-s;for(let f=0,u=e.length;fthis.pointArray[e])}getNumControlPoints(){return this._controlPointIndexes.length}removeLastControlPoint(){this._controlPointIndexes.length&&this._controlPointIndexes.pop()}getLastControlPoint(){if(this._controlPointIndexes.length)return this.pointArray[this._controlPointIndexes[this._controlPointIndexes.length-1]]}removeLastPoints(e){this.pointArray.splice(this.pointArray.length-e,e)}addPoints(e){this.pointArray=this.pointArray.concat(e)}prependPath(e){const r=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let i=0;ithis._controlPointIndexes.push(r))}}const OTe=10**2,cb=class cb extends L1{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextLines:MTe,calculateStats:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:Ki.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{cancelInProgress:{method:"cancelInProgress",bindings:[{key:"Escape"}]}}}}){super(e,r),this.isHandleOutsideImage=!1,this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,l=a*a,f=i.data.contour.polyline.map(d=>c.worldToCanvas(d));let u=f[f.length-1];for(let d=0;d{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1};const c=_e(a),{renderingEngine:l}=c;this._activateModify(a),Be(s),n.preventDefault()},this.handleSelectedCallback=(n,i,o)=>{const a=n.detail,{element:s}=a,{data:c}=i;i.highlighted=!0;let l=!1,f;if(o.worldPosition)l=!0;else{const{points:g}=c.handles;f=g.findIndex(p=>p===o)}const u=At(s,this.getToolName());this.editData={annotation:i,viewportIdsToRender:u,handleIndex:f,movingTextBox:l},this._activateModify(s);const d=_e(s),{renderingEngine:h}=d;Be(u),n.preventDefault()},this._endCallback=(n,i=!1)=>{const o=n.detail,{element:a}=o,{annotation:s,viewportIdsToRender:c,newAnnotation:l,contourHoleProcessingEnabled:f}=this.editData,{data:u}=s;this.doneEditMemo(),u.handles.activeHandleIndex=null,this._deactivateModify(a),this._deactivateDraw(a),Jt(a);const d=_e(a);if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage||i){mn(s.annotationUID),this.clearEditData(),Be(c);return}Be(c);const h=l?Qt.Completed:Qt.HandlesUpdated;this.triggerChangeEvent(s,d,h,f),this.clearEditData()},this.triggerChangeEvent=(n,i,o=Qt.StatsUpdated,a=!1)=>{o===Qt.Completed?Dw(n,a):cn(n,i.viewport.element,o)},this._mouseDownCallback=n=>{const i=n.type===k.MOUSE_DOUBLE_CLICK,{annotation:o,viewportIdsToRender:a,worldToSlice:s,sliceToWorld:c,newAnnotation:l}=this.editData;if(this.editData.closed)return;const f=n.detail,{element:u}=f,{currentPoints:d}=f,{canvas:h,world:g}=d;let p=g;const v=_e(u),{viewport:y,renderingEngine:m}=v,w=this.editData.currentPath.getControlPoints();let x=w.length>=2&&i;if(this.doneEditMemo(),this.createMemo(u,o,{newAnnotation:l&&w.length===1}),w.length>=2){const T={index:-1,distSquared:1/0};for(let _=0,E=w.length;_{const{element:i,currentPoints:o}=n.detail,{world:a,canvas:s}=o,{renderingEngine:c}=_e(i),l=At(i,this.getToolName());this.editData.lastCanvasPoint=s;const{width:f,height:u}=this.scissors,{worldToSlice:d}=this.editData,h=d(a);if(h[0]<0||h[1]<0||h[0]>=f||h[1]>=u)return;const g=this.scissors.findPathToPoint(h),p=new Dl;p.addPoints(g),p.prependPath(this.editData.confirmedPath),this.editData.currentPath=p,Be(l),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,movingTextBox:c,handleIndex:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(c){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(l===void 0)console.warn("Drag annotation not implemented");else{const{currentPoints:g}=i,p=g.world;this.editHandle(p,o,a,l)}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s)},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData;return a&&mn(i.annotationUID),Be(o),this.doneEditMemo(),this.scissors=null,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_MOVE,this._mouseMoveCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._mouseDownCallback)},this._calculateCachedStats=(n,i)=>{if(!this.configuration.calculateStats)return;const o=n.data;if(!o.contour.closed)return;const a=_e(i),{viewport:s,renderingEngine:c}=a,{cachedStats:l}=o,{polyline:f}=o.contour,u=Object.keys(l);for(let h=0;hs.worldToCanvas(I)),m=y[0],w=s.canvasToWorld(m),x=s.canvasToWorld([m[0]+1,m[1]]),C=s.canvasToWorld([m[0],m[1]+1]),S=Qi(w,x),T=Qi(w,C),{imageData:_}=p,{scale:E,areaUnit:b}=Ia(p,()=>{const{maxX:I,maxY:P,minX:O,minY:A}=uf(y),V=s.canvasToWorld([O,A]),G=zr(_,V),R=s.canvasToWorld([I,P]),N=zr(_,R);return[G,N]});let D=_m(y)/E/E;D*=S*T,l[g]={Modality:v.Modality,area:D,areaUnit:b}}const d=n.invalidated;return n.invalidated=!1,d&&this.triggerAnnotationModified(n,a,Qt.StatsUpdated),l},this._renderStats=(n,i,o,a)=>{const s=n.data,c=this.getTargetId(i);if(!s.contour.closed||!a.visibility)return;const l=this.configuration.getTextLines(s,c);if(!l||l.length===0)return;const f=s.handles.points.map(m=>i.worldToCanvas(m));if(!s.handles.textBox.hasMoved){const m=Oa(f);s.handles.textBox.worldPosition=i.canvasToWorld(m)}const u=i.worldToCanvas(s.handles.textBox.worldPosition),h=ho(o,n.annotationUID??"","textBox",l,u,f,{},a),{x:g,y:p,width:v,height:y}=h;s.handles.textBox.worldBoundingBox={topLeft:i.canvasToWorld([g,p]),topRight:i.canvasToWorld([g+v,p]),bottomLeft:i.canvasToWorld([g,p+y]),bottomRight:i.canvasToWorld([g+v,p+y])}},this.triggerAnnotationModified=(n,i,o=Qt.StatsUpdated)=>{const{viewportId:a,renderingEngineId:s}=i,c=k.ANNOTATION_MODIFIED;ut(et,c,{annotation:n,viewportId:a,renderingEngineId:s,changeType:o})},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}setupBaseEditData(e,r,n,i,o){var T,_;const a=_e(r),{viewport:s}=a;this.isDrawing=!0;const c=s.getImageData(),{imageData:l}=c;let f,u,d,h,g;if(!(s instanceof ur))d=c.dimensions[0],h=c.dimensions[1],f=E=>{const b=zr(l,E);return[b[0],b[1]]},u=E=>Sh(l,[E[0],E[1],0]),g=c.scalarData;else if(s instanceof ur){const E=hE(s),{sliceToIndexMatrix:b,indexToSliceMatrix:D}=E;f=I=>{const P=zr(l,I),O=Yt([0,0,0],P,D);return[O[0],O[1]]},u=I=>{const P=Yt([0,0,0],[I[0],I[1],0],b);return Sh(l,P)},g=E.scalarData,d=E.width,h=E.height}else throw new Error("Viewport not supported");g=SV(g,d,h);const{voiRange:p}=s.getProperties(),v=f(e);this.scissors=b5.createInstanceFromRawPixelData(g,d,h,p),i&&(this.scissorsNext=b5.createInstanceFromRawPixelData(g,d,h,p),this.scissorsNext.startSearch(f(i))),this.scissors.startSearch(v);const y=!i,m=new Dl,w=new Dl,x=y?void 0:new Dl;m.addPoint(v),m.addControlPoint(v);const C=At(r,this.getToolName()),S=s.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:C,newAnnotation:y,hasMoved:!1,lastCanvasPoint:S,confirmedPath:m,currentPath:w,confirmedPathNext:x,closed:!1,handleIndex:((T=this.editData)==null?void 0:T.handleIndex)??((_=n.handles)==null?void 0:_.activeHandleIndex),worldToSlice:f,sliceToWorld:u,contourHoleProcessingEnabled:o}}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n,a=this.createAnnotation(e),s=Qh(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(o,i,a,void 0,s),this.addAnnotation(a,i),this._activateDraw(i),e.preventDefault(),Be(this.editData.viewportIdsToRender),a}clearEditData(){this.editData=null,this.scissors=null,this.scissorsNext=null,this.isDrawing=!1}editHandle(e,r,n,i){var w;const{data:o}=n,{points:a}=o.handles,{length:s}=a,c=a[(i-1+s)%s],l=a[(i+1)%s];if(!((w=this.editData)!=null&&w.confirmedPathNext)){this.setupBaseEditData(c,r,n,l);const{polyline:x}=o.contour,C=new Dl,S=new Dl,{worldToSlice:T}=this.editData,_=YS(n,i-1),E=YS(n,i+1);if(E===-1||_===-1)throw new Error(`Can't find handle index ${E===-1&&l} ${_===-1&&c}`);i===0?S.addPoints(x.slice(E+1,_).map(T)):(C.addPoints(x.slice(0,_+1).map(T)),S.addPoints(x.slice(E,x.length).map(T))),this.editData.confirmedPath=C,this.editData.confirmedPathNext=S}const{editData:f,scissors:u}=this,{worldToSlice:d,sliceToWorld:h}=f,{activeHandleIndex:g}=o.handles;if(g==null)o.handles.activeHandleIndex=i;else if(g!==i)throw new Error(`Trying to edit a different handle than the one currently being edited ${i}!==${o.handles.activeHandleIndex}`);const p=d(e);if(p[0]<0||p[0]>=u.width||p[1]<0||p[1]>=u.height)return;a[i]=h(p);const v=u.findPathToPoint(p),y=this.scissorsNext.findPathToPoint(p),m=new Dl;m.prependPath(f.confirmedPath),i!==0&&m.addPoints(v),m.addPoints(y.reverse()),m.appendPath(f.confirmedPathNext),i===0&&m.addPoints(v),f.currentPath=m,n.invalidated=!0,f.hasMoved=!0,f.closed=!0}renderAnnotation(e,r){var n;return this.updateAnnotation((n=this.editData)==null?void 0:n.currentPath),super.renderAnnotation(e,r)}isContourSegmentationTool(){return!1}createAnnotation(e){const r=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return Ui(r,{data:{handles:{points:[[...n]]}}})}cancelInProgress(e,r,n){if(!this.editData){this.undo();return}this._endCallback(n,!0)}renderAnnotationInstance(e){var m,w,x,C;const{annotation:r,enabledElement:n,svgDrawingHelper:i,annotationStyle:o,targetId:a}=e,{viewport:s}=n,{element:c}=s,{worldToCanvas:l}=s,{annotationUID:f,data:u,highlighted:d}=r,{handles:h}=u,g=(m=this.editData)==null?void 0:m.newAnnotation,{lineWidth:p,lineDash:v,color:y}=o;if(d||g&&r.annotationUID===((x=(w=this.editData)==null?void 0:w.annotation)==null?void 0:x.annotationUID)){const S="0",T=h.points.map(l);or(i,f,S,T,{color:y,lineDash:v,lineWidth:p})}return super.renderAnnotationInstance(e),!u.cachedStats[a]||((C=u.cachedStats[a])==null?void 0:C.areaUnit)===null?(u.cachedStats[a]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(r,c)):r.invalidated&&this._throttledCalculateCachedStats(r,c),this._renderStats(r,s,i,o.textbox),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:r,sliceToWorld:n,worldToSlice:i,closed:o,newAnnotation:a}=this.editData;let{pointArray:s}=e;s.length>1&&(s=[...s,s[0]]);const c=a&&o?ra.Clockwise:void 0;this.updateContourPolyline(r,{points:s,closed:o,targetWindingDirection:c},{canvasToWorld:n,worldToCanvas:i})}};cb.toolName="LivewireContour";let D5=cb;function MTe(t,e){const r=t.cachedStats[e],{area:n,areaUnit:i}=r,o=[];if(n){const a=`Area: ${un(n)} ${i}`;o.push(a)}return o}const lb=class lb extends D5{updateInterpolatedAnnotation(e,r){this.editData||!e.invalidated||!e.data.handles.interpolationSources||(e.data.contour.originalPolyline=e.data.contour.polyline,queueMicrotask(()=>{if(!e.data.handles.interpolationSources)return;const{points:n}=e.data.handles,{element:i}=r.viewport;this.setupBaseEditData(n[0],i,e);const{length:o}=n,{scissors:a}=this,{nearestEdge:s,repeatInterpolation:c}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:f}=this.editData,u=[];if(s){let h=l(n[n.length-1]);n.forEach((g,p)=>{const v=l(g);h=v,u.push(v),a.startSearch(h),a.findPathToPoint(v),a.findPathToPoint(l(n[(p+3)%n.length]));const y=a.findMinNearby(v,s);Zt(v,y)||(u[p]=y,h=y,n[p]=f(y))})}const d=new Dl;for(let h=0;h{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),{arrowFirst:p}=this.configuration,v=l.getFrameOfReferenceUID(),y={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:v,referencedImageId:g,...l.getViewReference({points:[s]})},data:{text:"",handles:{points:[[...s],[...s]],activeHandleIndex:null,arrowFirst:p,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:""}};ln(y,a);const m=At(a,this.getToolName());return this.editData={annotation:y,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(m),y},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l,movingTextBox:f}=this.editData,{data:u}=a;c&&!l||(u.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),c?this.configuration.getTextCallback(d=>{if(!d){mn(a.annotationUID),Be(s),this.editData=null,this.isDrawing=!1;return}a.data.text=d,cn(a,o,Qt.HandlesUpdated),Un(a),this.createMemo(o,a,{newAnnotation:!!this.memo}),LW(a,o,d),Be(s)}):f||cn(a,o,Qt.HandlesUpdated),this.doneEditMemo(),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData;this.createMemo(o,a,{newAnnotation:f});const{data:u}=a;if(l){const{deltaPoints:d}=i,h=d.world,{textBox:g}=u.handles,{worldPosition:p}=g;p[0]+=h[0],p[1]+=h[1],p[2]+=h[2],g.hasMoved=!0}else if(c===void 0){const{deltaPoints:d}=i,h=d.world;u.handles.points.forEach(p=>{p[0]+=h[0],p[1]+=h[1],p[2]+=h[2]}),a.invalidated=!0}else{const{currentPoints:d}=i,h=d.world;u.handles.points[c]=[...h],a.invalidated=!0}this.editData.hasMoved=!0,Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.touchTapCallback=n=>{n.detail.taps==2&&this.doubleClickCallback(n)},this.doubleClickCallback=n=>{const i=n.detail,{element:o}=i;let a=hn(this.getToolName(),o);if(a=this.filterInteractableAnnotationsForElement(o,a),!(a!=null&&a.length))return;const s=a.find(l=>this.isPointNearTool(o,l,i.currentPoints.canvas,6));if(!s)return;const c=s;this.configuration.changeTextCallback(s,n.detail,this._doneChangingTextCallback.bind(this,o,c)),this.editData=null,this.isDrawing=!1,n.stopImmediatePropagation(),n.preventDefault()},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fa.worldToCanvas(G));let T;if(!si(d)&&!this.editData&&y!==null&&(T=[S[y]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(d))continue;T&&or(i,d,"0",S,{color:m,lineWidth:w});const _="1";if(this.configuration.arrowFirst?u5(i,d,_,S[1],S[0],{color:m,width:w,lineDash:x,viaMarker:this.configuration.arrowHeadStyle!=="legacy",markerSize:C}):u5(i,d,_,S[0],S[1],{color:m,width:w,lineDash:x,viaMarker:this.configuration.arrowHeadStyle!=="legacy",markerSize:C}),o=!0,!p)continue;const E=this.getLinkedTextBoxStyle(l,u);if(!E.visibility){h.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}if(!h.handles.textBox.hasMoved){const G=S[1];h.handles.textBox.worldPosition=a.canvasToWorld(G)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),I=ho(i,d,"1",[p],b,S,{},E),{x:P,y:O,width:A,height:V}=I;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,O]),topRight:a.canvasToWorld([P+A,O]),bottomLeft:a.canvasToWorld([P,O+V]),bottomRight:a.canvasToWorld([P+A,O+V])}}return o}}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_doneChangingTextCallback(e,r,n){r.data.text=n,_e(e);const i=At(e,this.getToolName());Be(i),cn(r,e)}_isInsideVolume(e,r,n){return hr(e,n)&&hr(r,n)}};V0.toolName="ArrowAnnotate",V0.hydrate=(e,r,n,i)=>{const o=Wn(e);if(!o)return;const{FrameOfReferenceUID:a,referencedImageId:s,viewPlaneNormal:c,instance:l,viewport:f}=V0.hydrateBase(V0,o,r,i),{toolInstance:u,...d}=i||{},h={annotationUID:(i==null?void 0:i.annotationUID)||Pn(),data:{text:n||"",handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:l.getToolName(),viewPlaneNormal:c,FrameOfReferenceUID:a,referencedImageId:s,...d}};ln(h,f.element),Be([f.id])};let pf=V0;function PTe(t){return t(prompt("Enter your annotation:"))}function RTe(t,e,r){return r(prompt("Enter your annotation:"))}const F0=class F0 extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,showAngleArc:!1,arcOffset:5,preventHandleOutsideImage:!1,getTextLines:LTe}}){super(e,r),this.addNewAnnotation=n=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u,d]=l.handles.points,h=c.worldToCanvas(f),g=c.worldToCanvas(u),p={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};if(Ii([p.start.x,p.start.y],[p.end.x,p.end.y],[o[0],o[1]])<=a)return!0;if(!d)return!1;const y=c.worldToCanvas(d),m={start:{x:g[0],y:g[1]},end:{x:y[0],y:y[1]}};return Ii([m.start.x,m.start.y],[m.end.x,m.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a);const c=_e(a),{renderingEngine:l}=c;Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.angleStartedNotYetCompleted&&f.handles.points.length===2){this.editData.handleIndex=2;return}this.angleStartedNotYetCompleted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,newAnnotation:f}=this.editData,{data:u}=a;if(this.createMemo(o,a,{newAnnotation:f}),l){const{deltaPoints:g}=i,p=g.world,{textBox:v}=u.handles,{worldPosition:y}=v;y[0]+=p[0],y[1]+=p[1],y[2]+=p[2],v.hasMoved=!0}else if(c===void 0){const{deltaPoints:g}=i,p=g.world;u.handles.points.forEach(y=>{y[0]+=p[0],y[1]+=p[1],y[2]+=p[2]}),a.invalidated=!0}else{const{currentPoints:g}=i,p=g.world;u.handles.points[c]=[...p],a.invalidated=!0}this.editData.hasMoved=!0;const d=_e(o),{renderingEngine:h}=d;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,this.angleStartedNotYetCompleted=!1,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{var d;let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let h=0;ha.worldToCanvas(N));!v.cachedStats[l]||v.cachedStats[l].angle==null?(v.cachedStats[l]={angle:null},this._calculateCachedStats(g,f,n)):g.invalidated&&this._throttledCalculateCachedStats(g,f,n);let _;if(!si(g.annotationUID)&&!this.editData&&m!==null&&(_=[T[m]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(p))continue;_&&or(i,p,"0",T,{color:w,lineDash:C,lineWidth:x});let E="1";if(Sn(i,p,E,T[0],T[1],{color:w,width:x,lineDash:C}),o=!0,T.length!==3)return o;if(E="2",Sn(i,p,E,T[1],T[2],{color:w,width:x,lineDash:C}),this.configuration.showAngleArc){const N=T[1],F=this.configuration.arcOffset,j=Math.min(Ii([N[0],N[1]],[T[0][0],T[0][1]],[T[2][0],T[2][1]]),Ii([N[0],N[1]],[T[2][0],T[2][1]],[T[0][0],T[0][1]]))/F,te=[];let ie=Math.atan2(T[0][1]-N[1],T[0][0]-N[0]),he=Math.atan2(T[2][1]-N[1],T[2][0]-N[0]);if(heMath.PI){const Me=ie;ie=he,he=Me+2*Math.PI}const ve=32;for(let Me=0;Me<=ve;Me++){const Ue=ie+Me/ve*(he-ie);te.push([N[0]+j*Math.cos(Ue),N[1]+j*Math.sin(Ue)])}Hl(i,p,"3",te,{color:w,width:x,lineDash:S})}if(!((d=v.cachedStats[l])!=null&&d.angle))continue;const b=this.getLinkedTextBoxStyle(u,g);if(!b.visibility){v.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const D=this.configuration.getTextLines(v,l);if(!v.handles.textBox.hasMoved){const N=T[1];v.handles.textBox.worldPosition=a.canvasToWorld(N)}const I=a.worldToCanvas(v.handles.textBox.worldPosition),O=ho(i,p,"1",D,I,T,{},b),{x:A,y:V,width:G,height:R}=O;v.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([A,V]),topRight:a.canvasToWorld([A+G,V]),bottomLeft:a.canvasToWorld([A,V+R]),bottomRight:a.canvasToWorld([A+G,V+R])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(d=>d===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o);const f=_e(o),{renderingEngine:u}=f;Be(l),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport;if(i.handles.points.length!==3)return;const a=i.handles.points[0],s=i.handles.points[1],c=i.handles.points[2],{cachedStats:l}=i,f=Object.keys(l);for(let d=0;dzr(v,y)).some(y=>!hr(y,p)),l[h]={angle:isNaN(g)?"Incomplete Angle":g}}const u=e.invalidated;return e.invalidated=!1,u&&cn(e,o,Qt.StatsUpdated),l}};F0.toolName="Angle",F0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=F0.hydrateBase(F0,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let gT=F0;function LTe(t,e){const r=t.cachedStats[e],{angle:n}=r;return n===void 0?void 0:isNaN(n)?[`${n}`]:[`${un(n)} °`]}const ATe=(...t)=>{const e=t[0].length===2?[0,0]:[0,0,0],r=t.length;for(const n of t)e[0]+=n[0]/r,e[1]+=n[1]/r,e.length===3&&(e[2]+=n[2]/r);return e},bl=ATe,ub=class ub extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:NTe,showArcLines:!1}}){super(e,r),this.addNewAnnotation=n=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g,...l.getViewReference({points:[s]})},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,{distanceToPoint:f,distanceToPoint2:u}=this.distanceToLines({viewport:c,points:l.handles.points,canvasCoords:o,proximity:a});return f<=a||u<=a},this.toolSelectedCallback=(n,i,o,a,s=6)=>{const c=n.detail,{element:l}=c;i.highlighted=!0;const f=At(l,this.getToolName()),u=_e(l),{renderingEngine:d,viewport:h}=u,{isNearFirstLine:g,isNearSecondLine:p}=this.distanceToLines({viewport:h,points:i.data.handles.points,canvasCoords:a,proximity:s});this.editData={annotation:i,viewportIdsToRender:f,movingTextBox:!1,isNearFirstLine:g,isNearSecondLine:p},this._activateModify(l),Gt(l),Be(f),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.doneEditMemo(),this.angleStartedNotYetCompleted&&f.handles.points.length<4){Jt(o),this.editData.handleIndex=f.handles.points.length;return}this.angleStartedNotYetCompleted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._mouseDownCallback=n=>{const{annotation:i,handleIndex:o}=this.editData,a=n.detail,{element:s,currentPoints:c}=a,l=c.world,{data:f}=i;if(o===1){f.handles.points[1]=l,this.editData.hasMoved=f.handles.points[1][0]!==f.handles.points[0][0]||f.handles.points[1][1]!==f.handles.points[0][0];return}if(o===3){f.handles.points[3]=l,this.editData.hasMoved=f.handles.points[3][0]!==f.handles.points[2][0]||f.handles.points[3][1]!==f.handles.points[2][0],this.angleStartedNotYetCompleted=!1;return}this.editData.hasMoved=!1,Gt(s),f.handles.points[2]=f.handles.points[3]=l,this.editData.handleIndex=f.handles.points.length-1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l,isNearFirstLine:f,isNearSecondLine:u,newAnnotation:d}=this.editData;this.createMemo(o,a,{newAnnotation:d});const{data:h}=a;if(l){const{deltaPoints:v}=i,y=v.world,{textBox:m}=h.handles,{worldPosition:w}=m;w[0]+=y[0],w[1]+=y[1],w[2]+=y[2],m.hasMoved=!0}else if(c===void 0&&(f||u)){const{deltaPoints:v}=i,y=v.world,m=h.handles.points;f?[m[0],m[1]].forEach(x=>{x[0]+=y[0],x[1]+=y[1],x[2]+=y[2]}):u&&[m[2],m[3]].forEach(x=>{x[0]+=y[0],x[1]+=y[1],x[2]+=y[2]}),a.invalidated=!0}else{const{currentPoints:v}=i,y=v.world;h.handles.points[c]=[...y],a.invalidated=!0}this.editData.hasMoved=!0;const g=_e(o),{renderingEngine:p}=g;Be(s),a.invalidated&&cn(a,o,Qt.HandlesUpdated)},this.cancel=n=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;s.handles.points.length<4&&mn(i.annotationUID),i.highlighted=!1,s.handles.activeHandleIndex=null;const c=_e(n),{renderingEngine:l}=c;return Be(o),a&&Un(i),this.editData=null,this.angleStartedNotYetCompleted=!1,i.annotationUID},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_START,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_START,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_START,this._mouseDownCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_DOWN,this._mouseDownCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_START,this._mouseDownCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{var d;let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let h=0;ha.worldToCanvas(Ue));!v.cachedStats[l]||v.cachedStats[l].angle==null?(v.cachedStats[l]={angle:null,arc1Angle:null,arc2Angle:null,points:{world:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null},canvas:{arc1Start:null,arc1End:null,arc2Start:null,arc2End:null,arc1Angle:null,arc2Angle:null}}},this._calculateCachedStats(g,f,n)):g.invalidated&&this._throttledCalculateCachedStats(g,f,n);let T;if(!si(p)&&!this.editData&&m!==null&&(T=[S[m]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Kr(p))continue;T&&or(i,p,"0",S,{color:w,lineDash:C,lineWidth:x});const _=[S[0],S[1]],E=[S[2],S[3]];let b="line1";if(Sn(i,p,b,_[0],_[1],{color:w,width:x,lineDash:C}),o=!0,S.length<4)return o;b="line2",Sn(i,p,b,E[0],E[1],{color:w,width:x,lineDash:C}),b="linkLine";const D=bl(_[0],_[1]),I=bl(E[0],E[1]);Sn(i,p,b,D,I,{color:w,lineWidth:"1",lineDash:"1,4"});const{arc1Start:P,arc1End:O,arc2End:A,arc2Start:V}=v.cachedStats[l].points.canvas,{arc1Angle:G,arc2Angle:R}=v.cachedStats[l];if(this.configuration.showArcLines&&(b="arc1",Sn(i,p,b,P,O,{color:w,lineWidth:"1"}),b="arc2",Sn(i,p,b,V,A,{color:w,lineWidth:"1"})),!((d=v.cachedStats[l])!=null&&d.angle))continue;const N=this.getLinkedTextBoxStyle(u,g);if(!N.visibility){v.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const F=this.configuration.getTextLines(v,l);if(!v.handles.textBox.hasMoved){const Ue=Oa(S);v.handles.textBox.worldPosition=a.canvasToWorld(Ue)}const j=a.worldToCanvas(v.handles.textBox.worldPosition),ie=ho(i,p,"cobbAngleText",F,j,S,{},N),{x:he,y:ue,width:ve,height:Me}=ie;if(v.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([he,ue]),topRight:a.canvasToWorld([he+ve,ue]),bottomLeft:a.canvasToWorld([he,ue+Me]),bottomRight:a.canvasToWorld([he+ve,ue+Me])},this.configuration.showArcLines){const Ue="arcAngle1",be=[`${G.toFixed(2)} °`],B=bl(P,O);ff(i,p,Ue,be,B,{...N,padding:3});const M="arcAngle2",$=[`${R.toFixed(2)} °`],W=bl(V,A);ff(i,p,M,$,W,{...N,padding:3})}}return o},this.distanceToLines=({viewport:n,points:i,canvasCoords:o,proximity:a})=>{const[s,c,l,f]=i,u=n.worldToCanvas(s),d=n.worldToCanvas(c),h=n.worldToCanvas(l),g=n.worldToCanvas(f),p={start:{x:u[0],y:u[1]},end:{x:d[0],y:d[1]}},v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}},y=Ii([p.start.x,p.start.y],[p.end.x,p.end.y],[o[0],o[1]]),m=Ii([v.start.x,v.start.y],[v.end.x,v.end.y],[o[0],o[1]]);let w=!1,x=!1;return y<=a?w=!0:m<=a&&(x=!0),{distanceToPoint:y,distanceToPoint2:m,isNearFirstLine:w,isNearSecondLine:x}},this.getArcsStartEndPoints=({firstLine:n,secondLine:i,mid1:o,mid2:a})=>{const s=[o,a],c=oh(n,s),l=oh(i,s),f=c>90?1:0,u=l>90?0:1,d=bl(s[0],s[1]),h=Math.sqrt((s[1][0]-s[0][0])**2+(s[1][1]-s[0][1])**2),g=.1,p=bl(n[0],n[1]),v=bl(i[0],i[1]),y=[n[f][0]-p[0],n[f][1]-p[1]],m=Math.sqrt(y[0]**2+y[1]**2),w=[y[0]/m,y[1]/m],x=[p[0]+w[0]*h*g,p[1]+w[1]*h*g],C=[d[0]-o[0],d[1]-o[1]],S=Math.sqrt(C[0]**2+C[1]**2),T=[C[0]/S,C[1]/S],_=[o[0]+T[0]*h*g,o[1]+T[1]*h*g],E=[i[u][0]-v[0],i[u][1]-v[1]],b=Math.sqrt(E[0]**2+E[1]**2),D=[E[0]/b,E[1]/b],I=[v[0]+D[0]*h*g,v[1]+D[1]*h*g],P=[d[0]-a[0],d[1]-a[1]],O=Math.sqrt(P[0]**2+P[1]**2),A=[P[0]/O,P[1]/O],V=[a[0]+A[0]*h*g,a[1]+A[1]*h*g];return{arc1Start:x,arc1End:_,arc2Start:I,arc2End:V,arc1Angle:c>90?180-c:c,arc2Angle:l>90?180-l:l}},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,r,n,i="mouse"){const o=e.detail,{element:a}=o,{data:s}=r;r.highlighted=!0;let c=!1,l;n.worldPosition?c=!0:l=s.handles.points.findIndex(u=>u===n);const f=At(a,this.getToolName());this.editData={annotation:r,viewportIdsToRender:f,handleIndex:l,movingTextBox:c},this._activateModify(a),Gt(a),Be(f),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data;if(i.handles.points.length!==4)return;const o=[null,null],a=[null,null];let s=Number.MAX_VALUE;for(let _=0;_<2;_+=1)for(let E=2;E<4;E+=1){const b=Qi(i.handles.points[_],i.handles.points[E]);bc.worldToCanvas(_)),u=[f[0],f[1]],d=[f[2],f[3]],h=bl(u[0],u[1]),g=bl(d[0],d[1]),{arc1Start:p,arc1End:v,arc2End:y,arc2Start:m,arc1Angle:w,arc2Angle:x}=this.getArcsStartEndPoints({firstLine:u,secondLine:d,mid1:h,mid2:g}),{cachedStats:C}=i,S=Object.keys(C);for(let _=0;_{if(this.startedDrawing)return;this.startedDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;if(!(l instanceof lr))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");Gt(a),this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=this.getReferencedImageId(l,s,d,h),p=l.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:g},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},label:"",cachedStats:{}}};ln(v,a);const y=At(a,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:y,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(y),v},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;if(this.startedDrawing&&f.handles.points.length===1){this.editData.handleIndex=1;return}this.startedDrawing=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o),{renderingEngine:d}=u;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a),this.editData=null,this.isDrawing=!1},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c,movingTextBox:l}=this.editData,{data:f}=a;if(l){const{deltaPoints:h}=i,g=h.world,{textBox:p}=f.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(c===void 0){const{deltaPoints:h}=i,g=h.world;f.handles.points.forEach(v=>{v[0]+=g[0],v[1]+=g[1],v[2]+=g[2]}),a.invalidated=!0}else{const{currentPoints:h}=i,g=h.world;f.handles.points[c]=[...g],a.invalidated=!0}this.editData.hasMoved=!0;const u=_e(o),{renderingEngine:d}=u;Be(s)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,this.startedDrawing=!1,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l=this.getTargetId(a),f=a.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let d=0;da.worldToCanvas(O));if(!p.cachedStats[l]||p.cachedStats[l].xValues==null?(p.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(h,f,n)):h.invalidated&&this._throttledCalculateCachedStats(h,f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let w="0";if(l5(i,g,w,m[0],{color:y},0),o=!0,m.length!==2)return o;if(w="1",l5(i,g,w,m[1],{color:y},1),p.cachedStats[l].isUnitless){const O=`${g}-line-1`;Sn(i,g,"1",m[0],m[1],{color:y,width:1,shadow:this.configuration.shadow},O)}else{const O=m[0],A=m[1],V=A[1]-O[1],G=A[0]-O[0],R=p.cachedStats[l].isHorizontal;let N=[0,0];R?N=[O[0]+G,O[1]]:N=[O[0],O[1]+V];let F=`${g}-line-1`,j="1";Sn(i,g,j,m[0],N,{color:y,width:1,shadow:this.configuration.shadow},F),F=`${g}-line-2`,j="2",Sn(i,g,j,m[1],N,{color:y,width:1,lineDash:[1,1],shadow:this.configuration.shadow},F)}const C=this.getLinkedTextBoxStyle(u,h);if(!C.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const S=this.configuration.getTextLines(p,l,this.configuration);if(!p.handles.textBox.hasMoved){const O=m[1];p.handles.textBox.worldPosition=a.canvasToWorld(O)}const T=a.worldToCanvas(p.handles.textBox.worldPosition),E=ho(i,g,"1",S,T,m,{},C),{x:b,y:D,width:I,height:P}=E;p.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([b,D]),topRight:a.canvasToWorld([b+I,D]),bottomLeft:a.canvasToWorld([b,D+P]),bottomRight:a.canvasToWorld([b+I,D+P])}}return o},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,r,n,i){}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;const s=At(o,this.getToolName());let c;n.worldPosition||(c=a.handles.points.findIndex(u=>u===n)),this.editData={handleIndex:c,annotation:r,viewportIdsToRender:s},this._activateModify(o),Gt(o);const l=_e(o),{renderingEngine:f}=l;Be(s),e.preventDefault()}_calculateCachedStats(e,r,n){const i=e.data,{element:o}=n.viewport;if(i.handles.points.length!==2)return;const{cachedStats:a}=i,s=Object.keys(a);for(let l=0;lMath.abs(I),C=[y[0],w[0]],S=[y[1],w[1]],T=[m[0],m[1]]}a[f]={xValues:C,yValues:S,isHorizontal:_,units:T,isUnitless:E}}const c=e.invalidated;return e.invalidated=!1,c&&cn(e,o,Qt.StatsUpdated),a}};fb.toolName="UltrasoundDirectionalTool";let mT=fb;function kTe(t,e,r){const n=t.cachedStats[e],{xValues:i,yValues:o,units:a,isUnitless:s,isHorizontal:c}=n;if(s)return[`${un(i[0])} px`];if(r.displayBothAxesDistances){const l=Math.abs(i[1]-i[0]),f=Math.abs(o[1]-o[0]);return[`${un(l)} ${a[0]}`,`${un(f)} ${a[1]}`]}if(c){const l=Math.abs(i[1]-i[0]);return[`${un(l)} ${a[0]}`]}else{const l=Math.abs(o[1]-o[0]);return[`${un(l)} ${a[1]}`]}}function VTe(t){return(t%360+360)%360}function vT(t,e){const r=e[0]-t[0],n=e[1]-t[1],i=Math.atan2(n,r)*(180/Math.PI);return VTe(i)}function I5(t,e){const r=vT(t,e[0]),n=vT(t,e[1]);return rr[0]-n[0]);const e=[t[0].slice()];for(let r=1;r[Math.max(f,r),Math.min(u,n)]).filter(([f,u])=>u>f);if(i.length===0)return[[r,n]];i.sort((f,u)=>f[0]-u[0]);const o=[];let[a,s]=i[0];for(let f=1;fl&&c.push([l,f]),l=Math.max(l,u);return lI5(t,f)),i=yT(n),o=i.reduce((f,[u,d])=>f+(d-u),0);if(o===0)return 0;const a=[];for(const f of r){const u=I5(t,f),d=QW(u,i);a.push(...d)}const l=yT(a).reduce((f,[u,d])=>f+(d-u),0)/o*100;return Math.min(100,Math.max(0,l))}const{transformIndexToWorld:w7}=Rn,xr=class xr extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:UTe,center:null,innerRadius:null,outerRadius:null,startAngle:null,endAngle:null,bLineColor:"rgb(60, 255, 60)",pleuraColor:"rgb(0, 4, 255)",drawDepthGuide:!0,depth_ratio:.5,depthGuideColor:"rgb(0, 255, 255)",depthGuideThickness:4,depthGuideDashLength:20,depthGuideDashGap:16,depthGuideOpacity:.2,fanOpacity:.1,showFanAnnotations:!0,updatePercentageCallback:null,actions:{undo:{method:"undo",bindings:[{key:"z"}]},redo:{method:"redo",bindings:[{key:"y"}]}}}}){super(e,r),this.pleuraAnnotations=[],this.bLineAnnotations=[],this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;Gt(a),this.isDrawing=!0;const{viewPlaneNormal:f,viewUp:u,position:d}=l.getCamera(),h=this.getReferencedImageId(l,s,f,u),g={highlighted:!0,invalidated:!0,metadata:{...l.getViewReference({points:[s]}),toolName:this.getToolName(),referencedImageId:h,viewUp:u,cameraPosition:d},data:{handles:{points:[[...s],[...s]],activeHandleIndex:null},annotationType:this.getActiveAnnotationType(),label:""}};ln(g,a);const p=At(a,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:p,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),n.preventDefault(),Be(p),g},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i,[f,u]=l.handles.points,d=c.worldToCanvas(f),h=c.worldToCanvas(u),g={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};return Ii([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]])<=a},this.toolSelectedCallback=(n,i)=>{const o=n.detail,{element:a}=o;i.highlighted=!0;const s=At(a,this.getToolName());this.editData={annotation:i,viewportIdsToRender:s,movingTextBox:!1},this._activateModify(a),Gt(a),Be(s),n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;c&&!l||(f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),this.doneEditMemo(),c&&Un(a),this.editData=null,this.isDrawing=!1)},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{viewport:a}=_e(o)||{};if(!a)return;const{annotation:s,viewportIdsToRender:c,handleIndex:l,movingTextBox:f,newAnnotation:u}=this.editData,{data:d}=s;if(this.createMemo(o,s,{newAnnotation:u}),f){const{deltaPoints:h}=i,g=h.world,{textBox:p}=d.handles,{worldPosition:v}=p;v[0]+=g[0],v[1]+=g[1],v[2]+=g[2],p.hasMoved=!0}else if(l===void 0){const{deltaPoints:h}=i,g=h.world,p=d.handles.points;p.every(y=>{const m=[y[0]+g[0],y[1]+g[1],y[2]+g[2]];return this.isInsideFanShape(a,m)})&&(p.forEach(y=>{y[0]+=g[0],y[1]+=g[1],y[2]+=g[2]}),s.invalidated=!0)}else{const{currentPoints:h}=i,g=h.world;this.isInsideFanShape(a,g)&&(d.handles.points[l]=[...g],s.invalidated=!0)}this.editData.hasMoved=!0,Be(c),s.invalidated&&cn(s,o,Qt.HandlesUpdated)},this.cancel=n=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(n),this._deactivateModify(n),Jt(n);const{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:s}=i;return i.highlighted=!1,s.handles.activeHandleIndex=null,Be(o),a&&Un(i),this.editData=null,i.annotationUID}},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this._activateDraw=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;if(!this.getFanShapeGeometryParameters(a))return;const{imageData:c}=a.getImageData()||{};if(!c)return o;this.configuration.drawDepthGuide&&this.drawDepthGuide(i,a);let l=hn(this.getToolName(),s);if(!(l!=null&&l.length)||(l=this.filterInteractableAnnotationsForElement(s,l),!(l!=null&&l.length)))return o;this.getTargetId(a),a.getRenderingEngine();const f={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},u=a.worldToCanvas(w7(c,this.configuration.center)),d=this.getIndexToCanvasRatio(a),h=this.configuration.innerRadius*d,g=this.configuration.outerRadius*d,p=a.getCurrentImageId(),v=l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&T.metadata.referencedImageId===p).map(T=>{const _=T.data.handles.points.map(b=>a.worldToCanvas(b));return I5(u,_)}),y=yT(v),m=[],w=[],x=T=>{const{annotationUID:_,data:E}=T,{points:b,activeHandleIndex:D}=E.handles;f.annotationUID=_;const{color:I,lineWidth:P,lineDash:O,shadow:A}=this.getAnnotationStyle({annotation:T,styleSpecifier:f}),V=b.map(F=>a.worldToCanvas(F));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let G;if(!Kr(_))return;!si(_)&&!this.editData&&D!==null&&(G=[V[D]]),G&&or(i,_,"0",V,{color:this.getColorForLineType(T),fill:this.getColorForLineType(T),lineDash:O,lineWidth:P});const R=`${_}-line`;if(Sn(i,_,"1",V[0],V[1],{color:this.getColorForLineType(T),width:P,lineDash:O,shadow:A},R),this.configuration.showFanAnnotations){const F=I5(u,V);let j=0;T.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE?y7(w,F).forEach(ie=>{QW(ie,y).forEach(ue=>{j++;const ve=j,Me=`${_}-fan-${ve}`,Ue=`2-${ve}`;$S(i,_,Ue,u,h,g,ue[0],ue[1],{color:"transparent",fill:this.getColorForLineType(T),fillOpacity:this.configuration.fanOpacity,width:P,lineDash:O,shadow:A},Me,10),w.push(ue)})}):T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&y7(m,F).forEach((ie,he)=>{j++;const ue=j,ve=`${_}-fan-${ue}`,Me=`2-${ue}`;$S(i,_,Me,u,h,g,ie[0],ie[1],{color:"transparent",fill:this.getColorForLineType(T),fillOpacity:this.configuration.fanOpacity,width:P,lineDash:O,shadow:A},ve,5),m.push(ie)})}};return l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&T.metadata.referencedImageId===p).forEach(T=>{if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;x(T)}),l.filter(T=>T.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE&&T.metadata.referencedImageId===p).forEach(T=>{if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;x(T)}),o=!0,this.configuration.updatePercentageCallback&&a&&this.configuration.updatePercentageCallback(this.calculateBLinePleuraPercentage(a)),o},this.activeAnnotationType=xr.USPleuraBLineAnnotationType.BLINE}static filterAnnotations(e,r=()=>!0){const n=hn(xr.toolName,e);return n!=null&&n.length?n.filter(o=>{const a=o.metadata.referencedImageId;return r(a)}):[]}static countAnnotations(e,r=()=>!0){const n=hn(xr.toolName,e),{viewport:i}=_e(e),o=i.getImageIds(),a=c=>{const l=o.findIndex(f=>f===c);return l===-1?0:l};if(!(n!=null&&n.length))return;const s=new Map;return n.forEach(c=>{const l=c.metadata.referencedImageId;if(!r(l))return;const{annotationType:f}=c.data;let u;s.has(l)?u=s.get(l):u={frame:a(l),bLine:0,pleura:0},f===xr.USPleuraBLineAnnotationType.PLEURA?u.pleura++:f===xr.USPleuraBLineAnnotationType.BLINE&&u.bLine++,s.set(l,u)}),s}static deleteAnnotations(e,r=()=>!1){const n=hn(xr.toolName,e);n!=null&&n.length&&n.forEach(i=>{r(i.metadata.referencedImageId)&&mn(i.annotationUID)})}setActiveAnnotationType(e){this.activeAnnotationType=e}getActiveAnnotationType(){return this.activeAnnotationType}deleteLastAnnotationType(e,r){let n;const i=hn(xr.toolName,e);if(r===xr.USPleuraBLineAnnotationType.PLEURA?n=i.filter(o=>o.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA):r===xr.USPleuraBLineAnnotationType.BLINE&&(n=i.filter(o=>o.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE)),(n==null?void 0:n.length)>0){const o=n.pop();mn(o.annotationUID)}}handleSelectedCallback(e,r,n){const i=e.detail,{element:o}=i,{data:a}=r;r.highlighted=!0;let s=!1,c;n.worldPosition?s=!0:c=a.handles.points.findIndex(f=>f===n);const l=At(o,this.getToolName());this.editData={annotation:r,viewportIdsToRender:l,handleIndex:c,movingTextBox:s},this._activateModify(o),Gt(o),Be(l),e.preventDefault()}isInsideFanShape(e,r){if(!this.getFanShapeGeometryParameters(e))return!1;const{imageData:n}=e.getImageData()||{};if(n){const i=e.worldToCanvas(n.indexToWorld(this.configuration.center)),o=e.worldToCanvas(r),a=vT(i,o);return a>=this.configuration.startAngle&&a<=this.configuration.endAngle}}updateFanGeometryConfiguration(e){e&&(this.isFanShapeGeometryParametersValid(e)&&(this.configuration.center=[e.center[0],e.center[1],0]),this.configuration.innerRadius=e.innerRadius,this.configuration.outerRadius=e.outerRadius,this.configuration.startAngle=e.startAngle,this.configuration.endAngle=e.endAngle)}deriveFanGeometryFromViewport(e){const r=e.getCurrentImageId(),{fanGeometry:n}=k8(r)||{};n&&this.updateFanGeometryConfiguration(n)}isFanShapeGeometryParametersValid(e){return e||(e=this.configuration),(e==null?void 0:e.center)&&(e==null?void 0:e.innerRadius)>0&&(e==null?void 0:e.outerRadius)&&(e==null?void 0:e.startAngle)>0&&(e==null?void 0:e.startAngle)<360&&(e==null?void 0:e.endAngle)>0&&(e==null?void 0:e.endAngle)<360}getFanShapeGeometryParameters(e){if(this.isFanShapeGeometryParametersValid())return!0;if(!this.isFanShapeGeometryParametersValid()){const r=e.getCurrentImageId(),n=wt("ultrasoundFanShapeGeometry",r);this.updateFanGeometryConfiguration(n)}return this.isFanShapeGeometryParametersValid()||this.deriveFanGeometryFromViewport(e),this.isFanShapeGeometryParametersValid()}calculateBLinePleuraPercentage(e){if(!this.getFanShapeGeometryParameters(e))return;const{imageData:r}=e.getImageData()||{};if(!r)return;const{element:n}=e,i=e.worldToCanvas(r.indexToWorld(this.configuration.center)),o=e.getCurrentImageId(),a=hn(this.getToolName(),n)||[],s=a.filter(l=>l.data.annotationType===xr.USPleuraBLineAnnotationType.PLEURA&&l.metadata.referencedImageId===o).map(l=>l.data.handles.points.map(u=>e.worldToCanvas(u))),c=a.filter(l=>l.data.annotationType===xr.USPleuraBLineAnnotationType.BLINE&&l.metadata.referencedImageId===o).map(l=>l.data.handles.points.map(u=>e.worldToCanvas(u)));return FTe(i,s,c)}getColorForLineType(e){const{annotationType:r}=e.data,{bLineColor:n,pleuraColor:i}=this.configuration;return r===xr.USPleuraBLineAnnotationType.BLINE?n:r===xr.USPleuraBLineAnnotationType.PLEURA?i:n}getIndexToCanvasRatio(e){const{imageData:r}=e.getImageData()||{},n=e.worldToCanvas(r.indexToWorld([1,0,0])),i=e.worldToCanvas(r.indexToWorld([2,0,0])),o=[i[0]-n[0],i[1]-n[1]];return Math.sqrt(o[0]*o[0]+o[1]*o[1])}drawDepthGuide(e,r){if(!this.getFanShapeGeometryParameters(r))return;const{imageData:n}=r.getImageData()||{};if(!n)return;const i=g=>g*180/Math.PI,o=g=>g*Math.PI/180,a=g=>r.worldToCanvas(w7(n,g)),s=this.configuration.innerRadius+this.configuration.depth_ratio*(this.configuration.outerRadius-this.configuration.innerRadius),c=this.configuration.startAngle,f=this.configuration.endAngle-c,u=o(f)*s;let d=Math.round(u/(this.configuration.depthGuideDashLength+this.configuration.depthGuideDashGap));d<=0&&(d=Math.max(15,Math.round(f/5)));const h=f/d;for(let g=0;g{const i=Wn(e);if(!i)return;const{FrameOfReferenceUID:o,referencedImageId:a,viewPlaneNormal:s,instance:c,viewport:l}=xr.hydrateBase(xr,i,r,n),{toolInstance:f,...u}=n||{},d={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:r}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:c.getToolName(),viewPlaneNormal:s,FrameOfReferenceUID:o,referencedImageId:a,...u}};ln(d,l.element),Be([l.id])};let wT=xr;function UTe(t,e){return[""]}const Fp=class Fp extends cr{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:BTe,changeTextCallback:GTe,canvasPosition:[10,10],canvasSize:10,handleRadius:"6",seriesLevel:!1,isPoint:!1}}){super(e,r),this.addNewAnnotation=n=>{const i=n.detail,{element:o,currentPoints:a}=i,s=_e(o),{viewport:c}=s,l=a.world,f=this.constructor.createAnnotationForViewport(c,{data:{handles:{points:[[...l]]},seriesLevel:this.configuration.seriesLevel,isPoint:this.configuration.isPoint}});ln(f,o);const u=At(o,this.getToolName());return n.preventDefault(),Be(u),this.configuration.getTextCallback(d=>{if(!d){mn(f.annotationUID),Be(u),this.isDrawing=!1;return}f.data.text=d,Un(f),Be(u)}),this.createMemo(o,f,{newAnnotation:!0}),f},this.isPointNearTool=(n,i,o,a)=>{const s=_e(n),{viewport:c}=s,{data:l}=i;if(!(l!=null&&l.isPoint))return!1;const{canvasPosition:f,canvasSize:u}=this.configuration;return f!=null&&f.length?Math.abs(o[0]-f[0]+u/2)<=u/2&&Math.abs(o[1]-f[1]+u/2)<=u/2:!1},this.toolSelectedCallback=(n,i)=>{i.highlighted=!0,n.preventDefault()},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c}=this.editData,{viewportId:l,renderingEngine:f}=_e(o);this.eventDispatchDetail={viewportId:l,renderingEngineId:f.id},this._deactivateModify(o),Jt(o),c&&this.createMemo(o,a,{newAnnotation:c}),this.editData=null,this.isDrawing=!1,this.doneEditMemo(),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID),Be(s),c&&Un(a)},this.doubleClickCallback=n=>{const i=n.detail,{element:o}=i;let a=hn(this.getToolName(),o);if(a=this.filterInteractableAnnotationsForElement(o,a),!(a!=null&&a.length))return;const s=a.find(l=>this.isPointNearTool(o,l,i.currentPoints.canvas,6));if(!s)return;const c=s;this.createMemo(o,c),this.configuration.changeTextCallback(s,n.detail,this._doneChangingTextCallback.bind(this,o,c)),this.isDrawing=!1,this.doneEditMemo(),n.stopImmediatePropagation(),n.preventDefault()},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,{annotation:c,viewportIdsToRender:l,newAnnotation:f}=this.editData,{data:u}=c;this.createMemo(a,c,{newAnnotation:f}),u.handles.points[0]=[...s],c.invalidated=!0,Be(l)},this._activateModify=n=>{Ye.isInteractingWithTool=!0,n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateModify=n=>{Ye.isInteractingWithTool=!1,n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n,{element:s}=a;let c=hn(this.getToolName(),s);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(s,c),!(c!=null&&c.length)))return o;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let f=0;fw+y),v,{color:g,width:1});if(o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o}return o}}handleSelectedCallback(e,r){const n=e.detail,{element:i}=n;r.highlighted=!0;const o=At(i,this.getToolName());this.editData={annotation:r,viewportIdsToRender:o},this._activateModify(i),Gt(i),Be(o),e.preventDefault()}static setPoint(e,r=!e.data.isPoint,n){e.data.isPoint=r,cn(e,n)}_doneChangingTextCallback(e,r,n){r.data.text=n;const i=At(e,this.getToolName());Be(i),cn(r,e)}cancel(e){if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),Jt(e);const{annotation:r,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=r;return r.highlighted=!1,o.handles.activeHandleIndex=null,Be(n),i&&Un(r),this.editData=null,r.annotationUID}}_isInsideVolume(e,r,n){return hr(e,n)&&hr(r,n)}};Fp.toolName="KeyImage",Fp.dataSeries={data:{seriesLevel:!0}},Fp.dataPoint={data:{isPoint:!0}};let xT=Fp;function BTe(t){return t(prompt("Enter your annotation:"))}function GTe(t,e,r){return r(prompt("Enter your annotation:"))}class ez extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.preMouseDownCallback=n=>this._deleteNearbyAnnotations(n,"mouse"),this.preTouchStartCallback=n=>this._deleteNearbyAnnotations(n,"touch")}_deleteNearbyAnnotations(e,r){const{renderingEngineId:n,viewportId:i,element:o,currentPoints:a}=e.detail,s=Pr(i,n);if(!s)return!1;const c=s._toolInstances,l=[];for(const f in c){const u=c[f];if(typeof u.isPointNearTool!="function"||typeof u.filterInteractableAnnotationsForElement!="function")continue;const d=hn(f,o),h=u.filterInteractableAnnotationsForElement(o,d);if(h)for(const g of h)u.isPointNearTool(o,g,a.canvas,10,r)&&l.push(g.annotationUID)}for(const f of l){na(f);const u=Hr(f);cr.createAnnotationMemo(o,u,{deleting:!0}),mn(f)}return e.preventDefault(),!0}}ez.toolName="Eraser";const{transformWorldToIndex:x7,transformIndexToWorld:WTe}=Rn,Up=class Up extends vi{constructor(e,r){const n=Ui({configuration:{positiveStdDevMultiplier:oW,shrinkExpandIncrement:.1,islandRemoval:{enabled:!1}}},r);super(e,n)}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a,{viewUp:l}=s.getCamera(),{segmentationId:f,segmentIndex:u,labelmapVolumeId:d,referencedVolumeId:h}=await this.getLabelmapSegmentationData(s);if(!this._isOrthogonalView(s,h))throw new Error("Oblique view is not supported yet");return this.growCutData={metadata:{...s.getViewReference({points:[o]}),viewUp:l},segmentation:{segmentationId:f,segmentIndex:u,labelmapVolumeId:d,referencedVolumeId:h},viewportId:s.id,renderingEngineId:c.id},e.preventDefault(),!0}shrink(){this._runLastCommand({shrinkExpandAmount:-this.configuration.shrinkExpandIncrement})}expand(){this._runLastCommand({shrinkExpandAmount:this.configuration.shrinkExpandIncrement})}refresh(){this._runLastCommand()}async getGrowCutLabelmap(e){throw new Error("Not implemented")}async runGrowCut(){const{growCutData:e,configuration:r}=this,{segmentation:{segmentationId:n,segmentIndex:i,labelmapVolumeId:o}}=e,a=$e.getVolume(o);let s=0;const c=async({shrinkExpandAmount:l=0}={})=>{l!==0&&(this.seeds=null),s+=l;const f=Math.max(.1,r.positiveStdDevMultiplier+s),u=l<0?Math.max(1,eT-Math.abs(s)*3):eT+s*3,d={...e,options:{...e.options||{},positiveSeedValue:i,negativeSeedValue:255,positiveStdDevMultiplier:f,negativeSeedMargin:u}},h=await this.getGrowCutLabelmap(d),{isPartialVolume:g}=r;(g?this.applyPartialGrowCutLabelmap:this.applyGrowCutLabelmap)(n,i,a,h),this._removeIslands(d)};await c(),Up.lastGrowCutCommand=c,this.growCutData=null}applyPartialGrowCutLabelmap(e,r,n,i){const o=i.voxelManager.getCompleteScalarDataArray(),a=n.voxelManager,[s,c,l]=i.dimensions,[f,u]=n.dimensions,d=s*c,h=f*u;for(let g=0;g{s===r&&o.setAtIndex(c,s)}),To(e)}_runLastCommand({shrinkExpandAmount:e=0}={}){const r=Up.lastGrowCutCommand;r&&r({shrinkExpandAmount:e})}async getLabelmapSegmentationData(e){const r=cu(e.id);if(!r)throw new Error("No active segmentation found");const{segmentationId:n}=r,i=Da(n),{representationData:o}=Vn(n),a=o[Vt.Labelmap];let{volumeId:s,referencedVolumeId:c}=a;if(!s){const l=e.getImageIds();if(Cf(l))s=ig(n).volumeId;else{const f=e.getCurrentImageId(),u=$e.getImage(f),d=d1(f);c=this._createFakeVolume([u.imageId,d.imageId]).volumeId;const g=Tf(e.id,n),p=d1(g);s=this._createFakeVolume([g,p.imageId]).volumeId}}if(!c){const{imageIds:l}=a,f=l.map(h=>$e.getImage(h).referencedImageId),u=$e.generateVolumeId(f),d=$e.getVolume(u);c=d?d.volumeId:(await cm(u,f)).volumeId}return{segmentationId:n,segmentIndex:i,labelmapVolumeId:s,referencedVolumeId:c}}_createFakeVolume(e){const r=$e.generateVolumeId(e),n=$e.getVolume(r);if(n)return n;const i=am(e,r),o=i.spacing;o[2]===0&&(o[2]=1);const a=new Ud({volumeId:r,dataType:i.dataType,metadata:structuredClone(i.metadata),dimensions:i.dimensions,spacing:i.spacing,origin:i.origin,direction:i.direction,referencedVolumeId:i.referencedVolumeId,imageIds:i.imageIds,referencedImageIds:i.referencedImageIds});return $e.putVolumeSync(r,a),a}_isOrthogonalView(e,r){const i=$e.getVolume(r).imageData,o=e.getCamera(),{ijkVecColDir:a,ijkVecSliceDir:s}=Cw(i,o);return[a,s].every(c=>Zt(Math.abs(c[0]),1)||Zt(Math.abs(c[1]),1)||Zt(Math.abs(c[2]),1))}getRemoveIslandData(e){}_removeIslands(e){const{islandRemoval:r}=this.configuration;if(!r.enabled)return;const{segmentation:{segmentIndex:n,labelmapVolumeId:i},renderingEngineId:o,viewportId:a}=e,s=$e.getVolume(i),c=this.getRemoveIslandData(e);if(!c)return;const[l,f]=s.dimensions,u=l*f,{worldIslandPoints:d=[],islandPointIndexes:h=[]}=c;let g=[...(c==null?void 0:c.ijkIslandPoints)??[]];const v=jr(o).getViewport(a),{voxelManager:y}=s,m=new Pd;g=g.concat(d.map(w=>x7(s.imageData,w))),g=g.concat(h.map(w=>{const x=w%l,C=Math.floor(w/l)%f,S=Math.floor(w/u);return[x,C,S]})),m.initialize(v,y,{points:g,previewSegmentIndex:n,segmentIndex:n}),m.floodFillSegmentIsland(),m.removeExternalIslands(),m.removeInternalIslands()}getSegmentStyle({segmentationId:e,viewportId:r,segmentIndex:n}){return mB({segmentationId:e,segmentIndex:n,viewportId:r})}};Up.lastGrowCutCommand=null;let Rh=Up;Rh.toolName="GrowCutBaseTool";const db=class db extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positiveSeedVariance:.5,negativeSeedVariance:.9}}){super(e,r),this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,{world:s}=a,c=_e(o),{viewport:l}=c;this.growCutData.circleBorderPoint=s,Be([l.id])},this._endCallback=async n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a;this.runGrowCut(),this._deactivateDraw(o),this.growCutData=null,Jt(o),Be([s.id])},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a;return await super.preMouseDownCallback(e),Object.assign(this.growCutData,{circleCenterPoint:o,circleBorderPoint:o}),this._activateDraw(n),Gt(n),Be([s.id]),!0}async getGrowCutLabelmap(e){const{segmentation:{referencedVolumeId:r},renderingEngineId:n,viewportId:i,circleCenterPoint:o,circleBorderPoint:a,options:s}=e,l=jr(n).getViewport(i),f=yh(Mn(Ke(),o,a));return rW(r,{center:o,radius:f},l,s)}_activateDraw(e){e.addEventListener(k.MOUSE_UP,this._endCallback),e.addEventListener(k.MOUSE_DRAG,this._dragCallback),e.addEventListener(k.MOUSE_CLICK,this._endCallback)}renderAnnotation(e,r){if(!this.growCutData)return;const{viewport:n}=e,{segmentation:i,circleCenterPoint:o,circleBorderPoint:a}=this.growCutData,s=n.worldToCanvas(o),c=n.worldToCanvas(a),l=xs(rn(),c,s),f=jY(l);if(Zt(f,0))return;const u="growcut",d="0",{color:h}=this.getSegmentStyle({segmentationId:i.segmentationId,segmentIndex:i.segmentIndex,viewportId:n.id});ia(r,u,d,s,f,{color:h})}};db.toolName="RegionSegment";let CT=db;const hb=class hb extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!1,positiveSeedVariance:.4,negativeSeedVariance:.9,subVolumePaddingPercentage:.1,islandRemoval:{enabled:!1}}}){super(e,r),this.mouseTimer=null,this.allowedToProceed=!1}mouseMoveCallback(e){if(this.mode!==Fn.Active)return;const r=e.detail,{currentPoints:n,element:i}=r,{world:o}=n;i.style.cursor="default",this.mouseTimer!==null&&(window.clearTimeout(this.mouseTimer),this.mouseTimer=null),this.mouseTimer=window.setTimeout(()=>{this.onMouseStable(e,o,i)},this.configuration.mouseStabilityDelay||500)}async onMouseStable(e,r,n){await super.preMouseDownCallback(e);const i=$e.getVolume(this.growCutData.segmentation.referencedVolumeId),o=aW(i,r,{})||{positiveSeedIndices:new Set,negativeSeedIndices:new Set},{positiveSeedIndices:a,negativeSeedIndices:s}=o;let c;a.size/s.size>20||s.size<30?(c="not-allowed",this.allowedToProceed=!1):(c="copy",this.allowedToProceed=!0);const l=_e(n);n&&(n.style.cursor=c,requestAnimationFrame(()=>{n.style.cursor!==c&&(n.style.cursor=c)})),this.allowedToProceed&&(this.seeds=o),l&&l.viewport&&l.viewport.render()}async preMouseDownCallback(e){if(!this.allowedToProceed)return!1;const r=e.detail,{currentPoints:n,element:i}=r;_e(i)&&(i.style.cursor="wait",requestAnimationFrame(()=>{i.style.cursor!=="wait"&&(i.style.cursor="wait")}));const{world:a}=n;return await super.preMouseDownCallback(e),this.growCutData=Ui(this.growCutData,{worldPoint:a,islandRemoval:{worldIslandPoints:[a]}}),this.growCutData.worldPoint=a,this.growCutData.islandRemoval={worldIslandPoints:[a]},await this.runGrowCut(),i&&(i.style.cursor="default"),!0}getRemoveIslandData(e){const{worldPoint:r}=e;return{worldIslandPoints:[r]}}async getGrowCutLabelmap(e){const{segmentation:{referencedVolumeId:r},worldPoint:n,options:i}=e,{subVolumePaddingPercentage:o}=this.configuration,a={...i,subVolumePaddingPercentage:o,seeds:this.seeds};return sW({referencedVolumeId:r,worldPosition:n,options:a})}};hb.toolName="RegionSegmentPlus";let ST=hb;const zTe=[-1/0,-995],$Te=[0,1900],jTe=[1e3,1900],{transformWorldToIndex:Yv,transformIndexToWorld:GC}=Rn;class tz extends Rh{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{isPartialVolume:!0,positivePixelRange:$Te,negativePixelRange:zTe,islandRemoval:{enabled:!0,islandPixelRange:jTe}}}){super(e,r),this._dragCallback=n=>{const i=n.detail,{element:o,currentPoints:a}=i,{world:s}=a,c=_e(o),{viewport:l}=c,f=this._getHorizontalLineWorldPoints(c,s);this.growCutData.horizontalLines[1]=f,Be([l.id])},this._endCallback=async n=>{const i=n.detail,{element:o}=i,a=_e(o),{viewport:s}=a;await this.runGrowCut(),this._deactivateDraw(o),this.growCutData=null,Jt(o),Be([s.id])},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback)}}async preMouseDownCallback(e){const r=e.detail,{element:n,currentPoints:i}=r,{world:o}=i,a=_e(n),{viewport:s,renderingEngine:c}=a,l=this._getHorizontalLineWorldPoints(a,o);return await super.preMouseDownCallback(e),this.growCutData.horizontalLines=[l,l],this._activateDraw(n),Gt(n),Be([s.id]),!0}renderAnnotation(e,r){if(!this.growCutData)return;const{segmentation:n,horizontalLines:i}=this.growCutData;if(i.length!==2)return;const{viewport:o}=e,{segmentationId:a,segmentIndex:s}=n,[c,l]=i,[f,u]=c,[d,h]=l,g=[f,u,h,d].map(S=>o.worldToCanvas(S)),p="growCutRect",v="0",{color:y,fillColor:m,lineWidth:w,fillOpacity:x,lineDash:C}=this.getSegmentStyle({segmentationId:a,segmentIndex:s,viewportId:o.id});gc(r,p,v,g,{color:y,fillColor:m,fillOpacity:x,lineWidth:w,lineDash:C,closePath:!0})}async getGrowCutLabelmap(e){const{segmentation:{segmentIndex:r,referencedVolumeId:n},renderingEngineId:i,viewportId:o,horizontalLines:a}=e,c=jr(i).getViewport(o),[l,f]=a,u=[l[0],l[1],f[1],f[0]],d=$e.getVolume(n),{topLeft:h,bottomRight:g}=this._getWorldBoundingBoxFromProjectedSquare(c,u),p=Yv(d.imageData,h),v=Yv(d.imageData,g),y={boundingBox:{ijkTopLeft:p,ijkBottomRight:v}},m=this.configuration,w={positiveSeedValue:r,negativeSeedValue:255,negativePixelRange:m.negativePixelRange,positivePixelRange:m.positivePixelRange};return iW(n,y,w)}getRemoveIslandData(){const{segmentation:{segmentIndex:e,referencedVolumeId:r,labelmapVolumeId:n}}=this.growCutData,i=$e.getVolume(r),o=$e.getVolume(n),a=i.voxelManager.getCompleteScalarDataArray(),s=o.voxelManager.getCompleteScalarDataArray(),{islandPixelRange:c}=this.configuration.islandRemoval,l=[];for(let f=0,u=s.length;f=c[0]&&d<=c[1]&&l.push(f)}return{islandPointIndexes:l}}_activateDraw(e){e.addEventListener(k.MOUSE_UP,this._endCallback),e.addEventListener(k.MOUSE_DRAG,this._dragCallback),e.addEventListener(k.MOUSE_CLICK,this._endCallback)}_projectWorldPointAcrossSlices(e,r,n){const i=this._getViewportVolume(e),{dimensions:o}=i,a=Yv(i.imageData,r),s=n.findIndex(f=>Zt(Math.abs(f),1));if(s===-1)throw new Error("Non-orthogonal direction vector");const c=[...a],l=[...a];return c[s]=0,l[s]=o[s]-1,[c,l]}_getCuboidIJKEdgePointsFromProjectedWorldPoint(e,r){const{viewPlaneNormal:n}=e.getCamera();return this._projectWorldPointAcrossSlices(e,r,n)}_getWorldCuboidCornerPoints(e,r){const n=[],i=this._getViewportVolume(e);return r.forEach(o=>{const s=this._getCuboidIJKEdgePointsFromProjectedWorldPoint(e,o).map(c=>GC(i.imageData,c));n.push(...s)}),n}_getWorldBoundingBoxFromProjectedSquare(e,r){const n=this._getWorldCuboidCornerPoints(e,r),i=[...n[0]],o=[...n[0]];return n.forEach(a=>{RY(i,i,a),LY(o,o,a)}),{topLeft:i,bottomRight:o}}_getViewportVolume(e){if(!(e instanceof Tr))throw new Error("Viewport is not a BaseVolumeViewport");const r=e.getAllVolumeIds()[0];return $e.getVolume(r)}_getHorizontalLineIJKPoints(e,r){const{viewport:n}=e,i=this._getViewportVolume(n),{dimensions:o}=i,a=Yv(i.imageData,r),{viewUp:s,viewPlaneNormal:c}=n.getCamera(),f=kn(Ke(),s,c).findIndex(h=>Zt(Math.abs(h),1)),u=[...a],d=[...a];return u[f]=0,d[f]=o[f]-1,[u,d]}_getHorizontalLineWorldPoints(e,r){const{viewport:n}=e,i=this._getViewportVolume(n),[o,a]=this._getHorizontalLineIJKPoints(e,r),s=GC(i.imageData,o),c=GC(i.imageData,a);return[s,c]}}tz.toolName="WholeBodySegment";function HTe(t,e,r=!0){const n=Object.assign({},e,{segmentIndex:0});E8(t,n)}function KTe(t,e){HTe(t,e,!0)}class nz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:E8,ERASE_INSIDE:KTe},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c;this.isDrawing=!0;const f=l.getCamera(),{viewPlaneNormal:u,viewUp:d}=f,h=cu(l.id);if(!h)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:g}=h,p=Da(g),v=zd(g),y=iu(l.id,g,p),{representationData:m}=Vn(g),w=m[Vt.Labelmap],x={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...u],viewUp:[...d],FrameOfReferenceUID:l.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:y},data:{handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null}}},C=At(a,this.getToolName());if(this.editData={annotation:x,segmentIndex:p,segmentationId:g,segmentsLocked:v,segmentColor:y,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},l instanceof Tr){const{volumeId:S}=w,T=$e.getVolume(S);this.editData={...this.editData,volumeId:S,referencedVolumeId:T.referencedVolumeId}}else{const S=Tf(l.id,g);this.editData={...this.editData,imageId:S}}return this._activateDraw(a),Gt(a),n.preventDefault(),Be(C),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,handleIndex:c}=this.editData,{data:l}=a,{currentPoints:f}=i,u=_e(o),{worldToCanvas:d,canvasToWorld:h}=u.viewport,g=f.world,{points:p}=l.handles;p[c]=[...g];let v,y,m,w,x,C,S,T;switch(c){case 0:case 3:v=d(p[0]),w=d(p[3]),y=[w[0],v[1]],m=[v[0],w[1]],C=h(y),S=h(m),p[1]=C,p[2]=S;break;case 1:case 2:y=d(p[1]),m=d(p[2]),v=[m[0],y[1]],w=[y[0],m[1]],x=h(v),T=h(w),p[0]=x,p[3]=T;break}a.invalidated=!0,this.editData.hasMoved=!0,Be(s)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=a;if(s&&!c)return;l.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const f=_e(o),u={...this.editData,points:l.handles.points,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(f,u),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{annotation:s}=this.editData,c=s.metadata,l=s.annotationUID,f=s.data,{points:u}=f.handles,d=u.map(p=>a.worldToCanvas(p)),h=`rgb(${c.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(Em(i,l,"0",d[0],d[3],{color:h}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}nz.toolName="RectangleScissor";class rz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Jw,ERASE_INSIDE:jG},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=o.canvas,l=_e(a),{viewport:f}=l;this.isDrawing=!0;const u=f.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=cu(f.id);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:p}=g,v=Da(p),y=zd(p),m=iu(f.id,p,v),{representationData:w}=Vn(p),x=w.Labelmap;if(!x)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const C={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:f.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:m},data:{handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},S=[f.id];if(this.editData={annotation:C,centerCanvas:c,segmentIndex:v,segmentationId:p,segmentsLocked:y,segmentColor:m,viewportIdsToRender:S,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null},f instanceof Tr){const{volumeId:T}=x,_=$e.getVolume(T);this.editData={...this.editData,volumeId:T,referencedVolumeId:_.referencedVolumeId}}else{const T=Tf(f.id,p);this.editData={...this.editData,imageId:T}}return this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h,centerCanvas:g}=this.editData,{data:p}=d,v=Math.abs(s[0]-g[0]),y=Math.abs(s[1]-g[1]),m=Math.sqrt(v*v+y*y),w=[g[0],g[1]+m],x=[g[0],g[1]-m],C=[g[0]-m,g[1]],S=[g[0]+m,g[1]];p.handles.points=[u(w),u(x),u(C),u(S)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=a,{viewPlaneNormal:f,viewUp:u}=a.metadata;if(s&&!c)return;l.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const d=_e(o),h={...this.editData,points:l.handles.points,viewPlaneNormal:f,viewUp:u,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,h),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback),n.addEventListener(k.TOUCH_END,this._endCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{viewportIdsToRender:s}=this.editData;if(!s.includes(a.id))return o;const{annotation:c}=this.editData,l=c.metadata,f=c.annotationUID,u=c.data,{points:d}=u.handles,h=d.map(x=>a.worldToCanvas(x)),g=h[0],p=h[1],v=[Math.floor((g[0]+p[0])/2),Math.floor((g[1]+p[1])/2)],y=Math.abs(g[1]-Math.floor((g[1]+p[1])/2)),m=`rgb(${l.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(ia(i,f,"0",v,y,{color:m}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}rz.toolName="CircleScissor";class iz extends Rd{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:zG,ERASE_INSIDE:$G},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}){super(e,r),this.preMouseDownCallback=n=>{if(this.isDrawing===!0)return;this.doneEditMemo();const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=o.canvas,l=_e(a),{viewport:f}=l;this.isDrawing=!0;const u=f.getCamera(),{viewPlaneNormal:d,viewUp:h}=u,g=cu(f.id);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:p}=g,v=Da(p),y=zd(p),m=iu(f.id,p,v);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:f.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:m},data:{invalidated:!0,handles:{points:[[...s],[...s],[...s],[...s]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},x=[f.id];this.editData={annotation:w,centerCanvas:c,segmentIndex:v,segmentationId:p,segmentsLocked:y,segmentColor:m,toolGroupId:this.toolGroupId,viewportIdsToRender:x,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,volumeId:null,referencedVolumeId:null,imageId:null};const{representationData:C}=Vn(p),S=this.getEditData({viewport:f,representationData:C,segmentsLocked:y,segmentationId:p});return this.editData={...this.editData,...S},this._activateDraw(a),Gt(a),n.preventDefault(),Be(x),!0},this._dragCallback=n=>{this.isDrawing=!0;const i=n.detail,{element:o}=i,{currentPoints:a}=i,s=a.canvas,c=_e(o),{renderingEngine:l,viewport:f}=c,{canvasToWorld:u}=f,{annotation:d,viewportIdsToRender:h,centerCanvas:g}=this.editData,{data:p}=d,v=Math.abs(s[0]-g[0]),y=Math.abs(s[1]-g[1]),m=Math.sqrt(v*v+y*y),w=[g[0],g[1]+m],x=[g[0],g[1]-m],C=[g[0]-m,g[1]],S=[g[0]+m,g[1]];p.handles.points=[u(w),u(x),u(C),u(S)],d.invalidated=!0,this.editData.hasMoved=!0,Be(h)},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,newAnnotation:s,hasMoved:c,segmentIndex:l,segmentsLocked:f}=this.editData,{data:u}=a,{viewPlaneNormal:d,viewUp:h}=a.metadata;if(s&&!c)return;a.highlighted=!1,u.handles.activeHandleIndex=null,this._deactivateDraw(o),Jt(o);const g=_e(o),p={...this.editData,points:u.handles.points,segmentIndex:l,segmentsLocked:f,viewPlaneNormal:d,viewUp:h,createMemo:this.createMemo.bind(this)};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(g,p),this.doneEditMemo()},this._activateDraw=n=>{n.addEventListener(k.MOUSE_UP,this._endCallback),n.addEventListener(k.MOUSE_DRAG,this._dragCallback),n.addEventListener(k.MOUSE_CLICK,this._endCallback),n.addEventListener(k.MOUSE_MOVE,this._dragCallback),n.addEventListener(k.TOUCH_END,this._endCallback),n.addEventListener(k.TOUCH_TAP,this._endCallback),n.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=n=>{n.removeEventListener(k.MOUSE_UP,this._endCallback),n.removeEventListener(k.MOUSE_DRAG,this._dragCallback),n.removeEventListener(k.MOUSE_CLICK,this._endCallback),n.removeEventListener(k.MOUSE_MOVE,this._dragCallback),n.removeEventListener(k.TOUCH_END,this._endCallback),n.removeEventListener(k.TOUCH_DRAG,this._dragCallback),n.removeEventListener(k.TOUCH_TAP,this._endCallback)},this.renderAnnotation=(n,i)=>{let o=!1;if(!this.editData)return o;const{viewport:a}=n,{viewportIdsToRender:s}=this.editData;if(!s.includes(a.id))return o;const{annotation:c}=this.editData,l=c.metadata,f=c.annotationUID,u=c.data,{points:d}=u.handles,h=d.map(x=>a.worldToCanvas(x)),g=h[0],p=h[1],v=[Math.floor((g[0]+p[0])/2),Math.floor((g[1]+p[1])/2)],y=Math.abs(g[1]-Math.floor((g[1]+p[1])/2)),m=`rgb(${l.segmentColor.slice(0,3)})`;return a.getRenderingEngine()?(ia(i,f,"0",v,y,{color:m}),o=!0,o):(console.warn("Rendering Engine has been destroyed"),o)}}}iz.toolName="SphereScissor";const{transformWorldToIndex:kg}=Rn;class oz extends _5{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{storePointData:!1,numSlicesToPropagate:10,calculatePointsInsideVolume:!0,getTextLines:qTe,statsCalculator:dl,showTextBox:!1,throttleTimeout:100}}){super(e,r),this.isHandleOutsideImage=!1,this.addNewAnnotation=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l,renderingEngine:f}=c;this.isDrawing=!0;const u=l.getCamera(),{viewPlaneNormal:d,viewUp:h}=u;let g,p,v;if(l instanceof lr)throw new Error("Stack Viewport Not implemented");{const T=this.getTargetId(l);v=yl(T),p=$e.getVolume(v),g=Zl(p,s,d)}const y=xf(p,d),m=this._getStartCoordinate(s,y,d),w=this._getEndCoordinate(s,y,d),x=l.getFrameOfReferenceUID(),C={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:x,referencedImageId:g,volumeId:v,spacingInNormal:y,enabledElement:c},data:{label:"",startCoordinate:m,endCoordinate:w,handles:{textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},points:[[...s],[...s]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[],statistics:[]},labelmapUID:null}};this._computeProjectionPoints(C,p),ln(C,a);const S=At(a,this.getToolName());return this.editData={annotation:C,viewportIdsToRender:S,newAnnotation:!0,hasMoved:!1},this._activateDraw(a),Gt(a),n.preventDefault(),Be(S),C},this._endCallback=n=>{const i=n.detail,{element:o}=i,{annotation:a,viewportIdsToRender:s,newAnnotation:c,hasMoved:l}=this.editData,{data:f}=a;if(c&&!l)return;a.highlighted=!1,f.handles.activeHandleIndex=null,this._deactivateModify(o),this._deactivateDraw(o),Jt(o);const u=_e(o);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(a.annotationUID);const d=this.getTargetId(u.viewport),h=$e.getVolume(d.split(/volumeId:|\?/)[1]);this._computePointsInsideVolume(a,h,d,u),Be(s),c?Un(a):cn(a,o)},this.renderAnnotation=(n,i)=>{let o=!1;const{viewport:a}=n;let s=hn(this.getToolName(),a.element);if(!(s!=null&&s.length))return o;s=zw(s,a.getCamera());const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id};for(let l=0;la.worldToCanvas(he)),S=C[0],T=Zu(C),{centerPointRadius:_}=this.configuration,E=rh(C),b=a.getCamera().focalPoint,D=a.getCamera().viewPlaneNormal;let I=g,P=p;Array.isArray(g)&&(I=this._getCoordinateForViewplaneNormal(I,D),d.startCoordinate=I),Array.isArray(p)&&(P=this._getCoordinateForViewplaneNormal(P,D),d.endCoordinate=P);const O=Bu(d.startCoordinate),A=Bu(d.endCoordinate),V=this._getCoordinateForViewplaneNormal(b,D),G=Bu(V);if(GMath.max(O,A))continue;const R=Bu((d.startCoordinate+d.endCoordinate)/2);let N=!1;if(G===R&&(N=!0),d.handles.points[0][this._getIndexOfCoordinatesForViewplaneNormal(D)]=R,f.invalidated&&this._throttledCalculateCachedStats(f,n),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let F;if(!Kr(u))continue;!si(u)&&!this.editData&&y!==null&&N&&(F=[C[y]]),F&&or(i,u,"0",F,{color:x});let j=m,te=w;N?(j=m,te=[]):te=[5,5];const ie="0";if(ia(i,u,ie,S,T,{color:x,lineDash:te,lineWidth:j}),_>0&&T>3*_&&ia(i,u,`${ie}-center`,S,_,{color:x,lineDash:w,lineWidth:m}),o=!0,this.configuration.showTextBox){const he=this.getLinkedTextBoxStyle(c,f);if(!he.visibility){d.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}const ue=this.configuration.getTextLines(d,{metadata:h});if(!ue||ue.length===0)continue;let ve;d.handles.textBox.hasMoved||(ve=Oa(E),d.handles.textBox.worldPosition=a.canvasToWorld(ve));const Me=a.worldToCanvas(d.handles.textBox.worldPosition),be=ho(i,u,"1",ue,Me,C,{},he),{x:B,y:M,width:$,height:W}=be;d.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([B,M]),topRight:a.canvasToWorld([B+$,M]),bottomLeft:a.canvasToWorld([B,M+W]),bottomRight:a.canvasToWorld([B+$,M+W])}}}return o},this.configuration.calculatePointsInsideVolume?this._throttledCalculateCachedStats=Wo(this._calculateCachedStatsTool,this.configuration.throttleTimeout,{trailing:!0}):this._throttledCalculateCachedStats=Yh(this._calculateCachedStatsTool,this.configuration.throttleTimeout)}_computeProjectionPoints(e,r){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:s}=r,{startCoordinate:c,endCoordinate:l}=n,{points:f}=n.handles,u=kg(s,f[0]),d=kg(s,f[0]),h=vs(f),g=Ke();s.indexToWorldVec3(u,g);const p=Ke();s.indexToWorldVec3(d,p),this._getIndexOfCoordinatesForViewplaneNormal(o)==2?(g[2]=c,p[2]=l,h[0][2]=c,h[1][2]=c):this._getIndexOfCoordinatesForViewplaneNormal(o)==0?(g[0]=c,p[0]=l,h[0][0]=c,h[1][0]=c):this._getIndexOfCoordinatesForViewplaneNormal(o)==1&&(g[1]=c,p[1]=l,h[0][1]=c,h[1][1]=c);const v=Qi(g,p),y=[];for(let m=0;m{const x=Ke();return On(x,w,o,m),Array.from(x)}));n.cachedStats.projectionPoints=y}_computePointsInsideVolume(e,r,n,i){var b,D,I;const{data:o,metadata:a}=e,{viewPlaneNormal:s,viewUp:c}=a,{viewport:l}=i,f=o.cachedStats.projectionPoints,u=[[]],d=this.getTargetImageData(n),h=o.handles.points.map(P=>l.worldToCanvas(P)),[g,p]=rh(h),v=l.canvasToWorld(g),y=l.canvasToWorld(p),{worldWidth:m,worldHeight:w}=Zh(s,c,v,y),x=Ia(d,o.handles),C=c8(d),S=Math.abs(Math.PI*(m/x.scale/2)*(w/C/x.scale/2)),T={isPreScaled:lu(l,n),isSuvScaled:this.isSuvScaled(l,n,e.metadata.referencedImageId)},_=uu(a.Modality,e.metadata.referencedImageId,T);for(let P=0;Pl.worldToCanvas(be)),[V,G]=rh(A),R=l.canvasToWorld(V),N=l.canvasToWorld(G),F=R,j=N,{dimensions:te,imageData:ie,voxelManager:he}=r,ue=kg(ie,F),ve=kg(ie,O),Me=this._getIndexOfCoordinatesForViewplaneNormal(s);ue[0]=Math.floor(ue[0]),ue[1]=Math.floor(ue[1]),ue[2]=Math.floor(ue[2]),ue[Me]=ve[Me];const Ue=kg(ie,j);if(Ue[0]=Math.floor(Ue[0]),Ue[1]=Math.floor(Ue[1]),Ue[2]=Math.floor(Ue[2]),Ue[Me]=ve[Me],this._isInsideVolume(ue,Ue,te)){const be=Math.min(ue[0],Ue[0]),B=Math.max(ue[0],Ue[0]),M=Math.min(ue[1],Ue[1]),$=Math.max(ue[1],Ue[1]),W=Math.min(ue[2],Ue[2]),Y=Math.max(ue[2],Ue[2]),ne=[[be,B],[M,$],[W,Y]],Se={center:O,xRadius:Math.abs(R[0]-N[0])/2,yRadius:Math.abs(R[1]-N[1])/2,zRadius:Math.abs(R[2]-N[2])/2},Re=he.forEach(this.configuration.statsCalculator.statsCallback,{isInObject:je=>Aw(Se,je),boundsIJK:ne,imageData:ie,returnPoints:this.configuration.storePointData});u.push(Re)}}const E=this.configuration.statsCalculator.getStatistics();o.cachedStats.pointsInVolume=u,o.cachedStats.statistics={Modality:a.Modality,area:S,mean:(b=E.mean)==null?void 0:b.value,stdDev:(D=E.stdDev)==null?void 0:D.value,max:(I=E.max)==null?void 0:I.value,statsArray:E.array,areaUnit:x.areaUnit,modalityUnit:_}}_calculateCachedStatsTool(e,r){const n=e.data,{viewport:i}=r,{cachedStats:o}=n,a=this.getTargetId(i),s=$e.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,s),this._computePointsInsideVolume(e,s,a,r),e.invalidated=!1,cn(e,i.element),o}_getStartCoordinate(e,r,n){const i=this.configuration.numSlicesToPropagate,o=Math.round(i/2),a=Ke();return On(a,e,n,o*-r),this._getCoordinateForViewplaneNormal(a,n)}_getEndCoordinate(e,r,n){const i=this.configuration.numSlicesToPropagate,o=i-Math.round(i/2),a=Ke();return On(a,e,n,o*r),this._getCoordinateForViewplaneNormal(a,n)}_getIndexOfCoordinatesForViewplaneNormal(e){const r=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return r.indexOf(Math.max(...r))}_getCoordinateForViewplaneNormal(e,r){const n=this._getIndexOfCoordinatesForViewplaneNormal(r);return e[n]}}function qTe(t,e={}){const r=t.cachedStats.statistics,{area:n,mean:i,max:o,stdDev:a,areaUnit:s,modalityUnit:c}=r;if(i===void 0)return;const l=[];return l.push(`Area: ${un(n)} ${s}`),l.push(`Mean: ${un(i)} ${c}`),l.push(`Max: ${un(o)} ${c}`),l.push(`Std Dev: ${un(a)} ${c}`),l}oz.toolName="CircleROIStartEndThreshold";const{transformWorldToIndex:C7,isEqual:WC}=Rn;class az extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"]}){super(e,r),this.preMouseDownCallback=n=>{const i=n.detail,{currentPoints:o,element:a}=i,s=o.world,c=_e(a),{viewport:l}=c,f=l.getCamera(),{viewPlaneNormal:u}=f,d=cu(l.id);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:h}=d,g=Da(h),p=zd(h),{representationData:v}=Vn(h);let y,m,w,x;if(this.doneEditMemo(),l instanceof Tr){const{volumeId:A}=v[Vt.Labelmap],V=$e.getVolume(A);({dimensions:y,direction:m}=V),x=V.voxelManager,w=C7(V.imageData,s)}else{const A=Tf(l.id,h);if(!A)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const{imageData:V}=l.getImageData();y=V.getDimensions(),m=V.getDirection(),x=$e.getImage(A).voxelManager,w=C7(V,s)}const C=this.getFixedDimension(u,m);if(C===void 0){console.warn("Oblique paint fill not yet supported");return}const{floodFillGetter:S,getLabelValue:T,getScalarDataPositionFromPlane:_,inPlaneSeedPoint:E,fixedDimensionValue:b}=this.generateHelpers(x,y,w,C);if(w[0]<0||w[0]>=y[0]||w[1]<0||w[1]>=y[1]||w[2]<0||w[2]>=y[2])return;const D=T(w[0],w[1],w[2]);if(p.includes(D))return;const I=_8(S,E),{flooded:P}=I;P.forEach(A=>{const V=_(A[0],A[1]);x.setAtIndex(V,g)});const O=this.getFramesModified(C,b,I);return To(h,O),!0},this.getFramesModified=(n,i,o)=>{const{flooded:a}=o;if(n===2)return[i];let s=1/0,c=-1/0;for(let f=0;fc&&(c=u)}const l=[];for(let f=s;f<=c;f++)l.push(f);return l},this.generateHelpers=(n,i,o,a=2)=>{let s,c;switch(a){case 0:s=o[0],c=[o[1],o[2]];break;case 1:s=o[1],c=[o[0],o[2]];break;case 2:s=o[2],c=[o[0],o[1]];break;default:throw new Error(`Invalid fixedDimension: ${a}`)}const l=(h,g,p)=>n.toIndex([h,g,p]),f=(h,g,p)=>n.getAtIJK(h,g,p),u=this.generateFloodFillGetter(i,a,s,f);return{getScalarDataPositionFromPlane:this.generateGetScalarDataPositionFromPlane(l,a,s),getLabelValue:f,floodFillGetter:u,inPlaneSeedPoint:c,fixedDimensionValue:s}},this.generateFloodFillGetter=(n,i,o,a)=>{let s;switch(i){case 0:s=(c,l)=>{if(!(c>=n[1]||c<0||l>=n[2]||l<0))return a(o,c,l)};break;case 1:s=(c,l)=>{if(!(c>=n[0]||c<0||l>=n[2]||l<0))return a(c,o,l)};break;case 2:s=(c,l)=>{if(!(c>=n[0]||c<0||l>=n[1]||l<0))return a(c,l,o)};break;default:throw new Error(`Invalid fixedDimension: ${i}`)}return s},this.generateGetScalarDataPositionFromPlane=(n,i,o)=>{let a;switch(i){case 0:a=(s,c)=>n(o,s,c);break;case 1:a=(s,c)=>n(s,o,c);break;case 2:a=(s,c)=>n(s,c,o);break;default:throw new Error(`Invalid fixedDimension: ${i}`)}return a}}getFixedDimension(e,r){const n=r.slice(0,3),i=r.slice(3,6),o=r.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],s=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(WC(a,s))return 0;const c=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(WC(a,c))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];if(WC(a,l))return 2}}az.toolName="PaintFill";const XTe={TOP_LEFT:"TOP_LEFT",TOP_RIGHT:"TOP_RIGHT",BOTTOM_LEFT:"BOTTOM_LEFT",BOTTOM_RIGHT:"BOTTOM_RIGHT"};var U8={Corners:XTe};const{vtkErrorMacro:zC}=J,{Corners:Jv}=U8;function YTe(t,e){e.classHierarchy.push("vtkOrientationMarkerWidget");const r={...t},n=[],i=$A.newInstance(),o=new ResizeObserver(d=>{t.updateViewport()});let a=null,s=null,c=null,l=null,f=null;function u(){e._interactor.isAnimating()||t.updateMarkerOrientation()}e._onParentRendererChanged=()=>t.updateViewport(),t.computeViewport=()=>{const d=e.parentRenderer||e._interactor.getCurrentRenderer(),[h,g,p,v]=d.getViewport(),y=e._interactor.getView(),m=y.getSize(),[w,x]=y.getViewportSize(d),C=Math.min(w,x);let S=e.viewportSize*C;S=Math.max(Math.min(e.minPixelSize,C),Math.min(e.maxPixelSize,S));const T=S/m[0],_=S/m[1];switch(e.viewportCorner){case Jv.TOP_LEFT:return[h,v-_,h+T,v];case Jv.TOP_RIGHT:return[p-T,v-_,p,v];case Jv.BOTTOM_LEFT:return[h,g,h+T,g+_];case Jv.BOTTOM_RIGHT:return[p-T,g,p,g+_];default:return zC("Invalid widget corner"),null}},t.updateViewport=()=>{e.enabled&&(i.setViewport(...t.computeViewport()),e._interactor.render())},t.updateMarkerOrientation=()=>{const h=(e.parentRenderer||e._interactor.getCurrentRenderer()).getActiveCamera();if(!h)return;const g=h.getReferenceByName("position"),p=h.getReferenceByName("focalPoint"),v=h.getReferenceByName("viewUp");if(n[0]!==g[0]||n[1]!==g[1]||n[2]!==g[2]||n[3]!==p[0]||n[4]!==p[1]||n[5]!==p[2]||n[6]!==v[0]||n[7]!==v[1]||n[8]!==v[2]){n[0]=g[0],n[1]=g[1],n[2]=g[2],n[3]=p[0],n[4]=p[1],n[5]=p[2],n[6]=v[0],n[7]=v[1],n[8]=v[2];const y=i.getActiveCamera();y.setPosition(g[0],g[1],g[2]),y.setFocalPoint(p[0],p[1],p[2]),y.setViewUp(v[0],v[1],v[2]),i.resetCamera()}},t.setEnabled=d=>{var h,g;if(d){if(e.enabled)return;if(!e.actor){zC("Must set actor before enabling orientation marker.");return}if(!e._interactor){zC("Must set interactor before enabling orientation marker.");return}const p=e.parentRenderer||e._interactor.getCurrentRenderer(),v=p.getRenderWindow();v.addRenderer(i),v.getNumberOfLayers()<2&&v.setNumberOfLayers(2),i.setLayer(v.getNumberOfLayers()-1),i.setInteractive(e.interactiveRenderer),i.addViewProp(e.actor),e.actor.setVisibility(!0),a=p.onEvent(y=>{y.type==="ActiveCameraEvent"&&(s&&s.unsubscribe(),s=y.camera.onModified(u))}),s=p.getActiveCamera().onModified(u),c=e._interactor.onAnimation(t.updateMarkerOrientation),l=e._interactor.onEndAnimation(t.updateMarkerOrientation),o.observe(e._interactor.getView().getCanvas()),t.updateViewport(),t.updateMarkerOrientation(),e.enabled=!0}else{if(!e.enabled)return;e.enabled=!1,o.disconnect(),a.unsubscribe(),a=null,s.unsubscribe(),s=null,c.unsubscribe(),c=null,l.unsubscribe(),l=null,e.actor.setVisibility(!1),i.removeViewProp(e.actor);const p=(g=(h=e._interactor)==null?void 0:h.findPokedRenderer())==null?void 0:g.getRenderWindow();p&&p.removeRenderer(i)}t.modified()},t.setViewportCorner=d=>{d!==e.viewportCorner&&(e.viewportCorner=d,t.updateViewport())},t.setViewportSize=d=>{const h=Math.min(1,Math.max(0,d));h!==e.viewportSize&&(e.viewportSize=h,t.updateViewport())},t.setActor=d=>{const h=e.enabled;t.setEnabled(!1),e.actor=d,t.setEnabled(h)},t.getRenderer=()=>i,t.delete=()=>{r.delete(),f&&(f.unsubscribe(),f=null),a&&(a.unsubscribe(),a=null),s&&(s.unsubscribe(),s=null),c&&(c.unsubscribe(),c=null),l&&(l.unsubscribe(),l=null),o.disconnect()},f=t.onModified(t.updateViewport)}const JTe={viewportCorner:U8.Corners.BOTTOM_LEFT,viewportSize:.2,minPixelSize:50,maxPixelSize:200,parentRenderer:null,interactiveRenderer:!1};function sz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,JTe,r),J.obj(t,e),J.get(t,e,["enabled","viewportCorner","viewportSize","interactiveRenderer"]),J.setGet(t,e,["_interactor","minPixelSize","maxPixelSize","parentRenderer"]),J.get(t,e,["actor"]),J.moveToProtected(t,e,["interactor"]),YTe(t,e)}const ZTe=J.newInstance(sz,"vtkOrientationMarkerWidget");var S7={newInstance:ZTe,extend:sz,...U8};function cz(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[0,0,0,0];const[r,n,i,o]=e,s=t.getContext("2d").getImageData(r,n,i||t.width,o||t.height),c=tm.newInstance({type:"vtkImageData"});c.setOrigin(0,0,0),c.setSpacing(1,1,1),c.setExtent(0,(i||t.width)-1,0,(o||t.height)-1,0,0);const l=Bt.newInstance({numberOfComponents:4,values:new Uint8Array(s.data.buffer)});return l.setName("scalars"),c.getPointData().setScalars(l),c}function QTe(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{flipX:!1,flipY:!1,rotate:0};const r=document.createElement("canvas");r.width=t.width,r.height=t.height;const n=r.getContext("2d"),{flipX:i,flipY:o,rotate:a}=e;return n.translate(r.width/2,r.height/2),n.scale(i?-1:1,o?-1:1),n.rotate(a*Math.PI/180),n.drawImage(t,-t.width/2,-t.height/2),cz(r)}var e_e={canvasToImageData:cz,imageToImageData:QTe};const lz={default:{defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:t=>t/2,faceColor:"white",edgeThickness:.1,edgeColor:"black",resolution:400},xMinusFaceProperty:{text:"X-",faceColor:"yellow"},xPlusFaceProperty:{text:"X+",faceColor:"yellow"},yMinusFaceProperty:{text:"Y-",faceColor:"red"},yPlusFaceProperty:{text:"Y+",faceColor:"red"},zMinusFaceProperty:{text:"Z-",faceColor:"#008000"},zPlusFaceProperty:{text:"Z+",faceColor:"#008000"}},lps:{xMinusFaceProperty:{text:"R",faceRotation:-90},xPlusFaceProperty:{text:"L",faceRotation:90},yMinusFaceProperty:{text:"A",faceRotation:0},yPlusFaceProperty:{text:"P",faceRotation:180},zMinusFaceProperty:{text:"I",faceRotation:180},zPlusFaceProperty:{text:"S",faceRotation:0}}};function uz(t,e){e.set(t)}function t_e(t,e){return uz(lz[t],e)}function n_e(t,e){lz[t]=e}var r_e={applyDefinitions:uz,applyPreset:t_e,registerStylePreset:n_e};const i_e={xPlus:0,xMinus:1,yPlus:2,yMinus:3,zPlus:4,zMinus:5};function o_e(t,e){e.classHierarchy.push("vtkAnnotatedCubeActor"),e.xPlusFaceProperty={...e.xPlusFaceProperty},e.xMinusFaceProperty={...e.xMinusFaceProperty},e.yPlusFaceProperty={...e.yPlusFaceProperty},e.yMinusFaceProperty={...e.yMinusFaceProperty},e.zPlusFaceProperty={...e.zPlusFaceProperty},e.zMinusFaceProperty={...e.zMinusFaceProperty};let r=null;const n=document.createElement("canvas"),i=wa.newInstance(),o=Bd.newInstance();o.setInterpolate(!0);function a(c){let l=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;l&&Object.assign(e[`${c}FaceProperty`],l);const f={...e.defaultStyle,...e[`${c}FaceProperty`]};n.width=f.resolution,n.height=f.resolution;const u=n.getContext("2d");u.fillStyle=f.faceColor,u.fillRect(0,0,n.width,n.height),f.edgeThickness>0&&(u.strokeStyle=f.edgeColor,u.lineWidth=f.edgeThickness*n.width,u.strokeRect(0,0,n.width,n.height)),u.save(),u.translate(0,n.height),u.scale(1,-1),u.translate(n.width/2,n.height/2),u.rotate(-Math.PI*(f.faceRotation/180));const d=f.fontSizeScale(f.resolution);u.fillStyle=f.fontColor,u.textAlign="center",u.textBaseline="middle",u.font=`${f.fontStyle} ${d}px "${f.fontFamily}"`,u.fillText(f.text,0,0),u.restore();const h=e_e.canvasToImageData(n);o.setInputData(h,i_e[c]),t.modified()}function s(){r=LN.newInstance({generate3DTextureCoordinates:!0}),i.setInputConnection(r.getOutputPort()),a("xPlus"),a("xMinus"),a("yPlus"),a("yMinus"),a("zPlus"),a("zMinus")}t.setDefaultStyle=c=>{e.defaultStyle={...e.defaultStyle,...c},s()},t.setXPlusFaceProperty=c=>a("xPlus",c),t.setXMinusFaceProperty=c=>a("xMinus",c),t.setYPlusFaceProperty=c=>a("yPlus",c),t.setYMinusFaceProperty=c=>a("yMinus",c),t.setZPlusFaceProperty=c=>a("zPlus",c),t.setZMinusFaceProperty=c=>a("zMinus",c),s(),i.setInputConnection(r.getOutputPort()),t.setMapper(i),t.addTexture(o)}const a_e={defaultStyle:{text:"",faceColor:"white",faceRotation:0,fontFamily:"Arial",fontColor:"black",fontStyle:"normal",fontSizeScale:t=>t/1.8,edgeThickness:.1,edgeColor:"black",resolution:200}};function fz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,a_e,r),dc.extend(t,e,r),J.get(t,e,["defaultStyle","xPlusFaceProperty","xMinusFaceProperty","yPlusFaceProperty","yMinusFaceProperty","zPlusFaceProperty","zMinusFaceProperty"]),o_e(t,e)}const s_e=J.newInstance(fz,"vtkAnnotatedCubeActor");var T7={newInstance:s_e,extend:fz,Presets:r_e};const{vtkErrorMacro:c_e}=J;function l_e(t,e){let r=0;return t.map((n,i)=>i===r?(r+=n+1,n):n+e)}function Zv(t,e,r,n){t.set(l_e(e,r),n)}function u_e(t,e){e.classHierarchy.push("vtkAppendPolyData"),t.requestData=(r,n)=>{const i=t.getNumberOfInputPorts();if(!i){c_e("No input specified.");return}if(i===1){n[0]=r[0];return}const o=Br.newInstance();let a=0,s=0,c=1,l=1,f=0,u=0,d=0,h=0,g=!0,p=!0,v=!0;for(let D=0;Dc?s:c);const O=I.getPointData();O?(g=g&&O.getNormals()!==null,p=p&&O.getTCoords()!==null,v=v&&O.getScalars()!==null):(g=!1,p=!1,v=!1)}e.outputPointsPrecision===Sy.SINGLE?s=xn.FLOAT:e.outputPointsPrecision===Sy.DOUBLE&&(s=xn.DOUBLE);const y=l1.newInstance({dataType:s});y.setNumberOfPoints(a);const m=y.getData(),w=new Uint32Array(f),x=new Uint32Array(u),C=new Uint32Array(d),S=new Uint32Array(h);let T=null,_=null,E=null;const b=r[i-1];if(g){const D=b.getPointData().getNormals();T=Bt.newInstance({numberOfComponents:3,numberOfTuples:a,size:3*a,dataType:D.getDataType(),name:D.getName()})}if(p){const D=b.getPointData().getTCoords();_=Bt.newInstance({numberOfComponents:2,numberOfTuples:a,size:2*a,dataType:D.getDataType(),name:D.getName()})}if(v){const D=b.getPointData().getScalars();E=Bt.newInstance({numberOfComponents:D.getNumberOfComponents(),numberOfTuples:a,size:a*D.getNumberOfComponents(),dataType:D.getDataType(),name:D.getName()})}a=0,f=0,u=0,d=0,h=0;for(let D=0;D2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,f_e,r),J.setGet(t,e,["outputPointsPrecision"]),J.obj(t,e),J.algo(t,e,1,1),u_e(t,e)}const d_e=J.newInstance(dz,"vtkAppendPolyData");var hz={newInstance:d_e,extend:dz};function h_e(t,e){e.classHierarchy.push("vtkConeSource");function r(n,i){if(e.deleted)return;let o=i[0];const a=2*Math.PI/e.resolution,s=-e.height/2,c=e.resolution+1,l=4*e.resolution+1+e.resolution;let f=0;const u=J.newTypedArray(e.pointType,c*3);let d=0;const h=new Uint32Array(l);u[0]=e.height/2,u[1]=0,u[2]=0,e.capping&&(h[d++]=e.resolution);for(let g=0;ge.resolution?1:g+2;Yi.buildFromRadian().translate(...e.center).rotateFromDirections([1,0,0],e.direction).apply(u),o=Br.newInstance(),o.getPoints().setData(u,3),o.getPolys().setData(h,1),i[0]=o}t.requestData=r}const g_e={height:1,radius:.5,resolution:6,center:[0,0,0],direction:[1,0,0],capping:!0,pointType:"Float64Array"};function gz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,g_e,r),J.obj(t,e),J.setGet(t,e,["height","radius","resolution","capping"]),J.setGetArray(t,e,["center","direction"],3),J.algo(t,e,0,1),h_e(t,e)}const p_e=J.newInstance(gz,"vtkConeSource");var m_e={newInstance:p_e,extend:gz};function v_e(t,e){e.classHierarchy.push("vtkCylinderSource");function r(n,i){if(e.deleted)return;let o=i[0];const a=2*Math.PI/e.resolution;let s=2*e.resolution,c=5*e.resolution;e.capping&&(s=4*e.resolution,c=7*e.resolution+2);const l=J.newTypedArray(e.pointType,s*3);let f=0;const u=new Uint32Array(c),d=new Float32Array(s*3),h=Bt.newInstance({numberOfComponents:3,values:d,name:"Normals"}),g=new Float32Array(s*2),p=Bt.newInstance({numberOfComponents:2,values:g,name:"TCoords"}),v=[0,0,0],y=[0,0,0],m=[0,0,0],w=[0,0,0],x=[0,0],C=[0,0],S=e.otherRadius==null?e.radius:e.otherRadius;for(let T=0;TT*-1)).apply(l),o=Br.newInstance(),o.getPoints().setData(l,3),o.getPolys().setData(u,1),o.getPointData().setNormals(h),o.getPointData().setTCoords(p),i[0]=o}t.requestData=r}const y_e={height:1,initAngle:0,radius:1,resolution:6,center:[0,0,0],direction:[0,1,0],capping:!0,pointType:"Float64Array"};function pz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,y_e,r),J.obj(t,e),J.setGet(t,e,["height","initAngle","otherRadius","radius","resolution","capping"]),J.setGetArray(t,e,["center","direction"],3),J.algo(t,e,0,1),v_e(t,e)}const w_e=J.newInstance(pz,"vtkCylinderSource");var x_e={newInstance:w_e,extend:pz};function C_e(t,e){e.classHierarchy.push("vtkArrowSource");function r(n,i){if(e.deleted)return;const o=x_e.newInstance({capping:!0});o.setResolution(e.shaftResolution),o.setRadius(e.shaftRadius),o.setHeight(1-e.tipLength),o.setCenter(0,(1-e.tipLength)*.5,0);const a=o.getOutputData(),s=a.getPoints().getData(),c=a.getPointData().getNormals().getData();Yi.buildFromDegree().rotateZ(-90).apply(s).apply(c);const l=m_e.newInstance();l.setResolution(e.tipResolution),l.setHeight(e.tipLength),l.setRadius(e.tipRadius);const f=l.getOutputData(),u=f.getPoints().getData();Yi.buildFromRadian().translate(1-e.tipLength*.5,0,0).apply(u);const d=hz.newInstance();d.setInputData(a),d.addInputData(f);const h=d.getOutputData(),g=h.getPoints().getData();Yi.buildFromRadian().translate(-.5+e.tipLength*.5,0,0).apply(g),e.invert?(Yi.buildFromRadian().rotateFromDirections([1,0,0],e.direction).scale(-1,-1,-1).apply(g),i[0]=h):(Yi.buildFromRadian().rotateFromDirections([1,0,0],e.direction).scale(1,1,1).apply(g),i[0]=d.getOutputData())}t.requestData=r}const S_e={tipResolution:6,tipRadius:.1,tipLength:.35,shaftResolution:6,shaftRadius:.03,invert:!1,direction:[1,0,0],pointType:"Float64Array"};function mz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,S_e,r),J.obj(t,e),J.setGet(t,e,["tipResolution","tipRadius","tipLength","shaftResolution","shaftRadius","invert"]),J.setGetArray(t,e,["direction"],3),J.algo(t,e,0,1),C_e(t,e)}const T_e=J.newInstance(mz,"vtkArrowSource");var $C={newInstance:T_e,extend:mz};function jC(t){const e=t.getPoints().getBounds(),r=[-(e[0]+e[1])*.5,-(e[2]+e[3])*.5,-(e[4]+e[5])*.5];Yi.buildFromDegree().translate(...r).apply(t.getPoints().getData())}function HC(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const n=t.getPoints().getBounds(),i=[0,0,0];r?i[e]=-n[e*2+1]:i[e]=-n[e*2],Yi.buildFromDegree().translate(...i).apply(t.getPoints().getData())}function KC(t,e,r,n){const i=t.getPoints().getData().length,o=new Uint8ClampedArray(i);let a=0;for(;a{let i={...e.config,...e.xConfig};const o=$C.newInstance({direction:[1,0,0],...i}).getOutputData();e.config.recenter?jC(o):HC(o,0,i.invert),KC(o,...i.color),i={...e.config,...e.yConfig};const a=$C.newInstance({direction:[0,1,0],...i}).getOutputData();e.config.recenter?jC(a):HC(a,1,i.invert),KC(a,...i.color),i={...e.config,...e.zConfig};const s=$C.newInstance({direction:[0,0,1],...i}).getOutputData();e.config.recenter?jC(s):HC(s,2,i.invert),KC(s,...i.color);const c=hz.newInstance();c.setInputData(o),c.addInputData(a),c.addInputData(s),r.setInputConnection(c.getOutputPort())},t.update();const n=J.debounce(t.update,0);t.setXAxisColor=i=>t.setXConfig({...t.getXConfig(),color:i}),t.setYAxisColor=i=>t.setYConfig({...t.getYConfig(),color:i}),t.setZAxisColor=i=>t.setZConfig({...t.getZConfig(),color:i}),t.getXAxisColor=()=>e.getXConfig().color,t.getYAxisColor=()=>e.getYConfig().color,t.getZAxisColor=()=>e.getZConfig().color,e._onConfigChanged=n,e._onXConfigChanged=n,e._onYConfigChanged=n,e._onZConfigChanged=n}function E_e(t){return{config:{recenter:!0,tipResolution:60,tipRadius:.1,tipLength:.2,shaftResolution:60,shaftRadius:.03,invert:!1,...t==null?void 0:t.config},xConfig:{color:[255,0,0],invert:!1,...t==null?void 0:t.xConfig},yConfig:{color:[255,255,0],invert:!1,...t==null?void 0:t.yConfig},zConfig:{color:[0,128,0],invert:!1,...t==null?void 0:t.zConfig}}}function vz(t,e){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};dc.extend(t,e,E_e(r)),J.setGet(t,e,["config","xConfig","yConfig","zConfig"]),__e(t,e)}const b_e=J.newInstance(vz,"vtkAxesActor");var D_e={newInstance:b_e,extend:vz},O5;(function(t){t[t.ANNOTATED_CUBE=1]="ANNOTATED_CUBE",t[t.AXES=2]="AXES",t[t.CUSTOM=3]="CUSTOM"})(O5||(O5={}));const zc=class zc extends vi{constructor(e={},r={configuration:{orientationWidget:{enabled:!0,viewportCorner:S7.Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:zc.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[zc.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"L",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"R",faceColor:"#ffff00",faceRotation:270},yPlus:{text:"P",faceColor:"#00ffff",fontColor:"white",faceRotation:180},yMinus:{text:"A",faceColor:"#00ffff",fontColor:"white"},zPlus:{text:"S"},zMinus:{text:"I"}},defaultStyle:{fontStyle:"bold",fontFamily:"Arial",fontColor:"black",fontSizeScale:n=>n/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[zc.OVERLAY_MARKER_TYPES.AXES]:{},[zc.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}){super(e,r),this._resizeObservers=new Map,this.onSetToolEnabled=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolActive=()=>{this.initViewports(),this._subscribeToViewportEvents()},this.onSetToolDisabled=()=>{this.cleanUpData(),this._unsubscribeToViewportNewVolumeSet()},this._getViewportsInfo=()=>ni(this.toolGroupId).viewportsInfo,this.resize=n=>{const i=this.orientationMarkers[n];if(!i)return;const{orientationWidget:o}=i;o.updateViewport()},this.orientationMarkers={},this.updatingOrientationMarker={}}_unsubscribeToViewportNewVolumeSet(){const e=()=>{this._getViewportsInfo().forEach(({viewportId:n,renderingEngineId:i})=>{const{viewport:o}=Oi(n,i),{element:a}=o;a.removeEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this)),this._resizeObservers.get(n).unobserve(a)})};et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,r=>{r.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}_subscribeToViewportEvents(){const e=()=>{this._getViewportsInfo().forEach(({viewportId:n,renderingEngineId:i})=>{const{viewport:o}=Oi(n,i),{element:a}=o;this.initViewports(),a.addEventListener(rt.VOLUME_VIEWPORT_NEW_VOLUME,this.initViewports.bind(this));const s=new ResizeObserver(()=>{setTimeout(()=>{const c=Oi(n,i);if(!c)return;const{viewport:l}=c;this.resize(n),l.render()},100)});s.observe(a),this._resizeObservers.set(n,s)})};e(),et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,r=>{r.detail.toolGroupId===this.toolGroupId&&(e(),this.initViewports())})}cleanUpData(){Bo()[0].getViewports().forEach(i=>{const o=this.orientationMarkers[i.id];if(!o)return;const{actor:a,orientationWidget:s}=o;s==null||s.setEnabled(!1),s==null||s.delete(),a==null||a.delete(),i.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),i.getRenderingEngine().render(),delete this.orientationMarkers[i.id]})}initViewports(){const r=Bo()[0];if(!r)return;let n=r.getViewports();n=Vw(n,this.getToolName()),n.forEach(i=>{const o=i.getWidget(this.getToolName());(!o||o.isDeleted())&&this.addAxisActorInViewport(i)})}async addAxisActorInViewport(e){const r=e.id;if(!this.updatingOrientationMarker[r]){this.updatingOrientationMarker[r]=!0;const n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[r]){const{actor:g,orientationWidget:p}=this.orientationMarkers[r];e.getRenderer().removeActor(g),p.setEnabled(!1)}let o;n===1?o=this.createAnnotationCube(i):n===2?o=D_e.newInstance():n===3&&(o=await this.createCustomActor());const a=e.getRenderer(),s=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:c,viewportCorner:l,viewportSize:f,minPixelSize:u,maxPixelSize:d}=this.configuration.orientationWidget,h=S7.newInstance({actor:o,interactor:s.getInteractor(),parentRenderer:a});h.setEnabled(c),h.setViewportCorner(l),h.setViewportSize(f),h.setMinPixelSize(u),h.setMaxPixelSize(d),h.updateMarkerOrientation(),this.orientationMarkers[r]={orientationWidget:h,actor:o},e.addWidget(this.getToolName(),h),s.render(),e.getRenderingEngine().render(),this.updatingOrientationMarker[r]=!1}}async createCustomActor(){const e=this.configuration.overlayConfiguration[O5.CUSTOM].polyDataURL,n=await(await fetch(e)).arrayBuffer(),i=cV.newInstance();i.parseAsArrayBuffer(n),i.update();const o=Br.newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=wa.newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const s=dc.newInstance();return s.setMapper(a),s.rotateZ(180),s}createAnnotationCube(e){const r=T7.newInstance();return r.setDefaultStyle({...e.defaultStyle}),r.setXPlusFaceProperty({...e.faceProperties.xPlus}),r.setXMinusFaceProperty({...e.faceProperties.xMinus}),r.setYPlusFaceProperty({...e.faceProperties.yPlus}),r.setYMinusFaceProperty({...e.faceProperties.yMinus}),r.setZPlusFaceProperty({...e.faceProperties.zPlus}),r.setZMinusFaceProperty({...e.faceProperties.zMinus}),r}async createAnnotatedCubeActor(){const e=T7.newInstance(),{faceProperties:r,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(r).forEach(i=>{const o=`set${i.charAt(0).toUpperCase()+i.slice(1)}FaceProperty`;e[o](r[i])}),e}};zc.CUBE=1,zc.AXIS=2,zc.VTPFILE=3,zc.OVERLAY_MARKER_TYPES=O5;let M5=zc;M5.toolName="OrientationMarker";const Bp=class Bp extends vi{constructor(e={},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:Bp.SelectMode.Border,searchRadius:6}}){super(e,r),this.mouseMoveCallback=n=>{if(this.mode===Fn.Active)return this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setActiveSegment(n),this.hoverTimer=null},this.configuration.hoverTimeout),!0},this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.hoverTimer=null}_setActiveSegment(e={}){if(Ye.isInteractingWithTool)return;const{element:r,currentPoints:n}=e.detail,i=n.world,o=_e(r);if(!o)return;const{viewport:a}=o,s=cu(a.id);s&&this._setActiveSegmentForType(s,i,a)}_setActiveSegmentForType(e,r,n){if(!n.getImageData())return;const{segmentationId:o,representationData:a}=e;let s;if(this.configuration.mode===Bp.SelectMode.Inside?s=b8(o,r,{viewport:n}):a.Labelmap?s=eW(o,r,{viewport:n,searchRadius:this.configuration.searchRadius}):a.Contour?s=nW(o):a.Surface,!s||s===0)return;S5(o,s);const l=n.getRenderingEngine().getViewports().map(f=>f.id);es(o),Be(l)}};Bp.SelectMode={Inside:"Inside",Border:"Border"};let P5=Bp;P5.toolName="SegmentSelectTool";const U0=class U0 extends N1{constructor(e={}){super(e),this.renderAnnotation=(r,n)=>{let i=!0;const{viewport:o}=r,{element:a}=o,s=o.id;let c=hn(this.getToolName(),a);if(!(c!=null&&c.length)||(c=this.filterInteractableAnnotationsForElement(a,c),!(c!=null&&c.length)))return i;const l=this.getTargetId(o),f=o.getRenderingEngine(),u={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:r.viewport.id};for(let d=0;do.worldToCanvas(ue));u.annotationUID=g;const{segmentIndex:w,segmentationId:x}=h.metadata,{lineWidth:C,lineDash:S,shadow:T}=this.getAnnotationStyle({annotation:h,styleSpecifier:u}),E=`rgb(${iu(s,x,w).slice(0,3).join(",")})`;if(!p.cachedStats[l]||p.cachedStats[l].unit==null?(p.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(h,f,r)):h.invalidated&&this._throttledCalculateCachedStats(h,f,r),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let b;if(!Kr(g))continue;!si(g)&&!this.editData&&y!==null&&(b=[m[y]]),b&&or(n,g,"0",b,{color:E});const D=`${g}-line-1`,I=`${g}-line-2`;Sn(n,g,"0",m[0],m[1],{color:E,lineWidth:C,lineDash:S,shadow:T},D),Sn(n,g,"1",m[2],m[3],{color:E,lineWidth:C,lineDash:S,shadow:T},I),i=!0;const A=this.getLinkedTextBoxStyle(u,h);if(!A.visibility){p.handles.textBox={hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}};continue}A.color=E;const V=this.configuration.getTextLines(p,l);if(!V||V.length===0)continue;let G;p.handles.textBox.hasMoved||(G=Oa(m),p.handles.textBox.worldPosition=o.canvasToWorld(G));const R=o.worldToCanvas(p.handles.textBox.worldPosition),F=ho(n,g,"1",V,R,m,{},A),{x:j,y:te,width:ie,height:he}=F;p.handles.textBox.worldBoundingBox={topLeft:o.canvasToWorld([j,te]),topRight:o.canvasToWorld([j+ie,te]),bottomLeft:o.canvasToWorld([j,te+he]),bottomRight:o.canvasToWorld([j+ie,te+he])}}return i}}addNewAnnotation(e){const r=e.detail,{currentPoints:n,element:i}=r,o=n.world,a=_e(i),{viewport:s}=a;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:l,viewUp:f}=c,u=this.getReferencedImageId(s,o,l,f),d=s.getFrameOfReferenceUID(),h={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...l],viewUp:[...f],FrameOfReferenceUID:d,referencedImageId:u,...s.getViewReference({points:[o]})},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};ln(h,i);const g=At(i,this.getToolName());return this.editData={annotation:h,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),Gt(i),e.preventDefault(),Be(g),h}};U0.toolName="SegmentBidirectional",U0.hydrate=(e,r,n)=>{const i=Wn(e);if(!i)return;const{viewport:o}=i,c=mm().filter(T=>T.metadata.toolName==="SegmentBidirectional").find(T=>{const{metadata:_}=T;return _.segmentIndex===(n==null?void 0:n.segmentIndex)&&_.segmentationId===(n==null?void 0:n.segmentationId)});c&&mn(c.annotationUID);const{FrameOfReferenceUID:l,referencedImageId:f,viewPlaneNormal:u,instance:d}=U0.hydrateBase(U0,i,r[0],n),[h,g]=r,[p,v]=h,[y,m]=g,w=[p,v,y,m],{toolInstance:x,...C}=n||{},S={annotationUID:(n==null?void 0:n.annotationUID)||Pn(),data:{handles:{points:w,activeHandleIndex:null,textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}},cachedStats:{}},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{segmentIndex:n==null?void 0:n.segmentIndex,segmentationId:n==null?void 0:n.segmentationId,toolName:d.getToolName(),viewPlaneNormal:u,FrameOfReferenceUID:l,referencedImageId:f,...C}};return ln(S,o.element),Be([o.id]),S};let TT=U0;class yz extends vi{constructor(e={data:{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}}},r={supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,searchRadius:6}}){super(e,r),this.mouseMoveCallback=n=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout(()=>{this._setHoveredSegment(n),this.hoverTimer=null},this.configuration.hoverTimeout),!0),this.onSetToolEnabled=()=>{this.onSetToolActive()},this.onSetToolActive=()=>{this.hoverTimer=null},this.onSetToolDisabled=()=>{this.hoverTimer=null},this.data=e.data??{handles:{textBox:{worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}}}},this.hoverTimer=null}_setHoveredSegment(e={}){if(Ye.isInteractingWithTool)return;const{element:r,currentPoints:n}=e.detail,i=n.world,o=_e(r);if(!o)return;const{viewport:a}=o,s=cu(a.id);s&&this._setHoveredSegmentForType(s,i,a)}_setHoveredSegmentForType(e,r,n){if(!n.getImageData())return;const{segmentationId:o}=e,a=b8(o,r,{viewport:n}),s=e.segments[a],c=s==null?void 0:s.label,l=n.worldToCanvas(r);if(this._editData={hoveredSegmentIndex:a,hoveredSegmentLabel:c,canvasCoordinates:l,worldPoint:r},!a||a===0)return;const u=n.getRenderingEngine().getViewports().map(d=>d.id);es(o),Be(u)}renderAnnotation(e,r){if(!this._editData)return;const{viewport:n}=e,{hoveredSegmentIndex:i,hoveredSegmentLabel:o,canvasCoordinates:a,worldPoint:s}=this._editData;if(!i)return;const c=n.worldToCanvas(s),l=ho(r,"segmentSelectLabelAnnotation","segmentSelectLabelTextBox",[o||"(unnamed segment)"],c,[a],{},{}),f=a[0],u=a[1],{width:d,height:h}=l;this.data.handles.textBox.worldBoundingBox={topLeft:n.canvasToWorld([f,u]),topRight:n.canvasToWorld([f+d,u]),bottomLeft:n.canvasToWorld([f,u+h]),bottomRight:n.canvasToWorld([f+d,u+h])}}}yz.toolName="SegmentLabelTool";const Mo=class Mo extends hl{constructor(e={}){const r=Ui({configuration:{calculateStats:!1,allowOpenContours:!1}},e);super(r),this.onViewportAddedToToolGroupBinded=this.onViewportAddedToToolGroup.bind(this),this.onSegmentationModifiedBinded=this.onSegmentationModified.bind(this)}initializeListeners(){Mo.annotationsToViewportMap.clear(),Mo.viewportIdsChecked=[],et.addEventListener(k.ANNOTATION_MODIFIED,this.annotationModified),et.addEventListener(k.ANNOTATION_COMPLETED,this.annotationCompleted),et.addEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroupBinded),et.addEventListener(k.SEGMENTATION_MODIFIED,this.onSegmentationModifiedBinded)}cleanUpListeners(){Mo.annotationsToViewportMap.clear(),Mo.viewportIdsChecked=[],et.removeEventListener(k.ANNOTATION_MODIFIED,this.annotationModified),et.removeEventListener(k.ANNOTATION_COMPLETED,this.annotationCompleted),et.removeEventListener(k.TOOLGROUP_VIEWPORT_ADDED,this.onViewportAddedToToolGroup.bind(this)),et.removeEventListener(k.SEGMENTATION_MODIFIED,this.onSegmentationModified.bind(this))}async checkContourSegmentation(e){if(Mo.viewportIdsChecked.includes(e))return;const r=Od(e);if(!r)return console.log("No active segmentation detected"),!1;const n=r.segmentationId;return r.representationData.Contour?Mo.viewportIdsChecked.push(e):(Mo.viewportIdsChecked.push(e),await D8(e,[{segmentationId:n,type:Vt.Contour}]),kE({segmentationId:n,type:Vt.Contour,data:{}})),!0}onViewportAddedToToolGroup(e){const{toolGroupId:r,viewportId:n}=e.detail;r===this.toolGroupId&&this.checkContourSegmentation(n)}onSegmentationModified(e){const{segmentationId:r}=e.detail||{};if(!r)return;const n=aU(r);n&&n.forEach(async({viewportId:i})=>await this.checkContourSegmentation(i))}onSetToolEnabled(){this.initializeListeners()}onSetToolActive(){this.initializeListeners()}onSetToolDisabled(){this.cleanUpListeners()}annotationModified(e){var a;const{annotation:r,renderingEngineId:n,viewportId:i}=e.detail,o=(a=jr(n))==null?void 0:a.getViewport(i);o&&Mo.annotationsToViewportMap.set(r.annotationUID,o)}annotationCompleted(e){var i,o;const{annotation:r}=e.detail,{polyline:n}=((i=r.data)==null?void 0:i.contour)||{};if(((o=r==null?void 0:r.metadata)==null?void 0:o.toolName)===Mo.toolName&&n&&Mo.annotationsToViewportMap.has(r.annotationUID)){const a=Mo.annotationsToViewportMap.get(r.annotationUID);n.length>3&&Qw.viewportContoursToLabelmap(a)}}};Mo.toolName="LabelMapEditWithContour",Mo.annotationsToViewportMap=new Map,Mo.viewportIdsChecked=[];let _T=Mo;const gb=class gb extends cr{constructor(e={}){super(e,{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),this.addNewAnnotation=r=>{const n=r.detail,{currentPoints:i,element:o}=n,a=i.world,s=_e(o),{viewport:c}=s;this.isDrawing=!0;const l=this.constructor.createAnnotationForViewport(c,{data:{handles:{points:[[...a],[...a],[...a],[...a]]}}});ln(l,o);const f=At(o,this.getToolName(),!1);return this.editData={annotation:l,viewportUIDsToRender:f,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Gt(o),r.preventDefault(),Be(f),l},this.getHandleNearImagePoint=(r,n,i,o)=>{const a=_e(r),{viewport:s}=a,{data:c}=n,{points:l}=c.handles;for(let f=0;f{const a=_e(r),{viewport:s}=a,{data:c}=n,{points:l}=c.handles,f=s.worldToCanvas(l[0]),u=s.worldToCanvas(l[3]),d=this._getRectangleImageCoordinates([f,u]),h=[i[0],i[1]],{left:g,top:p,width:v,height:y}=d;if(ZE([g,p,v,y],h)<=o)return!0},this.toolSelectedCallback=(r,n,i="mouse")=>{const o=r.detail,{element:a}=o,{data:s}=n;s.active=!0;const c=At(a,this.getToolName(),!1);this.editData={annotation:n,viewportUIDsToRender:c},this._activateModify(a),Gt(a),Be(c),r.preventDefault()},this.handleSelectedCallback=(r,n,i,o="mouse")=>{const a=r.detail,{element:s}=a,{data:c}=n;c.active=!0;let l;i.worldPosition||(l=c.handles.points.findIndex(u=>u===i));const f=At(s,this.getToolName(),!1);this.editData={annotation:n,viewportUIDsToRender:f,handleIndex:l},this._activateModify(s),Gt(s),Be(f),r.preventDefault()},this._endCallback=r=>{const n=r.detail,{element:i}=n,{annotation:o,viewportUIDsToRender:a,newAnnotation:s,hasMoved:c}=this.editData,{data:l}=o;s&&!c||(this.doneEditMemo(),l.active=!1,l.handles.activeHandleIndex=null,this._deactivateModify(i),this._deactivateDraw(i),Jt(i),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mn(o.annotationUID),Be(a))},this._dragCallback=r=>{this.isDrawing=!0;const n=r.detail,{element:i}=n,{annotation:o,viewportUIDsToRender:a,handleIndex:s,newAnnotation:c}=this.editData;this.createMemo(i,o,{newAnnotation:c});const{data:l}=o;if(s===void 0){const{deltaPoints:f}=n,u=f.world,{points:d}=l.handles;d.forEach(h=>{h[0]+=u[0],h[1]+=u[1],h[2]+=u[2]}),l.invalidated=!0}else{const{currentPoints:f}=n,u=_e(i),{worldToCanvas:d,canvasToWorld:h}=u.viewport,g=f.world,{points:p}=l.handles;p[s]=[...g];let v,y,m,w,x,C,S,T;switch(s){case 0:case 3:v=d(p[0]),w=d(p[3]),y=[w[0],v[1]],m=[v[0],w[1]],C=h(y),S=h(m),p[1]=C,p[2]=S;break;case 1:case 2:y=d(p[1]),m=d(p[2]),v=[m[0],y[1]],w=[y[0],m[1]],x=h(v),T=h(w),p[0]=x,p[3]=T;break}l.invalidated=!0}this.editData.hasMoved=!0,_e(i),Be(a)},this._activateDraw=r=>{Ye.isInteractingWithTool=!0,r.addEventListener(k.MOUSE_UP,this._endCallback),r.addEventListener(k.MOUSE_DRAG,this._dragCallback),r.addEventListener(k.MOUSE_MOVE,this._dragCallback),r.addEventListener(k.MOUSE_CLICK,this._endCallback),r.addEventListener(k.TOUCH_END,this._endCallback),r.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateDraw=r=>{Ye.isInteractingWithTool=!1,r.removeEventListener(k.MOUSE_UP,this._endCallback),r.removeEventListener(k.MOUSE_DRAG,this._dragCallback),r.removeEventListener(k.MOUSE_MOVE,this._dragCallback),r.removeEventListener(k.MOUSE_CLICK,this._endCallback),r.removeEventListener(k.TOUCH_END,this._endCallback),r.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this._activateModify=r=>{Ye.isInteractingWithTool=!0,r.addEventListener(k.MOUSE_UP,this._endCallback),r.addEventListener(k.MOUSE_DRAG,this._dragCallback),r.addEventListener(k.MOUSE_CLICK,this._endCallback),r.addEventListener(k.TOUCH_END,this._endCallback),r.addEventListener(k.TOUCH_DRAG,this._dragCallback)},this._deactivateModify=r=>{Ye.isInteractingWithTool=!1,r.removeEventListener(k.MOUSE_UP,this._endCallback),r.removeEventListener(k.MOUSE_DRAG,this._dragCallback),r.removeEventListener(k.MOUSE_CLICK,this._endCallback),r.removeEventListener(k.TOUCH_END,this._endCallback),r.removeEventListener(k.TOUCH_DRAG,this._dragCallback)},this.renderAnnotation=(r,n)=>{const{viewport:o}=r,{element:a}=o;let s=hn(this.getToolName(),a);if(!(s!=null&&s.length)||(s=this.filterInteractableAnnotationsForElement(a,s),!(s!=null&&s.length)))return!1;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:r.viewport.id};for(let l=0;lo.worldToCanvas(C)),v=this.getStyle("lineWidth",c,f),y=this.getStyle("lineDash",c,f),m=this.getStyle("color",c,f);if(!o.getRenderingEngine()){console.warn("Rendering Engine has been destroyed");return}let w;!this.editData&&g!==null&&(w=[p[g]]),w&&or(n,u,"0",w,{color:m}),GU(n,u,"0",p[0],p[3],{color:"black",lineDash:y,lineWidth:v})}},this._getRectangleImageCoordinates=r=>{const[n,i]=r;return{left:Math.min(n[0],i[0]),top:Math.min(n[1],i[1]),width:Math.abs(n[0]-i[0]),height:Math.abs(n[1]-i[1])}},this._calculateCachedStats=(r,n,i,o,a)=>{const{data:s}=r,{viewportUID:c,renderingEngineUID:l,sceneUID:f}=a,u=s.handles.points[0],d=s.handles.points[3],{cachedStats:h}=s,g=Object.keys(h);for(let v=0;vhr(r,i)&&hr(n,i),this._getTargetVolumeUID=r=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const n=r.getVolumeActors();if(!(!n&&!n.length))return n[0].uid},this._throttledCalculateCachedStats=Wo(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),Jt(e);const{annotation:r,viewportUIDsToRender:n}=this.editData,{data:i}=r;return i.active=!1,i.handles.activeHandleIndex=null,Be(n),this.editData=null,r.metadata.annotationUID}_getImageVolumeFromTargetUID(e,r){let n,i;if(e.startsWith("stackTarget")){const o=e.indexOf(":"),a=e.substring(o+1);n=r.getViewport(a).getImageData()}else n=$e.getVolume(e);return{imageVolume:n,viewport:i}}_getTargetStackUID(e){return`stackTarget:${e.uid}`}};gb.toolName="VideoRedaction";let ET=gb;const wz=Object.freeze(Object.defineProperty({__proto__:null,AdvancedMagnifyTool:G1,AngleTool:gT,AnnotationDisplayTool:_f,AnnotationTool:cr,ArrowAnnotateTool:pf,BaseTool:vi,BidirectionalTool:N1,BrushTool:Qw,CONSTANTS:iwe,CircleROIStartEndThresholdTool:oz,CircleROITool:_5,CircleScissorsTool:rz,CobbAngleTool:pT,CrosshairsTool:jc,DragProbeTool:uT,ETDRSGridTool:fT,EllipticalROITool:Ad,Enums:tF,EraserTool:ez,HeightTool:lT,KeyImageTool:xT,LabelMapEditWithContourTool:_T,LabelTool:T5,LabelmapBaseTool:Rd,LengthTool:gf,LivewireContourSegmentationTool:hT,LivewireContourTool:D5,MIPJumpToClickTool:$W,MagnifyTool:jW,OrientationMarkerTool:M5,OverlayGridTool:HW,PaintFillTool:az,PanTool:Qu,PlanarFreehandContourSegmentationTool:hl,PlanarFreehandROITool:hf,PlanarRotateTool:Mh,ProbeTool:au,RectangleROIStartEndThresholdTool:S8,RectangleROIThresholdTool:T8,RectangleROITool:ou,RectangleScissorsTool:nz,ReferenceCursors:Ba,ReferenceLinesTool:pd,RegionSegmentPlusTool:ST,RegionSegmentTool:CT,ScaleOverlayTool:YW,SculptorTool:Ph,SegmentBidirectionalTool:TT,SegmentLabelTool:yz,SegmentSelectTool:P5,SegmentationIntersectionTool:KW,SphereScissorsTool:iz,SplineContourSegmentationTool:dT,SplineROITool:E5,StackScrollTool:Ld,Synchronizer:y8,SynchronizerManager:nG,ToolGroupManager:mF,TrackballRotateTool:WW,Types:MSe,UltrasoundDirectionalTool:mT,UltrasoundPleuraBLineTool:wT,VideoRedactionTool:ET,VolumeRotateTool:ZW,WholeBodySegmentTool:tz,WindowLevelRegionTool:zW,WindowLevelTool:Oh,ZoomTool:Gl,addTool:ki,annotation:aye,cancelActiveManipulations:tG,cursors:ipe,destroy:twe,drawing:Ome,init:rG,removeTool:TF,segmentation:YSe,splines:tTe,get state(){return Ye},store:ewe,synchronizers:Ewe,utilities:OSe,version:owe},Symbol.toStringTag,{value:"Module"}));function xz(t,e,r){if(t===void 0)throw new Error("decodeRGB: rgbBuffer must be defined");if(t.length%3!==0)throw new Error(`decodeRGB: rgbBuffer length ${t.length} must be divisible by 3`);const n=t.length/3;let i=0,o=0;if(r){for(let a=0;a>e;return n}function XC(t,e,r){const n=t[`${e}PaletteColorLookupTableData`];if(n)return Promise.resolve(n);const i=wt("imagePixelModule",t.imageId);return i&&typeof i.then=="function"?i.then(o=>o?o[`${e}PaletteColorLookupTableData`]:r):Promise.resolve(i?i[`${e}PaletteColorLookupTableData`]:r)}function _z(t,e,r){const n=t.columns*t.rows,i=t.pixelData;Promise.all([XC(t,"red",null),XC(t,"green",null),XC(t,"blue",null)]).then(([o,a,s])=>{if(!o||!a||!s)throw new Error("The image does not have a complete color palette. R, G, and B palette data are required.");const c=o.length;let l=0,f=0;const u=t.redPaletteColorLookupTableDescriptor[1],d=t.redPaletteColorLookupTableDescriptor[2]===8?0:8,h=qC(o,d),g=qC(a,d),p=qC(s,d);if(r){for(let v=0;vu+c-1?y=c-1:y-=u,e[f++]=h[y],e[f++]=g[y],e[f++]=p[y],e[f++]=255}return}for(let v=0;vu+c-1?y=c-1:y-=u,e[f++]=h[y],e[f++]=g[y],e[f++]=p[y]}})}function YC(t,e){if(!(!t.elements[e]||t.elements[e].length!==6))return[t.uint16(e,0),t.uint16(e,1),t.uint16(e,2)]}function JC(t,e,r){const n=[],i=t.elements[e];for(let o=0;o0?0:t.uint16("x00280103")}function mc(t,e,r){const n=[],i=t.string(e);if(!i)return;const o=i.split("\\");if(!(r&&o.lengthoe.byteArray.length-oe.position&&(Ot=oe.byteArray.length-oe.position),ce.fragments.push({offset:oe.position-le-8,position:oe.position,length:Ot}),oe.seek(Ot),void(ce.length=oe.position-ce.dataOffset);ce.fragments.push({offset:oe.position-le-8,position:oe.position,length:Ot}),oe.seek(Ot)}Te&&Te.push("pixel data element ".concat(ce.tag," missing sequence delimiter tag xfffee0dd"))}function T(oe,ce){if(oe===void 0)throw"dicomParser.findAndSetUNElementLength: missing required parameter 'byteStream'";for(var Te=oe.byteArray.length-8;oe.position<=Te;)if(oe.readUint16()===65534){var ae=oe.readUint16();if(ae===57565)return oe.readUint32()!==0&&oe.warnings("encountered non zero length following item delimiter at position ".concat(oe.position-4," while reading element of undefined length with tag ").concat(ce.tag)),void(ce.length=oe.position-ce.dataOffset)}ce.length=oe.byteArray.length-ce.dataOffset,oe.seek(oe.byteArray.length-oe.position)}function _(oe,ce,Te){if(Te<0)throw"dicomParser.readFixedString - length cannot be less than 0";if(ce+Te>oe.length)throw"dicomParser.readFixedString: attempt to read past end of buffer";for(var ae,we="",Ze=0;Zece.byteArray.length)throw"dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxP osition'";for(var we=oe.elements;ce.positionTe)throw"dicomParser:parseDicomDataSetExplicit: buffer overrun"}function ie(oe,ce,Te){var ae=3ce.byteArray.length)throw"dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";for(var we=oe.elements;ce.positionoe.length)throw"bigEndianByteArrayParser.readUint16: attempt to read past end of buffer";return(oe[ce]<<8)+oe[ce+1]},readInt16:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readInt16: position cannot be less than 0";if(ce+2>oe.length)throw"bigEndianByteArrayParser.readInt16: attempt to read past end of buffer";return ce=(oe[ce]<<8)+oe[ce+1],ce=32768&ce?ce-65535-1:ce},readUint32:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readUint32: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readUint32: attempt to read past end of buffer";return 256*(256*(256*oe[ce]+oe[ce+1])+oe[ce+2])+oe[ce+3]},readInt32:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readInt32: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readInt32: attempt to read past end of buffer";return(oe[ce]<<24)+(oe[ce+1]<<16)+(oe[ce+2]<<8)+oe[ce+3]},readFloat:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readFloat: position cannot be less than 0";if(ce+4>oe.length)throw"bigEndianByteArrayParser.readFloat: attempt to read past end of buffer";var Te=new Uint8Array(4);return Te[3]=oe[ce],Te[2]=oe[ce+1],Te[1]=oe[ce+2],Te[0]=oe[ce+3],new Float32Array(Te.buffer)[0]},readDouble:function(oe,ce){if(ce<0)throw"bigEndianByteArrayParser.readDouble: position cannot be less than 0";if(ce+8>oe.length)throw"bigEndianByteArrayParser.readDouble: attempt to read past end of buffer";var Te=new Uint8Array(8);return Te[7]=oe[ce],Te[6]=oe[ce+1],Te[5]=oe[ce+2],Te[4]=oe[ce+3],Te[3]=oe[ce+4],Te[2]=oe[ce+5],Te[1]=oe[ce+6],Te[0]=oe[ce+7],new Float64Array(Te.buffer)[0]}};function Me(oe,ce,Te){if(typeof Buffer<"u"&&oe instanceof Buffer)return oe.slice(ce,ce+Te);if(oe instanceof Uint8Array)return new Uint8Array(oe.buffer,oe.byteOffset+ce,Te);throw"dicomParser.from: unknown type for byteArray"}function Ue(oe,ce){for(var Te=0;Te"u"||!(we instanceof Buffer)))throw"dicomParser.ByteStream: parameter byteArray is not of type Uint8Array or Buffer";if(Ze<0)throw"dicomParser.ByteStream: parameter 'position' cannot be less than 0";if(Ze>=we.length)throw"dicomParser.ByteStream: parameter 'position' cannot be greater than or equal to 'byteArray' length";this.byteArrayParser=ae,this.byteArray=we,this.position=Ze||0,this.warnings=[]}var ce,Te;return ce=oe,(Te=[{key:"seek",value:function(ae){if(this.position+ae<0)throw"dicomParser.ByteStream.prototype.seek: cannot seek to position < 0";this.position+=ae}},{key:"readByteStream",value:function(ae){if(this.position+ae>this.byteArray.length)throw"dicomParser.ByteStream.prototype.readByteStream: readByteStream - buffer overread";var we=Me(this.byteArray,this.position,ae);return this.position+=ae,new oe(this.byteArrayParser,we)}},{key:"getSize",value:function(){return this.byteArray.length}},{key:"readUint16",value:function(){var ae=this.byteArrayParser.readUint16(this.byteArray,this.position);return this.position+=2,ae}},{key:"readUint32",value:function(){var ae=this.byteArrayParser.readUint32(this.byteArray,this.position);return this.position+=4,ae}},{key:"readFixedString",value:function(ae){var we=_(this.byteArray,this.position,ae);return this.position+=ae,we}}])&&Ue(ce.prototype,Te),Object.defineProperty(ce,"prototype",{writable:!1}),oe}(),B={readUint16:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readUint16: position cannot be less than 0";if(ce+2>oe.length)throw"littleEndianByteArrayParser.readUint16: attempt to read past end of buffer";return oe[ce]+256*oe[ce+1]},readInt16:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readInt16: position cannot be less than 0";if(ce+2>oe.length)throw"littleEndianByteArrayParser.readInt16: attempt to read past end of buffer";return ce=oe[ce]+(oe[ce+1]<<8),ce=32768&ce?ce-65535-1:ce},readUint32:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readUint32: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readUint32: attempt to read past end of buffer";return oe[ce]+256*oe[ce+1]+256*oe[ce+2]*256+256*oe[ce+3]*256*256},readInt32:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readInt32: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readInt32: attempt to read past end of buffer";return oe[ce]+(oe[ce+1]<<8)+(oe[ce+2]<<16)+(oe[ce+3]<<24)},readFloat:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readFloat: position cannot be less than 0";if(ce+4>oe.length)throw"littleEndianByteArrayParser.readFloat: attempt to read past end of buffer";var Te=new Uint8Array(4);return Te[0]=oe[ce],Te[1]=oe[ce+1],Te[2]=oe[ce+2],Te[3]=oe[ce+3],new Float32Array(Te.buffer)[0]},readDouble:function(oe,ce){if(ce<0)throw"littleEndianByteArrayParser.readDouble: position cannot be less than 0";if(ce+8>oe.length)throw"littleEndianByteArrayParser.readDouble: attempt to read past end of buffer";var Te=new Uint8Array(8);return Te[0]=oe[ce],Te[1]=oe[ce+1],Te[2]=oe[ce+2],Te[3]=oe[ce+3],Te[4]=oe[ce+4],Te[5]=oe[ce+5],Te[6]=oe[ce+6],Te[7]=oe[ce+7],new Float64Array(Te.buffer)[0]}};function M(oe){var ce=1"u")throw"dicomParser.parseDicom: no inflater available to handle deflate transfer syntax";return gt=oe.slice(Ae),ht=pako.inflateRaw(gt),(gt=he(oe,ht.length+Ae)).set(oe.slice(0,Ae),0),gt.set(ht,Ae),new be(B,gt,0)}(Tt,Ot.position),Ot=new D(Tt.byteArrayParser,Tt.byteArray,{});Ot.warnings=Tt.warnings;try{(le?te:ie)(Ot,Tt,Tt.byteArray.length,ce)}catch(_t){throw{exception:_t,dataSet:Ot}}return Ot}return function(Ze,le){for(var Tt in Ze.elements)Ze.elements.hasOwnProperty(Tt)&&(le.elements[Tt]=Ze.elements[Tt]);return Ze.warnings!==void 0&&(le.warnings=Ze.warnings.concat(le.warnings)),le}(Te=M(oe,ce),we(Te))}var Y=function(oe,ce,Te){for(var ae=0,we=ce;we= 0";if(Te>=le.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragmentIndex' must be < number of fragments";if(ae<1)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'numFragments' must be > 0";if(Te+ae>le.fragments.length)throw"dicomParser.readEncapsulatedPixelDataFromFragments: parameter 'startFragment' + 'numFragments' < number of fragments";var Ze=new be(oe.byteArrayParser,oe.byteArray,le.dataOffset),le=A(Ze);if(le.tag!=="xfffee000")throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";Ze.seek(le.length);var Tt=Ze.position;if(ae===1)return Me(Ze.byteArray,Tt+we[Te].offset+8,we[Te].length);for(var le=Y(we,Te,ae),Ot=he(Ze.byteArray,le),_t=0,Ae=Te;Ae= 0";if(Te>=ae.length)throw"dicomParser.readEncapsulatedImageFrame: parameter 'frameIndex' must be < basicOffsetTable.length";var Ze=ae[Te],Ze=re(we,Ze);if(Ze===void 0)throw"dicomParser.readEncapsulatedImageFrame: unable to find fragment that matches basic offset table entry";return ne(oe,ce,Ze,Se(Te,ae,we,Ze),we)}var je=!1;function qe(oe,ce,Te){if(je||(je=!0,console&&console.log&&console.log("WARNING: dicomParser.readEncapsulatedPixelData() has been deprecated")),oe===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'dataSet'";if(ce===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'element'";if(Te===void 0)throw"dicomParser.readEncapsulatedPixelData: missing required parameter 'frame'";if(ce.tag!=="x7fe00010")throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to non pixel data tag (expected tag = x7fe00010)";if(ce.encapsulatedPixelData!==!0||ce.hadUndefinedLength!==!0||ce.basicOffsetTable===void 0||ce.fragments===void 0)throw"dicomParser.readEncapsulatedPixelData: parameter 'element' refers to pixel data element that does not have encapsulated pixel data";if(Te<0)throw"dicomParser.readEncapsulatedPixelData: parameter 'frame' must be >= 0";return ce.basicOffsetTable.length!==0?Re(oe,ce,Te):ne(oe,ce,0,ce.fragments.length)}s.default={isStringVr:f,isPrivateTag:u,parsePN:d,parseTM:h,parseDA:p,explicitElementToString:v,explicitDataSetToJS:y,createJPEGBasicOffsetTable:x,parseDicomDataSetExplicit:te,parseDicomDataSetImplicit:ie,readFixedString:_,alloc:he,version:ue,bigEndianByteArrayParser:ve,ByteStream:be,sharedCopy:Me,DataSet:D,findAndSetUNElementLength:T,findEndOfEncapsulatedElement:S,findItemDelimitationItemAndSetElementLength:I,littleEndianByteArrayParser:B,parseDicom:W,readDicomElementExplicit:j,readDicomElementImplicit:O,readEncapsulatedImageFrame:Re,readEncapsulatedPixelData:qe,readEncapsulatedPixelDataFromFragments:ne,readPart10Header:M,readSequenceItemsExplicit:N,readSequenceItemsImplicit:G,readSequenceItem:A,readTag:C,LEI:"1.2.840.10008.1.2",LEE:"1.2.840.10008.1.2.1"}}],o={},n.m=i,n.c=o,n.d=function(a,s,c){n.o(a,s)||Object.defineProperty(a,s,{enumerable:!0,get:c})},n.r=function(a){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},n.t=function(a,s){if(1&s&&(a=n(a)),8&s||4&s&&typeof a=="object"&&a&&a.__esModule)return a;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:a}),2&s&&typeof a!="string")for(var l in a)n.d(c,l,(function(f){return a[f]}).bind(null,l));return c},n.n=function(a){var s=a&&a.__esModule?function(){return a.default}:function(){return a};return n.d(s,"a",s),s},n.o=function(a,s){return Object.prototype.hasOwnProperty.call(a,s)},n.p="",n(n.s=1);function n(a){if(o[a])return o[a].exports;var s=o[a]={i:a,l:!1,exports:{}};return i[a].call(s.exports,s,s.exports,n),s.l=!0,s.exports}var i,o})})(Dz);var Nr=Dz.exports;function Mm(t){const e=t.indexOf(":");let r=t.substring(e+1);const n=r.indexOf("frame=");let i;if(n!==-1){const s=r.substring(n+6);i=parseInt(s,10),r=r.substring(0,n-1)}const o=t.substring(0,e),a=i!==void 0?i-1:void 0;return{scheme:o,url:r,frame:i,pixelDataFrame:a}}let DT={open(t,e){t.open("get",e,!0)},beforeSend(){},beforeProcessing(t){return Promise.resolve(t.response)},imageCreated(){},strict:!1};function Iz(t){DT=Object.assign(DT,t)}function Pm(){return DT}function nx(t,e,r={},n={}){const i=Pm(),o=c=>{if(typeof i.errorInterceptor=="function"){const l=new Error("request failed");l.request=c,l.response=c.response,l.status=c.status,i.errorInterceptor(l)}},a=new XMLHttpRequest,s=new Promise((c,l)=>{i.open(a,t,r,n);const f=i.beforeSend(a,e,r,n);a.responseType="arraybuffer";const u=Object.assign({},r,f);Object.keys(u).forEach(function(d){u[d]!==null&&(d==="Accept"&&t.indexOf("accept=")!==-1||a.setRequestHeader(d,u[d]))}),n.deferred={resolve:c,reject:l},n.url=t,n.imageId=e,a.onloadstart=function(d){i.onloadstart&&i.onloadstart(d,n),ut(et,"cornerstoneimageloadstart",{url:t,imageId:e})},a.onloadend=function(d){i.onloadend&&i.onloadend(d,n),ut(et,"cornerstoneimageloadend",{url:t,imageId:e})},a.onreadystatechange=function(d){i.onreadystatechange&&i.onreadystatechange(d,n),a.readyState===4&&(a.status===200||a.status===206?i.beforeProcessing(a).then(c).catch(()=>{o(a),l(a)}):(o(a),l(a)))},a.onprogress=function(d){const h=d.loaded;let g,p;d.lengthComputable&&(g=d.total,p=Math.round(h/g*100)),ut(et,"cornerstoneimageloadprogress",{url:t,imageId:e,loaded:h,total:g,percentComplete:p}),i.onprogress&&i.onprogress(d,n)},a.onerror=function(){o(a),l(a)},a.onabort=function(){o(a),l(a)},a.send()});return s.xhr=a,s}function L_e(t,e,r){if(r+t.length>e.length)return!1;let n=r;for(let i=0;i{if(typeof i.errorInterceptor=="function"){const u=new Error("request failed");i.errorInterceptor(u)}},l=new F_e("streamRequest");return l.generate(async(f,u)=>{var g,p;const d=(g=i.beforeSend)==null?void 0:g.call(i,null,t,r,{}),h=Object.assign({},r,d);Object.keys(h).forEach(function(v){h[v]===null&&(h[v]=void 0),v==="Accept"&&t.indexOf("accept=")!==-1&&(h[v]=void 0)});try{const v=await fetch(t,{headers:h,signal:void 0});if(v.status!==200)throw new Error(`Couldn't retrieve ${t} got status ${v.status}`);const y=v.body.getReader(),m=v.headers,w=m.get("content-type"),x=Number(m.get("Content-Length"));let C=!1,S=a.encodedData,T=a.lastSize||0;for(a.isPartial=!0;!C;){const{done:_,value:E}=await y.read();if(S=U_e(S,E),!S){if(C)throw new Error(`Done but no image frame available ${e}`);continue}if(C=_||S.byteLength===x,!C&&S.lengthr-i&&(console.log(`Truncated fragment, changing fragment length from ${n.length} to ${r-i}`),n.length=r-i)}return t}function W_e(t){let e=Nr.parseDicom(t,{untilTag:"x7fe00010"});e.elements.x7fe00010||console.warn("Pixel data not found!");let r;try{r=Nr.parseDicom(t)}catch(n){console.error(n),console.log("pixel data dataset:",n.dataSet),r=n.dataSet}return e.elements.x7fe00010=r.elements.x7fe00010,e=G_e(e),e}async function Mz(t,e,r){const n=W_e(t),{uri:i,imageId:o,fileTotalLength:a}=r;return n.fetchMore=async function(s){const c=Object.assign({uri:i,imageId:o,fetchedLength:t.length,lengthToFetch:a-t.length},s),{fetchedLength:l,lengthToFetch:f}=c,{arrayBuffer:u}=await e(i,o,{byteRange:`${l}-${l+f}`}),d=new Uint8Array(u),h=new Uint8Array(n.byteArray.length+d.length);return h.set(n.byteArray),h.set(d,n.byteArray.length),Mz(h,e,r)},n}function z_e(t,e){if(!t)return;const{NumberOfFrames:r,PerFrameFunctionalGroupsSequence:n,SharedFunctionalGroupsSequence:i}=Rz(t);if(n||r>1){const{shared:o,perFrame:a}=Pz(n,i,e);return{NumberOfFrames:r,PerFrameFunctionalInformation:a,SharedFunctionalInformation:o}}return{NumberOfFrames:r}}function Pz(t,e,r){const n={};(e?Object.values(e.items[0].dataSet.elements):[]).map(o=>n[o.tag]=o);const i={};return(t?Object.values(t.items[r-1].dataSet.elements):[]).map(o=>i[o.tag]=o),{shared:n,perFrame:i}}function Rz(t){if(!t)return;const{elements:e,...r}=t,{x52009230:n,x52009229:i,...o}=e;return{NumberOfFrames:t.intString("x00280008"),PerFrameFunctionalGroupsSequence:n,SharedFunctionalGroupsSequence:i,otherElements:o,otherAttributtes:r}}function $_e(t,e){if(!e)return;const{NumberOfFrames:r,PerFrameFunctionalGroupsSequence:n,SharedFunctionalGroupsSequence:i,otherElements:o}=Rz(e);if(n||r>1){const{shared:a,perFrame:s}=Pz(n,i,t),c={elements:{...o,...a,...s}},l=Object.create(e);return Object.assign(l,c)}return e}let Ji={};const j_e=()=>{Ji={}};function W8(t){if(Ji[t])return Ji[t]}function H_e(t){const e=W8(t);return Lz(e)}function Lz(t){if(!t)return!1;const e=t.intString("x00280008");return e&&e>1}function K_e(t){return t.indexOf("&frame=")}function q_e(t){const e=K_e(t),r=e===-1?t:t.slice(0,e),n=parseInt(t.slice(e+7),10)||1;let i;return Ji[r]?i=Ji[r].dataSet:i=void 0,{dataSet:i,frame:n}}function X_e(t){const e=[],r=W8(t);if(Lz(r)){const n=r.intString("x00280008");for(let i=1;i<=n;i++)e.push(`${t}&frame=${i}`)}else e.push(t);return e}const Az={_get:W8,generateMultiframeWADOURIs:X_e,retrieveMultiframeDataset:q_e,isMultiframeDataset:H_e};let Lh=0,$f={};function Y_e(t){return Ji[t]!==void 0}function J_e(t){let e;if(t.includes("&frame=")){const{frame:r,dataSet:n}=Az.retrieveMultiframeDataset(t);e=$_e(r,n)}else Ji[t]&&(e=Ji[t].dataSet);return e}function Z_e(t,e){const r=Ji[t];if(!r){console.error(`No loaded dataSet for uri ${t}`);return}Lh-=r.dataSet.byteArray.length,r.dataSet=e,Lh+=e.byteArray.length,ut(et,"datasetscachechanged",{uri:t,action:"updated",cacheInfo:rx()})}function Q_e(t,e=nx,r){if(Ji[t])return new Promise(o=>{Ji[t].cacheCount++,o(Ji[t].dataSet)});if($f[t])return $f[t].cacheCount++,$f[t];const n=e(t,r),i=new Promise((o,a)=>{n.then(async function(s){const c={isPartialContent:!1,fileTotalLength:null};if(!(s instanceof ArrayBuffer)){if(!s.arrayBuffer)return a(new Error("If not returning ArrayBuffer, must return object with `arrayBuffer` parameter"));c.isPartialContent=s.flags.isPartialContent,c.fileTotalLength=s.flags.fileTotalLength,s=s.arrayBuffer}const l=new Uint8Array(s);let f;try{c.isPartialContent?f=await Mz(l,e,{uri:t,imageId:r,fileTotalLength:c.fileTotalLength}):f=Nr.parseDicom(l)}catch(u){return a(u)}Ji[t]={dataSet:f,cacheCount:i.cacheCount},Lh+=f.byteArray.length,o(f),ut(et,"datasetscachechanged",{uri:t,action:"loaded",cacheInfo:rx()})},a).then(()=>{delete $f[t]},()=>{delete $f[t]})});return i.cacheCount=1,$f[t]=i,i}function e4e(t){Ji[t]&&(Ji[t].cacheCount--,Ji[t].cacheCount===0&&(Lh-=Ji[t].dataSet.byteArray.length,delete Ji[t],ut(et,"datasetscachechanged",{uri:t,action:"unloaded",cacheInfo:rx()})))}function rx(){return{cacheSizeInBytes:Lh,numberOfDataSetsCached:Object.keys(Ji).length}}function t4e(){j_e(),$f={},Lh=0}const sh={isLoaded:Y_e,load:Q_e,unload:e4e,getInfo:rx,purge:t4e,get:J_e,update:Z_e};function n4e(t){const e=[];for(let r=0;r<=30;r+=2){let n=`x60${r.toString(16)}`;n.length===4&&(n=`x600${r.toString(16)}`);const i=t.elements[`${n}3000`];if(!i)continue;const o=[];for(let a=0;a>s&1}e.push({rows:t.uint16(`${n}0010`),columns:t.uint16(`${n}0011`),type:t.string(`${n}0040`),x:t.int16(`${n}0050`,1)-1,y:t.int16(`${n}0050`,0)-1,pixelData:o,description:t.string(`${n}0022`),label:t.string(`${n}1500`),roiArea:t.string(`${n}1301`),roiMean:t.string(`${n}1302`),roiStandardDeviation:t.string(`${n}1303`)})}return{overlays:e}}function lg(t){return t==="RECON TOMO"||t==="RECON GATED TOMO"}function z8(t,e){const r=t.string("x00080008");if(r){const n=r.split("\\");if(n.length>e)return n[e]}}function r4e(t){let e;const r=t.string("x00080060");if(r!=null&&r.includes("NM")){const n=z8(t,2);n&&lg(n)&&t.elements.x00540022&&(e=mc(t.elements.x00540022.items[0].dataSet,"x00200037",6))}return e}function i4e(t){let e;const r=t.string("x00080060");if(r!=null&&r.includes("NM")){const n=z8(t,2);n&&lg(n)&&t.elements.x00540022&&(e=mc(t.elements.x00540022.items[0].dataSet,"x00200032",3))}return e}function b7(t){let e=mc(t,"x00200037",6);return!e&&t.elements.x00209116&&(e=mc(t.elements.x00209116.items[0].dataSet,"x00200037",6)),e||(e=r4e(t)),e}function D7(t){let e=mc(t,"x00200032",3);return!e&&t.elements.x00209113&&(e=mc(t.elements.x00209113.items[0].dataSet,"x00200032",3)),e||(e=i4e(t)),e}function I7(t){let e=mc(t,"x00280030",2);return!e&&t.elements.x00289110&&(e=mc(t.elements.x00289110.items[0].dataSet,"x00280030",2)),e}function O7(t){let e;return t.elements.x00180050?e=t.floatString("x00180050"):t.elements.x00289110&&t.elements.x00289110.items.length&&t.elements.x00289110.items[0].dataSet.elements.x00180050&&(e=t.elements.x00289110.items[0].dataSet.floatString("x00180050")),e}function Nz(t,e,r){const n={};for(const i of r)try{const o=e(i,t);if(o){const a={};for(const s in o)if(s in o){const c=o4e(s);a[c]=o[s]}Object.assign(n,a)}}catch(o){console.error(`Error retrieving ${i} data:`,o)}return n}const o4e=t=>t.charAt(0).toUpperCase()+t.slice(1),kz=["multiframeModule","generalSeriesModule","patientStudyModule","imagePlaneModule","nmMultiframeGeometryModule","imagePixelModule","modalityLutModule","voiLutModule","sopCommonModule","petIsotopeModule","overlayPlaneModule","transferSyntax","petSeriesModule","petImageModule"];function M7(t){const e=t.elements.x00186011;return!e||!e.items?[]:e.items.map(n=>{const i=n.dataSet.double("x0018602c"),o=n.dataSet.double("x0018602e"),a=n.dataSet.uint16("x00186024"),s=n.dataSet.uint16("x00186026"),c=n.dataSet.uint16("x0018601a"),l=n.dataSet.uint16("x0018601e"),f=n.dataSet.uint16("x00186018"),u=n.dataSet.uint16("x0018601c"),d=n.dataSet.int32("x00186020")||null,h=n.dataSet.int32("x00186022")||null,g=n.dataSet.uint16("x0018602a"),p=n.dataSet.uint16("x00186028"),v=n.dataSet.uint16("x00186012"),y=n.dataSet.uint16("x00186014"),m=n.dataSet.uint16("x00186016"),w=n.dataSet.uint16("x00186030");return{regionLocationMinY0:c,regionLocationMaxY1:l,regionLocationMinX0:f,regionLocationMaxX1:u,referencePixelX0:d,referencePixelY0:h,physicalDeltaX:i,physicalDeltaY:o,physicalUnitsXDirection:a,physicalUnitsYDirection:s,referencePhysicalPixelValueY:g,referencePhysicalPixelValueX:p,regionSpatialFormat:v,regionDataType:y,regionFlags:m,transducerFrequency:w}})}function $8(t,e){const{MetadataModules:r}=Qa;if(Array.isArray(e))return;const n=Mm(e);if(t===r.MULTIFRAME){const a=Az.retrieveMultiframeDataset(n.url);return a.dataSet?z_e(a.dataSet,a.frame):void 0}let i=n.url;n.frame&&(i=`${i}&frame=${n.frame}`);const o=sh.get(i);if(o)return Vz(t,e,o)}function Vz(t,e,r){const{MetadataModules:n}=Qa;if(t===n.GENERAL_STUDY)return{studyDescription:r.string("x00081030"),studyDate:Nr.parseDA(r.string("x00080020")),studyTime:Nr.parseTM(r.string("x00080030")||""),accessionNumber:r.string("x00080050")};if(t===n.GENERAL_SERIES)return{modality:r.string("x00080060"),seriesInstanceUID:r.string("x0020000e"),seriesDescription:r.string("x0008103e"),seriesNumber:r.intString("x00200011"),studyInstanceUID:r.string("x0020000d"),seriesDate:Nr.parseDA(r.string("x00080021")),seriesTime:Nr.parseTM(r.string("x00080031")||""),acquisitionDate:Nr.parseDA(r.string("x00080022")),acquisitionTime:Nr.parseTM(r.string("x00080032")||"")};if(t===n.GENERAL_IMAGE)return{sopInstanceUID:r.string("x00080018"),instanceNumber:r.intString("x00200013"),lossyImageCompression:r.string("x00282110"),lossyImageCompressionRatio:r.floatString("x00282112"),lossyImageCompressionMethod:r.string("x00282114")};if(t===n.PATIENT)return{patientID:r.string("x00100020"),patientName:r.string("x00100010")};if(t===n.PATIENT_STUDY)return{patientAge:r.intString("x00101010"),patientSize:r.floatString("x00101020"),patientSex:r.string("x00100040"),patientWeight:r.floatString("x00101030")};if(t===n.NM_MULTIFRAME_GEOMETRY){const i=r.string("x00080060"),o=z8(r,2);return{modality:i,imageType:r.string("x00080008"),imageSubType:o,imageOrientationPatient:b7(r),imagePositionPatient:D7(r),sliceThickness:O7(r),pixelSpacing:I7(r),numberOfFrames:r.uint16("x00280008"),isNMReconstructable:lg(o)&&i.includes("NM")}}if(t===n.IMAGE_PLANE){const i=b7(r),o=D7(r),a=I7(r),s=O7(r);let c=null,l=null;a&&(l=a[0],c=a[1]);let f=null,u=null;return i&&(f=[parseFloat(i[0]),parseFloat(i[1]),parseFloat(i[2])],u=[parseFloat(i[3]),parseFloat(i[4]),parseFloat(i[5])]),{frameOfReferenceUID:r.string("x00200052"),rows:r.uint16("x00280010"),columns:r.uint16("x00280011"),imageOrientationPatient:i,rowCosines:f,columnCosines:u,imagePositionPatient:o,sliceThickness:s,sliceLocation:r.floatString("x00201041"),pixelSpacing:a,rowPixelSpacing:l,columnPixelSpacing:c}}if(t===n.CINE)return{frameTime:r.floatString("x00181063")};if(t===n.IMAGE_PIXEL)return Ez(r);if(t===n.VOI_LUT){const i=bz(r);return{windowCenter:mc(r,"x00281050",1),windowWidth:mc(r,"x00281051",1),voiLUTSequence:bT(i,r.elements.x00283010),voiLUTFunction:r.string("x00281056")}}if(t===n.MODALITY_LUT)return{rescaleIntercept:r.floatString("x00281052"),rescaleSlope:r.floatString("x00281053"),rescaleType:r.string("x00281054"),modalityLUTSequence:bT(r.uint16("x00280103"),r.elements.x00283000)};if(t===n.SOP_COMMON)return{sopClassUID:r.string("x00080016"),sopInstanceUID:r.string("x00080018")};if(t===n.PET_ISOTOPE){const i=r.elements.x00540016;if(i===void 0)return;const o=i.items[0].dataSet;return{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:Nr.parseTM(o.string("x00181072")||""),radionuclideTotalDose:o.floatString("x00181074"),radionuclideHalfLife:o.floatString("x00181075")}}}if(t===n.OVERLAY_PLANE)return n4e(r);if(t==="transferSyntax"){let i;try{i=r.string("x00020010")}catch{}return{transferSyntaxUID:i}}if(t===n.PET_SERIES)return{correctedImage:r.string("x00280051"),units:r.string("x00541001"),decayCorrection:r.string("x00541102")};if(t===n.PET_IMAGE)return{frameReferenceTime:r.floatString(r.string("x00541300")||""),actualFrameDuration:r.intString(r.string("x00181242"))};if(t===n.ULTRASOUND_ENHANCED_REGION)return M7(r);if(t===n.CALIBRATION&&r.string("x00080060")==="US")return{sequenceOfUltrasoundRegions:M7(r)};if(t==="instance")return Nz(e,$8,kz)}let ix=[];function a4e(t){return`dicomfile:${ix.push(t)-1}`}function s4e(t){return ix[t]}function c4e(t){ix[t]=void 0}function l4e(){ix=[]}const Fz={add:a4e,get:s4e,remove:c4e,purge:l4e};function u4e(t){const e=t.intString("x00280008"),r=t.elements.x7fe00010;return e!==r.fragments.length}function Uz(t,e){if(t.elements.x7fe00010&&t.elements.x7fe00010.basicOffsetTable.length)return Nr.readEncapsulatedImageFrame(t,t.elements.x7fe00010,e);if(u4e(t)){const l=Nr.createJPEGBasicOffsetTable(t,t.elements.x7fe00010);return Nr.readEncapsulatedImageFrame(t,t.elements.x7fe00010,e,l)}const r=t.elements.x7fe00010.fragments,n=new Nr.ByteStream(t.byteArrayParser,t.byteArray,t.elements.x7fe00010.dataOffset),i=Nr.readSequenceItem(n);if(i.tag!=="xfffee000")throw"dicomParser.readEncapsulatedPixelData: missing basic offset table xfffee000";n.seek(i.length);const o=n.position;if(e+1>r.length)throw"dicomParser.readEncapsulatedPixelData: frame exceeds number of fragments";const s=o+r[e].offset+8,c=r[e].length;return new Uint8Array(n.byteArray.buffer.slice(n.byteArray.byteOffset+s,n.byteArray.byteOffset+s+c))}function f4e(t,e){return t&1<=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l))}else if(n===16){if(f=c+e*l*2,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l*2))}else if(n===1){if(f=c+e*l*.125,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return Bz(t.byteArray,f,l)}else if(n===32){if(f=c+e*l*4,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l*4))}throw new Error("unsupported pixel format")}function Wz(t){const e=Mm(t),r=parseInt(e.url,10),n=Fz.get(r);return new Promise((i,o)=>{const a=new FileReader;a.onload=s=>{const c=s.target.result;i(c)},a.onerror=o,a.readAsArrayBuffer(n)})}function j8(t,e=0){const r=t.elements.x7fe00010||t.elements.x7fe00008;return r?r.encapsulatedPixelData?Uz(t,e):Gz(t,e):null}function ox(t){let e=t[0],r=t[0],n;const i=t.length;for(let o=1;o{const s=new FileReader;s.readAsBinaryString===void 0?s.readAsArrayBuffer(i):s.readAsBinaryString(i),s.onload=function(){const c=new Image;c.onload=function(){r.height=c.height,r.width=c.width,t.rows=c.height,t.columns=c.width;const l=r.getContext("2d");l.drawImage(this,0,0);const f=l.getImageData(0,0,c.width,c.height),u=new Date().getTime();t.pixelData=new Uint8Array(f.data.buffer),t.imageData=f,t.decodeTimeInMS=u-n;const d=ox(t.pixelData);t.smallestPixelValue=d.min,t.largestPixelValue=d.max,t.pixelDataLength=t.pixelData.length,o(t)},c.onerror=function(l){a(l)},s.readAsBinaryString===void 0?c.src=`data:image/jpeg;base64,${window.btoa(g4e(s.result))}`:c.src=`data:image/jpeg;base64,${window.btoa(s.result)}`},s.onerror=c=>{a(c)}})}function pa(t,e,r,n,i){const o={...n};delete o.loader,delete o.streamingData;const a=vl(),s=o.priority||void 0;return o.transferPixelData&&r.buffer,a.executeTask("dicomImageLoader","decodeTask",{imageFrame:t,transferSyntax:e,pixelData:r,options:o,decodeConfig:i},{priority:s,requestType:o==null?void 0:o.requestType})}function m4e(t,e,r,n,i={},o){switch(e){case"1.2.840.10008.1.2":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.1":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.2":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.1.99":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.5":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.50":return t.bitsAllocated===8&&(t.samplesPerPixel===3||t.samplesPerPixel===4)?$z(t,r,n):pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.51":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.57":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.70":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.80":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.81":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.90":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.91":return pa(t,e,r,i,o);case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":return pa(t,e,r,i,o)}return Promise.reject(new Error(`No decoder for transfer syntax ${e}`))}function jz(t){const e=wt("imagePixelModule",t);return{samplesPerPixel:e.samplesPerPixel,photometricInterpretation:e.photometricInterpretation,planarConfiguration:e.planarConfiguration,rows:e.rows,columns:e.columns,bitsAllocated:e.bitsAllocated,bitsStored:e.bitsStored,pixelRepresentation:e.pixelRepresentation,smallestPixelValue:e.smallestPixelValue,largestPixelValue:e.largestPixelValue,redPaletteColorLookupTableDescriptor:e.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:e.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:e.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:e.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:e.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:e.bluePaletteColorLookupTableData,pixelData:void 0,imageId:t}}function v4e(t,e){const r=t.get("modalityLutModule",e)||{},n=t.get("generalSeriesModule",e)||{},{modality:i}=n,o={rescaleSlope:r.rescaleSlope,rescaleIntercept:r.rescaleIntercept,modality:i},a=t.get("scalingModule",e)||{};return{...o,...i==="PT"&&{suvbw:a.suvbw},...i==="RTDOSE"&&{doseGridScaling:a.DoseGridScaling,doseSummation:a.DoseSummation,doseType:a.DoseType,doseUnit:a.DoseUnit}}}function H8(t){return t==="RGB"||t==="PALETTE COLOR"||t==="YBR_FULL"||t==="YBR_FULL_422"||t==="YBR_PARTIAL_422"||t==="YBR_PARTIAL_420"||t==="YBR_RCT"||t==="YBR_ICT"}function y4e(t,e){const r=t.length/4;let n=0,i=0;for(let o=0;o=0?e<=255?r=Uint8Array:e<=65535?r=Uint16Array:e<=4294967295&&(r=Uint32Array):t>=-128&&e<=127?r=Int8Array:t>=-32768&&e<=32767&&(r=Int16Array)),r||Float32Array}function x4e(t,e,r){return K8(t,e)===r}function C4e(t){const e=t.smallestPixelValue,r=t.largestPixelValue,n=K8(e,r);if(n){const i=new n(t.pixelData);t.pixelData=i}else throw new Error("Could not apply a typed array to the pixel data")}let P7="";function ax(t,e,r,n={}){const i=n.useRGBA;if(n.preScale={enabled:n.preScale&&n.preScale.enabled!==void 0?n.preScale.enabled:!0},!(e!=null&&e.length))return Promise.reject(new Error("The pixel data is missing"));const{MetadataModules:o}=Qa,a=document.createElement("canvas"),s=jz(t);if(s.decodeLevel=n.decodeLevel,n.allowFloatRendering=fw(),n.preScale.enabled){const u=v4e(R4,t);u&&(n.preScale={...n.preScale,scalingParameters:u})}const{decodeConfig:c}=Pm();Object.keys(s).forEach(u=>{(typeof s[u]=="function"||s[u]instanceof Promise)&&delete s[u]});const l=m4e(s,r,e,a,n,c),f=H8(s.photometricInterpretation);return new Promise((u,d)=>{l.then(function(h){let g=!1;if(n.targetBuffer&&n.targetBuffer.type&&!f){const{arrayBuffer:_,type:E,offset:b=0,length:D}=n.targetBuffer,I=h.pixelDataLength,P=b,O=D??I-P,A={Uint8Array,Uint16Array,Int16Array,Float32Array,Uint32Array};if(O!==h.pixelDataLength)throw new Error(`target array for image does not have the same length (${O}) as the decoded image length (${h.pixelDataLength}).`);const V=A[E],G=_?new V(_,P,O):new V(h.pixelData);if(O!==h.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");h.pixelData=G,g=!0}g||C4e(h);const p=wt(o.IMAGE_PLANE,t)||{},v=wt(o.VOI_LUT,t)||{},y=wt(o.MODALITY_LUT,t)||{},m=wt(o.SOP_COMMON,t)||{},w=wt(o.CALIBRATION,t)||{},{rows:x,columns:C}=h;if(f){if(h4e(h)){a.height=h.rows,a.width=h.columns;let b=a.getContext("2d").createImageData(h.columns,h.rows);i||(b={...b,data:new Uint8ClampedArray(3*h.columns*h.rows)}),zz(h,b.data,i),h.imageData=b,h.pixelData=b.data,h.pixelDataLength=b.data.length}else if(!i&&h.pixelDataLength===4*x*C){const E=new Uint8Array(h.pixelData.length/4*3);h.pixelData=y4e(h.pixelData,E),h.pixelDataLength=h.pixelData.length}const _=ox(h.pixelData);h.smallestPixelValue=_.min,h.largestPixelValue=_.max}const S=hc.createImageVoxelManager({scalarData:h.pixelData,width:h.columns,height:h.rows,numberOfComponents:h.samplesPerPixel}),T={imageId:t,dataType:h.pixelData.constructor.name,color:f,calibration:w,columnPixelSpacing:p.columnPixelSpacing,columns:h.columns,height:h.rows,preScale:h.preScale,intercept:y.rescaleIntercept?y.rescaleIntercept:0,slope:y.rescaleSlope?y.rescaleSlope:1,invert:h.photometricInterpretation==="MONOCHROME1",minPixelValue:h.smallestPixelValue,maxPixelValue:h.largestPixelValue,rowPixelSpacing:p.rowPixelSpacing,rows:h.rows,sizeInBytes:h.pixelData.byteLength,width:h.columns,windowCenter:v.windowCenter?v.windowCenter[0]:void 0,windowWidth:v.windowWidth?v.windowWidth[0]:void 0,voiLUTFunction:v.voiLUTFunction?v.voiLUTFunction:void 0,decodeTimeInMS:h.decodeTimeInMS,floatPixelData:void 0,imageFrame:h,voxelManager:S,rgba:f&&i,getPixelData:()=>h.pixelData,getCanvas:void 0,numberOfComponents:h.samplesPerPixel};if(T.color&&(T.getCanvas=function(){if(P7===t)return a;const _=T.columns,E=T.rows;a.height=E,a.width=_;const b=a.getContext("2d"),D=b.createImageData(_,E),I=h.pixelData;if(I.length===_*E*4)for(let P=0;P0&&w4e(m.sopClassUID)&&(T.modalityLUT=y.modalityLUTSequence[0]),v.voiLUTSequence&&v.voiLUTSequence.length>0&&(T.voiLUT=v.voiLUTSequence[0]),T.color&&(T.windowWidth=256,T.windowCenter=128),T.windowCenter===void 0||T.windowWidth===void 0){const _=T.imageFrame.smallestPixelValue,E=T.imageFrame.largestPixelValue;T.windowWidth=E-_,T.windowCenter=(E+_)/2}u(T)},d)})}const{ImageQualityStatus:Hz}=Qa;function S4e(t,e){t.decache=function(){const r=Mm(e);sh.unload(r.url)}}function Kz(t,e,r=0,n,i,o){const a=new Date().getTime(),s={cancelFn:void 0,promise:void 0};return s.promise=new Promise((c,l)=>{t.then(f=>{const u=j8(f,r),d=f.string("x00020010"),h=new Date().getTime(),g=ax(e,u,d,i);S4e(s,e),g.then(p=>{p=p,p.data=f,p.sharedCacheKey=n;const v=new Date().getTime();p.loadTimeInMS=h-a,p.totalTimeInMS=v-a,p.imageQualityStatus=Hz.FULL_RESOLUTION,o!==void 0&&o.imageDoneCallback!==void 0&&o.imageDoneCallback(p),c(p)},function(p){l({error:p,dataSet:f})})},function(f){l({error:f})})}),s}function T4e(t,e,r=0,n,i){const o=new Date().getTime();return{promise:new Promise((s,c)=>{const l=new Date().getTime();let f;try{const u=j8(t,r),d=t.string("x00020010");f=ax(e,u,d,i)}catch(u){c({error:u,dataSet:t});return}f.then(u=>{u=u,u.data=t;const d=new Date().getTime();u.loadTimeInMS=l-o,u.totalTimeInMS=d-o,u.imageQualityStatus=Hz.FULL_RESOLUTION,s(u)},c)}),cancelFn:void 0}}function qz(t){if(t==="dicomweb"||t==="wadouri")return nx;if(t==="dicomfile")return Wz}function U2(t,e={}){const r=Mm(t);e=Object.assign({},e),delete e.loader;const n=qz(r.scheme);if(sh.isLoaded(r.url)){const o=sh.get(r.url,n,t);return T4e(o,t,r.pixelDataFrame,r.url,e)}const i=sh.load(r.url,n,t);return Kz(i,t,r.frame,r.url,e)}function Xz(){ld("dicomweb",U2),ld("wadouri",U2),ld("dicomfile",U2),Wh($8)}const _4e={getImagePixelModule:Ez,getLUTs:bT,getModalityLUTOutputPixelRepresentation:bz,getNumberValues:mc,metaDataProvider:$8,metadataForDataset:Vz},E4e={metaData:_4e,dataSetCacheManager:sh,fileManager:Fz,getEncapsulatedImageFrame:Uz,getUncompressedImageFrame:Gz,loadFileRequest:Wz,loadImageFromPromise:Kz,getLoaderForScheme:qz,getPixelData:j8,loadImage:U2,parseImageId:Mm,unpackBinaryFrame:Bz,register:Xz};function sn(t,e,r){return e=e||0,!t||!t.Value||Array.isArray(t.Value)&&t.Value.length<=e?r:t.Value[e]}function b4e(t,e,r){const n=sn(t,e,r);if(n!==void 0)return parseFloat(String(n))}function Zn(t,e){const r=sn(t,e);if(r!==void 0)return parseFloat(r)}function Po(t,e){if(!t||!t.Value||!Array.isArray(t.Value)||e&&t.Value.length>s&1}e.push({rows:Zn(t[`${n}0010`]),columns:Zn(t[`${n}0011`]),type:sn(t[`${n}0040`]),x:Zn(t[`${n}0050`],1)-1,y:Zn(t[`${n}0050`],0)-1,pixelData:o,description:sn(t[`${n}0022`]),label:sn(t[`${n}1500`]),roiArea:sn(t[`${n}1301`]),roiMean:sn(t[`${n}1302`]),roiStandardDeviation:sn(t[`${n}1303`])})}return{overlays:e}}function sx(t){const e=t.indexOf(":");return t.substring(e+1)}function ch(t,e=!0){return t&&t.Value?t.Value[0]&&e?t.Value[0]:t.Value:t}function Yz(t,e,r){const n=(e?Object.values(e[0]):[]).map(o=>{var a;return(a=o.Value)==null?void 0:a[0]}).filter(o=>o!==void 0&&typeof o=="object"),i=(t?Object.values(t[r-1]):[]).map(o=>{var a;return(a=o.Value)==null?void 0:a[0]}).filter(o=>o!==void 0&&typeof o=="object");return{shared:n,perFrame:i}}function Jz(t){let{52009230:e,52009229:r,"00280008":n,...i}=t;return e=ch(e,!1),r=ch(r,!1),n=ch(n),{PerFrameFunctionalGroupsSequence:e,SharedFunctionalGroupsSequence:r,NumberOfFrames:n,rest:i}}function I4e(t,e){const{PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:n,NumberOfFrames:i,rest:o}=Jz(e);if(r||i>1){const{shared:a,perFrame:s}=Yz(r,n,t),c=Object.assign(e,{frameNumber:t});return[...a,...s].forEach(l=>{Object.entries(l).forEach(([f,u])=>{c[f]=u})}),Object.assign(o,{"00280008":i},c)}return e}let Rm=[],R5={};function Zz(t){const e=t.indexOf("/frames/")+8,r=t.slice(0,e),n=parseInt(t.slice(e),10);return{metadata:Rm[`${r}1`],frame:n}}function O4e(t){const e=sx(t);return Zz(e)}function M4e(t){if(t[52009230]!==void 0||t[52009229]!==void 0)return!0;const e=sn(t["00280008"]);return e&&e>1}function P4e(t,e){const r=sx(t);Object.defineProperty(e,"isMultiframe",{value:M4e(e),enumerable:!1}),Rm[r]=e}function R4e(t){const e=sx(t),r=Rm[e];if(r&&!(r!=null&&r.isMultiframe))return r;const n=R5[e];if(n)return n;const i=Zz(e);if(!i||!i.metadata)return;const{metadata:o,frame:a}=i;if(o){const s=I4e(a,o);return R5[e]=s,s}}function L4e(t){const e=sx(t);Rm[e]=void 0,R5[e]=void 0}function A4e(){Rm=[],R5={}}const q8={add:P4e,get:R4e,remove:L4e,purge:A4e};function Qz(t){return sn(t["00080060"]).includes("NM")}function X8(t,e){const r=ch(t["00080008"],!1);if(r)return r[e]}function N4e(t){let e;const r=X8(t,2);if(r&&lg(r)){const n=ch(t["00540022"]);n&&(e=Po(n["00200037"],6))}return e}function k4e(t){let e;const r=X8(t,2);if(r&&lg(r)){const n=ch(t["00540022"]);n&&(e=Po(n["00200032"],3))}return e}function R7(t){let e=Po(t["00200037"],6);return!e&&Qz(t)&&(e=N4e(t)),e}function L7(t){let e=Po(t["00200032"],3);return!e&&Qz(t)&&(e=k4e(t)),e}function Oo(t,e){const r=Po(t[e]);return r?r[0]:null}function V4e(t){var e;return(e=t==null?void 0:t.Value)!=null&&e.length?Array.isArray(t.Value)?t.Value:typeof t.Value=="object"?(console.warn("Warning: Value should be an array, but an object was found. Encapsulating the object in an array."),[t.Value]):[]:[]}function A7(t){const e=V4e(t["00186011"]);return!e||!e.length?null:e.map(n=>{const i=Oo(n,"0018602C"),o=Oo(n,"0018602E"),a=Oo(n,"00186024"),s=Oo(n,"00186026"),c=Oo(n,"0018601A"),l=Oo(n,"0018601E"),f=Oo(n,"00186018"),u=Oo(n,"0018601C"),d=Oo(n,"00186020"),h=Oo(n,"00186022"),g=Oo(n,"0018602A"),p=Oo(n,"00186028"),v=Oo(n,"00186012"),y=Oo(n,"00186014"),m=Oo(n,"00186016"),w=Oo(n,"00186030");return{regionLocationMinY0:c,regionLocationMaxY1:l,regionLocationMinX0:f,regionLocationMaxX1:u,referencePixelX0:d,referencePixelY0:h,physicalDeltaX:i,physicalDeltaY:o,physicalUnitsXDirection:a,physicalUnitsYDirection:s,referencePhysicalPixelValueY:g,referencePhysicalPixelValueX:p,regionSpatialFormat:v,regionDataType:y,regionFlags:m,transducerFrequency:w}})}function Y8(t,e){const{MetadataModules:r}=Qa;if(t===r.MULTIFRAME){const{metadata:i,frame:o}=O4e(e);if(!i)return;const{PerFrameFunctionalGroupsSequence:a,SharedFunctionalGroupsSequence:s,NumberOfFrames:c}=Jz(i);if(a||c>1){const{shared:l,perFrame:f}=Yz(a,s,o);return{NumberOfFrames:c,PerFrameFunctionalInformation:f,SharedFunctionalInformation:l}}return{NumberOfFrames:c}}const n=q8.get(e);if(n){if(t===r.GENERAL_STUDY)return{studyDescription:sn(n["00081030"]),studyDate:Nr.parseDA(sn(n["00080020"])),studyTime:Nr.parseTM(sn(n["00080030"],0,"")),accessionNumber:sn(n["00080050"])};if(t===r.GENERAL_SERIES)return{modality:sn(n["00080060"]),seriesInstanceUID:sn(n["0020000E"]),seriesDescription:sn(n["0008103E"]),seriesNumber:Zn(n["00200011"]),studyInstanceUID:sn(n["0020000D"]),seriesDate:Nr.parseDA(sn(n["00080021"])),seriesTime:Nr.parseTM(sn(n["00080031"],0,"")),acquisitionDate:Nr.parseDA(sn(n["00080022"])),acquisitionTime:Nr.parseTM(sn(n["00080032"],0,""))};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:sn(n["00080018"]),instanceNumber:Zn(n["00200013"]),lossyImageCompression:sn(n["00282110"]),lossyImageCompressionRatio:Zn(n["00282112"]),lossyImageCompressionMethod:sn(n["00282114"])};if(t===r.PATIENT)return{patientID:sn(n["00100020"]),patientName:sn(n["00100010"])};if(t===r.PATIENT_STUDY)return{patientAge:Zn(n["00101010"]),patientSize:Zn(n["00101020"]),patientSex:sn(n["00100040"]),patientWeight:Zn(n["00101030"])};if(t===r.NM_MULTIFRAME_GEOMETRY){const i=sn(n["00080060"]),o=X8(n,2);return{modality:i,imageType:sn(n["00080008"]),imageSubType:o,imageOrientationPatient:R7(n),imagePositionPatient:L7(n),sliceThickness:Zn(n["00180050"]),spacingBetweenSlices:Zn(n["00180088"]),pixelSpacing:Po(n["00280030"],2),numberOfFrames:Zn(n["00280008"]),isNMReconstructable:lg(o)&&i.includes("NM")}}if(t===r.IMAGE_PLANE){let i=R7(n),o=L7(n);const a=Po(n["00280030"],2);let s=null,c=null,l=null,f=null,u=!1;return a?(c=a[0],s=a[1]):(u=!0,c=1,s=1),i?(l=[parseFloat(i[0]),parseFloat(i[1]),parseFloat(i[2])],f=[parseFloat(i[3]),parseFloat(i[4]),parseFloat(i[5])]):(l=[1,0,0],f=[0,1,0],u=!0,i=[...l,...f]),o||(o=[0,0,0],u=!0),{frameOfReferenceUID:sn(n["00200052"]),rows:Zn(n["00280010"]),columns:Zn(n["00280011"]),imageOrientationPatient:i,rowCosines:l,columnCosines:f,imagePositionPatient:o,sliceThickness:Zn(n["00180050"]),sliceLocation:Zn(n["00201041"]),pixelSpacing:a,rowPixelSpacing:c,columnPixelSpacing:s,usingDefaultValues:u}}if(t===r.ULTRASOUND_ENHANCED_REGION)return A7(n);if(t===r.CALIBRATION&&sn(n["00080060"])==="US")return{sequenceOfUltrasoundRegions:A7(n)};if(t===r.IMAGE_URL)return F4e(e,n);if(t===r.CINE)return U4e(e,n);if(t===r.IMAGE_PIXEL)return{samplesPerPixel:Zn(n["00280002"]),photometricInterpretation:sn(n["00280004"]),rows:Zn(n["00280010"]),columns:Zn(n["00280011"]),bitsAllocated:Zn(n["00280100"]),bitsStored:Zn(n["00280101"]),highBit:sn(n["00280102"]),pixelRepresentation:Zn(n["00280103"]),planarConfiguration:Zn(n["00280006"]),pixelAspectRatio:sn(n["00280034"]),smallestPixelValue:Zn(n["00280106"]),largestPixelValue:Zn(n["00280107"]),redPaletteColorLookupTableDescriptor:Po(n["00281101"]),greenPaletteColorLookupTableDescriptor:Po(n["00281102"]),bluePaletteColorLookupTableDescriptor:Po(n["00281103"]),redPaletteColorLookupTableData:Po(n["00281201"]),greenPaletteColorLookupTableData:Po(n["00281202"]),bluePaletteColorLookupTableData:Po(n["00281203"])};if(t===r.VOI_LUT)return{windowCenter:Po(n["00281050"],1),windowWidth:Po(n["00281051"],1),voiLUTFunction:sn(n["00281056"])};if(t===r.MODALITY_LUT)return{rescaleIntercept:Zn(n["00281052"]),rescaleSlope:Zn(n["00281053"]),rescaleType:sn(n["00281054"])};if(t===r.SOP_COMMON)return{sopClassUID:sn(n["00080016"]),sopInstanceUID:sn(n["00080018"])};if(t===r.PET_ISOTOPE){const i=sn(n["00540016"]);return i===void 0?void 0:{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:Nr.parseTM(sn(i["00181072"],0,"")),radiopharmaceuticalStartDateTime:sn(i["00181078"],0,""),radionuclideTotalDose:Zn(i["00181074"]),radionuclideHalfLife:Zn(i["00181075"])}}}if(t===r.OVERLAY_PLANE)return D4e(n);if(t==="transferSyntax")return e$(e,n);if(t===r.PET_SERIES)return{correctedImage:sn(n["00280051"]),units:sn(n["00541001"]),decayCorrection:sn(n["00541102"])};if(t===r.PET_IMAGE)return{frameReferenceTime:Zn(n["00541300"]),actualFrameDuration:Zn(n["00181242"])};if(t==="instance")return Nz(e,Y8,kz)}}function F4e(t,e){const{transferSyntaxUID:r}=e$(t,e),n=CV(r),i=t.substring(7),o=i.replace("/frames/","/thumbnail/");let a=i.replace("/frames/","/rendered/");return n&&(a=a.replace("/rendered/1","/rendered")),{isVideo:n,rendered:a,thumbnail:o}}function U4e(t,e){return{cineRate:sn(e["00180040"]),numberOfFrames:Zn(e["00280008"])}}function e$(t,e){return{transferSyntaxUID:sn(e["00020010"])||sn(e["00083002"])}}function B4e(t,e,r={},n={}){const i=Pm(),{retrieveOptions:o={},streamingData:a}=n,s=a.chunkSize||W4e(e,o,"chunkSize")||65536,c=f=>{if(typeof i.errorInterceptor=="function"){const u=new Error("request failed");i.errorInterceptor(u)}else console.warn("rangeRequest:Caught",f)};return new Promise(async(f,u)=>{const d=Object.assign({},r);Object.keys(d).forEach(function(h){(d[h]===null||d[h]===void 0)&&delete d[h]});try{a.encodedData||(a.chunkSize=s,a.rangesFetched=0);const h=z4e(a,o),{encodedData:g,responseHeaders:p}=await G4e(t,d,h,a),v=p.get("content-type"),{totalBytes:y}=a,m=y===g.byteLength,w=B8(v,g,{isPartial:!0}),x=G8(o,m||w.extractDone);f({...w,imageQualityStatus:x,percentComplete:w.extractDone?100:s*100/y})}catch(h){c(h),console.error(h),u(h)}})}async function G4e(t,e,r,n){r&&(e=Object.assign(e,{Range:`bytes=${r[0]}-${r[1]}`}));let{encodedData:i}=n;if(r[1]&&(i==null?void 0:i.byteLength)>r[1])return n;const o=await fetch(t,{headers:e,signal:void 0}),a=await o.arrayBuffer(),s=new Uint8Array(a),{status:c}=o;let l;i?(l=new Uint8Array(i.length+s.length),l.set(i,0),l.set(s,i.length),n.rangesFetched=1):(l=new Uint8Array(s.length),l.set(s,0),n.rangesFetched++),n.encodedData=i=l,n.responseHeaders=o.headers;const f=o.headers.get("Content-Range");return f?n.totalBytes=Number(f.split("/")[1]):c!==206||!r?n.totalBytes=i==null?void 0:i.byteLength:r[1]===""||(i==null?void 0:i.length)r-i?[(n==null?void 0:n.byteLength)||0,""]:[(n==null?void 0:n.byteLength)||0,i*(o+1)-1]}function J8(t,e,r="application/octet-stream",n){const{streamingData:i,retrieveOptions:o={}}=n||{},a={Accept:r};let s=o.urlArguments?`${t}${t.indexOf("?")===-1?"?":"&"}${o.urlArguments}`:t;if(o.framesPath&&(s=s.replace("/frames/",o.framesPath)),(i==null?void 0:i.url)!==s&&(n.streamingData={url:s}),o.rangeIndex!==void 0)return B4e(s,e,a,n);if(o.streaming)return Oz(s,e,a,n);const c=nx(s,e,a),{xhr:l}=c;return c.then(function(f){const u=l.getResponseHeader("Content-Type")||"application/octet-stream",d=B8(u,new Uint8Array(f));return d.imageQualityStatus=G8(o,!0),d})}const{ProgressiveIterator:N7}=Rn,{ImageQualityStatus:k7}=Qa,$4e=new Set(["3.2.840.10008.1.2.4.96","1.2.840.10008.1.2.4.202","1.2.840.10008.1.2.4.203"]);function j4e(t){const e="1.2.840.10008.1.2";if(!t)return e;const r=t.split(";"),n={};r.forEach(o=>{const a=o.split("=");if(a.length!==2)return;const s=a[1].trim().replace(/"/g,"");n[a[0].trim()]=s});const i={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return n["transfer-syntax"]?n["transfer-syntax"]:t&&!Object.keys(n).length&&i[t]?i[t]:n.type&&i[n.type]?i[n.type]:i[t]?i[t]:e}function H4e(){return Kh}const K4e="multipart/related; type=application/octet-stream; transfer-syntax=*";function t$(t,e={}){const r=H4e(),n=new Date().getTime(),i=new N7("decompress");async function o(f,u,d){i.generate(async h=>{var v;const g=N7.as(J8(f,u,d,e));let p=10;for await(const y of g){const{pixelData:m,imageQualityStatus:w=k7.FULL_RESOLUTION,percentComplete:x,done:C=!0,extractDone:S=!0}=y,T=j4e(y.contentType);if(!S&&!$4e.has(T))continue;const _=y.decodeLevel??(w===k7.FULL_RESOLUTION?0:q4e(x,(v=e.retrieveOptions)==null?void 0:v.decodeLevel));if(!(!C&&p<=_))try{const E={...e,decodeLevel:_},b=await ax(u,m,T,E),D=new Date().getTime();b.loadTimeInMS=D-n,b.transferSyntaxUID=T,b.imageQualityStatus=w,h.add(b,C),p=_}catch(E){if(S)throw console.warn("Couldn't decode",E),E}}})}const a=e.requestType||pn.Interaction,s=e.additionalDetails||{imageId:t},c=e.priority===void 0?5:e.priority,l=t.substring(7);return r.addRequest(o.bind(this,l,t,K4e),a,s,c),{promise:i.getDonePromise(),cancelFn:void 0}}function q4e(t,e=4){const r=t/100-.02;return r>1/4?Math.min(e,0):r>1/16?Math.min(e,1):r>1/64?Math.min(e,2):Math.min(e,3)}function n$(){ld("wadors",t$),Wh(Y8)}const X4e={getNumberString:b4e,getNumberValue:Zn,getNumberValues:Po,getValue:sn,metaDataProvider:Y8},Y4e={metaData:X4e,findIndexOfString:IT,getPixelData:J8,loadImage:t$,metaDataManager:q8,register:n$};function J4e(){n$(),Xz()}const Z4e=()=>new Worker(new URL("/static/dv3d/assets/decodeImageFrameWorker-DhtpjVX0.js",import.meta.url),{type:"module"});function r$(t={}){Iz(t),J4e();const e=vl(),r=(t==null?void 0:t.maxWebWorkers)||Q4e();e.registerWorker("dicomImageLoader",Z4e,{maxWorkerInstances:r})}function Q4e(){return typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):1}function eEe(t,e){if(e=e||t.transferSyntax,t.bitsAllocated===8&&e==="1.2.840.10008.1.2.4.50"&&(t.samplesPerPixel===3||t.samplesPerPixel===4))return!0}const tEe={IMPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2",EXPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2.1",DEFLATED_EXPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2.1.99",EXPLICIT_VR_BIG_ENDIAN:"1.2.840.10008.1.2.2",JPEG_BASELINE_PROCESS_1:"1.2.840.10008.1.2.4.50",JPEG_EXTENDED_PROCESS_2_4:"1.2.840.10008.1.2.4.51",JPEG_EXTENDED_PROCESSES_3_5:"1.2.840.10008.1.2.4.52",JPEG_SPECTRAL_SELECTION_NONHIERARCHICAL_PROCESSES_6_8:"1.2.840.10008.1.2.4.53",JPEG_SPECTRAL_SELECTION_NONHIERARCHICAL_PROCESSES_7_9:"1.2.840.10008.1.2.4.54",JPEG_FULL_PROGRESSION_NONHIERARCHICAL_PROCESSES_10_12:"1.2.840.10008.1.2.4.55",JPEG_FULL_PROGRESSION_NONHIERARCHICAL_PROCESSES_11_13:"1.2.840.10008.1.2.4.56",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_14:"1.2.840.10008.1.2.4.57",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_15:"1.2.840.10008.1.2.4.58",JPEG_EXTENDED_HIERARCHICAL_PROCESSES_16_18:"1.2.840.10008.1.2.4.59",JPEG_EXTENDED_HIERARCHICAL_PROCESSES_17_19:"1.2.840.10008.1.2.4.60",JPEG_SPECTRAL_SELECTION_HIERARCHICAL_PROCESSES_20_22:"1.2.840.10008.1.2.4.61",JPEG_SPECTRAL_SELECTION_HIERARCHICAL_PROCESSES_21_23:"1.2.840.10008.1.2.4.62",JPEG_FULL_PROGRESSION_HIERARCHICAL_PROCESSES_24_26:"1.2.840.10008.1.2.4.63",JPEG_FULL_PROGRESSION_HIERARCHICAL_PROCESSES_25_27:"1.2.840.10008.1.2.4.64",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_28:"1.2.840.10008.1.2.4.65",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_29:"1.2.840.10008.1.2.4.66",JPEG_LOSSLESS_NONHIERARCHICAL_FIRST_ORDER_PREDICTION_PROCESS_14:"1.2.840.10008.1.2.4.70",JPEG_LS_LOSSLESS_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.80",JPEG_LS_LOSSY_NEAR_LOSSLESS_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.81",JPEG_2000_IMAGE_COMPRESSION_LOSSLESS_ONLY:"1.2.840.10008.1.2.4.90",JPEG_2000_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.91",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_LOSSLESS_ONLY:"1.2.840.10008.1.2.4.92",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.93",JPIP_REFERENCED:"1.2.840.10008.1.2.4.94",JPIP_REFERENCED_DEFLATE:"1.2.840.10008.1.2.4.95",MPEG2_MAIN_PROFILE_MAIN_LEVEL:"1.2.840.10008.1.2.4.100",MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1:"1.2.840.10008.1.2.4.101",MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1:"1.2.840.10008.1.2.4.102",MPEG4_AVC_H264_HIGH_PROFILE_FOR_2D_VIDEO:"1.2.840.10008.1.2.4.103",MPEG4_AVC_H264_HIGH_PROFILE_FOR_3D_VIDEO:"1.2.840.10008.1.2.4.104",JPIP_LOSSLESS:"1.2.840.10008.1.2.4.96",JPIP_PART2_MULTICOMPONENT_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.97",RFC_2557_MIME_ENCAPSULATION:"1.2.840.10008.1.2.6.1",JPEG_XR_IMAGE_COMPRESSION:"1.2.840.10008.1.2.6.2",JPEG_2000_IMAGE_COMPRESSION_LOSSLESS_ONLY_RETIRED:"1.2.840.10008.1.2.4.90R",JPEG_2000_IMAGE_COMPRESSION_RETIRED:"1.2.840.10008.1.2.4.91R",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_LOSSLESS_ONLY_RETIRED:"1.2.840.10008.1.2.4.92R",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_RETIRED:"1.2.840.10008.1.2.4.93R"},nEe=Object.freeze(Object.defineProperty({__proto__:null,transferSyntaxes:tEe},Symbol.toStringTag,{value:"Module"}));function rEe(t,e){const{rows:r,columns:n,data:i}=t,{rows:o,columns:a,data:s}=e,c=[],l=[],f=[];for(let u=0;u>8&255}async function aEe(t,e){if(t.bitsAllocated===16){let r=e.buffer,n=e.byteOffset;const i=e.length;n%2&&(r=r.slice(n),n=0),t.pixelRepresentation===0?t.pixelData=new Uint16Array(r,n,i/2):t.pixelData=new Int16Array(r,n,i/2);for(let o=0;o=0&&g<=127)for(let p=0;p=-127){const p=a[u++];for(let v=0;v<-g+1&&c=0&&g<=127)for(let p=0;p=-127){const p=a[u++];for(let v=0;v<-g+1&&c=0&&g<=127)for(let p=0;p=-127){const p=a[d++];for(let v=0;v<-g+1&&f{var n=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(n=n||__filename),function(i){i=i||{};var o=typeof i<"u"?i:{},a,s;o.ready=new Promise(function(L,U){a=L,s=U});var c=Object.assign({},o),l="./this.program",f=(L,U)=>{throw U},u=typeof window=="object",d=typeof importScripts=="function",h=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function p(L){return o.locateFile?o.locateFile(L,g):g+L}var v,y,m;if(h){var w=al,x=al;d?g=x.dirname(g)+"/":g=__dirname+"/",v=(L,U)=>(L=ae(L)?new URL(L):x.normalize(L),w.readFileSync(L,U?void 0:"utf8")),m=L=>{var U=v(L,!0);return U.buffer||(U=new Uint8Array(U)),U},y=(L,U,ee)=>{L=ae(L)?new URL(L):x.normalize(L),w.readFile(L,function(fe,ye){fe?ee(fe):U(ye.buffer)})},process.argv.length>1&&(l=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),process.on("uncaughtException",function(L){if(!(L instanceof Ot))throw L}),process.on("unhandledRejection",function(L){throw L}),f=(L,U)=>{throw process.exitCode=L,U},o.inspect=function(){return"[Emscripten Module object]"}}else(u||d)&&(d?g=self.location.href:typeof document<"u"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",v=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.send(null),U.responseText},d&&(m=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.responseType="arraybuffer",U.send(null),new Uint8Array(U.response)}),y=(L,U,ee)=>{var fe=new XMLHttpRequest;fe.open("GET",L,!0),fe.responseType="arraybuffer",fe.onload=()=>{if(fe.status==200||fe.status==0&&fe.response){U(fe.response);return}ee()},fe.onerror=ee,fe.send(null)});var C=o.print||console.log.bind(console),S=o.printErr||console.warn.bind(console);Object.assign(o,c),c=null,o.arguments&&o.arguments,o.thisProgram&&(l=o.thisProgram),o.quit&&(f=o.quit);var T;o.wasmBinary&&(T=o.wasmBinary),o.noExitRuntime,typeof WebAssembly!="object"&&oe("no native wasm support detected");var _,E=!1;function b(L,U){L||oe(U)}var D=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function I(L,U,ee){for(var fe=U+ee,ye=U;L[ye]&&!(ye>=fe);)++ye;if(ye-U>16&&L.buffer&&D)return D.decode(L.subarray(U,ye));for(var Ce="";U>10,56320|ct&1023)}}return Ce}function P(L,U){return L?I(N,L,U):""}function O(L,U,ee,fe){if(!(fe>0))return 0;for(var ye=ee,Ce=ee+fe-1,Ie=0;Ie=55296&&Le<=57343){var He=L.charCodeAt(++Ie);Le=65536+((Le&1023)<<10)|He&1023}if(Le<=127){if(ee>=Ce)break;U[ee++]=Le}else if(Le<=2047){if(ee+1>=Ce)break;U[ee++]=192|Le>>6,U[ee++]=128|Le&63}else if(Le<=65535){if(ee+2>=Ce)break;U[ee++]=224|Le>>12,U[ee++]=128|Le>>6&63,U[ee++]=128|Le&63}else{if(ee+3>=Ce)break;U[ee++]=240|Le>>18,U[ee++]=128|Le>>12&63,U[ee++]=128|Le>>6&63,U[ee++]=128|Le&63}}return U[ee]=0,ee-ye}function A(L,U,ee){return O(L,N,U,ee)}function V(L){for(var U=0,ee=0;ee=55296&&fe<=57343?(U+=4,++ee):U+=3}return U}var G,R,N,F,j,te,ie,he,ue;function ve(L){G=L,o.HEAP8=R=new Int8Array(L),o.HEAP16=F=new Int16Array(L),o.HEAP32=te=new Int32Array(L),o.HEAPU8=N=new Uint8Array(L),o.HEAPU16=j=new Uint16Array(L),o.HEAPU32=ie=new Uint32Array(L),o.HEAPF32=he=new Float32Array(L),o.HEAPF64=ue=new Float64Array(L)}o.INITIAL_MEMORY;var Me,Ue=[],be=[],B=[];function M(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)Y(o.preRun.shift());_t(Ue)}function $(){_t(be)}function W(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)re(o.postRun.shift());_t(B)}function Y(L){Ue.unshift(L)}function ne(L){be.unshift(L)}function re(L){B.unshift(L)}var Se=0,Re=null;function je(L){Se++,o.monitorRunDependencies&&o.monitorRunDependencies(Se)}function qe(L){if(Se--,o.monitorRunDependencies&&o.monitorRunDependencies(Se),Se==0&&Re){var U=Re;Re=null,U()}}function oe(L){o.onAbort&&o.onAbort(L),L="Aborted("+L+")",S(L),E=!0,L+=". Build with -sASSERTIONS for more info.";var U=new WebAssembly.RuntimeError(L);throw s(U),U}var ce="data:application/octet-stream;base64,";function Te(L){return L.startsWith(ce)}function ae(L){return L.startsWith("file://")}var we;we="libjpegturbowasm_decode.wasm",Te(we)||(we=p(we));function Ze(L){try{if(L==we&&T)return new Uint8Array(T);if(m)return m(L);throw"both async and sync fetching of the wasm failed"}catch(U){oe(U)}}function le(){if(!T&&(u||d)){if(typeof fetch=="function"&&!ae(we))return fetch(we,{credentials:"same-origin"}).then(function(L){if(!L.ok)throw"failed to load wasm binary file at '"+we+"'";return L.arrayBuffer()}).catch(function(){return Ze(we)});if(y)return new Promise(function(L,U){y(we,function(ee){L(new Uint8Array(ee))},U)})}return Promise.resolve().then(function(){return Ze(we)})}function Tt(){var L={a:ze};function U(Ie,Le){var He=Ie.exports;o.asm=He,_=o.asm.K,ve(_.buffer),Me=o.asm.M,ne(o.asm.L),qe()}je();function ee(Ie){U(Ie.instance)}function fe(Ie){return le().then(function(Le){return WebAssembly.instantiate(Le,L)}).then(function(Le){return Le}).then(Ie,function(Le){S("failed to asynchronously prepare wasm: "+Le),oe(Le)})}function ye(){return!T&&typeof WebAssembly.instantiateStreaming=="function"&&!Te(we)&&!ae(we)&&!h&&typeof fetch=="function"?fetch(we,{credentials:"same-origin"}).then(function(Ie){var Le=WebAssembly.instantiateStreaming(Ie,L);return Le.then(ee,function(He){return S("wasm streaming compile failed: "+He),S("falling back to ArrayBuffer instantiation"),fe(ee)})}):fe(ee)}if(o.instantiateWasm)try{var Ce=o.instantiateWasm(L,U);return Ce}catch(Ie){S("Module.instantiateWasm callback failed with error: "+Ie),s(Ie)}return ye().catch(s),{}}function Ot(L){this.name="ExitStatus",this.message="Program terminated with exit("+L+")",this.status=L}function _t(L){for(;L.length>0;)L.shift()(o)}function Ae(L){this.excPtr=L,this.ptr=L-24,this.set_type=function(U){ie[this.ptr+4>>2]=U},this.get_type=function(){return ie[this.ptr+4>>2]},this.set_destructor=function(U){ie[this.ptr+8>>2]=U},this.get_destructor=function(){return ie[this.ptr+8>>2]},this.set_refcount=function(U){te[this.ptr>>2]=U},this.set_caught=function(U){U=U?1:0,R[this.ptr+12>>0]=U},this.get_caught=function(){return R[this.ptr+12>>0]!=0},this.set_rethrown=function(U){U=U?1:0,R[this.ptr+13>>0]=U},this.get_rethrown=function(){return R[this.ptr+13>>0]!=0},this.init=function(U,ee){this.set_adjusted_ptr(0),this.set_type(U),this.set_destructor(ee),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var U=te[this.ptr>>2];te[this.ptr>>2]=U+1},this.release_ref=function(){var U=te[this.ptr>>2];return te[this.ptr>>2]=U-1,U===1},this.set_adjusted_ptr=function(U){ie[this.ptr+16>>2]=U},this.get_adjusted_ptr=function(){return ie[this.ptr+16>>2]},this.get_exception_ptr=function(){var U=me(this.get_type());if(U)return ie[this.excPtr>>2];var ee=this.get_adjusted_ptr();return ee!==0?ee:this.excPtr}}function tt(L,U,ee){var fe=new Ae(L);throw fe.init(U,ee),L}var gt={};function ht(L){for(;L.length;){var U=L.pop(),ee=L.pop();ee(U)}}function xt(L){return this.fromWireType(te[L>>2])}var jt={},Pt={},Kt={},en=48,Dn=57;function Xn(L){if(L===void 0)return"_unknown";L=L.replace(/[^a-zA-Z0-9_]/g,"$");var U=L.charCodeAt(0);return U>=en&&U<=Dn?"_"+L:L}function fn(L,U){return L=Xn(L),new Function("body","return function "+L+`() { + See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.6.3.html for more information.`));const c=r.dataOffset,l=i*o*a;let f;if(n===8){if(f=c+e*l,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l))}else if(n===16){if(f=c+e*l*2,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l*2))}else if(n===1){if(f=c+e*l*.125,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return Bz(t.byteArray,f,l)}else if(n===32){if(f=c+e*l*4,f>=t.byteArray.length)throw new Error("frame exceeds size of pixelData");return new Uint8Array(t.byteArray.buffer.slice(f,f+l*4))}throw new Error("unsupported pixel format")}function Wz(t){const e=Mm(t),r=parseInt(e.url,10),n=Fz.get(r);return new Promise((i,o)=>{const a=new FileReader;a.onload=s=>{const c=s.target.result;i(c)},a.onerror=o,a.readAsArrayBuffer(n)})}function j8(t,e=0){const r=t.elements.x7fe00010||t.elements.x7fe00008;return r?r.encapsulatedPixelData?Uz(t,e):Gz(t,e):null}function ox(t){let e=t[0],r=t[0],n;const i=t.length;for(let o=1;o{const s=new FileReader;s.readAsBinaryString===void 0?s.readAsArrayBuffer(i):s.readAsBinaryString(i),s.onload=function(){const c=new Image;c.onload=function(){r.height=c.height,r.width=c.width,t.rows=c.height,t.columns=c.width;const l=r.getContext("2d");l.drawImage(this,0,0);const f=l.getImageData(0,0,c.width,c.height),u=new Date().getTime();t.pixelData=new Uint8Array(f.data.buffer),t.imageData=f,t.decodeTimeInMS=u-n;const d=ox(t.pixelData);t.smallestPixelValue=d.min,t.largestPixelValue=d.max,t.pixelDataLength=t.pixelData.length,o(t)},c.onerror=function(l){a(l)},s.readAsBinaryString===void 0?c.src=`data:image/jpeg;base64,${window.btoa(g4e(s.result))}`:c.src=`data:image/jpeg;base64,${window.btoa(s.result)}`},s.onerror=c=>{a(c)}})}function pa(t,e,r,n,i){const o={...n};delete o.loader,delete o.streamingData;const a=vl(),s=o.priority||void 0;return o.transferPixelData&&r.buffer,a.executeTask("dicomImageLoader","decodeTask",{imageFrame:t,transferSyntax:e,pixelData:r,options:o,decodeConfig:i},{priority:s,requestType:o==null?void 0:o.requestType})}function m4e(t,e,r,n,i={},o){switch(e){case"1.2.840.10008.1.2":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.1":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.2":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.1.99":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.5":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.50":return t.bitsAllocated===8&&(t.samplesPerPixel===3||t.samplesPerPixel===4)?$z(t,r,n):pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.51":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.57":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.70":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.80":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.81":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.90":return pa(t,e,r,i,o);case"1.2.840.10008.1.2.4.91":return pa(t,e,r,i,o);case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":return pa(t,e,r,i,o)}return Promise.reject(new Error(`No decoder for transfer syntax ${e}`))}function jz(t){const e=wt("imagePixelModule",t);return{samplesPerPixel:e.samplesPerPixel,photometricInterpretation:e.photometricInterpretation,planarConfiguration:e.planarConfiguration,rows:e.rows,columns:e.columns,bitsAllocated:e.bitsAllocated,bitsStored:e.bitsStored,pixelRepresentation:e.pixelRepresentation,smallestPixelValue:e.smallestPixelValue,largestPixelValue:e.largestPixelValue,redPaletteColorLookupTableDescriptor:e.redPaletteColorLookupTableDescriptor,greenPaletteColorLookupTableDescriptor:e.greenPaletteColorLookupTableDescriptor,bluePaletteColorLookupTableDescriptor:e.bluePaletteColorLookupTableDescriptor,redPaletteColorLookupTableData:e.redPaletteColorLookupTableData,greenPaletteColorLookupTableData:e.greenPaletteColorLookupTableData,bluePaletteColorLookupTableData:e.bluePaletteColorLookupTableData,pixelData:void 0,imageId:t}}function v4e(t,e){const r=t.get("modalityLutModule",e)||{},n=t.get("generalSeriesModule",e)||{},{modality:i}=n,o={rescaleSlope:r.rescaleSlope,rescaleIntercept:r.rescaleIntercept,modality:i},a=t.get("scalingModule",e)||{};return{...o,...i==="PT"&&{suvbw:a.suvbw},...i==="RTDOSE"&&{doseGridScaling:a.DoseGridScaling,doseSummation:a.DoseSummation,doseType:a.DoseType,doseUnit:a.DoseUnit}}}function H8(t){return t==="RGB"||t==="PALETTE COLOR"||t==="YBR_FULL"||t==="YBR_FULL_422"||t==="YBR_PARTIAL_422"||t==="YBR_PARTIAL_420"||t==="YBR_RCT"||t==="YBR_ICT"}function y4e(t,e){const r=t.length/4;let n=0,i=0;for(let o=0;o=0?e<=255?r=Uint8Array:e<=65535?r=Uint16Array:e<=4294967295&&(r=Uint32Array):t>=-128&&e<=127?r=Int8Array:t>=-32768&&e<=32767&&(r=Int16Array)),r||Float32Array}function x4e(t,e,r){return K8(t,e)===r}function C4e(t){const e=t.smallestPixelValue,r=t.largestPixelValue,n=K8(e,r);if(n){const i=new n(t.pixelData);t.pixelData=i}else throw new Error("Could not apply a typed array to the pixel data")}let P7="";function ax(t,e,r,n={}){const i=n.useRGBA;if(n.preScale={enabled:n.preScale&&n.preScale.enabled!==void 0?n.preScale.enabled:!0},!(e!=null&&e.length))return Promise.reject(new Error("The pixel data is missing"));const{MetadataModules:o}=Qa,a=document.createElement("canvas"),s=jz(t);if(s.decodeLevel=n.decodeLevel,n.allowFloatRendering=fw(),n.preScale.enabled){const u=v4e(R4,t);u&&(n.preScale={...n.preScale,scalingParameters:u})}const{decodeConfig:c}=Pm();Object.keys(s).forEach(u=>{(typeof s[u]=="function"||s[u]instanceof Promise)&&delete s[u]});const l=m4e(s,r,e,a,n,c),f=H8(s.photometricInterpretation);return new Promise((u,d)=>{l.then(function(h){let g=!1;if(n.targetBuffer&&n.targetBuffer.type&&!f){const{arrayBuffer:_,type:E,offset:b=0,length:D}=n.targetBuffer,I=h.pixelDataLength,P=b,O=D??I-P,A={Uint8Array,Uint16Array,Int16Array,Float32Array,Uint32Array};if(O!==h.pixelDataLength)throw new Error(`target array for image does not have the same length (${O}) as the decoded image length (${h.pixelDataLength}).`);const V=A[E],G=_?new V(_,P,O):new V(h.pixelData);if(O!==h.pixelDataLength)throw new Error("target array for image does not have the same length as the decoded image length.");h.pixelData=G,g=!0}g||C4e(h);const p=wt(o.IMAGE_PLANE,t)||{},v=wt(o.VOI_LUT,t)||{},y=wt(o.MODALITY_LUT,t)||{},m=wt(o.SOP_COMMON,t)||{},w=wt(o.CALIBRATION,t)||{},{rows:x,columns:C}=h;if(f){if(h4e(h)){a.height=h.rows,a.width=h.columns;let b=a.getContext("2d").createImageData(h.columns,h.rows);i||(b={...b,data:new Uint8ClampedArray(3*h.columns*h.rows)}),zz(h,b.data,i),h.imageData=b,h.pixelData=b.data,h.pixelDataLength=b.data.length}else if(!i&&h.pixelDataLength===4*x*C){const E=new Uint8Array(h.pixelData.length/4*3);h.pixelData=y4e(h.pixelData,E),h.pixelDataLength=h.pixelData.length}const _=ox(h.pixelData);h.smallestPixelValue=_.min,h.largestPixelValue=_.max}const S=hc.createImageVoxelManager({scalarData:h.pixelData,width:h.columns,height:h.rows,numberOfComponents:h.samplesPerPixel}),T={imageId:t,dataType:h.pixelData.constructor.name,color:f,calibration:w,columnPixelSpacing:p.columnPixelSpacing,columns:h.columns,height:h.rows,preScale:h.preScale,intercept:y.rescaleIntercept?y.rescaleIntercept:0,slope:y.rescaleSlope?y.rescaleSlope:1,invert:h.photometricInterpretation==="MONOCHROME1",minPixelValue:h.smallestPixelValue,maxPixelValue:h.largestPixelValue,rowPixelSpacing:p.rowPixelSpacing,rows:h.rows,sizeInBytes:h.pixelData.byteLength,width:h.columns,windowCenter:v.windowCenter?v.windowCenter[0]:void 0,windowWidth:v.windowWidth?v.windowWidth[0]:void 0,voiLUTFunction:v.voiLUTFunction?v.voiLUTFunction:void 0,decodeTimeInMS:h.decodeTimeInMS,floatPixelData:void 0,imageFrame:h,voxelManager:S,rgba:f&&i,getPixelData:()=>h.pixelData,getCanvas:void 0,numberOfComponents:h.samplesPerPixel};if(T.color&&(T.getCanvas=function(){if(P7===t)return a;const _=T.columns,E=T.rows;a.height=E,a.width=_;const b=a.getContext("2d"),D=b.createImageData(_,E),I=h.pixelData;if(I.length===_*E*4)for(let P=0;P0&&w4e(m.sopClassUID)&&(T.modalityLUT=y.modalityLUTSequence[0]),v.voiLUTSequence&&v.voiLUTSequence.length>0&&(T.voiLUT=v.voiLUTSequence[0]),T.color&&(T.windowWidth=256,T.windowCenter=128),T.windowCenter===void 0||T.windowWidth===void 0){const _=T.imageFrame.smallestPixelValue,E=T.imageFrame.largestPixelValue;T.windowWidth=E-_,T.windowCenter=(E+_)/2}u(T)},d)})}const{ImageQualityStatus:Hz}=Qa;function S4e(t,e){t.decache=function(){const r=Mm(e);sh.unload(r.url)}}function Kz(t,e,r=0,n,i,o){const a=new Date().getTime(),s={cancelFn:void 0,promise:void 0};return s.promise=new Promise((c,l)=>{t.then(f=>{const u=j8(f,r),d=f.string("x00020010"),h=new Date().getTime(),g=ax(e,u,d,i);S4e(s,e),g.then(p=>{p=p,p.data=f,p.sharedCacheKey=n;const v=new Date().getTime();p.loadTimeInMS=h-a,p.totalTimeInMS=v-a,p.imageQualityStatus=Hz.FULL_RESOLUTION,o!==void 0&&o.imageDoneCallback!==void 0&&o.imageDoneCallback(p),c(p)},function(p){l({error:p,dataSet:f})})},function(f){l({error:f})})}),s}function T4e(t,e,r=0,n,i){const o=new Date().getTime();return{promise:new Promise((s,c)=>{const l=new Date().getTime();let f;try{const u=j8(t,r),d=t.string("x00020010");f=ax(e,u,d,i)}catch(u){c({error:u,dataSet:t});return}f.then(u=>{u=u,u.data=t;const d=new Date().getTime();u.loadTimeInMS=l-o,u.totalTimeInMS=d-o,u.imageQualityStatus=Hz.FULL_RESOLUTION,s(u)},c)}),cancelFn:void 0}}function qz(t){if(t==="dicomweb"||t==="wadouri")return nx;if(t==="dicomfile")return Wz}function U2(t,e={}){const r=Mm(t);e=Object.assign({},e),delete e.loader;const n=qz(r.scheme);if(sh.isLoaded(r.url)){const o=sh.get(r.url,n,t);return T4e(o,t,r.pixelDataFrame,r.url,e)}const i=sh.load(r.url,n,t);return Kz(i,t,r.frame,r.url,e)}function Xz(){ld("dicomweb",U2),ld("wadouri",U2),ld("dicomfile",U2),Wh($8)}const _4e={getImagePixelModule:Ez,getLUTs:bT,getModalityLUTOutputPixelRepresentation:bz,getNumberValues:mc,metaDataProvider:$8,metadataForDataset:Vz},E4e={metaData:_4e,dataSetCacheManager:sh,fileManager:Fz,getEncapsulatedImageFrame:Uz,getUncompressedImageFrame:Gz,loadFileRequest:Wz,loadImageFromPromise:Kz,getLoaderForScheme:qz,getPixelData:j8,loadImage:U2,parseImageId:Mm,unpackBinaryFrame:Bz,register:Xz};function sn(t,e,r){return e=e||0,!t||!t.Value||Array.isArray(t.Value)&&t.Value.length<=e?r:t.Value[e]}function b4e(t,e,r){const n=sn(t,e,r);if(n!==void 0)return parseFloat(String(n))}function Zn(t,e){const r=sn(t,e);if(r!==void 0)return parseFloat(r)}function Po(t,e){if(!t||!t.Value||!Array.isArray(t.Value)||e&&t.Value.length>s&1}e.push({rows:Zn(t[`${n}0010`]),columns:Zn(t[`${n}0011`]),type:sn(t[`${n}0040`]),x:Zn(t[`${n}0050`],1)-1,y:Zn(t[`${n}0050`],0)-1,pixelData:o,description:sn(t[`${n}0022`]),label:sn(t[`${n}1500`]),roiArea:sn(t[`${n}1301`]),roiMean:sn(t[`${n}1302`]),roiStandardDeviation:sn(t[`${n}1303`])})}return{overlays:e}}function sx(t){const e=t.indexOf(":");return t.substring(e+1)}function ch(t,e=!0){return t&&t.Value?t.Value[0]&&e?t.Value[0]:t.Value:t}function Yz(t,e,r){const n=(e?Object.values(e[0]):[]).map(o=>{var a;return(a=o.Value)==null?void 0:a[0]}).filter(o=>o!==void 0&&typeof o=="object"),i=(t?Object.values(t[r-1]):[]).map(o=>{var a;return(a=o.Value)==null?void 0:a[0]}).filter(o=>o!==void 0&&typeof o=="object");return{shared:n,perFrame:i}}function Jz(t){let{52009230:e,52009229:r,"00280008":n,...i}=t;return e=ch(e,!1),r=ch(r,!1),n=ch(n),{PerFrameFunctionalGroupsSequence:e,SharedFunctionalGroupsSequence:r,NumberOfFrames:n,rest:i}}function I4e(t,e){const{PerFrameFunctionalGroupsSequence:r,SharedFunctionalGroupsSequence:n,NumberOfFrames:i,rest:o}=Jz(e);if(r||i>1){const{shared:a,perFrame:s}=Yz(r,n,t),c=Object.assign(e,{frameNumber:t});return[...a,...s].forEach(l=>{Object.entries(l).forEach(([f,u])=>{c[f]=u})}),Object.assign(o,{"00280008":i},c)}return e}let Rm=[],R5={};function Zz(t){const e=t.indexOf("/frames/")+8,r=t.slice(0,e),n=parseInt(t.slice(e),10);return{metadata:Rm[`${r}1`],frame:n}}function O4e(t){const e=sx(t);return Zz(e)}function M4e(t){if(t[52009230]!==void 0||t[52009229]!==void 0)return!0;const e=sn(t["00280008"]);return e&&e>1}function P4e(t,e){const r=sx(t);Object.defineProperty(e,"isMultiframe",{value:M4e(e),enumerable:!1}),Rm[r]=e}function R4e(t){const e=sx(t),r=Rm[e];if(r&&!(r!=null&&r.isMultiframe))return r;const n=R5[e];if(n)return n;const i=Zz(e);if(!i||!i.metadata)return;const{metadata:o,frame:a}=i;if(o){const s=I4e(a,o);return R5[e]=s,s}}function L4e(t){const e=sx(t);Rm[e]=void 0,R5[e]=void 0}function A4e(){Rm=[],R5={}}const q8={add:P4e,get:R4e,remove:L4e,purge:A4e};function Qz(t){return sn(t["00080060"]).includes("NM")}function X8(t,e){const r=ch(t["00080008"],!1);if(r)return r[e]}function N4e(t){let e;const r=X8(t,2);if(r&&lg(r)){const n=ch(t["00540022"]);n&&(e=Po(n["00200037"],6))}return e}function k4e(t){let e;const r=X8(t,2);if(r&&lg(r)){const n=ch(t["00540022"]);n&&(e=Po(n["00200032"],3))}return e}function R7(t){let e=Po(t["00200037"],6);return!e&&Qz(t)&&(e=N4e(t)),e}function L7(t){let e=Po(t["00200032"],3);return!e&&Qz(t)&&(e=k4e(t)),e}function Oo(t,e){const r=Po(t[e]);return r?r[0]:null}function V4e(t){var e;return(e=t==null?void 0:t.Value)!=null&&e.length?Array.isArray(t.Value)?t.Value:typeof t.Value=="object"?(console.warn("Warning: Value should be an array, but an object was found. Encapsulating the object in an array."),[t.Value]):[]:[]}function A7(t){const e=V4e(t["00186011"]);return!e||!e.length?null:e.map(n=>{const i=Oo(n,"0018602C"),o=Oo(n,"0018602E"),a=Oo(n,"00186024"),s=Oo(n,"00186026"),c=Oo(n,"0018601A"),l=Oo(n,"0018601E"),f=Oo(n,"00186018"),u=Oo(n,"0018601C"),d=Oo(n,"00186020"),h=Oo(n,"00186022"),g=Oo(n,"0018602A"),p=Oo(n,"00186028"),v=Oo(n,"00186012"),y=Oo(n,"00186014"),m=Oo(n,"00186016"),w=Oo(n,"00186030");return{regionLocationMinY0:c,regionLocationMaxY1:l,regionLocationMinX0:f,regionLocationMaxX1:u,referencePixelX0:d,referencePixelY0:h,physicalDeltaX:i,physicalDeltaY:o,physicalUnitsXDirection:a,physicalUnitsYDirection:s,referencePhysicalPixelValueY:g,referencePhysicalPixelValueX:p,regionSpatialFormat:v,regionDataType:y,regionFlags:m,transducerFrequency:w}})}function Y8(t,e){const{MetadataModules:r}=Qa;if(t===r.MULTIFRAME){const{metadata:i,frame:o}=O4e(e);if(!i)return;const{PerFrameFunctionalGroupsSequence:a,SharedFunctionalGroupsSequence:s,NumberOfFrames:c}=Jz(i);if(a||c>1){const{shared:l,perFrame:f}=Yz(a,s,o);return{NumberOfFrames:c,PerFrameFunctionalInformation:f,SharedFunctionalInformation:l}}return{NumberOfFrames:c}}const n=q8.get(e);if(n){if(t===r.GENERAL_STUDY)return{studyDescription:sn(n["00081030"]),studyDate:Nr.parseDA(sn(n["00080020"])),studyTime:Nr.parseTM(sn(n["00080030"],0,"")),accessionNumber:sn(n["00080050"])};if(t===r.GENERAL_SERIES)return{modality:sn(n["00080060"]),seriesInstanceUID:sn(n["0020000E"]),seriesDescription:sn(n["0008103E"]),seriesNumber:Zn(n["00200011"]),studyInstanceUID:sn(n["0020000D"]),seriesDate:Nr.parseDA(sn(n["00080021"])),seriesTime:Nr.parseTM(sn(n["00080031"],0,"")),acquisitionDate:Nr.parseDA(sn(n["00080022"])),acquisitionTime:Nr.parseTM(sn(n["00080032"],0,""))};if(t===r.GENERAL_IMAGE)return{sopInstanceUID:sn(n["00080018"]),instanceNumber:Zn(n["00200013"]),lossyImageCompression:sn(n["00282110"]),lossyImageCompressionRatio:Zn(n["00282112"]),lossyImageCompressionMethod:sn(n["00282114"])};if(t===r.PATIENT)return{patientID:sn(n["00100020"]),patientName:sn(n["00100010"])};if(t===r.PATIENT_STUDY)return{patientAge:Zn(n["00101010"]),patientSize:Zn(n["00101020"]),patientSex:sn(n["00100040"]),patientWeight:Zn(n["00101030"])};if(t===r.NM_MULTIFRAME_GEOMETRY){const i=sn(n["00080060"]),o=X8(n,2);return{modality:i,imageType:sn(n["00080008"]),imageSubType:o,imageOrientationPatient:R7(n),imagePositionPatient:L7(n),sliceThickness:Zn(n["00180050"]),spacingBetweenSlices:Zn(n["00180088"]),pixelSpacing:Po(n["00280030"],2),numberOfFrames:Zn(n["00280008"]),isNMReconstructable:lg(o)&&i.includes("NM")}}if(t===r.IMAGE_PLANE){let i=R7(n),o=L7(n);const a=Po(n["00280030"],2);let s=null,c=null,l=null,f=null,u=!1;return a?(c=a[0],s=a[1]):(u=!0,c=1,s=1),i?(l=[parseFloat(i[0]),parseFloat(i[1]),parseFloat(i[2])],f=[parseFloat(i[3]),parseFloat(i[4]),parseFloat(i[5])]):(l=[1,0,0],f=[0,1,0],u=!0,i=[...l,...f]),o||(o=[0,0,0],u=!0),{frameOfReferenceUID:sn(n["00200052"]),rows:Zn(n["00280010"]),columns:Zn(n["00280011"]),imageOrientationPatient:i,rowCosines:l,columnCosines:f,imagePositionPatient:o,sliceThickness:Zn(n["00180050"]),sliceLocation:Zn(n["00201041"]),pixelSpacing:a,rowPixelSpacing:c,columnPixelSpacing:s,usingDefaultValues:u}}if(t===r.ULTRASOUND_ENHANCED_REGION)return A7(n);if(t===r.CALIBRATION&&sn(n["00080060"])==="US")return{sequenceOfUltrasoundRegions:A7(n)};if(t===r.IMAGE_URL)return F4e(e,n);if(t===r.CINE)return U4e(e,n);if(t===r.IMAGE_PIXEL)return{samplesPerPixel:Zn(n["00280002"]),photometricInterpretation:sn(n["00280004"]),rows:Zn(n["00280010"]),columns:Zn(n["00280011"]),bitsAllocated:Zn(n["00280100"]),bitsStored:Zn(n["00280101"]),highBit:sn(n["00280102"]),pixelRepresentation:Zn(n["00280103"]),planarConfiguration:Zn(n["00280006"]),pixelAspectRatio:sn(n["00280034"]),smallestPixelValue:Zn(n["00280106"]),largestPixelValue:Zn(n["00280107"]),redPaletteColorLookupTableDescriptor:Po(n["00281101"]),greenPaletteColorLookupTableDescriptor:Po(n["00281102"]),bluePaletteColorLookupTableDescriptor:Po(n["00281103"]),redPaletteColorLookupTableData:Po(n["00281201"]),greenPaletteColorLookupTableData:Po(n["00281202"]),bluePaletteColorLookupTableData:Po(n["00281203"])};if(t===r.VOI_LUT)return{windowCenter:Po(n["00281050"],1),windowWidth:Po(n["00281051"],1),voiLUTFunction:sn(n["00281056"])};if(t===r.MODALITY_LUT)return{rescaleIntercept:Zn(n["00281052"]),rescaleSlope:Zn(n["00281053"]),rescaleType:sn(n["00281054"])};if(t===r.SOP_COMMON)return{sopClassUID:sn(n["00080016"]),sopInstanceUID:sn(n["00080018"])};if(t===r.PET_ISOTOPE){const i=sn(n["00540016"]);return i===void 0?void 0:{radiopharmaceuticalInfo:{radiopharmaceuticalStartTime:Nr.parseTM(sn(i["00181072"],0,"")),radiopharmaceuticalStartDateTime:sn(i["00181078"],0,""),radionuclideTotalDose:Zn(i["00181074"]),radionuclideHalfLife:Zn(i["00181075"])}}}if(t===r.OVERLAY_PLANE)return D4e(n);if(t==="transferSyntax")return e$(e,n);if(t===r.PET_SERIES)return{correctedImage:sn(n["00280051"]),units:sn(n["00541001"]),decayCorrection:sn(n["00541102"])};if(t===r.PET_IMAGE)return{frameReferenceTime:Zn(n["00541300"]),actualFrameDuration:Zn(n["00181242"])};if(t==="instance")return Nz(e,Y8,kz)}}function F4e(t,e){const{transferSyntaxUID:r}=e$(t,e),n=CV(r),i=t.substring(7),o=i.replace("/frames/","/thumbnail/");let a=i.replace("/frames/","/rendered/");return n&&(a=a.replace("/rendered/1","/rendered")),{isVideo:n,rendered:a,thumbnail:o}}function U4e(t,e){return{cineRate:sn(e["00180040"]),numberOfFrames:Zn(e["00280008"])}}function e$(t,e){return{transferSyntaxUID:sn(e["00020010"])||sn(e["00083002"])}}function B4e(t,e,r={},n={}){const i=Pm(),{retrieveOptions:o={},streamingData:a}=n,s=a.chunkSize||W4e(e,o,"chunkSize")||65536,c=f=>{if(typeof i.errorInterceptor=="function"){const u=new Error("request failed");i.errorInterceptor(u)}else console.warn("rangeRequest:Caught",f)};return new Promise(async(f,u)=>{const d=Object.assign({},r);Object.keys(d).forEach(function(h){(d[h]===null||d[h]===void 0)&&delete d[h]});try{a.encodedData||(a.chunkSize=s,a.rangesFetched=0);const h=z4e(a,o),{encodedData:g,responseHeaders:p}=await G4e(t,d,h,a),v=p.get("content-type"),{totalBytes:y}=a,m=y===g.byteLength,w=B8(v,g,{isPartial:!0}),x=G8(o,m||w.extractDone);f({...w,imageQualityStatus:x,percentComplete:w.extractDone?100:s*100/y})}catch(h){c(h),console.error(h),u(h)}})}async function G4e(t,e,r,n){r&&(e=Object.assign(e,{Range:`bytes=${r[0]}-${r[1]}`}));let{encodedData:i}=n;if(r[1]&&(i==null?void 0:i.byteLength)>r[1])return n;const o=await fetch(t,{headers:e,signal:void 0}),a=await o.arrayBuffer(),s=new Uint8Array(a),{status:c}=o;let l;i?(l=new Uint8Array(i.length+s.length),l.set(i,0),l.set(s,i.length),n.rangesFetched=1):(l=new Uint8Array(s.length),l.set(s,0),n.rangesFetched++),n.encodedData=i=l,n.responseHeaders=o.headers;const f=o.headers.get("Content-Range");return f?n.totalBytes=Number(f.split("/")[1]):c!==206||!r?n.totalBytes=i==null?void 0:i.byteLength:r[1]===""||(i==null?void 0:i.length)r-i?[(n==null?void 0:n.byteLength)||0,""]:[(n==null?void 0:n.byteLength)||0,i*(o+1)-1]}function J8(t,e,r="application/octet-stream",n){const{streamingData:i,retrieveOptions:o={}}=n||{},a={Accept:r};let s=o.urlArguments?`${t}${t.indexOf("?")===-1?"?":"&"}${o.urlArguments}`:t;if(o.framesPath&&(s=s.replace("/frames/",o.framesPath)),(i==null?void 0:i.url)!==s&&(n.streamingData={url:s}),o.rangeIndex!==void 0)return B4e(s,e,a,n);if(o.streaming)return Oz(s,e,a,n);const c=nx(s,e,a),{xhr:l}=c;return c.then(function(f){const u=l.getResponseHeader("Content-Type")||"application/octet-stream",d=B8(u,new Uint8Array(f));return d.imageQualityStatus=G8(o,!0),d})}const{ProgressiveIterator:N7}=Rn,{ImageQualityStatus:k7}=Qa,$4e=new Set(["3.2.840.10008.1.2.4.96","1.2.840.10008.1.2.4.202","1.2.840.10008.1.2.4.203"]);function j4e(t){const e="1.2.840.10008.1.2";if(!t)return e;const r=t.split(";"),n={};r.forEach(o=>{const a=o.split("=");if(a.length!==2)return;const s=a[1].trim().replace(/"/g,"");n[a[0].trim()]=s});const i={"image/jpeg":"1.2.840.10008.1.2.4.50","image/x-dicom-rle":"1.2.840.10008.1.2.5","image/x-jls":"1.2.840.10008.1.2.4.80","image/jls":"1.2.840.10008.1.2.4.80","image/jll":"1.2.840.10008.1.2.4.70","image/jp2":"1.2.840.10008.1.2.4.90","image/jpx":"1.2.840.10008.1.2.4.92","image/jphc":"3.2.840.10008.1.2.4.96","image/jxl":"1.2.840.10008.1.2.4.140"};return n["transfer-syntax"]?n["transfer-syntax"]:t&&!Object.keys(n).length&&i[t]?i[t]:n.type&&i[n.type]?i[n.type]:i[t]?i[t]:e}function H4e(){return Kh}const K4e="multipart/related; type=application/octet-stream; transfer-syntax=*";function t$(t,e={}){const r=H4e(),n=new Date().getTime(),i=new N7("decompress");async function o(f,u,d){i.generate(async h=>{var v;const g=N7.as(J8(f,u,d,e));let p=10;for await(const y of g){const{pixelData:m,imageQualityStatus:w=k7.FULL_RESOLUTION,percentComplete:x,done:C=!0,extractDone:S=!0}=y,T=j4e(y.contentType);if(!S&&!$4e.has(T))continue;const _=y.decodeLevel??(w===k7.FULL_RESOLUTION?0:q4e(x,(v=e.retrieveOptions)==null?void 0:v.decodeLevel));if(!(!C&&p<=_))try{const E={...e,decodeLevel:_},b=await ax(u,m,T,E),D=new Date().getTime();b.loadTimeInMS=D-n,b.transferSyntaxUID=T,b.imageQualityStatus=w,h.add(b,C),p=_}catch(E){if(S)throw console.warn("Couldn't decode",E),E}}})}const a=e.requestType||pn.Interaction,s=e.additionalDetails||{imageId:t},c=e.priority===void 0?5:e.priority,l=t.substring(7);return r.addRequest(o.bind(this,l,t,K4e),a,s,c),{promise:i.getDonePromise(),cancelFn:void 0}}function q4e(t,e=4){const r=t/100-.02;return r>1/4?Math.min(e,0):r>1/16?Math.min(e,1):r>1/64?Math.min(e,2):Math.min(e,3)}function n$(){ld("wadors",t$),Wh(Y8)}const X4e={getNumberString:b4e,getNumberValue:Zn,getNumberValues:Po,getValue:sn,metaDataProvider:Y8},Y4e={metaData:X4e,findIndexOfString:IT,getPixelData:J8,loadImage:t$,metaDataManager:q8,register:n$};function J4e(){n$(),Xz()}const Z4e=()=>new Worker(new URL("/static/dv3d/assets/decodeImageFrameWorker-DhtpjVX0.js",import.meta.url),{type:"module"});function r$(t={}){Iz(t),J4e();const e=vl(),r=(t==null?void 0:t.maxWebWorkers)||Q4e();e.registerWorker("dicomImageLoader",Z4e,{maxWorkerInstances:r})}function Q4e(){return typeof navigator<"u"&&navigator.hardwareConcurrency?Math.max(1,Math.floor(navigator.hardwareConcurrency/2)):1}function eEe(t,e){if(e=e||t.transferSyntax,t.bitsAllocated===8&&e==="1.2.840.10008.1.2.4.50"&&(t.samplesPerPixel===3||t.samplesPerPixel===4))return!0}const tEe={IMPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2",EXPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2.1",DEFLATED_EXPLICIT_VR_LITTLE_ENDIAN:"1.2.840.10008.1.2.1.99",EXPLICIT_VR_BIG_ENDIAN:"1.2.840.10008.1.2.2",JPEG_BASELINE_PROCESS_1:"1.2.840.10008.1.2.4.50",JPEG_EXTENDED_PROCESS_2_4:"1.2.840.10008.1.2.4.51",JPEG_EXTENDED_PROCESSES_3_5:"1.2.840.10008.1.2.4.52",JPEG_SPECTRAL_SELECTION_NONHIERARCHICAL_PROCESSES_6_8:"1.2.840.10008.1.2.4.53",JPEG_SPECTRAL_SELECTION_NONHIERARCHICAL_PROCESSES_7_9:"1.2.840.10008.1.2.4.54",JPEG_FULL_PROGRESSION_NONHIERARCHICAL_PROCESSES_10_12:"1.2.840.10008.1.2.4.55",JPEG_FULL_PROGRESSION_NONHIERARCHICAL_PROCESSES_11_13:"1.2.840.10008.1.2.4.56",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_14:"1.2.840.10008.1.2.4.57",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_15:"1.2.840.10008.1.2.4.58",JPEG_EXTENDED_HIERARCHICAL_PROCESSES_16_18:"1.2.840.10008.1.2.4.59",JPEG_EXTENDED_HIERARCHICAL_PROCESSES_17_19:"1.2.840.10008.1.2.4.60",JPEG_SPECTRAL_SELECTION_HIERARCHICAL_PROCESSES_20_22:"1.2.840.10008.1.2.4.61",JPEG_SPECTRAL_SELECTION_HIERARCHICAL_PROCESSES_21_23:"1.2.840.10008.1.2.4.62",JPEG_FULL_PROGRESSION_HIERARCHICAL_PROCESSES_24_26:"1.2.840.10008.1.2.4.63",JPEG_FULL_PROGRESSION_HIERARCHICAL_PROCESSES_25_27:"1.2.840.10008.1.2.4.64",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_28:"1.2.840.10008.1.2.4.65",JPEG_LOSSLESS_NONHIERARCHICAL_PROCESS_29:"1.2.840.10008.1.2.4.66",JPEG_LOSSLESS_NONHIERARCHICAL_FIRST_ORDER_PREDICTION_PROCESS_14:"1.2.840.10008.1.2.4.70",JPEG_LS_LOSSLESS_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.80",JPEG_LS_LOSSY_NEAR_LOSSLESS_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.81",JPEG_2000_IMAGE_COMPRESSION_LOSSLESS_ONLY:"1.2.840.10008.1.2.4.90",JPEG_2000_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.91",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_LOSSLESS_ONLY:"1.2.840.10008.1.2.4.92",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.93",JPIP_REFERENCED:"1.2.840.10008.1.2.4.94",JPIP_REFERENCED_DEFLATE:"1.2.840.10008.1.2.4.95",MPEG2_MAIN_PROFILE_MAIN_LEVEL:"1.2.840.10008.1.2.4.100",MPEG4_AVC_H264_HIGH_PROFILE_LEVEL_4_1:"1.2.840.10008.1.2.4.101",MPEG4_AVC_H264_BD_COMPATIBLE_HIGH_PROFILE_LEVEL_4_1:"1.2.840.10008.1.2.4.102",MPEG4_AVC_H264_HIGH_PROFILE_FOR_2D_VIDEO:"1.2.840.10008.1.2.4.103",MPEG4_AVC_H264_HIGH_PROFILE_FOR_3D_VIDEO:"1.2.840.10008.1.2.4.104",JPIP_LOSSLESS:"1.2.840.10008.1.2.4.96",JPIP_PART2_MULTICOMPONENT_IMAGE_COMPRESSION:"1.2.840.10008.1.2.4.97",RFC_2557_MIME_ENCAPSULATION:"1.2.840.10008.1.2.6.1",JPEG_XR_IMAGE_COMPRESSION:"1.2.840.10008.1.2.6.2",JPEG_2000_IMAGE_COMPRESSION_LOSSLESS_ONLY_RETIRED:"1.2.840.10008.1.2.4.90R",JPEG_2000_IMAGE_COMPRESSION_RETIRED:"1.2.840.10008.1.2.4.91R",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_LOSSLESS_ONLY_RETIRED:"1.2.840.10008.1.2.4.92R",JPEG_2000_PART_2_MULTICOMPONENT_IMAGE_COMPRESSION_RETIRED:"1.2.840.10008.1.2.4.93R"},nEe=Object.freeze(Object.defineProperty({__proto__:null,transferSyntaxes:tEe},Symbol.toStringTag,{value:"Module"}));function rEe(t,e){const{rows:r,columns:n,data:i}=t,{rows:o,columns:a,data:s}=e,c=[],l=[],f=[];for(let u=0;u>8&255}async function aEe(t,e){if(t.bitsAllocated===16){let r=e.buffer,n=e.byteOffset;const i=e.length;n%2&&(r=r.slice(n),n=0),t.pixelRepresentation===0?t.pixelData=new Uint16Array(r,n,i/2):t.pixelData=new Int16Array(r,n,i/2);for(let o=0;o=0&&g<=127)for(let p=0;p=-127){const p=a[u++];for(let v=0;v<-g+1&&c=0&&g<=127)for(let p=0;p=-127){const p=a[u++];for(let v=0;v<-g+1&&c=0&&g<=127)for(let p=0;p=-127){const p=a[d++];for(let v=0;v<-g+1&&f{var n=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(n=n||__filename),function(i){i=i||{};var o=typeof i<"u"?i:{},a,s;o.ready=new Promise(function(L,U){a=L,s=U});var c=Object.assign({},o),l="./this.program",f=(L,U)=>{throw U},u=typeof window=="object",d=typeof importScripts=="function",h=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function p(L){return o.locateFile?o.locateFile(L,g):g+L}var v,y,m;if(h){var w=al,x=al;d?g=x.dirname(g)+"/":g=__dirname+"/",v=(L,U)=>(L=ae(L)?new URL(L):x.normalize(L),w.readFileSync(L,U?void 0:"utf8")),m=L=>{var U=v(L,!0);return U.buffer||(U=new Uint8Array(U)),U},y=(L,U,ee)=>{L=ae(L)?new URL(L):x.normalize(L),w.readFile(L,function(fe,ye){fe?ee(fe):U(ye.buffer)})},process.argv.length>1&&(l=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),process.on("uncaughtException",function(L){if(!(L instanceof Ot))throw L}),process.on("unhandledRejection",function(L){throw L}),f=(L,U)=>{throw process.exitCode=L,U},o.inspect=function(){return"[Emscripten Module object]"}}else(u||d)&&(d?g=self.location.href:typeof document<"u"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",v=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.send(null),U.responseText},d&&(m=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.responseType="arraybuffer",U.send(null),new Uint8Array(U.response)}),y=(L,U,ee)=>{var fe=new XMLHttpRequest;fe.open("GET",L,!0),fe.responseType="arraybuffer",fe.onload=()=>{if(fe.status==200||fe.status==0&&fe.response){U(fe.response);return}ee()},fe.onerror=ee,fe.send(null)});var C=o.print||console.log.bind(console),S=o.printErr||console.warn.bind(console);Object.assign(o,c),c=null,o.arguments&&o.arguments,o.thisProgram&&(l=o.thisProgram),o.quit&&(f=o.quit);var T;o.wasmBinary&&(T=o.wasmBinary),o.noExitRuntime,typeof WebAssembly!="object"&&oe("no native wasm support detected");var _,E=!1;function b(L,U){L||oe(U)}var D=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function I(L,U,ee){for(var fe=U+ee,ye=U;L[ye]&&!(ye>=fe);)++ye;if(ye-U>16&&L.buffer&&D)return D.decode(L.subarray(U,ye));for(var Ce="";U>10,56320|ct&1023)}}return Ce}function P(L,U){return L?I(N,L,U):""}function O(L,U,ee,fe){if(!(fe>0))return 0;for(var ye=ee,Ce=ee+fe-1,Ie=0;Ie=55296&&Le<=57343){var He=L.charCodeAt(++Ie);Le=65536+((Le&1023)<<10)|He&1023}if(Le<=127){if(ee>=Ce)break;U[ee++]=Le}else if(Le<=2047){if(ee+1>=Ce)break;U[ee++]=192|Le>>6,U[ee++]=128|Le&63}else if(Le<=65535){if(ee+2>=Ce)break;U[ee++]=224|Le>>12,U[ee++]=128|Le>>6&63,U[ee++]=128|Le&63}else{if(ee+3>=Ce)break;U[ee++]=240|Le>>18,U[ee++]=128|Le>>12&63,U[ee++]=128|Le>>6&63,U[ee++]=128|Le&63}}return U[ee]=0,ee-ye}function A(L,U,ee){return O(L,N,U,ee)}function V(L){for(var U=0,ee=0;ee=55296&&fe<=57343?(U+=4,++ee):U+=3}return U}var G,R,N,F,j,te,ie,he,ue;function ve(L){G=L,o.HEAP8=R=new Int8Array(L),o.HEAP16=F=new Int16Array(L),o.HEAP32=te=new Int32Array(L),o.HEAPU8=N=new Uint8Array(L),o.HEAPU16=j=new Uint16Array(L),o.HEAPU32=ie=new Uint32Array(L),o.HEAPF32=he=new Float32Array(L),o.HEAPF64=ue=new Float64Array(L)}o.INITIAL_MEMORY;var Me,Ue=[],be=[],B=[];function M(){if(o.preRun)for(typeof o.preRun=="function"&&(o.preRun=[o.preRun]);o.preRun.length;)Y(o.preRun.shift());_t(Ue)}function $(){_t(be)}function W(){if(o.postRun)for(typeof o.postRun=="function"&&(o.postRun=[o.postRun]);o.postRun.length;)re(o.postRun.shift());_t(B)}function Y(L){Ue.unshift(L)}function ne(L){be.unshift(L)}function re(L){B.unshift(L)}var Se=0,Re=null;function je(L){Se++,o.monitorRunDependencies&&o.monitorRunDependencies(Se)}function qe(L){if(Se--,o.monitorRunDependencies&&o.monitorRunDependencies(Se),Se==0&&Re){var U=Re;Re=null,U()}}function oe(L){o.onAbort&&o.onAbort(L),L="Aborted("+L+")",S(L),E=!0,L+=". Build with -sASSERTIONS for more info.";var U=new WebAssembly.RuntimeError(L);throw s(U),U}var ce="data:application/octet-stream;base64,";function Te(L){return L.startsWith(ce)}function ae(L){return L.startsWith("file://")}var we;we="libjpegturbowasm_decode.wasm",Te(we)||(we=p(we));function Ze(L){try{if(L==we&&T)return new Uint8Array(T);if(m)return m(L);throw"both async and sync fetching of the wasm failed"}catch(U){oe(U)}}function le(){if(!T&&(u||d)){if(typeof fetch=="function"&&!ae(we))return fetch(we,{credentials:"same-origin"}).then(function(L){if(!L.ok)throw"failed to load wasm binary file at '"+we+"'";return L.arrayBuffer()}).catch(function(){return Ze(we)});if(y)return new Promise(function(L,U){y(we,function(ee){L(new Uint8Array(ee))},U)})}return Promise.resolve().then(function(){return Ze(we)})}function Tt(){var L={a:ze};function U(Ie,Le){var He=Ie.exports;o.asm=He,_=o.asm.K,ve(_.buffer),Me=o.asm.M,ne(o.asm.L),qe()}je();function ee(Ie){U(Ie.instance)}function fe(Ie){return le().then(function(Le){return WebAssembly.instantiate(Le,L)}).then(function(Le){return Le}).then(Ie,function(Le){S("failed to asynchronously prepare wasm: "+Le),oe(Le)})}function ye(){return!T&&typeof WebAssembly.instantiateStreaming=="function"&&!Te(we)&&!ae(we)&&!h&&typeof fetch=="function"?fetch(we,{credentials:"same-origin"}).then(function(Ie){var Le=WebAssembly.instantiateStreaming(Ie,L);return Le.then(ee,function(He){return S("wasm streaming compile failed: "+He),S("falling back to ArrayBuffer instantiation"),fe(ee)})}):fe(ee)}if(o.instantiateWasm)try{var Ce=o.instantiateWasm(L,U);return Ce}catch(Ie){S("Module.instantiateWasm callback failed with error: "+Ie),s(Ie)}return ye().catch(s),{}}function Ot(L){this.name="ExitStatus",this.message="Program terminated with exit("+L+")",this.status=L}function _t(L){for(;L.length>0;)L.shift()(o)}function Ae(L){this.excPtr=L,this.ptr=L-24,this.set_type=function(U){ie[this.ptr+4>>2]=U},this.get_type=function(){return ie[this.ptr+4>>2]},this.set_destructor=function(U){ie[this.ptr+8>>2]=U},this.get_destructor=function(){return ie[this.ptr+8>>2]},this.set_refcount=function(U){te[this.ptr>>2]=U},this.set_caught=function(U){U=U?1:0,R[this.ptr+12>>0]=U},this.get_caught=function(){return R[this.ptr+12>>0]!=0},this.set_rethrown=function(U){U=U?1:0,R[this.ptr+13>>0]=U},this.get_rethrown=function(){return R[this.ptr+13>>0]!=0},this.init=function(U,ee){this.set_adjusted_ptr(0),this.set_type(U),this.set_destructor(ee),this.set_refcount(0),this.set_caught(!1),this.set_rethrown(!1)},this.add_ref=function(){var U=te[this.ptr>>2];te[this.ptr>>2]=U+1},this.release_ref=function(){var U=te[this.ptr>>2];return te[this.ptr>>2]=U-1,U===1},this.set_adjusted_ptr=function(U){ie[this.ptr+16>>2]=U},this.get_adjusted_ptr=function(){return ie[this.ptr+16>>2]},this.get_exception_ptr=function(){var U=me(this.get_type());if(U)return ie[this.excPtr>>2];var ee=this.get_adjusted_ptr();return ee!==0?ee:this.excPtr}}function tt(L,U,ee){var fe=new Ae(L);throw fe.init(U,ee),L}var gt={};function ht(L){for(;L.length;){var U=L.pop(),ee=L.pop();ee(U)}}function xt(L){return this.fromWireType(te[L>>2])}var jt={},Pt={},Kt={},en=48,Dn=57;function Xn(L){if(L===void 0)return"_unknown";L=L.replace(/[^a-zA-Z0-9_]/g,"$");var U=L.charCodeAt(0);return U>=en&&U<=Dn?"_"+L:L}function fn(L,U){return L=Xn(L),new Function("body","return function "+L+`() { "use strict"; return body.apply(this, arguments); }; `)(U)}function Nn(L,U){var ee=fn(U,function(fe){this.name=U,this.message=fe;var ye=new Error(fe).stack;ye!==void 0&&(this.stack=this.toString()+` @@ -4284,4 +4284,4 @@ throwBindingError('function `+z+" called with ' + arguments.length + ' arguments `,Nt.push(dn+"_dtor"),gn.push(H[Ie].destructorFunction))}Le&&(St+=`var ret = retType.fromWireType(rv); return ret; `),St+=`} -`,Nt.push(St);var er=Cl(Function,Nt).apply(null,gn);return er}function so(z,H,L,U,ee,fe){_(H>0);var ye=ao(H,L);ee=Jn(U,ee),yi([],[z],function(Ce){Ce=Ce[0];var Ie="constructor "+Ce.name;if(Ce.registeredClass.constructor_body===void 0&&(Ce.registeredClass.constructor_body=[]),Ce.registeredClass.constructor_body[H-1]!==void 0)throw new yn("Cannot register multiple constructors with identical number of parameters ("+(H-1)+") for class '"+Ce.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return Ce.registeredClass.constructor_body[H-1]=()=>{Yr("Cannot construct "+Ce.name+" due to unbound types",ye)},yi([],ye,function(Le){return Le.splice(1,0,null),Ce.registeredClass.constructor_body[H-1]=Ri(Ie,Le,null,ee,fe),[]}),[]})}function Rs(z,H,L,U,ee,fe,ye,Ce){var Ie=ao(L,U);H=_r(H),fe=Jn(ee,fe),yi([],[z],function(Le){Le=Le[0];var He=Le.name+"."+H;H.startsWith("@@")&&(H=Symbol[H.substring(2)]),Ce&&Le.registeredClass.pureVirtualFunctions.push(H);function ct(){Yr("Cannot call "+He+" due to unbound types",Ie)}var St=Le.registeredClass.instancePrototype,$t=St[H];return $t===void 0||$t.overloadTable===void 0&&$t.className!==Le.name&&$t.argCount===L-2?(ct.argCount=L-2,ct.className=Le.name,St[H]=ct):(Pi(St,H,He),St[H].overloadTable[L-2]=ct),yi([],Ie,function(Nt){var gn=Ri(He,Nt,Le,fe,ye);return St[H].overloadTable===void 0?(gn.argCount=L-2,St[H]=gn):St[H].overloadTable[L-2]=gn,[]}),[]})}var da=[],$i=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function Ls(z){z>4&&--$i[z].refcount===0&&($i[z]=void 0,da.push(z))}function Tc(){for(var z=0,H=5;H<$i.length;++H)$i[H]!==void 0&&++z;return z}function _c(){for(var z=5;z<$i.length;++z)if($i[z]!==void 0)return $i[z];return null}function As(){o.count_emval_handles=Tc,o.get_first_emval=_c}var ha={toValue:z=>(z||Tn("Cannot use deleted val. handle = "+z),$i[z].value),toHandle:z=>{switch(z){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:{var H=da.length?da.pop():$i.length;return $i[H]={refcount:1,value:z},H}}}};function Ns(z,H){H=_r(H),fi(z,{name:H,fromWireType:function(L){var U=ha.toValue(L);return Ls(L),U},toWireType:function(L,U){return ha.toHandle(U)},argPackAdvance:8,readValueFromPointer:qr,destructorFunction:null})}function is(z){if(z===null)return"null";var H=typeof z;return H==="object"||H==="array"||H==="function"?z.toString():""+z}function Ec(z,H){switch(H){case 2:return function(L){return this.fromWireType(te[L>>2])};case 3:return function(L){return this.fromWireType(ie[L>>3])};default:throw new TypeError("Unknown float type: "+z)}}function bc(z,H,L){var U=$o(L);H=_r(H),fi(z,{name:H,fromWireType:function(ee){return ee},toWireType:function(ee,fe){return fe},argPackAdvance:8,readValueFromPointer:Ec(H,U),destructorFunction:null})}function Dc(z,H,L,U,ee,fe){var ye=ao(H,L);z=_r(z),ee=Jn(U,ee),di(z,function(){Yr("Cannot call "+z+" due to unbound types",ye)},H-1),yi([],ye,function(Ce){var Ie=[Ce[0],null].concat(Ce.slice(1));return La(z,Ri(z,Ie,null,ee,fe),H-1),[]})}function Ic(z,H,L){switch(H){case 0:return L?function(ee){return V[ee]}:function(ee){return G[ee]};case 1:return L?function(ee){return R[ee>>1]}:function(ee){return N[ee>>1]};case 2:return L?function(ee){return F[ee>>2]}:function(ee){return j[ee>>2]};default:throw new TypeError("Unknown integer type: "+z)}}function Oc(z,H,L,U,ee){H=_r(H);var fe=$o(L),ye=ct=>ct;if(U===0){var Ce=32-8*L;ye=ct=>ct<>>Ce}var Ie=H.includes("unsigned"),Le=(ct,St)=>{},He;Ie?He=function(ct,St){return Le(St,this.name),St>>>0}:He=function(ct,St){return Le(St,this.name),St},fi(z,{name:H,fromWireType:ye,toWireType:He,argPackAdvance:8,readValueFromPointer:Ic(H,fe,U!==0),destructorFunction:null})}function Mc(z,H,L){var U=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],ee=U[H];function fe(ye){ye=ye>>2;var Ce=j,Ie=Ce[ye],Le=Ce[ye+1];return new ee(A,Le,Ie)}L=_r(L),fi(z,{name:L,fromWireType:fe,argPackAdvance:8,readValueFromPointer:fe},{ignoreDuplicateRegistrations:!0})}function Pc(z,H){H=_r(H);var L=H==="std::string";fi(z,{name:H,fromWireType:function(U){var ee=j[U>>2],fe=U+4,ye;if(L)for(var Ce=fe,Ie=0;Ie<=ee;++Ie){var Le=fe+Ie;if(Ie==ee||G[Le]==0){var He=Le-Ce,ct=D(Ce,He);ye===void 0?ye=ct:(ye+="\0",ye+=ct),Ce=Le+1}}else{for(var St=new Array(ee),Ie=0;Ie>2]=fe,L&&ye)P(ee,Ie,fe+1);else if(ye)for(var Le=0;Le255&&(de(Ie),Tn("String has UTF-16 code units that do not fit in 8 bits")),G[Ie+Le]=He}else for(var Le=0;Le>1,ee=U+H/2;!(U>=ee)&&N[U];)++U;if(L=U<<1,L-z>32&&ks)return ks.decode(G.subarray(z,L));for(var fe="",ye=0;!(ye>=H/2);++ye){var Ce=R[z+ye*2>>1];if(Ce==0)break;fe+=String.fromCharCode(Ce)}return fe}function Vs(z,H,L){if(L===void 0&&(L=2147483647),L<2)return 0;L-=2;for(var U=H,ee=L>1]=ye,H+=2}return R[H>>1]=0,H-U}function Fs(z){return z.length*2}function Lc(z,H){for(var L=0,U="";!(L>=H/4);){var ee=F[z+L*4>>2];if(ee==0)break;if(++L,ee>=65536){var fe=ee-65536;U+=String.fromCharCode(55296|fe>>10,56320|fe&1023)}else U+=String.fromCharCode(ee)}return U}function os(z,H,L){if(L===void 0&&(L=2147483647),L<4)return 0;for(var U=H,ee=U+L-4,fe=0;fe=55296&&ye<=57343){var Ce=z.charCodeAt(++fe);ye=65536+((ye&1023)<<10)|Ce&1023}if(F[H>>2]=ye,H+=4,H+4>ee)break}return F[H>>2]=0,H-U}function Us(z){for(var H=0,L=0;L=55296&&U<=57343&&++L,H+=4}return H}function Bs(z,H,L){L=_r(L);var U,ee,fe,ye,Ce;H===2?(U=Rc,ee=Vs,ye=Fs,fe=()=>N,Ce=1):H===4&&(U=Lc,ee=os,ye=Us,fe=()=>j,Ce=2),fi(z,{name:L,fromWireType:function(Ie){for(var Le=j[Ie>>2],He=fe(),ct,St=Ie+4,$t=0;$t<=Le;++$t){var Nt=Ie+4+$t*H;if($t==Le||He[Nt>>Ce]==0){var gn=Nt-St,dn=U(St,gn);ct===void 0?ct=dn:(ct+="\0",ct+=dn),St=Nt+H}}return de(Ie),ct},toWireType:function(Ie,Le){typeof Le!="string"&&Tn("Cannot pass non-string to C++ string type "+L);var He=ye(Le),ct=K(4+He+H);return j[ct>>2]=He>>Ce,ee(Le,ct+4,He+H),Ie!==null&&Ie.push(de,ct),ct},argPackAdvance:8,readValueFromPointer:qr,destructorFunction:function(Ie){de(Ie)}})}function as(z,H,L,U,ee,fe){Nn[z]={name:_r(H),rawConstructor:Jn(L,U),rawDestructor:Jn(ee,fe),fields:[]}}function Ac(z,H,L,U,ee,fe,ye,Ce,Ie,Le){Nn[z].fields.push({fieldName:_r(H),getterReturnType:L,getter:Jn(U,ee),getterContext:fe,setterArgumentType:ye,setter:Jn(Ce,Ie),setterContext:Le})}function Gs(z,H){H=_r(H),fi(z,{isVoid:!0,name:H,argPackAdvance:0,fromWireType:function(){},toWireType:function(L,U){}})}function Nc(z){z>4&&($i[z].refcount+=1)}function X(z,H){var L=yt[z];return L===void 0&&Tn(H+" has unknown type "+Xr(z)),L}function pe(z,H){z=X(z,"_emval_take_value");var L=z.readValueFromPointer(H);return ha.toHandle(L)}function De(){je("")}function xe(z,H,L){G.copyWithin(z,H,H+L)}function se(){return 2147483648}function ge(z){try{return S.grow(z-A.byteLength+65535>>>16),he(S.buffer),1}catch{}}function Ee(z){var H=G.length;z=z>>>0;var L=se();if(z>L)return!1;let U=(Ie,Le)=>Ie+(Le-Ie%Le)%Le;for(var ee=1;ee<=4;ee*=2){var fe=H*(1+.2/ee);fe=Math.min(fe,z+100663296);var ye=Math.min(L,U(Math.max(z,fe),65536)),Ce=ge(ye);if(Ce)return!0}return!1}function Oe(z){return 52}function Ne(z,H,L,U,ee){return 70}var Fe=[null,[],[]];function dt(z,H){var L=Fe[z];H===0||H===10?((z===1?w:x)(b(L,0)),L.length=0):L.push(H)}function pt(z,H,L,U){for(var ee=0,fe=0;fe>2],Ce=j[H+4>>2];H+=8;for(var Ie=0;Ie>2]=ee,0}function Et(z){return z}function Rt(z){var H=o["_"+z];return H}function it(z,H){V.set(z,H)}function st(z,H,L,U,ee){var fe={string:Nt=>{var gn=0;if(Nt!=null&&Nt!==0){var dn=(Nt.length<<2)+1;gn=Qe(dn),P(Nt,gn,dn)}return gn},array:Nt=>{var gn=Qe(Nt.length);return it(Nt,gn),gn}};function ye(Nt){return H==="string"?D(Nt):H==="boolean"?!!Nt:Nt}var Ce=Rt(z),Ie=[],Le=0;if(U)for(var He=0;He0||(be(),ne>0))return;function H(){ft||(ft=!0,o.calledRun=!0,!T&&(B(),a(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),M()))}o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),H()},1)):H()}if(o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return at(),o.ready}})();t.exports=r})(c$);var LEe=c$.exports;const AEe=pl(LEe),NEe=new URL("/static/dv3d/openjphjs.wasm",import.meta.url),ip={codec:void 0,decoder:void 0,decodeConfig:{}};function kEe(t,e,r){const n={width:e,height:r};for(;t>0;)n.width=Math.ceil(n.width/2),n.height=Math.ceil(n.height/2),t--;return n}function VEe(t){if(ip.decodeConfig=t,ip.codec)return Promise.resolve();const e=AEe({locateFile:r=>r.endsWith(".wasm")?NEe.toString():r});return new Promise((r,n)=>{e.then(i=>{ip.codec=i,ip.decoder=new i.HTJ2KDecoder,r()},n)})}async function FEe(t,e){await VEe();const r=new ip.codec.HTJ2KDecoder,n=r.getEncodedBuffer(t.length);n.set(t);const i=e.decodeLevel||0;r.decodeSubResolution(i);const o=r.getFrameInfo();if(e.decodeLevel>0){const{width:E,height:b}=kEe(e.decodeLevel,o.width,o.height);o.width=E,o.height=b}const a=r.getDecodedBuffer();new Uint8Array(a.length).set(a);const c=`x: ${r.getImageOffset().x}, y: ${r.getImageOffset().y}`,l=r.getNumDecompositions(),f=r.getNumLayers(),u=["unknown","LRCP","RLCP","RPCL","PCRL","CPRL"][r.getProgressionOrder()+1],d=r.getIsReversible(),h=`${r.getBlockDimensions().width} x ${r.getBlockDimensions().height}`,g=`${r.getTileSize().width} x ${r.getTileSize().height}`,p=`${r.getTileOffset().x}, ${r.getTileOffset().y}`,v=`${a.length.toLocaleString()} bytes`,y=`${(a.length/n.length).toFixed(2)}:1`,m={columns:o.width,rows:o.height,bitsPerPixel:o.bitsPerSample,signed:o.isSigned,bytesPerPixel:e.bytesPerPixel,componentsPerPixel:o.componentCount};let w=UEe(o,a);const{buffer:x,byteOffset:C,byteLength:S}=w,T=x.slice(C,C+S);w=new w.constructor(T);const _={imageOffset:c,numDecompositions:l,numLayers:f,progessionOrder:u,reversible:d,blockDimensions:h,tileSize:g,tileOffset:p,decodedSize:v,compressionRatio:y};return{...e,pixelData:w,imageInfo:m,encodeOptions:_,..._,...m}}function UEe(t,e){return t.bitsPerSample>8?t.isSigned?new Int16Array(e.buffer,e.byteOffset,e.byteLength/2):new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2):t.isSigned?new Int8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function BEe(t,e){const r=t.length,{rescaleSlope:n,rescaleIntercept:i,suvbw:o,doseGridScaling:a}=e;if(e.modality==="PT"&&typeof o=="number"&&!isNaN(o))for(let s=0;s>o;let a=t.pixelData;t.pixelDataLength=t.pixelData.length;const{min:s,max:c}=ox(t.pixelData),l=typeof e.allowFloatRendering<"u"?e.allowFloatRendering:!0;let f=H8(t.photometricInterpretation)&&((m=e.targetBuffer)==null?void 0:m.offset)===void 0;const d=((w=e.preScale)==null?void 0:w.enabled)&&Object.values(e.preScale.scalingParameters).some(C=>typeof C=="number"&&!Number.isInteger(C)),h=!e.preScale.enabled||!l&&d,g=(x=e.targetBuffer)==null?void 0:x.type;if(g&&e.preScale.enabled&&!h){const C=e.preScale.scalingParameters,S=OT(s,c,C);f=!x4e(S.min,S.max,W7[g])}g&&!f?a=$Ee(e,t,W7,a):e.preScale.enabled&&!h?a=jEe(e,s,c,t):a=l$(s,c,t);let p=s,v=c;if(e.preScale.enabled&&!h){const C=e.preScale.scalingParameters;if(u$(C),zEe(C)){BEe(a,C),t.preScale={...e.preScale,scaled:!0};const T=OT(s,c,C);p=T.min,v=T.max}}else h&&(t.preScale={enabled:!0,scaled:!1},p=s,v=c);t.pixelData=a,t.smallestPixelValue=p,t.largestPixelValue=v;const y=new Date().getTime();return t.decodeTimeInMS=y-r,t}function zEe(t){const{rescaleSlope:e,rescaleIntercept:r,modality:n,doseGridScaling:i,suvbw:o}=t;return typeof e=="number"&&typeof r=="number"||n==="RTDOSE"&&typeof i=="number"||n==="PT"&&typeof o=="number"}function $Ee(t,e,r,n){const{arrayBuffer:i,type:o,offset:a=0,length:s,rows:c}=t.targetBuffer,l=r[o];if(!l)throw new Error(`target array ${o} is not supported, or doesn't exist.`);c&&c!=e.rows&&KEe(e,t.targetBuffer,l);const f=e.pixelDataLength,u=a,d=s??f-u,h=e.pixelData;if(d!==h.length)throw new Error(`target array for image does not have the same length (${d}) as the decoded image length (${h.length}).`);const g=i?new l(i,u,d):new l(d);return g.set(h,0),n=g,n}function jEe(t,e,r,n){const i=t.preScale.scalingParameters;u$(i);const o=OT(e,r,i);return l$(o.min,o.max,n)}function l$(t,e,r){const n=K8(t,e),i=new n(r.pixelData.length);return i.set(r.pixelData,0),i}function OT(t,e,r){const{rescaleSlope:n,rescaleIntercept:i,modality:o,doseGridScaling:a,suvbw:s}=r;return o==="PT"&&typeof s=="number"&&!isNaN(s)?{min:s*(t*n+i),max:s*(e*n+i)}:o==="RTDOSE"&&typeof a=="number"&&!isNaN(a)?{min:t*a,max:e*a}:typeof n=="number"&&typeof i=="number"?{min:n*t+i,max:n*e+i}:{min:t,max:e}}function u$(t){if(!t)throw new Error("options.preScale.scalingParameters must be defined if preScale.enabled is true, and scalingParameters cannot be derived from the metadata providers.")}function HEe(t,e,r){const{samplesPerPixel:n}=t,{rows:i,columns:o}=e,a=i*o*n,s=new r(a),c=s.byteLength/a;return{pixelData:s,rows:i,columns:o,frameInfo:{...t.frameInfo,rows:i,columns:o},imageInfo:{...t.imageInfo,rows:i,columns:o,bytesPerPixel:c}}}function KEe(t,e,r){const n=HEe(t,e,r),{scalingType:i="replicate"}=e;return GEe[i](t,n),Object.assign(t,n),t.pixelDataLength=t.pixelData.length,t}async function f$(t,e,r,n,i,o){const a=new Date().getTime();let s=null,c;switch(e){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":s=V7(t,r);break;case"1.2.840.10008.1.2.2":s=aEe(t,r);break;case"1.2.840.10008.1.2.1.99":s=V7(t,r);break;case"1.2.840.10008.1.2.5":s=sEe(t,r);break;case"1.2.840.10008.1.2.4.50":c={...t},s=pEe(r,c);break;case"1.2.840.10008.1.2.4.51":s=xEe(t,r);break;case"1.2.840.10008.1.2.4.57":s=U7(t,r);break;case"1.2.840.10008.1.2.4.70":s=U7(t,r);break;case"1.2.840.10008.1.2.4.80":c={signed:t.pixelRepresentation===1,bytesPerPixel:t.bitsAllocated<=8?1:2,...t},s=B7(r,c);break;case"1.2.840.10008.1.2.4.81":c={signed:t.pixelRepresentation===1,bytesPerPixel:t.bitsAllocated<=8?1:2,...t},s=B7(r,c);break;case"1.2.840.10008.1.2.4.90":c={...t},s=G7(r,c);break;case"1.2.840.10008.1.2.4.91":c={...t},s=G7(r,c);break;case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":c={...t},s=FEe(r,c);break;default:throw new Error(`no decoder for transfer syntax ${e}`)}if(!s)throw new Error("decodePromise not defined");const l=await s,f=WEe(l,i,a);return o==null||o(f),f}const qEe={decodeTask({imageFrame:t,transferSyntax:e,decodeConfig:r,options:n,pixelData:i,callbackFn:o}){return f$(t,e,i,r,n,o)}};b4(qEe);const MT={constants:nEe,convertRGBColorByPixel:xz,convertRGBColorByPlane:Cz,convertYBRFullByPixel:Sz,convertYBRFullByPlane:Tz,convertPALETTECOLOR:_z,wadouri:E4e,wadors:Y4e,init:r$,convertColorSpace:zz,createImage:ax,decodeJPEGBaseline8BitColor:$z,getImageFrame:jz,getPixelData:J8,getMinMax:ox,isColorImage:H8,isJPEGBaseline8BitColor:eEe,internal:B_e,decodeImageFrame:f$};class Ah extends pf{}vb(Ah,"toolName","NoLabelArrowAnnotate");function z7(t,e){const r=wt("imagePlaneModule",t);if(!r)return;const{rowCosines:n,columnCosines:i,imagePositionPatient:o,rowPixelSpacing:a,columnPixelSpacing:s}=r;if(!n||!i||!o)return;const c=s||1,l=a||1,f=n,u=i,d=o;return[d[0]+e.x*u[0]*c+e.y*f[0]*l,d[1]+e.x*u[1]*c+e.y*f[1]*l,d[2]+e.x*u[2]*c+e.y*f[2]*l]}window.cornerstone3dTools=wz;window.cornerstone3d=Fhe;window.cornerstoneDICOMImageLoader=MT;const{MouseBindings:Vg,KeyboardBindings:$7}=tF,{IMAGE_RENDERED:Fg}=rt,XEe=[{name:"Soft Tissue",center:40,width:400},{name:"Lung",center:-600,width:1500},{name:"Bone",center:300,width:1500},{name:"Brain",center:40,width:80},{name:"Abdomen",center:60,width:400}],j7=t=>{const e=(t||"").toUpperCase(),r=[{name:"Reset to default",action:"reset"},{name:"Auto level",action:"autolevel"}];return e!=="CT"?r:[...r,...XEe.map(n=>({name:n.name,action:"preset",center:n.center,width:n.width}))]},c0=[{label:"Window/Level",value:Oh.toolName,icon:"🌓"},{label:"Pan",value:Qu.toolName,icon:"✋"},{label:"Zoom",value:Gl.toolName,icon:"🔍"},{label:"Stack Scroll",value:Ld.toolName,icon:"📚"},{label:"Rotate",value:Mh.toolName,icon:"↺"},{label:"Length",value:gf.toolName,icon:"📏"},{label:"Probe",value:au.toolName,icon:"🔎"},{label:"Arrow (No Label)",value:Ah.toolName,icon:"➡️"},{label:"Arrow Annotate",value:pf.toolName,icon:"✈️"},{label:"Rectangle ROI",value:ou.toolName,icon:"▭"},{label:"Ellipse ROI",value:Ad.toolName,icon:"◯"},{label:"Freehand ROI",value:hf.toolName,icon:"✏️"},{label:"Freehand Contour Segmentation",value:hl.toolName,icon:"🖊️"},{label:"Sculptor",value:Ph.toolName,icon:"🔧"},{label:"Reference Cursors",value:Ba.toolName,icon:"⦿"}],YEe=500,JEe=new Set(["stackThumbnails-state","thumbnail-generation-check","thumbnail-candidate","thumbnail-render-source","thumbnail-img-load"]);function ZEe(t){if(!t)return"🔖";const e=c0.find(r=>r.value===t||r.label===t);return(e==null?void 0:e.icon)||"🔖"}function Uf(t){return t?t.startsWith("wadouri:")?t.replace(/^wadouri:+/,"").replace(/^:+/,""):t:""}function _i(t,e=180){return!t||t.length<=e?t:`${t.slice(0,e)}...(${t.length} chars)`}function QEe(t){if(!t)return!1;const e=t.toLowerCase();return!!(e.startsWith("wadouri:")||e.includes(".dcm")||e.includes("/dicom")||e.includes("/wado"))}const H7=[{label:"Left",value:"Primary"},{label:"Middle",value:"Auxiliary"},{label:"Right",value:"Secondary"}],Qv=[{label:"Left",value:"Primary",mask:1},{label:"Middle",value:"Auxiliary",mask:4},{label:"Right",value:"Secondary",mask:2},{label:"Left + Right",value:"Primary_and_Secondary",mask:3},{label:"Left + Middle",value:"Primary_and_Auxiliary",mask:5},{label:"Right + Middle",value:"Secondary_and_Auxiliary",mask:6},{label:"Left + Right + Middle",value:"Primary_and_Secondary_and_Auxiliary",mask:7},{label:"Fourth Button",value:"Fourth_Button",mask:8},{label:"Fifth Button",value:"Fifth_Button",mask:16},{label:"Mouse Wheel",value:"Wheel",mask:524288},{label:"Mouse Wheel + Left",value:"Wheel_Primary",mask:524289}];function K7({container_id:t,imageStacks:e,autoCacheStack:r,annotationJson:n,viewerState:i,...o}){var Tc,_c,As,ha,Ns,is,Ec,bc,Dc,Ic,Oc,Mc,Pc,ks,Rc,Vs,Fs,Lc,os,Us,Bs,as,Ac,Gs,Nc;const a=vt.useRef(null),s=vt.useRef(null),c=vt.useRef(!1),l="dv3d_mouseToolBindings",f="dv3d_ctrlMouseToolBindings",[u,d]=vt.useState(!1),[h,g]=vt.useState(!1),[p,v]=vt.useState(320),y=`dv3d_stackPanelWidth_${t||"default"}`,m=vt.useRef({resizing:!1,startX:0,startWidth:320}),w=240,x=720,C=220,S=40,T=14,_=vt.useRef(null),[E,b]=vt.useState(null),[D,I]=vt.useState(null),[P,O]=vt.useState(!1),A=9,V="renderingEngine_"+t,G="TOOL_GROUP_"+t,R=vt.useRef(null),N=vt.useRef(!1),[F,j]=vt.useState(!0),[te,ie]=vt.useState(!1),[he,ue]=vt.useState([]),[ve,Me]=vt.useState(0),[Ue,be]=vt.useState(null),[B,M]=vt.useState(null),[$,W]=vt.useState(()=>Array(A).fill([])),Y=X=>{typeof X=="function"?W(pe=>{const De=X(pe);return console.log("setViewportImageIds (fn):",De),De}):(console.log("setViewportImageIds:",X),W(X))},[ne,re]=vt.useState(()=>Array(A).fill(0)),[Se,Re]=vt.useState({}),je=vt.useRef({}),qe=vt.useRef({}),oe=`[DV3D Thumb][${t||"default"}]`,ce=vt.useRef([]),Te=vt.useRef({}),ae=vt.useCallback((X,pe)=>{try{const De=pe||{},xe=JEe.has(X),se=typeof De.stackIdx=="number"?String(De.stackIdx):typeof De.idx=="number"?String(De.idx):"global",ge=`${X}:${se}`,Ee=Date.now(),Oe=Te.current[ge]||0,Ne=typeof window<"u"&&!!window.__DV3D_THUMB_VERBOSE__;if(xe&&!Ne&&Ee-Oe<2500)return;Te.current[ge]=Ee;const Fe={ts:new Date().toISOString(),event:X,container:t||"default",path:typeof window<"u"?window.location.pathname:"",details:De};ce.current.push(Fe),ce.current.length>YEe&&ce.current.shift(),console.debug(oe,X,De)}catch{}},[oe,t]),we=vt.useCallback((X,pe)=>{Re(De=>{const xe=De[X];try{console.debug(oe,"setStackThumbnail",{stackIdx:X,previous:xe?_i(xe,120):null,next:pe?_i(pe,120):null,previousWasBlob:!!(xe&&xe.startsWith("blob:")),nextIsBlob:!!(pe&&pe.startsWith("blob:"))})}catch{}if(xe&&xe!==pe&&xe.startsWith("blob:"))try{URL.revokeObjectURL(xe)}catch{}const se={...De,[X]:pe};return je.current=se,se})},[oe]);vt.useEffect(()=>{je.current=Se;const X=Object.entries(Se).map(([pe,De])=>({idx:Number(pe),value:_i(De,100),isBlob:De.startsWith("blob:"),isBroken:De==="BROKEN"}));ae("stackThumbnails-state",{count:X.length,entries:X})},[Se,ae]),vt.useEffect(()=>()=>{Object.values(je.current).forEach(X=>{if(typeof X=="string"&&X.startsWith("blob:"))try{URL.revokeObjectURL(X)}catch{}})},[]),vt.useEffect(()=>{try{const X=localStorage.getItem(y);if(X){const pe=Number(X);Number.isNaN(pe)||v(Math.max(w,Math.min(x,Math.round(pe))))}}catch{}},[y]),vt.useEffect(()=>{try{localStorage.setItem(y,String(Math.round(p)))}catch{}},[y,p]);function Ze(X){if(!X)return null;try{if(X.tagName&&X.tagName.toLowerCase()==="canvas")return X}catch{}try{const pe=X.querySelector&&X.querySelector("canvas");if(pe)return pe}catch{}try{const pe=X.children||[];for(let De=0;DeMath.min(It,Math.max(Mt,lt)),Et=()=>{pe.style.transform=`translate(${Ee}px, ${Oe}px) scale(${ge})`};let Rt=!0,it=!0;const st=lt=>{if(!it)return;lt.preventDefault();const Mt=pe.getBoundingClientRect(),It=lt.clientX-Mt.left,Q=lt.clientY-Mt.top,Z=-lt.deltaY,me=1+(Z>0?.1:-.1)*Math.min(4,Math.abs(Z)/100),Ve=pt(ge*me,.1,10);Ee=(Ee-It)*(Ve/ge)+It,Oe=(Oe-Q)*(Ve/ge)+Q,ge=Ve,Et()},q=lt=>{lt.button===0&&Rt&&(Ne=!0,Fe=lt.clientX,dt=lt.clientY,pe.style.cursor="grabbing",lt.preventDefault())},K=lt=>{if(!Ne)return;const Mt=lt.clientX-Fe,It=lt.clientY-dt;Ee+=Mt,Oe+=It,Fe=lt.clientX,dt=lt.clientY,Et()},de=lt=>{Ne&&(Ne=!1,pe.style.cursor="grab")},Pe=lt=>{ge=1,Ee=0,Oe=0,Et()};let Ge=0;const ot=(lt,Mt)=>Math.hypot(Mt.clientX-lt.clientX,Mt.clientY-lt.clientY),nt=lt=>{lt.touches.length===1?Rt&&(Ne=!0,Fe=lt.touches[0].clientX,dt=lt.touches[0].clientY):lt.touches.length===2&&(Ge=ot(lt.touches[0],lt.touches[1]))},ze=lt=>{if(lt.touches.length===1&&Ne){const Mt=lt.touches[0].clientX-Fe,It=lt.touches[0].clientY-dt;Ee+=Mt,Oe+=It,Fe=lt.touches[0].clientX,dt=lt.touches[0].clientY,Et()}else if(lt.touches.length===2&&it){const Mt=ot(lt.touches[0],lt.touches[1]);if(Ge>0){const It=Mt/Ge,Q=pe.getBoundingClientRect(),Z=(lt.touches[0].clientX+lt.touches[1].clientX)/2-Q.left,me=(lt.touches[0].clientY+lt.touches[1].clientY)/2-Q.top,Ve=pt(ge*It,.1,10);Ee=(Ee-Z)*(Ve/ge)+Z,Oe=(Oe-me)*(Ve/ge)+me,ge=Ve,Et()}Ge=Mt}lt.preventDefault()},Qe=lt=>{lt.touches.length===0&&(Ne=!1,Ge=0)};return X.addEventListener("wheel",st,{passive:!1}),X.addEventListener("mousedown",q),window.addEventListener("mousemove",K),window.addEventListener("mouseup",de),pe.addEventListener("dblclick",Pe),X.addEventListener("touchstart",nt,{passive:!1}),X.addEventListener("touchmove",ze,{passive:!1}),X.addEventListener("touchend",Qe),{cleanup:()=>{X.removeEventListener("wheel",st),X.removeEventListener("mousedown",q),window.removeEventListener("mousemove",K),window.removeEventListener("mouseup",de),pe.removeEventListener("dblclick",Pe),X.removeEventListener("touchstart",nt),X.removeEventListener("touchmove",ze),X.removeEventListener("touchend",Qe),pe.style.transform="",pe.style.cursor="",pe.style.willChange=""},setAllowPan:lt=>{Rt=lt},setAllowZoom:lt=>{it=lt}}}const[Ot,_t]=vt.useState(!1),[Ae,tt]=vt.useState(null),[gt,ht]=vt.useState(!1),[xt,jt]=vt.useState(null);vt.useEffect(()=>{const X=De=>{try{const xe=De&&De.message?String(De.message):"";(xe.includes("releaseGraphicsResources")||xe.includes("openGLTexture")||xe.includes("getDefaultActor")||xe.includes("setColormapGPU")||xe.includes(`can't access property "actor"`)||xe.toLowerCase().includes("webgl")||xe.toLowerCase().includes("colormap"))&&(console.error("Detected graphics/rendering error:",De),jt(xe||null),ht(!0))}catch{}},pe=De=>{try{const xe=De&&De.reason||"",se=typeof xe=="string"?xe:xe&&xe.message?xe.message:String(xe);(se.includes("releaseGraphicsResources")||se.includes("openGLTexture")||se.includes("getDefaultActor")||se.includes("setColormapGPU")||se.includes(`can't access property "actor"`)||se.toLowerCase().includes("webgl")||se.toLowerCase().includes("colormap"))&&(console.error("Detected graphics/rendering rejection:",De),jt(se||null),ht(!0))}catch{}};return window.addEventListener("error",X),window.addEventListener("unhandledrejection",pe),()=>{window.removeEventListener("error",X),window.removeEventListener("unhandledrejection",pe)}},[]),vt.useEffect(()=>{let X=!1;if(n||i){tt(n?"annotations":"viewerState");const pe=setTimeout(()=>{if(X)return;const De=t||"default";if(n)try{const xe=window[`importAnnotations_${De}`]||window.importAnnotations;typeof xe=="function"&&xe(n)}catch(xe){console.error("Failed to import annotations from prop:",xe)}if(i)try{const xe=window[`importViewerState_${De}`]||window.importViewerState;typeof xe=="function"&&xe(i)}catch(xe){console.error("Failed to import viewer state from prop:",xe)}tt(null)},2e3);return()=>{X=!0,clearTimeout(pe),tt(null)}}},[n,i,t]),vt.useEffect(()=>{let X=!0;return e().then(async pe=>{if(!X)return;const De=Array.isArray(pe)?pe:[],xe=await Promise.all(De.map(async se=>{if(Array.isArray(se))return{imageIds:se};const ge=Array.isArray(se.imageIds)?se.imageIds:Array.isArray(se.i)?se.i:[];let Ee=se.studyInstanceUID;if(!Ee&&ge.length>0)try{const Oe=ge[0];if(typeof fetch=="function"&&typeof window.dicomParser<"u"&&Oe.startsWith("wadouri:")){const Ne=Uf(Oe),dt=await(await fetch(Ne)).arrayBuffer();Ee=window.dicomParser.parseDicom(new Uint8Array(dt)).string("x0020000d")}}catch{}return{imageIds:ge,studyInstanceUID:Ee,studyId:se.studyId,name:se.name,caseId:se.caseId}}));ae("imageStacks-loaded",{descriptorCount:De.length,normalizedCount:xe.length,summary:xe.map((se,ge)=>{const Ee=Array.isArray(se.imageIds)?se.imageIds:[],Oe=Ee[Math.floor(Ee.length/2)]||Ee[0]||"";return{idx:ge,name:se.name||null,caseId:se.caseId||null,studyId:se.studyId||null,imageCount:Ee.length,sampleImageId:_i(Oe,180)}})}),ue(xe),xe[0]?(await zt(xe[0].imageIds),Y(Array(A).fill(xe[0].imageIds||[]))):Y(Array(A).fill([]))}).catch(pe=>{console.error("Failed to load imageStacks:",pe),ae("imageStacks-load-failed",{error:String((pe==null?void 0:pe.message)||pe)}),ue([]),Y(Array(A).fill([]))}),()=>{X=!1}},[ae]);const Pt=async(X,pe)=>{const De=he[pe];if(!De)return;const xe=De.imageIds;tt("displayset");try{no(se=>{const ge=[...se];return ge[X]="stack",ge}),Y(se=>{const ge=[...se];return ge[X]=xe,ge}),re(se=>{const ge=[...se];return ge[X]=pe,ge}),await zt(xe)}finally{tt(null)}},[Kt,en]=vt.useState(!1),[Dn,Xn]=vt.useState(!0),[fn,Nn]=vt.useState(!1),[go,qr]=vt.useState(!1),Xe=()=>{console.log("Sorting viewport imageIds by slice location"),Y(X=>{const pe=X.map((De,xe)=>{if(!De||De.length===0)return De;const Ee=[...De.map(Oe=>{const Ne=wt("imagePlaneModule",Oe);let Fe=null;return Ne&&(Ne.sliceLocation!==void 0?Fe=Number(Ne.sliceLocation):Ne.imagePositionPatient&&Array.isArray(Ne.imagePositionPatient)&&Ne.imagePositionPatient.length===3&&(Fe=Number(Ne.imagePositionPatient[2]))),{imageId:Oe,sortKey:Fe}})].sort((Oe,Ne)=>Oe.sortKey!==null&&Ne.sortKey!==null?Oe.sortKey-Ne.sortKey:Oe.imageId.localeCompare(Ne.imageId)).map(Oe=>Oe.imageId);return JSON.stringify(Ee)===JSON.stringify(De)?De:Ee});return _t(!0),pe})},yt=vt.useCallback(async(X,pe)=>{if(!pe){console.warn("generateThumbnail: no chosenImageId for stack",X),ae("generate-skip-no-image",{stackIdx:X});return}if(Se[X]){console.debug("generateThumbnail: thumbnail already exists for",X),ae("generate-skip-existing",{stackIdx:X,existing:_i(Se[X],120)});return}if(qe.current[X]){console.debug("generateThumbnail: already requested for",X),ae("generate-skip-requested",{stackIdx:X});return}if(le(pe)){ae("generate-external-start",{stackIdx:X,chosenImageId:_i(pe,180)});try{const ge=new Image;ge.crossOrigin="anonymous";const Ee=pe.replace(/^external:/,"");ge.src=Ee,await new Promise((dt,pt)=>{ge.onload=()=>dt(!0),ge.onerror=Et=>pt(Et)});const Oe=document.createElement("canvas"),Ne=160;Oe.width=Ne,Oe.height=Ne;const Fe=Oe.getContext("2d");if(Fe){const dt=Math.min(Ne/ge.width,Ne/ge.height),pt=ge.width*dt,Et=ge.height*dt,Rt=(Ne-pt)/2,it=(Ne-Et)/2;Fe.fillStyle="#000",Fe.fillRect(0,0,Ne,Ne),Fe.drawImage(ge,Rt,it,pt,Et);const st=Oe.toDataURL("image/png");we(X,st)}else we(X,"BROKEN")}catch(ge){console.warn("generateThumbnail: failed to generate thumbnail for external image",ge),ae("generate-external-failed",{stackIdx:X,chosenImageId:_i(pe,180),error:String((ge==null?void 0:ge.message)||ge)}),we(X,"BROKEN")}return}const De=R.current;if(!De){console.warn("generateThumbnail: no renderingEngine yet for",X),ae("generate-skip-no-engine",{stackIdx:X,chosenImageId:_i(pe,180)});return}qe.current[X]=!0,console.debug("generateThumbnail: starting for",X,pe);const xe=`THUMB_${t||"main"}_${X}`;ae("generate-start",{stackIdx:X,chosenImageId:_i(pe,180),viewportId:xe});const se=document.createElement("div");se.style.width="160px",se.style.height="160px",se.style.position="absolute",se.style.left="-9999px",se.style.top="0",document.body.appendChild(se);try{De.enableElement({viewportId:xe,type:vr.STACK,element:se});const ge=De.getViewport(xe);if(!ge){console.warn("generateThumbnail: no viewport returned after enableElement for",xe),ae("generate-failed-no-viewport",{stackIdx:X,viewportId:xe});return}try{ge.setStack([pe])}catch(Ne){console.warn("generateThumbnail: vp.setStack failed",Ne),ae("generate-setStack-failed",{stackIdx:X,viewportId:xe,error:String((Ne==null?void 0:Ne.message)||Ne)})}const Ee=await new Promise(Ne=>{let Fe=!1;const dt=setTimeout(()=>{Fe||(Fe=!0,console.warn("generateThumbnail: IMAGE_RENDERED timeout for",xe),ae("generate-render-timeout",{stackIdx:X,viewportId:xe}),Ne(!1))},2e3),pt=()=>{Fe||(Fe=!0,clearTimeout(dt),console.debug("generateThumbnail: IMAGE_RENDERED received for",xe),ae("generate-rendered",{stackIdx:X,viewportId:xe}),Ne(!0))};try{if(ge&&ge.element)try{ge.element.addEventListener(Fg,pt,{once:!0})}catch(Et){console.warn("generateThumbnail: failed to add IMAGE_RENDERED listener",Et),ae("generate-listener-failed",{stackIdx:X,viewportId:xe,error:String((Et==null?void 0:Et.message)||Et)})}if(typeof ge.render=="function")try{const Et=ge.render();Et&&typeof Et.then=="function"&&Et.catch(()=>{})}catch{}}catch(Et){clearTimeout(dt),console.warn("generateThumbnail: error while waiting for render",Et),ae("generate-render-wait-error",{stackIdx:X,viewportId:xe,error:String((Et==null?void 0:Et.message)||Et)}),Ne(!1)}});let Oe=Ze(se)||(ge&&ge.element?Ze(ge.element):null);if(Oe||(console.debug("generateThumbnail: no canvas found immediately, waiting briefly and retrying for",xe,"canvasReady=",Ee),ae("generate-canvas-missing-initial",{stackIdx:X,viewportId:xe,canvasReady:Ee}),await new Promise(Ne=>setTimeout(Ne,150)),Oe=Ze(se)||(ge&&ge.element?Ze(ge.element):null)),Oe){ae("generate-canvas-found",{stackIdx:X,viewportId:xe,canvasWidth:Oe.width,canvasHeight:Oe.height});try{if(typeof Oe.toBlob=="function"){const Ne=await new Promise(Fe=>{Oe.toBlob(dt=>{if(!dt){Fe(null);return}Fe(URL.createObjectURL(dt))},"image/png")});Ne?(ae("generate-toBlob-success",{stackIdx:X,viewportId:xe,blobUrl:_i(Ne,120)}),we(X,Ne)):(ae("generate-toBlob-empty-fallback-dataUrl",{stackIdx:X,viewportId:xe}),we(X,Oe.toDataURL("image/png")))}else ae("generate-no-toBlob-fallback-dataUrl",{stackIdx:X,viewportId:xe}),we(X,Oe.toDataURL("image/png"));console.debug("generateThumbnail: thumbnail captured for stack",X),ae("generate-success",{stackIdx:X,viewportId:xe})}catch(Ne){console.warn("generateThumbnail: toDataURL failed",Ne),ae("generate-data-extract-failed",{stackIdx:X,viewportId:xe,error:String((Ne==null?void 0:Ne.message)||Ne)}),we(X,"BROKEN")}}else console.warn("generateThumbnail: no canvas found after render for",xe,"canvasReady=",Ee,"vp.element=",!!(ge&&ge.element)),ae("generate-failed-no-canvas",{stackIdx:X,viewportId:xe,canvasReady:Ee,hasViewportElement:!!(ge&&ge.element)}),we(X,"BROKEN")}catch(ge){console.warn("Thumbnail generation failed for",pe,ge),ae("generate-failed",{stackIdx:X,chosenImageId:_i(pe||"",180),error:String((ge==null?void 0:ge.message)||ge)});try{we(X,"BROKEN")}catch{}}finally{try{De.disableElement(xe)}catch(ge){console.warn("Failed to disable thumbnail element:",ge)}ae("generate-cleanup",{stackIdx:X,viewportId:xe}),se&&se.parentNode&&se.parentNode.removeChild(se)}},[t,Se,we,ae]);vt.useEffect(()=>{!he||he.length===0||(ae("thumbnail-generation-check",{stackCount:he.length,requested:{...qe.current},thumbnailKeys:Object.keys(Se)}),!R.current)||he.forEach((pe,De)=>{const xe=Array.isArray(pe.imageIds)?pe.imageIds:[],se=Math.floor(xe.length/2),ge=xe[se]||xe[0]||null;ae("thumbnail-candidate",{idx:De,imageCount:xe.length,chosen:_i(ge||"",180),hasThumbnail:!!Se[De],requested:!!qe.current[De]}),!Se[De]&&!qe.current[De]&&yt(De,ge)})},[he,yt,Se,ae]);const zt=async(X,pe)=>{console.log("Setting loaded imageIds:",X),console.log("autoCacheStack:",r);const De=[];if(!!(r||pe!=null&&pe.force)){for(const se of X)if(se.startsWith("wadouri:"))try{const ge=Uf(se);if(MT.wadouri.dataSetCacheManager){const Ee=MT.wadouri.dataSetCacheManager.load(ge);Ee&&typeof Ee.then=="function"&&De.push(Ee)}else console.warn("MetaDataManager not found. Unable to cache metadata.")}catch(ge){console.warn(`Failed to cache metadata for ${se}:`,ge)}await Promise.all(De),yi&&(console.log("Sorting viewport imageIds by slice location"),Xe())}},[Dt,li]=vt.useState({rows:1,cols:1}),[qt,In]=vt.useState(!1),tn=vt.useRef([]),an=vt.useRef({}),ui=vt.useRef({}),[yi,ts]=vt.useState(!1),[zo,$o]=vt.useState(!0),jo=vt.useCallback(X=>{const pe=X.currentTarget.getBoundingClientRect(),De=X.clientX-pe.left,xe=X.clientY-pe.top,se=pe.width,ge=pe.height,Ee=Math.min(se,ge)*.24,Oe=[{zone:"left",distance:De},{zone:"right",distance:se-De},{zone:"top",distance:xe},{zone:"bottom",distance:ge-xe}];return Oe.sort((Ne,Fe)=>Ne.distance-Fe.distance),Oe[0].distance<=Ee?Oe[0].zone:"center"},[]),sa=vt.useCallback(X=>X==="left"||X==="right"?Dt.cols<3?X:"center":(X==="top"||X==="bottom")&&Dt.rows<3?X:"center",[Dt]),_r=[];for(let X=1;X<=3;X++)for(let pe=1;pe<=3;pe++)_r.push({rows:X,cols:pe});const[yn,Tn]=vt.useState(()=>Array(Dt.rows*Dt.cols).fill({index:0,total:0,windowCenter:"",windowWidth:"",slicePosition:"",modality:"",orientation:"",resolution:"",spacing:"",focalPoint:""})),[fi,ns]=vt.useState(()=>Array(A).fill(null).map(()=>[])),eo=vt.useRef(Array(A).fill("")),wi=vt.useRef(Array(A).fill(null)),to=vt.useRef(Array(A).fill(null)),xi=vt.useRef(Array(A).fill(null)),[jn,no]=vt.useState(()=>Array(A).fill("stack")),[Ci,Ma]=vt.useState(()=>Array(Dt.rows*Dt.cols).fill(!1)),[wr,ca]=vt.useState({Primary:Ld.toolName,Auxiliary:Qu.toolName,Secondary:Oh.toolName,Primary_and_Secondary:Gl.toolName,Fourth_Button:Mh.toolName,Wheel:Ld.toolName}),[Gi,Wi]=vt.useState({Primary:gf.toolName,Auxiliary:au.toolName,Secondary:Ah.toolName}),[bs,la]=vt.useState(!1);vt.useEffect(()=>{const X=De=>{De.ctrlKey&&la(!0)},pe=De=>{De.ctrlKey||la(!1)};return window.addEventListener("keydown",X),window.addEventListener("keyup",pe),()=>{window.removeEventListener("keydown",X),window.removeEventListener("keyup",pe)}},[]);const[Eo,Pa]=vt.useState(!1),[Si,ro]=vt.useState(null),ua=(X,pe)=>{na&&na(pe),da(De=>{const xe=[...De];return xe[X]=pe,xe})},rs=(X,pe,De)=>{const xe=mr.getAllAnnotations()||[];xe.forEach(ge=>{ge.annotationUID===pe&&(ge.isSelected=!1)}),mr.removeAnnotation(pe),R.current.render();const se=De.filter(ge=>ge.annotationUID!==pe);da(ge=>{const Ee=[...ge],Oe=se.length>0?se[0].annotationUID:null;return Ee[X]=Oe,xe.forEach(Ne=>{Ne.isSelected=Ne.annotationUID===Oe}),na(Oe),R.current.render(),Ee})},Ds=()=>{const X=$.findIndex(se=>se&&se.length>0);if(X===-1){ro("No images loaded."),Pa(!0);return}const pe=$[X][0],De=["imagePlaneModule","generalSeriesModule","generalStudyModule","patientModule","imagePixelModule","voiLutModule","modalityLutModule","sopCommonModule","petIsotopeModule","multiframeModule","cineModule","overlayPlaneModule","generalImageModule","stackModule","voiLutModule","modalityLutModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule"],xe={};De.forEach(se=>{const ge=wt(se,pe);ge!==void 0&&(xe[se]=ge)}),ro(We.jsx("pre",{style:{maxHeight:600,overflow:"auto",fontSize:13,color:"#fff"},children:JSON.stringify(xe,null,2)})),Pa(!0)};vt.useEffect(()=>{try{const X=localStorage.getItem(l),pe=localStorage.getItem(f);X&&ca(JSON.parse(X)),pe&&Wi(JSON.parse(pe))}catch{}},[]),vt.useEffect(()=>{try{localStorage.setItem(l,JSON.stringify(wr))}catch{}},[wr]),vt.useEffect(()=>{try{localStorage.setItem(f,JSON.stringify(Gi))}catch{}},[Gi]),vt.useEffect(()=>(window.loadDicomStackFromFiles=X=>{const pe=Array.from(X);Rr({target:{files:pe}})},()=>{window.loadDicomStackFromFiles=void 0}),[]);const[bo,Is]=vt.useState(!1),[xc,Os]=vt.useState(!1);vt.useEffect(()=>{const X=ni(G);X&&["ArrowAnnotate","NoLabelArrowAnnotate","Length","RectangleROI","EllipticalROI","PlanarFreehandROI","PlanarFreehandContourSegmentation"].forEach(pe=>{X.setToolConfiguration(pe,{color:"#00e676",selectedColor:"#ffeb3b"})})},[G]),vt.useEffect(()=>{const X=xe=>{xe.altKey&&Is(!0),xe.shiftKey&&Os(!0)},pe=xe=>{xe.altKey||Is(!1),xe.shiftKey||Os(!1)},De=()=>{Is(!1),Os(!1)};return window.addEventListener("keydown",X),window.addEventListener("keyup",pe),window.addEventListener("blur",De),()=>{window.removeEventListener("keydown",X),window.removeEventListener("keyup",pe),window.removeEventListener("blur",De)}},[]),vt.useEffect(()=>{const X=ni(G);if(!X)return;if(xc||zo&&bo){const De=Dt.rows*Dt.cols;$.slice(0,De).filter((se,ge)=>jn[ge]==="stack"&&Array.isArray(se)&&se.length>0).forEach(se=>{zt(se,{force:!0}).catch(ge=>{console.warn("Reference cursor metadata warm-up failed:",ge)})}),X.hasTool(Ba.toolName)||X.addTool(Ba.toolName),X.setToolEnabled(Ba.toolName),X.setToolActive(Ba.toolName)}else X.hasTool(Ba.toolName)&&X.setToolDisabled(Ba.toolName)},[bo,xc,zo,Dt.rows,Dt.cols,$,jn,zt]);const Ms=vt.useCallback(()=>{[ni(G)].forEach(pe=>{if(pe){c0.forEach(xe=>{pe.setToolPassive(xe.value,{removeAllBindings:!0})}),pe.setToolDisabled(Ba.toolName);const De={};Object.entries(wr).forEach(([xe,se])=>{De[se]||(De[se]=[]);const ge=Qv.find(Ee=>Ee.value===xe);ge?De[se].push({mouseButton:ge.mask}):Vg[xe]&&De[se].push({mouseButton:Vg[xe]})}),Object.entries(Gi).forEach(([xe,se])=>{if(!se)return;De[se]||(De[se]=[]);const ge=Qv.find(Ee=>Ee.value===xe);ge?De[se].push({mouseButton:ge.mask,modifierKey:$7.Ctrl}):Vg[xe]&&De[se].push({mouseButton:Vg[xe],modifierKey:$7.Ctrl})}),Object.entries(De).forEach(([xe,se])=>{pe.setToolActive(xe,{bindings:se})});try{const xe=wr.Primary,se=wr.Wheel,ge=wr.Auxiliary,Ee=xe===Qu.toolName||ge===Qu.toolName,Oe=xe===Gl.toolName||se===Gl.toolName||wr.Primary_and_Secondary===Gl.toolName;tn.current.forEach(Ne=>{if(!Ne)return;const Fe=Ne._externalPanZoom;Fe&&(typeof Fe.setAllowPan=="function"&&Fe.setAllowPan(!!Ee),typeof Fe.setAllowZoom=="function"&&Fe.setAllowZoom(!!Oe))})}catch{}}})},[wr,Gi]),[io,oo]=vt.useState(!1),[Pi,di]=vt.useState("add"),Ho=vt.useRef(null),fa=vt.useCallback(X=>{h&&(X.preventDefault(),X.stopPropagation(),m.current={resizing:!0,startX:X.clientX,startWidth:p},document.body.style.cursor="col-resize",document.body.style.userSelect="none")},[h,p]);vt.useEffect(()=>{const X=De=>{if(!m.current.resizing)return;const xe=m.current.startX-De.clientX,se=Math.max(w,Math.min(x,m.current.startWidth+xe));v(se)},pe=()=>{m.current.resizing&&(m.current.resizing=!1,document.body.style.cursor="",document.body.style.userSelect="")};return window.addEventListener("mousemove",X),window.addEventListener("mouseup",pe),()=>{window.removeEventListener("mousemove",X),window.removeEventListener("mouseup",pe),document.body.style.cursor="",document.body.style.userSelect=""}},[]);const Ra=io?C-S/2:-S+T;vt.useEffect(()=>{try{Ho.current&&(Ho.current.setAttribute("webkitdirectory","true"),Ho.current.setAttribute("directory",""),Ho.current.setAttribute("mozdirectory",""))}catch{}},[]);async function Er(X,pe=""){const De=[],xe=X.entries?X.entries():X.values();for await(const se of xe)try{let ge,Ee;if(Array.isArray(se)&&se.length>=2?(Ee=se[0],ge=se[1]):(ge=se,Ee=ge.name),!ge)continue;if(ge.kind==="file"){const Oe=await ge.getFile();try{Object.defineProperty(Oe,"webkitRelativePath",{value:pe+(Ee||ge.name),configurable:!0})}catch{}De.push(Oe)}else if(ge.kind==="directory"){const Oe=await Er(ge,pe+(Ee||ge.name)+"/");De.push(...Oe)}}catch(ge){console.debug("collectFilesFromDirectoryHandle: skipping entry due to error",ge)}return De}const Cc=async()=>{var X;if(window.showDirectoryPicker)try{const pe=await window.showDirectoryPicker(),De=await Er(pe);De&&De.length>0?await Rr({target:{files:De}}):alert("No files found in selected folder.");return}catch(pe){console.warn("showDirectoryPicker failed or cancelled",pe)}(X=Ho.current)==null||X.click()},hi=vt.useRef(null),Rr=async X=>{const pe=X.target.files;if(!pe||pe.length===0)return;ts(!1);const De=Array.from(pe).sort((Ee,Oe)=>Ee.name.localeCompare(Oe.name)),xe=await Promise.all(De.map(async Ee=>{const Oe=Ee.type&&Ee.type.startsWith("image/");let Ne,Fe,dt,pt,Et=!1;if(!Oe)try{const it=await Ee.arrayBuffer(),st=Nr.parseDicom(new Uint8Array(it));Ne=st.string("x0020000d"),Fe=st.string("x0020000e");const q=st.string("x00200013");q!=null&&q!==""&&(dt=parseInt(q,10));const K=st.string("x00201041")||st.string("x00201040");K!=null&&K!==""&&(pt=parseFloat(K)),Et=!0}catch{Et=!1}const Rt=Oe?`external:${URL.createObjectURL(Ee)}`:`wadouri:${URL.createObjectURL(Ee)}`;return{file:Ee,imageId:Rt,studyInstanceUID:Ne,seriesInstanceUID:Fe,instanceNumber:dt,sliceLocation:pt,isImage:Oe,parsedSuccessfully:Et}})),se=new Map;for(const Ee of xe){if(!Ee.isImage&&!Ee.parsedSuccessfully){console.debug("Skipping non-DICOM/non-image file:",Ee.file.name);continue}const Oe=Ee.seriesInstanceUID||Ee.studyInstanceUID||(Ee.file.webkitRelativePath?Ee.file.webkitRelativePath.split("/")[0]:Ee.file.name);se.has(Oe)||se.set(Oe,{entries:[],studyInstanceUID:Ee.studyInstanceUID,seriesInstanceUID:Ee.seriesInstanceUID}),se.get(Oe).entries.push(Ee)}const ge=[];for(const[Ee,Oe]of se.entries()){const Ne=Oe.entries;Ne.sort((dt,pt)=>yi&&dt.sliceLocation!==void 0&&pt.sliceLocation!==void 0?dt.sliceLocation-pt.sliceLocation:dt.instanceNumber!==void 0&&pt.instanceNumber!==void 0?dt.instanceNumber-pt.instanceNumber:(dt.file.webkitRelativePath||dt.file.name).localeCompare(pt.file.webkitRelativePath||pt.file.name));const Fe=Ne.map(dt=>dt.imageId);ge.push({imageIds:Fe,studyInstanceUID:Oe.studyInstanceUID,seriesInstanceUID:Oe.seriesInstanceUID})}if(ge.length!==0)if(Pi==="replace"){try{const Ee=R.current;if(Ee)for(let Oe=0;Oe{const Ee=Array(A).fill([]);for(let Oe=0;Oe{const Oe=[...Ee,...ge];Y(Ne=>{const Fe=[...Ne];return Fe[0]=ge[ge.length-1].imageIds,Fe}),re(Ne=>{const Fe=[...Ne];return Fe[0]=Oe.length-1,Fe});for(const Ne of ge)zt(Ne.imageIds);return Oe})},pr=vt.useCallback((X,pe)=>{var Et,Rt;if(!pe)return;let De=0,xe=0,se="",ge="",Ee="",Oe="",Ne="",Fe="",dt="",pt="";if(jn[X]==="stack"){De=typeof pe.getCurrentImageIdIndex=="function"?pe.getCurrentImageIdIndex():0;const it=typeof pe.getImageIds=="function"?pe.getImageIds():[];xe=it.length;const st=it[De];if(st){const q=wt("generalSeriesModule",st),K=wt("imagePlaneModule",st),de=wt("imagePixelModule",st);Oe=(q==null?void 0:q.modality)||"",de!=null&&de.rows&&(de!=null&&de.columns)&&(Fe=`${de.columns} x ${de.rows}`);const Pe=[K==null?void 0:K.columnPixelSpacing,K==null?void 0:K.rowPixelSpacing,K==null?void 0:K.sliceThickness].filter(Ge=>Ge!=null&&Ge!=="");Pe.length>0&&(dt=Pe.join(" x "))}if(typeof pe.getCamera=="function"){const q=pe.getCamera();q!=null&&q.focalPoint&&Array.isArray(q.focalPoint)&&(pt=q.focalPoint.map(K=>K.toFixed(1)).join(", "))}if(De>=0&&ns(q=>{const K=[...q],de=new Set(K[X]||[]);return de.has(De)?q:(de.add(De),K[X]=Array.from(de).sort((Pe,Ge)=>Pe-Ge),K)}),typeof pe.getProperties=="function"){const q=pe.getProperties();if(q.voiRange){const{lower:K,upper:de}=q.voiRange;se=((de+K)/2).toFixed(0),ge=(de-K).toFixed(0),wi.current[X]===null&&(wi.current[X]={lower:K,upper:de})}}}else if(jn[X]==="volume"){if(typeof pe.getSliceIndex=="function"&&(De=pe.getSliceIndex()),typeof pe.getNumberOfSlices=="function"&&(xe=pe.getNumberOfSlices()),typeof pe.getProperties=="function"){let st;if(pe.volumeIds&&pe.volumeIds.size>0){const q=Array.from(pe.volumeIds)[0];st=pe.getProperties(q)}else st=pe.getProperties();if(st&&st.voiRange){const{lower:q,upper:K}=st.voiRange;se=((K+q)/2).toFixed(0),ge=(K-q).toFixed(0),wi.current[X]===null&&(wi.current[X]={lower:q,upper:K})}}if(typeof pe.getSlicePlaneCoordinates=="function"){const st=pe.getSlicePlaneCoordinates();st&&typeof st.position=="number"&&(Ee=st.position.toFixed(2)+" mm")}const it=(Et=$[X])==null?void 0:Et[0];if(it){const st=wt("generalSeriesModule",it),q=wt("imagePlaneModule",it),K=wt("imagePixelModule",it);Oe=(st==null?void 0:st.modality)||"",Ne=String(((Rt=pe.viewportProperties)==null?void 0:Rt.orientation)||"").toUpperCase(),K!=null&&K.rows&&(K!=null&&K.columns)&&(Fe=`${K.columns} x ${K.rows}`);const de=[q==null?void 0:q.columnPixelSpacing,q==null?void 0:q.rowPixelSpacing,q==null?void 0:q.sliceThickness].filter(Pe=>Pe!=null&&Pe!=="");de.length>0&&(dt=de.join(" x "))}if(typeof pe.getCamera=="function"){const st=pe.getCamera();st!=null&&st.focalPoint&&Array.isArray(st.focalPoint)&&(pt=st.focalPoint.map(q=>q.toFixed(1)).join(", "))}}Tn(it=>{const st=[...it];return st[X]={index:De+1,total:xe,windowCenter:se,windowWidth:ge,slicePosition:Ee,modality:Oe,orientation:Ne,resolution:Fe,spacing:dt,focalPoint:pt},st})},[jn,$]);vt.useEffect(()=>{ns(X=>{let pe=!1;const De=[...X];for(let xe=0;xe{const xe=he[pe];if(!xe)return;const se=sa(De);if(se==="center"){await Pt(X,pe),Me(X);return}const ge=Dt.rows,Ee=Dt.cols,Oe=Math.floor(X/Ee),Ne=X%Ee,Fe=se==="top"||se==="bottom"?ge+1:ge,dt=se==="left"||se==="right"?Ee+1:Ee;if(Fe>3||dt>3||Fe*dt>A){await Pt(X,pe),Me(X);return}const pt=Array(A).fill([]),Et=Array(A).fill("stack"),Rt=Array(A).fill(0),it=se==="top"?Oe:se==="bottom"?Oe+1:Oe,st=se==="left"?Ne:se==="right"?Ne+1:Ne,q=it*dt+st;for(let K=0;KNe?ot=Pe+1:ot=se==="left"?Pe+1:Pe),(se==="top"||se==="bottom")&&Pe===Ne&&(deOe?Ge=de+1:Ge=se==="top"?de+1:de);const nt=Ge*dt+ot;pt[nt]=$[K]||[],Et[nt]=jn[K]||"stack",Rt[nt]=ne[K]??0}pt[q]=xe.imageIds,Et[q]="stack",Rt[q]=pe,tt("displayset");try{Ko(),li({rows:Fe,cols:dt}),Y(pt),no(Et),re(Rt),Me(q),await zt(xe.imageIds)}finally{tt(null)}};vt.useEffect(()=>{const X=async()=>{var ge;if(console.log("setup"),!c.current){c.current=!0,await AA(),await rG(),r$();try{ld("external",Ee=>({promise:(async()=>{const Ne=Ee.replace(/^external:/,""),Fe=new Image;Fe.crossOrigin="anonymous",Fe.src=Ne,await new Promise((q,K)=>{Fe.onload=()=>q(!0),Fe.onerror=de=>K(de)});const dt=Fe.naturalWidth||Fe.width,pt=Fe.naturalHeight||Fe.height,Et=document.createElement("canvas");Et.width=dt,Et.height=pt;const Rt=Et.getContext("2d");if(!Rt)throw new Error("Unable to create canvas context");Rt.drawImage(Fe,0,0,dt,pt);const it=Rt.getImageData(0,0,dt,pt);return{imageId:Ee,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,rows:pt,columns:dt,height:pt,width:dt,color:!0,rgba:!0,sizeInBytes:it.data.length,getPixelData:()=>it.data,getImageData:()=>it,getCanvas:()=>Et}})()}))}catch(Ee){console.warn("Failed to register external image loader",Ee)}}let De=R.current;if(!De){De=new iE(V),R.current=De;try{he&&he.length>0&&he.forEach((Ee,Oe)=>{const Ne=Array.isArray(Ee.imageIds)?Ee.imageIds:[],Fe=Math.floor(Ne.length/2),dt=Ne[Fe]||Ne[0]||null;dt&&!Se[Oe]&&!qe.current[Oe]&&yt(Oe,dt)})}catch{}}let xe=ni(G);xe||(xe=e8e(G)),jn.slice(0,Dt.rows*Dt.cols).filter(Ee=>Ee==="volume").length,Xr(xe);for(let Ee=0;Ee{if(Fe.offsetWidth>0&&Fe.offsetHeight>0){De.resize();const it=De.getViewport(Ne);it&&typeof it.resize=="function"&&it.resize(),it&&typeof it.render=="function"&&it.render()}});Rt.observe(Fe),Fe._resizeObserver=Rt}if(jn[Ee]==="stack"){if(Oe&&Oe.length>0){const Rt=Oe[0];if(le(Rt))try{try{const q=Fe._externalPanZoom;q&&typeof q.cleanup=="function"&&q.cleanup()}catch{}Fe.innerHTML="";const it=document.createElement("img");it.style.width="100%",it.style.height="100%",it.style.objectFit="contain",it.style.display="block",it.src=Rt.replace(/^external:/,""),it.setAttribute("draggable","false"),Fe.appendChild(it);const st=Tt(Fe,it);Fe._externalPanZoom=st,xe.removeViewports(V,Ne)}catch(it){console.warn("Failed to render external image in viewport",it)}else try{pt.setStack(Oe)}catch(it){console.warn("viewport.setStack failed",it)}}Kt?xe.removeViewports(V,Ne):xe.addViewport(Ne,V)}else if(jn[Ee]==="volume"){xe.addViewport(Ne,V);const Rt=`myVolumeId_${Ee}`;(await p1(Rt,{imageIds:Oe})).load(),pt.setVolumes([{volumeId:Rt}]),pt.render(),Fe._overlayListener&&pt.element.removeEventListener(Fg,Fe._overlayListener);const st=()=>pr(Ee,pt);pt.element.addEventListener(Fg,st),Fe._overlayListener=st,pr(Ee,pt);continue}if(pt.render(),!N.current){ui.current[Ee]!==void 0&&typeof pt.setImageIdIndex=="function"&&ds(pt.element,{imageIndex:ui.current[Ee]});const Rt=an.current[Ee];if(Rt&&typeof pt.setProperties=="function"){const{voiRange:it,invert:st,interpolationType:q,VOILUTFunction:K,colormap:de}=Rt,Pe={};it&&it.lower!==void 0&&it.upper!==void 0&&(Pe.voiRange=it),st!==void 0&&(Pe.invert=st),q!==void 0&&(Pe.interpolationType=q),K&&(Pe.VOILUTFunction=K),de!=null&&(typeof de=="string"||typeof de=="object"&&!("actor"in de))&&(Pe.colormap=de),setTimeout(()=>{console.log("Restoring properties (timeout) for viewport",Ee,Pe),pt.setProperties(Pe),pt.render()},100)}}Fe._overlayListener&&pt.element.removeEventListener(Fg,Fe._overlayListener);const Et=()=>pr(Ee,pt);pt.element.addEventListener(Fg,Et),Fe._overlayListener=Et,pr(Ee,pt)}for(let Ee=0;Ee=2?(xe.hasTool(jc.toolName)||xe.addTool(jc.toolName),xe.setToolEnabled(jc.toolName),xe.setToolConfiguration(jc.toolName,{}),xe.setToolActive(jc.toolName,{bindings:[{mouseButton:Vg.Primary}]})):xe.hasTool(jc.toolName)&&xe.setToolDisabled(jc.toolName)),Ms()},pe=requestAnimationFrame(()=>{X()});return()=>{tn.current.forEach(De=>{De&&De._resizeObserver&&(De._resizeObserver.disconnect(),delete De._resizeObserver)}),cancelAnimationFrame(pe)}},[s,pr,Dt,jn,$]);const La=vt.useCallback(X=>{const pe=`CT_${X}`,xe=R.current.getViewport(pe);xe&&typeof xe.resetCamera=="function"&&(xe.resetCamera(),console.log("Restoring viewport properties for viewport",X),xe.resetProperties(),xe.render())},[]),Ps=vt.useCallback((X,pe,De)=>{const xe=`CT_${X}`;try{const se=R.current;if(se){const ge=se.getViewport(xe);ge&&typeof ge.setProperties=="function"&&(console.log(`Applying preset to viewport ${X}: center=${pe}, width=${De}`),ge.setProperties({voiRange:{lower:pe-De/2,upper:pe+De/2}}),ge.render(),pr(X,ge))}}catch{}},[pr]),qo=vt.useCallback((X,pe=!1)=>{const De=`CT_${X}`;try{const xe=R.current,se=xe==null?void 0:xe.getViewport(De);if(!se)return!1;const ge=typeof se.getImageIds=="function"?se.getImageIds():$[X]||[],Ee=typeof se.getCurrentImageIdIndex=="function"?se.getCurrentImageIdIndex():0,Oe=ge[Ee]||ge[0],Ne=wi.current[X],Fe=Oe?wt("voiLutModule",Oe)||{}:{},dt=Oe?wt("imagePixelModule",Oe)||{}:{},pt=Oe?wt("modalityLutModule",Oe)||{}:{},Et=Array.isArray(Fe.windowCenter)?Fe.windowCenter[0]:Fe.windowCenter,Rt=Array.isArray(Fe.windowWidth)?Fe.windowWidth[0]:Fe.windowWidth,it=Number(dt.smallestPixelValue??dt.smallestImagePixelValue),st=Number(dt.largestPixelValue??dt.largestImagePixelValue),q=Number(pt.rescaleSlope??1),K=Number(pt.rescaleIntercept??0);if(Ne)se.setProperties({voiRange:Ne});else if(Number.isFinite(Number(Et))&&Number.isFinite(Number(Rt))&&Number(Rt)>0){const de=Number(Et),Pe=Number(Rt);se.setProperties({voiRange:{lower:de-Pe/2,upper:de+Pe/2}})}else Number.isFinite(it)&&Number.isFinite(st)&&st>it?se.setProperties({voiRange:{lower:it*q+K,upper:st*q+K}}):typeof se.resetProperties=="function"&&se.resetProperties();return pe&&typeof se.resetCamera=="function"&&se.resetCamera(),se.render(),pr(X,se),!0}catch(xe){return console.warn("Failed to apply default window level",xe),!1}},[pr,$]),Aa=vt.useCallback(X=>{const pe=`CT_${X}`;(async()=>{const De=R.current;if(!De)return;const xe=De.getViewport(pe);if(!xe)return;const se=typeof xe.getImageIds=="function"?xe.getImageIds():$[X]||[],ge=typeof xe.getCurrentImageIdIndex=="function"?xe.getCurrentImageIdIndex():0,Ee=se[ge]||se[0];if(!Ee){qo(X);return}const Oe=wt("imagePixelModule",Ee)||{},Ne=wt("modalityLutModule",Ee)||{},Fe=wt("voiLutModule",Ee)||{},dt=wi.current[X];let pt=Number(Oe.smallestPixelValue??Oe.smallestImagePixelValue),Et=Number(Oe.largestPixelValue??Oe.largestImagePixelValue),Rt=Number(Ne.rescaleSlope??1),it=Number(Ne.rescaleIntercept??0);if(!Number.isFinite(pt)||!Number.isFinite(Et)||Et<=pt)try{const K=await _s(Ee);pt=Number(K==null?void 0:K.minPixelValue),Et=Number(K==null?void 0:K.maxPixelValue),Rt=Number((K==null?void 0:K.slope)??Rt),it=Number((K==null?void 0:K.intercept)??it)}catch{const de=se.filter(Pe=>!!Pe).slice(0,6);for(const Pe of de)try{const Ge=await _s(Pe);if(pt=Number(Ge==null?void 0:Ge.minPixelValue),Et=Number(Ge==null?void 0:Ge.maxPixelValue),Rt=Number((Ge==null?void 0:Ge.slope)??Rt),it=Number((Ge==null?void 0:Ge.intercept)??it),Number.isFinite(pt)&&Number.isFinite(Et)&&Et>pt)break}catch{}}const st=Array.isArray(Fe.windowCenter)?Fe.windowCenter[0]:Fe.windowCenter,q=Array.isArray(Fe.windowWidth)?Fe.windowWidth[0]:Fe.windowWidth;if(Number.isFinite(pt)&&Number.isFinite(Et)&&Et>pt)xe.setProperties({voiRange:{lower:pt*Rt+it,upper:Et*Rt+it}});else if(Number.isFinite(Number(st))&&Number.isFinite(Number(q))&&Number(q)>0){const K=Number(st),de=Number(q);xe.setProperties({voiRange:{lower:K-de/2,upper:K+de/2}})}else if(dt)xe.setProperties({voiRange:dt});else{qo(X);return}xe.render(),pr(X,xe)})().catch(()=>{qo(X)})},[qo,pr,$]),Jn=vt.useCallback((X,pe,De=!0,xe=!0)=>{if(De&&(to.current[X]=pe),pe.action==="reset"){qo(X,xe);return}if(pe.action==="autolevel"){Aa(X);return}const se=pe;Ps(X,se.center,se.width)},[qo,Ps,Aa]);vt.useEffect(()=>{const X=()=>{const De=R.current;if(!De)return;const xe=Dt.rows*Dt.cols;for(let se=0;sewindow.clearTimeout(pe)},[Jn,yn,Dt,jn]),vt.useEffect(()=>{const X=pe=>{var Oe,Ne;const De=pe.target;if(De){const Fe=(Oe=De.tagName)==null?void 0:Oe.toLowerCase(),dt=De.getAttribute("contenteditable")==="true";if(Fe==="input"||Fe==="textarea"||Fe==="select"||dt)return}if(pe.ctrlKey||pe.altKey||pe.metaKey||ve===null)return;const xe=(Ne=yn[ve])==null?void 0:Ne.modality,se=j7(xe);if(pe.key==="0"){const Fe=se.find(dt=>dt.action==="reset");Fe&&(Jn(ve,Fe),pe.preventDefault());return}if(!/^[1-9]$/.test(pe.key))return;const ge=Number(pe.key)-1,Ee=se.filter(Fe=>Fe.action==="preset");ge>=Ee.length||(Jn(ve,Ee[ge]),pe.preventDefault())};return window.addEventListener("keydown",X),()=>window.removeEventListener("keydown",X)},[ve,Jn,yn]);const Na=vt.useCallback(()=>{const X=a.current;X&&(document.fullscreenElement===X?document.exitFullscreen():X.requestFullscreen?X.requestFullscreen():X.webkitRequestFullscreen?X.webkitRequestFullscreen():X.msRequestFullscreen&&X.msRequestFullscreen())},[]);vt.useEffect(()=>{Tn(Array(Dt.rows*Dt.cols).fill({index:0,total:0,windowCenter:"",windowWidth:"",slicePosition:"",modality:"",orientation:"",resolution:"",spacing:"",focalPoint:""})),Ma(Array(Dt.rows*Dt.cols).fill(!1))},[Dt]),vt.useEffect(()=>{Ms()},[wr,Gi,bs,Ms]),vt.useEffect(()=>{if(!Ci.some(Boolean))return;const X=pe=>{const De=document.querySelector(".preset-menu");De&&!De.contains(pe.target)&&Ma(xe=>xe.map(()=>!1))};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[Ci]),vt.useEffect(()=>{if(!qt)return;const X=pe=>{const De=_.current;De&&!De.contains(pe.target)&&(In(!1),O(!1))};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[qt]),vt.useEffect(()=>{const X=pe=>{if(pe.button===3||pe.button===4)return pe.preventDefault(),!1};return window.addEventListener("mousedown",X,!0),window.addEventListener("mouseup",X,!0),window.addEventListener("auxclick",X,!0),()=>{window.removeEventListener("mousedown",X,!0),window.removeEventListener("mouseup",X,!0),window.removeEventListener("auxclick",X,!0)}},[]),vt.useEffect(()=>{const X=a.current;if(!X)return;const pe=De=>{De.preventDefault()};return X.addEventListener("contextmenu",pe),()=>{X.removeEventListener("contextmenu",pe)}},[]),vt.useEffect(()=>{if(!Dn)return;const X=ni(G);Xr(X)},[ve,Dn]),vt.useEffect(()=>{hi.current&&(hi.current.setAttribute("webkitdirectory","true"),hi.current.setAttribute("directory","true"))},[]),vt.useEffect(()=>(window.loadDicomStackFromWadouriList=async X=>{if(!X||X.length===0)return;let pe;try{const De=X[0];if(De&&De.startsWith("wadouri:")){const xe=Uf(De),ge=await(await fetch(xe)).arrayBuffer();pe=Nr.parseDicom(new Uint8Array(ge)).string("x0020000d")}}catch{}ue(De=>{const xe=[...De,{imageIds:X,studyInstanceUID:pe}];return Y(se=>{const ge=[...se];return ge[0]=X,ge}),re(se=>{const ge=[...se];return ge[0]=xe.length-1,ge}),zt(X),xe})},()=>{window.loadDicomStackFromWadouriList=void 0}),[ue,Y,re,zt]),vt.useEffect(()=>{!yi||!$.every(pe=>!pe||pe.length===0||pe.every(De=>!!wt("imagePlaneModule",De)))||Y(pe=>{let De=!1;const xe=pe.map(se=>{if(!se||se.length===0)return se;const Oe=[...se.map(Ne=>({imageId:Ne,sliceLoc:(()=>{const Fe=wt("imagePlaneModule",Ne);return Fe&&Fe.sliceLocation!==void 0?Number(Fe.sliceLocation):null})()}))].sort((Ne,Fe)=>Ne.sliceLoc!==null&&Fe.sliceLoc!==null?Ne.sliceLoc-Fe.sliceLoc:Ne.imageId.localeCompare(Fe.imageId)).map(Ne=>Ne.imageId);return JSON.stringify(Oe)!==JSON.stringify(se)?(De=!0,Oe):se});return De&&_t(!0),xe})},[yi,he]);function Xr(X){if(!X)return;const pe=`CT_${ve}`;Dn?(X.setToolEnabled(pd.toolName),X.setToolConfiguration(pd.toolName,{sourceViewportId:pe})):X.setToolDisabled(pd.toolName)}function Yr(){var pe,De,xe;const X=R.current;if(X)for(let se=0;se{if(typeof pe=="string"&&pe.startsWith("blob:"))try{URL.revokeObjectURL(pe)}catch{}}),je.current={},Re({}),qe.current={},_t(!1),Me(0)}function ao(X,pe){var Ee,Oe;if(console.log("Truncating stack from",X,"to",pe),console.log(Ot),Dt.rows!==1||Dt.cols!==1||he.length!==1||!$[0]||$[0].length===0||Ot)return alert("Truncation is only allowed when a single stack is loaded in a single viewport (and the order has not been modified in the viewer)."),!1;const De=he[0],xe=De.imageIds;if(X<0||pe>=xe.length||X>=pe)return alert("Invalid truncation bounds."),!1;const se=xe.slice(X,pe+1);ue([{...De,imageIds:se}]),Y([se]),re([0]);const ge=R.current;if(ge){const Ne=ge.getViewport("CT_0");Ne&&typeof Ne.setStack=="function"&&(Ne.setStack(se),(Ee=Ne.setImageIdIndex)==null||Ee.call(Ne,0),(Oe=Ne.render)==null||Oe.call(Ne))}return!0}function Cl(X=0){const pe=R.current;if(!pe)return null;const De=pe.getViewport(`CT_${X}`);return!De||typeof De.getCurrentImageIdIndex!="function"?null:De.getCurrentImageIdIndex()}vt.useEffect(()=>{const X=t||"default";function pe(xe,se){const ge=R.current;if(!ge)return;const Ee=ge.getViewport(`CT_${xe}`);if(!Ee||typeof Ee.getImageIds!="function")return;const Ne=Ee.getImageIds().map(pt=>Uf(pt)),Fe=Uf(se),dt=Ne.indexOf(Fe);dt!==-1&&typeof Ee.setImageIdIndex=="function"&&(ds(Ee.element,{imageIndex:dt}),pr(xe,Ee))}window[`getViewport_${X}`]=xe=>{const se=R.current;if(se)return se.getViewport(`CT_${xe}`)},window[`getAllViewports_${X}`]=()=>{const xe=R.current;return xe?Array.from({length:A},(se,ge)=>xe.getViewport(`CT_${ge}`)).filter(Boolean):[]},window[`jumpToSliceByImageId_${X}`]=pe,window[`resetViewer_${X}`]=Yr,window[`clearViewer_${X}`]=Sc,window[`truncateStack_${X}`]=ao,window[`getCurrentStackPosition_${X}`]=Cl,window[`loadAdditionalStack_${X}`]=async(xe,se)=>{var Ee;if(!Array.isArray(xe)||xe.length===0)return;let ge=se;if(!ge&&((Ee=xe[0])!=null&&Ee.startsWith("wadouri:")))try{const Oe=Uf(xe[0]),Fe=await(await fetch(Oe)).arrayBuffer();ge=Nr.parseDicom(new Uint8Array(Fe)).string("x0020000d")}catch{}ue(Oe=>[...Oe,{imageIds:xe,studyInstanceUID:ge}]),Y(Oe=>{const Ne=[...Oe],Fe=Ne.findIndex(dt=>!dt||dt.length===0);return Fe!==-1&&(Ne[Fe]=xe),Ne}),zt(xe)},window[`exportViewerState_${X}`]=()=>{var it;const xe=Dt.rows*Dt.cols,se=jn.slice(0,xe),ge=ne.slice(0,xe),Ee=he.map(st=>({i:st.imageIds,u:st.studyInstanceUID}));console.log("Exporting viewer state with",xe,"active viewports"),console.log("modes",se);const Oe=R.current,Ne=[],Fe=[],dt=[],pt=[],Et=[];for(let st=0;st{try{N.current=!0;const se=typeof xe=="string"?JSON.parse(xe):xe;if(se.grid&&li(se.grid),se.modes&&no(se.modes),se.stacks&&ue(se.stacks.map(Ne=>({imageIds:Ne.i,studyInstanceUID:Ne.u}))),se.stackIdx&&se.stacks){const Ne=se.stackIdx.map(Fe=>{var dt;return((dt=se.stacks[Fe])==null?void 0:dt.i)||[]});Y(Ne),re(se.stackIdx)}const ge=30;let Ee=0;async function Oe(){var Et,Rt,it,st,q,K,de,Pe,Ge,ot,nt;const Ne=R.current;if(!Ne){N.current=!1;return}const Fe=((Et=se.grid)==null?void 0:Et.rows)*((Rt=se.grid)==null?void 0:Rt.cols)||1;let dt=!0;for(let ze=0;zeQ===Mt[Z])){console.warn(`Viewport ${ze}: importedImageIds do not match viewportImageIds`,{importedImageIds:Mt,viewportImageIds:It}),dt=!1;break}}catch{dt=!1}}if(!dt&&Ee{Oe()},500);return}for(let ze=0;ze{try{ds(Qe.element,{imageIndex:se.volumeSliceIndices[ze]})}catch{}},100)}else{try{Qe.setStack&&(Qe.setStack(Mt),Qe.render())}catch(It){console.warn("Failed to set stack for viewport",ze,It)}if(se.stackPos&&typeof se.stackPos[ze]=="number"&&typeof Qe.setImageIdIndex=="function")try{Rn&&ds?ds(Qe.element,{imageIndex:se.stackPos[ze]}):Qe.setImageIdIndex(se.stackPos[ze])}catch{}}}const pt=1500;console.log(`Waiting ${pt}ms before applying properties/camera to viewports`),await new Promise(ze=>setTimeout(ze,pt));for(let ze=0;ze{Oe()},100)}catch(se){N.current=!1,alert("Failed to import viewer state: "+se)}},window[`exportAnnotations_${X}`]=()=>{try{let xe=mr.getAllAnnotations();if(console.log("Exporting annotations:",xe),Array.isArray(xe)){const se=[gf.toolName,Ah.toolName,pf.toolName,ou.toolName,Ad.toolName,hf.toolName,hl.toolName,au.toolName,Ph.toolName];xe=xe.filter(ge=>se.includes(ge.metadata.toolName))}else return"{}";return JSON.stringify(xe,null,2)}catch(xe){return alert("Failed to export annotations: "+xe),"{}"}},window.__pendingImportAnnotations=window.__pendingImportAnnotations||{};const De=xe=>{try{const se=window.__pendingImportAnnotations&&window.__pendingImportAnnotations[xe];if(!se||!se.length)return;const ge=mr;if(!ge||typeof ge.addAnnotation!="function")return;for(;(window.__pendingImportAnnotations[xe]||[]).length;){const Ee=(window.__pendingImportAnnotations[xe]||[]).shift();Ee&&Array.isArray(Ee)&&Ee.forEach(Oe=>{try{ge.addAnnotation(Oe,Oe.annotationUID)}catch(Ne){console.error("Failed to add queued annotation",Ne,Oe)}})}R.current&&R.current.render()}catch(se){console.error("Error flushing pending annotations:",se)}};return window[`importAnnotations_${X}`]=xe=>{try{const se=typeof xe=="string"?JSON.parse(xe):xe,ge=mr;if(!ge||typeof ge.addAnnotation!="function"){window.__pendingImportAnnotations[X]=window.__pendingImportAnnotations[X]||[],window.__pendingImportAnnotations[X].push(se),console.warn("importAnnotations: annotation state not ready, queued import",X),setTimeout(()=>De(X),500);return}if(ge.removeAllAnnotations)try{ge.removeAllAnnotations()}catch(Ee){console.warn("removeAllAnnotations failed",Ee)}Array.isArray(se)&&se.forEach(Ee=>{try{ge.addAnnotation(Ee,Ee.annotationUID)}catch(Oe){console.error("Failed to add annotation",Oe,Ee)}}),R.current&&R.current.render()}catch(se){console.error("Failed to import annotations:",se,{apiKey:X,cornerstoneTools:!!wz,renderingEngine:!!R.current});try{alert("Failed to import annotations: "+se)}catch{}}try{De(X)}catch{}},window[`importLegacyAnnotations_${X}`]=xe=>{mr.removeAllAnnotations&&mr.removeAllAnnotations();let se;try{se=typeof xe=="string"?JSON.parse(xe):xe}catch{alert("Invalid legacy annotation JSON");return}const ge={ArrowAnnotate:"ArrowAnnotate"};Object.entries(se).forEach(([Ee,Oe])=>{console.log("Importing legacy annotations for imageId:",Ee),Object.entries(Oe).forEach(([Ne,Fe])=>{const dt=ge[Ne]||Ne;Fe.data&&Array.isArray(Fe.data)&&Fe.data.forEach(pt=>{const Et=z7(Ee,{x:pt.handles.start.y,y:pt.handles.start.x}),Rt=z7(Ee,{x:pt.handles.end.y,y:pt.handles.end.x});console.log("Importing legacy annotation:"),console.log(" Image ID:",Ee),console.log(" Start World:",Et),console.log(" End World:",Rt);const it=wt("imagePlaneModule",Ee);console.log(R4);let st=wt("frameOfReferenceUID",Ee);!st&&it&&it.frameOfReferenceUID&&(st=it.frameOfReferenceUID);const q=it!=null&&it.rowCosines&&(it!=null&&it.columnCosines)?[it.rowCosines[1]*it.columnCosines[2]-it.rowCosines[2]*it.columnCosines[1],it.rowCosines[2]*it.columnCosines[0]-it.rowCosines[0]*it.columnCosines[2],it.rowCosines[0]*it.columnCosines[1]-it.rowCosines[1]*it.columnCosines[0]]:void 0;Array.isArray(q)&&q.length,typeof pt.rotation=="number"&&pt.rotation;const K={annotationUID:pt.uuid,metadata:{toolName:dt,referencedImageId:Ee,FrameOfReferenceUID:st,viewPlaneNormal:q},data:{handles:{points:[Et,Rt],textBox:pt.handles.textBox},text:pt.text||""},visibility:pt.visible!==!1,active:pt.active||!1};mr.addAnnotation(K,K.annotationUID)})})}),R.current&&R.current.render()},window[`importLegacyViewport_${X}`]=xe=>{let se;try{se=typeof xe=="string"?JSON.parse(xe):xe}catch{alert("Invalid legacy viewport JSON");return}const ge=R.current;if(!ge)return;const Ee=`CT_${ve??0}`,Oe=ge.getViewport(Ee);if(!Oe)return;const Ne={};if(se.voi&&(Ne.voiRange={lower:se.voi.windowCenter-se.voi.windowWidth/2,upper:se.voi.windowCenter+se.voi.windowWidth/2}),typeof se.invert=="boolean"&&(Ne.invert=se.invert),typeof se.pixelReplication=="boolean"&&(Ne.interpolationType=se.pixelReplication?0:1),typeof se.hflip=="boolean"&&(Ne.hflip=se.hflip),typeof se.vflip=="boolean"&&(Ne.vflip=se.vflip),typeof Oe.setProperties=="function"&&Oe.setProperties(Ne),se.translation||se.scale){const Fe=Oe.getCamera?Oe.getCamera():{};se.translation&&(Fe.translation={...Fe.translation,...se.translation}),se.scale&&(Fe.parallelScale=200/se.scale),console.log("Applying legacy camera properties:",Fe),typeof Oe.setCamera=="function"&&Oe.setCamera(Fe)}typeof se.rotation=="number"&&Oe.setRotation(se.rotation),Oe.render(),pr(ve??0,Oe)},window[`exportThumbDebug_${X}`]=()=>{try{return JSON.stringify(ce.current,null,2)}catch{return"[]"}},window[`clearThumbDebug_${X}`]=()=>(ce.current=[],!0),()=>{window[`exportViewerState_${X}`]=void 0,window[`importViewerState_${X}`]=void 0,window[`exportAnnotations_${X}`]=void 0,window[`importAnnotations_${X}`]=void 0,window[`importLegacyAnnotations_${X}`]=void 0,window[`importLegacyViewport_${X}`]=void 0,window[`jumpToSliceByImageId_${X}`]=void 0,window[`resetViewer_${X}`]=void 0,window[`clearViewer_${X}`]=void 0,window[`truncateStack_${X}`]=void 0,window[`getCurrentStackPosition_${X}`]=void 0,window[`loadAdditionalStack_${X}`]=void 0,window[`getViewport_${X}`]=void 0,window[`getAllViewports_${X}`]=void 0,window[`exportThumbDebug_${X}`]=void 0,window[`clearThumbDebug_${X}`]=void 0}},[Dt,jn,ne,he,$,li,no,re,ue,Y,ue,Y,zt]),vt.useEffect(()=>{const X=a.current;if(!X)return;function pe(De){if(console.log("Handling arrow key navigation",De.key),console.log("activeViewport",ve),ve===null)return;const xe=R.current;if(!xe)return;const se=xe.getViewport(`CT_${ve}`);if(se){if(console.log(se),jn[ve]==="stack"){if(typeof se.getCurrentImageIdIndex!="function"||typeof se.setImageIdIndex!="function")return;const ge=$[ve];if(!ge||ge.length===0)return;De.key==="ArrowUp"||De.key==="ArrowRight"?(sc(se,{delta:-1}),De.preventDefault()):(De.key==="ArrowDown"||De.key==="ArrowLeft")&&(sc(se,{delta:1}),De.preventDefault())}jn[ve]==="volume"&&typeof se.getSliceIndex=="function"&&typeof se.getNumberOfSlices=="function"&&se.getNumberOfSlices()>1&&(De.key==="ArrowUp"||De.key==="ArrowRight"?(sc(se,{delta:-1}),De.preventDefault()):(De.key==="ArrowDown"||De.key==="ArrowLeft")&&(sc(se,{delta:1}),De.preventDefault()))}}return X.addEventListener("keydown",pe),()=>{X.removeEventListener("keydown",pe)}},[ve,jn,$,pr]);const Ri=ve!==null?ne[ve]:0,so=he[Ri];so==null||so.studyInstanceUID;const[Rs,da]=vt.useState(()=>Array(A).fill(null)),$i=Dt.rows*Dt.cols,Ls=[];for(let X=0;X<$i;X++){const pe=Xtn.current[X]=se,style:{flex:1,border:pe?"1px solid #222":"none",background:"#000",minWidth:0,minHeight:0,position:"relative",overflow:"hidden",flexDirection:"column",gridRow:Math.floor(X/Dt.cols)+1,gridColumn:X%Dt.cols+1,height:"100%",boxShadow:ve===X?"0 0 0 4px #1976d2, 0 0 16px 4px #1976d2cc":void 0,zIndex:ve===X?10:1},onClick:()=>{Me(X),In(!1)},onDoubleClick:()=>La(X),onDragEnter:se=>{if(!se.dataTransfer.getData("text/stack-idx"))return;se.preventDefault();const Ee=jo(se);M({viewportIdx:X,zone:Ee})},onDragOver:se=>{if(!se.dataTransfer.getData("text/stack-idx"))return;se.preventDefault();const Ee=jo(se),Oe=sa(Ee);M({viewportIdx:X,zone:Ee}),se.dataTransfer.dropEffect=Oe===Ee?"copy":"move"},onDragLeave:se=>{if((B==null?void 0:B.viewportIdx)!==X)return;const ge=se.relatedTarget;ge&&se.currentTarget.contains(ge)||M(null)},onDrop:se=>{se.preventDefault();const ge=se.dataTransfer.getData("text/stack-idx"),Ee=parseInt(ge,10);if(!isNaN(Ee)){const Oe=jo(se);zi(X,Ee,Oe).catch(Ne=>{console.error("Failed to apply dropped stack:",Ne)})}M(null),be(null)},children:[Ue!==null&&De&&We.jsx("div",{style:{position:"absolute",inset:0,zIndex:19,pointerEvents:"none",background:"rgba(0,0,0,0.08)"},children:We.jsx("div",{style:{position:"absolute",left:xe==="left"?0:xe==="right"?"50%":"20%",top:xe==="top"?0:xe==="bottom"?"50%":"20%",width:xe==="left"||xe==="right"?"50%":"60%",height:xe==="top"||xe==="bottom"?"50%":"60%",border:"2px solid #90caf9",boxShadow:"0 0 0 9999px rgba(17, 29, 45, 0.22)",background:"rgba(25, 118, 210, 0.28)",borderRadius:6,display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:12,fontWeight:700,textTransform:"uppercase",letterSpacing:.4},children:xe==="center"?"Load Here":`Split ${xe}`})}),We.jsx("button",{style:{position:"absolute",top:8,left:8,zIndex:20,background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 8px",cursor:"pointer",fontSize:"12px",opacity:.85},onClick:()=>{no(se=>{const ge=[...se];return ge[X]=se[X]==="stack"?"volume":"stack",ge})},children:jn[X]==="stack"?"Volume":"Stack"}),jn[X]==="volume"&&We.jsxs("div",{style:{position:"absolute",top:8,left:70,zIndex:21,display:"flex",gap:"6px",background:"rgba(34,34,34,0.85)",borderRadius:"4px",padding:"2px 6px",alignItems:"center"},children:[We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px",marginRight:"2px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("axial"),ge.render())},children:"Axial"}),We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px",marginRight:"2px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("sagittal"),ge.render())},children:"Sagittal"}),We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("coronal"),ge.render())},children:"Coronal"})]}),We.jsxs("button",{style:{position:"absolute",top:40,left:8,zIndex:20,background:"#111",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 8px",cursor:"pointer",fontSize:"13px",opacity:.85,marginTop:"4px",display:"flex",alignItems:"center",gap:"6px"},title:"Toggle Fullscreen",onClick:se=>{se.stopPropagation();const ge=tn.current[X];document.fullscreenElement===ge?document.exitFullscreen():ge!=null&&ge.requestFullscreen?ge.requestFullscreen():ge!=null&&ge.webkitRequestFullscreen?ge.webkitRequestFullscreen():ge!=null&&ge.msRequestFullscreen&&ge.msRequestFullscreen()},onMouseEnter:()=>b(X),onMouseLeave:()=>b(null),children:[We.jsx("span",{style:{fontSize:"18px",lineHeight:1},children:"⛶"}),E===X&&We.jsx("span",{style:{marginLeft:6},children:document.fullscreenElement===tn.current[X]?"Exit Fullscreen":"Fullscreen"})]}),jn[X]==="stack"&&F&&(()=>{var Rt;const se=$[X],Ee=(mr.getAllAnnotations()||[]).filter(it=>it.metadata&&it.metadata.referencedImageId&&se.includes(it.metadata.referencedImageId)&&it.metadata.toolName!==Ba.toolName);if(!Ee.length)return null;const Oe=R.current,Ne=Oe==null?void 0:Oe.getViewport(`CT_${X}`),Fe=((Rt=Ne==null?void 0:Ne.getCurrentImageIdIndex)==null?void 0:Rt.call(Ne))??0,dt=se[Fe],pt=Ee.filter(it=>it.metadata.referencedImageId===dt),Et=Rs[X];return We.jsxs("div",{style:{position:"absolute",left:"50%",bottom:60,transform:"translateX(-50%)",zIndex:30,display:"flex",gap:4,pointerEvents:"auto",alignItems:"center"},children:[We.jsx("button",{style:{background:"rgba(30,30,30,0.7)",color:"#fff",border:"none",borderRadius:"50%",width:28,height:28,fontSize:"16px",fontWeight:"bold",cursor:"pointer",opacity:.7,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.18)",transition:"opacity 0.2s"},title:"Previous Annotation","aria-label":"Previous Annotation",onClick:()=>{const it=R.current,st=it==null?void 0:it.getViewport(`CT_${X}`);if(!st||typeof st.getCurrentImageIdIndex!="function")return;const q=st.getCurrentImageIdIndex(),K=q7(q,se,Ee,-1);if(K!==null&&typeof st.setImageIdIndex=="function"){ds(st.element,{imageIndex:K}),pr(X,st);const de=se[K],Pe=Ee.filter(Ge=>Ge.metadata.referencedImageId===de);ua(X,Pe.length>0?Pe[0].annotationUID:null)}},children:We.jsx("span",{"aria-hidden":"true",children:"◀"})}),We.jsx("button",{style:{background:"rgba(30,30,30,0.7)",color:"#fff",border:"none",borderRadius:"50%",width:28,height:28,fontSize:"16px",fontWeight:"bold",cursor:"pointer",opacity:.7,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.18)",transition:"opacity 0.2s"},title:"Next Annotation","aria-label":"Next Annotation",onClick:()=>{const it=R.current,st=it==null?void 0:it.getViewport(`CT_${X}`);if(!st||typeof st.getCurrentImageIdIndex!="function")return;const q=st.getCurrentImageIdIndex(),K=q7(q,se,Ee,1);if(K!==null&&typeof st.setImageIdIndex=="function"){ds(st.element,{imageIndex:K}),pr(X,st);const de=se[K],Pe=Ee.filter(Ge=>Ge.metadata.referencedImageId===de);ua(X,Pe.length>0?Pe[0].annotationUID:null)}},children:We.jsx("span",{"aria-hidden":"true",children:"▶"})}),pt.length>0&&We.jsx("div",{style:{display:"flex",gap:2,alignItems:"center"},children:pt.map(it=>We.jsxs("div",{style:{display:"flex",alignItems:"center",background:Et===it.annotationUID?"rgb(4, 225, 0)":"#444",color:Et===it.annotationUID?"#222":"#fff",borderRadius:"4px",padding:"2px 6px",marginRight:2,cursor:"pointer",border:Et===it.annotationUID?"2px solid #1976d2":"none",fontWeight:Et===it.annotationUID?"bold":"normal"},onClick:()=>ua(X,it.annotationUID),children:[We.jsxs("span",{style:{marginRight:4},title:it.metadata.toolName||"Annotation",children:[Et===it.annotationUID?"★ ":"",We.jsx("span",{style:{fontSize:14,lineHeight:1},children:ZEe(it.metadata.toolName)})]}),We.jsx("button",{style:{background:"transparent",color:"#f44336",border:"1px solid #f44336",borderRadius:3,width:16,height:16,fontSize:10,lineHeight:1,cursor:"pointer",marginLeft:4,display:"flex",alignItems:"center",justifyContent:"center",opacity:.95,padding:0},title:"Delete this annotation","aria-label":"Delete annotation",onClick:st=>{st.stopPropagation(),rs(X,it.annotationUID,pt)},children:We.jsx("span",{"aria-hidden":"true",children:"✖"})})]},it.annotationUID))})]})})(),We.jsx("div",{style:{position:"absolute",left:8,bottom:8,background:"rgba(0,0,0,0.7)",color:"#fff",padding:"6px 12px",borderRadius:"4px",fontSize:"14px",zIndex:10,pointerEvents:"none",minWidth:"120px",userSelect:"none"},children:jn[X]==="stack"?We.jsxs(We.Fragment,{children:[We.jsxs("div",{children:["Image: ",(Tc=yn[X])==null?void 0:Tc.index," / ",(_c=yn[X])==null?void 0:_c.total]}),We.jsxs("div",{children:["WC: ",(As=yn[X])==null?void 0:As.windowCenter,"   WW: ",(ha=yn[X])==null?void 0:ha.windowWidth]}),te&&We.jsxs(We.Fragment,{children:[We.jsxs("div",{children:["Ori: ",((Ns=yn[X])==null?void 0:Ns.orientation)||"N/A"]}),((is=yn[X])==null?void 0:is.resolution)&&We.jsxs("div",{children:["Res: ",(Ec=yn[X])==null?void 0:Ec.resolution]}),((bc=yn[X])==null?void 0:bc.spacing)&&We.jsxs("div",{children:["Spacing: ",(Dc=yn[X])==null?void 0:Dc.spacing]}),((Ic=yn[X])==null?void 0:Ic.focalPoint)&&We.jsxs("div",{children:["Pos: ",(Oc=yn[X])==null?void 0:Oc.focalPoint]})]})]}):We.jsxs("div",{children:["Slice: ",(Mc=yn[X])==null?void 0:Mc.index," / ",(Pc=yn[X])==null?void 0:Pc.total,((ks=yn[X])==null?void 0:ks.slicePosition)&&We.jsxs("span",{children:["   (",(Rc=yn[X])==null?void 0:Rc.slicePosition,")"]}),We.jsx("br",{}),"WC: ",(Vs=yn[X])==null?void 0:Vs.windowCenter,"   WW: ",(Fs=yn[X])==null?void 0:Fs.windowWidth,te&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Ori: ",((Lc=yn[X])==null?void 0:Lc.orientation)||"N/A",((os=yn[X])==null?void 0:os.resolution)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Res: ",(Us=yn[X])==null?void 0:Us.resolution]}),((Bs=yn[X])==null?void 0:Bs.spacing)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Spacing: ",(as=yn[X])==null?void 0:as.spacing]}),((Ac=yn[X])==null?void 0:Ac.focalPoint)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Pos: ",(Gs=yn[X])==null?void 0:Gs.focalPoint]})]})]})}),We.jsx("div",{style:{position:"absolute",right:8,bottom:8,zIndex:110,pointerEvents:"auto"},children:We.jsxs("div",{className:"preset-menu",style:{background:"rgba(0,0,0,0.7)",color:"#fff",borderRadius:"4px",fontSize:"14px",minWidth:"120px",overflow:"hidden",cursor:"pointer",position:"relative",boxShadow:Ci[X]?"0 2px 8px rgba(0,0,0,0.3)":void 0,pointerEvents:"auto"},onClick:se=>se.stopPropagation(),children:[We.jsxs("div",{style:{padding:"6px 12px",fontWeight:"bold",userSelect:"none"},onClick:se=>{se.stopPropagation(),Ma(ge=>{const Ee=[...ge];return Ee[X]=!Ee[X],Ee})},children:["Presets (",((Nc=yn[X])==null?void 0:Nc.modality)||"Unknown",")",We.jsx("span",{style:{float:"right",fontWeight:"normal"},children:Ci[X]?"▲":"▼"})]}),Ci[X]&&We.jsx("div",{className:"preset-menu-content",style:{background:"rgba(0,0,0,0.95)",borderRadius:"0 0 4px 4px",padding:"6px 0 6px 0",display:"flex",flexDirection:"column",zIndex:111,pointerEvents:"auto"},onClick:se=>se.stopPropagation(),children:(()=>{var Ee;const se=j7((Ee=yn[X])==null?void 0:Ee.modality);let ge=0;return se.map(Oe=>{let Ne="";return Oe.action==="reset"?Ne="0":Oe.action==="preset"&&(ge+=1,Ne=String(ge)),We.jsxs("button",{title:Ne?`Shortcut: ${Ne}`:void 0,style:{display:"block",width:"100%",margin:"2px 0",background:Oe.action==="preset"?"#333":"#444",color:"#fff",border:"none",borderRadius:"3px",cursor:"pointer",padding:Oe.action==="preset"?"4px 0":"6px 0",fontSize:"13px",opacity:.9,fontWeight:Oe.action==="preset"?"normal":"600"},onClick:Fe=>{Fe.stopPropagation(),Jn(X,Oe),Ma(dt=>{const pt=[...dt];return pt[X]=!1,pt})},children:[Oe.name,Ne?` (${Ne})`:""]},Oe.name)})})()})]})}),jn[X]==="stack"&&$[X]&&We.jsx("div",{style:{position:"absolute",top:"10%",right:8,width:"14px",height:"80%",maxHeight:"100%",minHeight:0,zIndex:35,display:$[X].length>0?"flex":"none",alignItems:"flex-start",justifyContent:"center",pointerEvents:"auto",flexDirection:"column",padding:0},children:(()=>{const se=$[X]||[],ge=se.length;if(ge===0)return null;const Ee=R.current,Oe=Ee==null?void 0:Ee.getViewport(`CT_${X}`),Ne=Oe&&typeof Oe.getCurrentImageIdIndex=="function"?Oe.getCurrentImageIdIndex():-1,Fe=new Set(fi[X]||[]),dt=se.map(st=>st.startsWith("external:")?!0:!!wt("imagePlaneModule",st)||!!wt("generalSeriesModule",st)),pt=dt.reduce((st,q)=>st+(q?1:0),0),Et=se.reduce((st,q,K)=>st+(Fe.has(K)?1:0),0),Rt=Math.min(ge,180),it=Array.from({length:Rt},()=>({loaded:!1,viewed:!1,current:!1}));for(let st=0;st{var nt;const K=st.currentTarget.getBoundingClientRect(),de=Math.min(K.height,Math.max(0,st.clientY-K.top)),Pe=K.height>0?de/K.height:0,Ge=Math.min(ge-1,Math.max(0,Math.round(Pe*(ge-1)))),ot=(nt=R.current)==null?void 0:nt.getViewport(`CT_${X}`);ot&&typeof ot.setImageIdIndex=="function"&&jn[X]==="stack"&&(ds(ot.element,{imageIndex:Ge}),pr(X,ot))},children:[it.map((st,q)=>{let K="#3f3f3f";return st.loaded&&(K="#2e7d32"),st.viewed&&(K="#1565c0"),st.current&&(K="#fbc02d"),We.jsx("div",{style:{width:"100%",height:`${100/Rt}%`,minHeight:1,background:K,opacity:st.loaded||st.viewed||st.current?.95:.45,borderBottom:q=0&&ge>Rt&&We.jsx("div",{style:{position:"absolute",left:0,right:0,top:`${Ne/Math.max(1,ge-1)*100}%`,height:2,background:"#ffeb3b",boxShadow:"0 0 4px #ffeb3b",transform:"translateY(-1px)",pointerEvents:"none"}})]})})()}),jn[X]==="volume"&&(()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);let Ee=0,Oe=0;return ge&&typeof ge.getNumberOfSlices=="function"&&typeof ge.getSliceIndex=="function"&&(Ee=ge.getNumberOfSlices(),Oe=ge.getSliceIndex()),Ee>1?We.jsx("div",{style:{position:"absolute",top:"10%",right:8,width:"12px",height:"80%",maxHeight:"100%",minHeight:0,zIndex:30,display:"flex",alignItems:"flex-start",justifyContent:"center",pointerEvents:"auto",flexDirection:"column",padding:0},children:We.jsx("div",{style:{width:"8px",height:"100%",maxHeight:"100%",minHeight:0,borderRadius:"6px",background:"#222",position:"relative",display:"flex",flexDirection:"column",justifyContent:"flex-start",boxShadow:"0 0 8px #2196f3cc",overflow:"hidden",cursor:"pointer"},onClick:Ne=>{const dt=Ne.currentTarget.getBoundingClientRect(),pt=Ne.clientY-dt.top,Et=Math.floor(pt/dt.height*Ee),Rt=R.current,it=Rt==null?void 0:Rt.getViewport(`CT_${X}`);it&&(ds(it.element,{imageIndex:Et}),it.render(),pr(X,it))},children:Array.from({length:Ee}).map((Ne,Fe)=>{const dt=Fe===Oe;return We.jsx("div",{style:{width:"100%",height:`${100/Ee}%`,minHeight:dt?1:0,background:dt?"linear-gradient(to right, #ffeb3b 60%, #ff9800 100%)":"#444",opacity:dt?.95:.4,transition:"background 0.3s, opacity 0.3s",borderBottom:Fe1||!$[X]||$[X].length===0)&&We.jsx("div",{style:{position:"absolute",left:0,right:0,bottom:8,zIndex:20,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"auto",width:"100%",background:"none",borderRadius:"0",padding:0},children:We.jsxs("div",{style:{position:"relative"},children:[We.jsxs("button",{onClick:se=>{se.stopPropagation(),I(ge=>ge===X?null:X)},style:{padding:"6px 12px",background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",cursor:"pointer",pointerEvents:"auto",fontSize:13},title:"Choose stack",children:[(()=>{const se=Array.isArray(ne)?ne[X]:void 0,ge=typeof se=="number"&&he[se]?he[se]:void 0,Ee=ge&&Array.isArray(ge.imageIds)?ge.imageIds:[],Oe=ge?ge.name||(ge.caseId?`Case: ${ge.caseId}`:void 0):void 0;if(Oe)return Oe;if(Ee.length>0)return`Stack ${typeof se=="number"?se+1:"1"}`;const Ne=$[X]||[];return Ne.length>0?`Stack (${Ne.length} images)`:"No stack"})(),We.jsx("span",{style:{marginLeft:8,opacity:.8},children:D===X?"▲":"▼"})]}),D===X&&We.jsx("div",{ref:se=>{se&&se.focus()},tabIndex:0,style:{position:"absolute",left:0,bottom:"110%",background:"#222",border:"1px solid #444",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.3)",zIndex:100,minWidth:220,maxHeight:260,overflowY:"auto",overscrollBehavior:"contain",scrollbarWidth:"thin",padding:6},role:"listbox",onMouseDown:se=>se.stopPropagation(),onWheel:se=>{var Ee;try{se.stopPropagation()}catch{}try{se.preventDefault()}catch{}const ge=se.currentTarget;if(ge){const Oe=se.deltaY??((Ee=se.nativeEvent)==null?void 0:Ee.deltaY)??0;ge.scrollTop+=Oe}},onBlur:se=>{setTimeout(()=>{se.currentTarget.contains(document.activeElement)||I(null)},0)},children:(()=>{const se={};return he.forEach((ge,Ee)=>{const Oe=ge.studyId||ge.studyInstanceUID||"Unspecified";se[Oe]||(se[Oe]=[]),se[Oe].push({idx:Ee,stack:ge})}),Object.keys(se).map(ge=>We.jsxs("div",{style:{marginBottom:6},children:[We.jsx("div",{style:{fontSize:12,color:"#aaa",padding:"4px 8px",fontWeight:700},children:ge==="Unspecified"?"Unspecified study":`Study: ${ge}`}),We.jsx("div",{children:se[ge].map(({idx:Ee,stack:Oe})=>{const Ne=Array.isArray(Oe.imageIds)?Oe.imageIds:[],Fe=Oe&&(Oe.name||Oe.caseId)?Oe.name||`Case: ${Oe.caseId}`:`Stack ${Ee+1}`,dt=Ne.length,pt=!Array.isArray(Ne)||dt===0;return We.jsxs("button",{role:"option","aria-selected":!1,title:pt?"Invalid stack descriptor":`${Fe} — ${dt} image${dt===1?"":"s"}${Oe!=null&&Oe.caseId?` — case ${Oe.caseId}`:""}`,style:{display:"flex",flexDirection:"column",alignItems:"flex-start",width:"100%",padding:"8px 12px",background:"transparent",color:"#fff",border:"none",textAlign:"left",cursor:pt?"not-allowed":"pointer"},onClick:Et=>{if(Et.stopPropagation(),pt){console.warn(`Attempted to select invalid stack at index ${Ee}`,Oe);return}Pt(X,Ee).catch(Rt=>console.error("Failed to load stack:",Rt)),I(null)},children:[We.jsx("div",{style:{fontWeight:"600",fontSize:13},children:Fe}),We.jsxs("div",{style:{fontSize:12,opacity:.7},children:[dt," image",dt===1?"":"s",Oe!=null&&Oe.caseId?` • case ${Oe.caseId}`:""]})]},Ee)})})]},ge))})()})]})})]},X))}return We.jsxs("div",{ref:a,style:{position:"relative",inset:0,width:"100%",height:"100%",boxSizing:"border-box",background:"#222",padding:"12px",overflow:"hidden"},children:[Ae&&We.jsx("div",{style:{position:"absolute",zIndex:3e3,top:0,left:0,width:"100%",height:"100%",background:"rgba(0,0,0,0.7)",color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:28,fontWeight:"bold",letterSpacing:1},children:Ae==="annotations"?"Loading Annotations...":Ae==="displayset"?"Loading Display Set...":"Loading Viewer State..."}),gt&&We.jsxs("div",{style:{position:"fixed",top:12,left:12,right:12,zIndex:1e4,background:"#fff3cd",color:"#856404",border:"1px solid #ffeeba",padding:"10px 14px",borderRadius:6,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[We.jsxs("div",{style:{flex:1,fontSize:14},children:[We.jsx("strong",{children:"Graphics error:"})," The viewer encountered a WebGL/graphics error and may be unstable. Please reload the page.",xt?We.jsx("div",{style:{marginTop:6,fontSize:12,color:"#6b4f00"},children:xt}):null]}),We.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[We.jsx("button",{onClick:()=>window.location.reload(),style:{padding:"6px 10px"},children:"Reload"}),We.jsx("button",{onClick:()=>ht(!1),style:{padding:"6px 10px"},children:"Dismiss"})]})]}),!h&&We.jsx("button",{onClick:()=>g(!0),"aria-pressed":!1,title:"Open stacks",style:{position:"absolute",right:8,top:76,zIndex:120,width:24,height:42,background:"#1976d2",color:"#fff",border:"none",borderRadius:5,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 2px 8px rgba(0,0,0,0.3)",pointerEvents:"auto"},children:"▶"}),We.jsxs("div",{children:[We.jsx("button",{style:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:Ra,zIndex:200,width:S,height:S,background:"#222",color:"#fff",border:"none",borderRadius:"50%",fontWeight:"bold",cursor:"pointer",fontSize:"22px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",transition:"left 0.25s cubic-bezier(.4,2,.6,1), background 0.2s"},onClick:()=>oo(X=>!X),"aria-label":"Open menu",children:"☰"}),io&&We.jsx("div",{style:{position:"absolute",top:0,left:0,width:C,height:"100%",background:"#222",color:"#fff",zIndex:199,boxShadow:"2px 0 12px rgba(0,0,0,0.3)",flexDirection:"column",padding:"24px 16px 16px 16px",display:"flex",overflow:"hidden"},children:We.jsxs("div",{style:{flex:1,minHeight:0,overflowY:"auto",display:"flex",flexDirection:"column"},children:[We.jsxs("div",{style:{fontWeight:"bold",fontSize:18,marginBottom:24},children:["Menu",We.jsx("button",{style:{float:"right",background:"transparent",color:"#fff",border:"none",fontSize:"22px",cursor:"pointer"},onClick:()=>oo(!1),"aria-label":"Close menu",children:"×"})]}),We.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",marginBottom:8},children:[We.jsxs("label",{style:{fontSize:13},children:[We.jsx("input",{type:"radio",name:"folderLoadMode",value:"add",checked:Pi==="add",onChange:()=>di("add")})," Add (append)"]}),We.jsxs("label",{style:{fontSize:13},children:[We.jsx("input",{type:"radio",name:"folderLoadMode",value:"replace",checked:Pi==="replace",onChange:()=>di("replace")})," Replace all"]})]}),We.jsx("button",{style:{padding:"10px 18px",background:"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:Cc,children:"Load DICOM Folder"}),We.jsx("input",{ref:Ho,type:"file",style:{display:"none"},multiple:!0,onChange:Rr}),We.jsx("input",{ref:hi,type:"file",style:{display:"none"},multiple:!0,onChange:Rr,accept:".dcm,application/dicom"}),We.jsxs("div",{style:{marginBottom:"18px",display:"flex",alignItems:"center",gap:"8px"},children:[We.jsx("input",{type:"checkbox",id:"orderBySliceLocation",checked:yi,onChange:X=>ts(X.target.checked),style:{accentColor:"#666"}}),We.jsx("label",{htmlFor:"orderBySliceLocation",style:{fontSize:"15px",cursor:"pointer"},children:"Order by Slice Location"})]}),We.jsx("button",{style:{padding:"10px 18px",background:"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:Ds,children:"Show DICOM Metadata"}),We.jsxs("button",{style:{padding:"10px 18px",background:Kt?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>en(X=>!X),children:[Kt?"Disable":"Enable"," Cross Reference Lines"]}),We.jsxs("button",{style:{padding:"10px 18px",background:Dn?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>Xn(X=>!X),children:[Dn?"Disable":"Enable"," Reference Lines"]}),We.jsx("button",{onClick:Xe,style:{margin:8,padding:8},children:"Sort All Viewports by Slice Location"}),We.jsx("button",{style:{padding:"10px 18px",background:zo?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>$o(X=>!X),children:zo?"Disable Alt Key for Reference Cursors (Shift always works)":"Enable Alt Key for Reference Cursors (Shift always works)"}),We.jsxs("button",{style:{padding:"10px 18px",background:F?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>j(X=>!X),children:[F?"Hide":"Show"," Annotation Navigation"]}),We.jsxs("button",{style:{padding:"10px 18px",background:te?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>ie(X=>!X),children:[te?"Disable":"Enable"," Volume Diagnostics"]})]})})]}),We.jsxs("div",{ref:_,className:"grid-menu-hover-container",style:{position:"absolute",top:qt||P?8:-18,left:"50%",transform:"translateX(-50%)",zIndex:100,display:"flex",flexDirection:"row",alignItems:"flex-start",gap:8,width:"auto",pointerEvents:"auto",transition:"top 180ms ease",paddingTop:28,marginTop:-28,paddingBottom:12},onMouseEnter:()=>O(!0),onMouseLeave:()=>{qt||O(!1)},children:[We.jsxs("button",{style:{height:40,padding:"6px 12px 6px 10px",background:"#222",color:"#fff",border:"none",borderRadius:"0 0 4px 4px",fontWeight:"bold",cursor:"pointer",fontSize:"14px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",display:"inline-flex",alignItems:"center",gap:8},title:"Toggle viewer fullscreen",onFocus:()=>O(!0),onClick:()=>{O(!0),Na()},children:[We.jsx("span",{style:{fontSize:16,lineHeight:1},children:"⛶"}),We.jsx("span",{children:"Fullscreen"})]}),We.jsxs("div",{style:{position:"relative",display:"flex",flexDirection:"column",alignItems:"stretch"},children:[We.jsxs("button",{className:"grid-menu-btn",style:{height:40,padding:"6px 14px 6px 10px",background:"#222",color:"#fff",border:"none",borderRadius:"0 0 4px 4px",fontWeight:"bold",cursor:"pointer",fontSize:"14px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",display:"inline-flex",alignItems:"center",gap:10,justifyContent:"space-between",minWidth:136},onFocus:()=>O(!0),onClick:()=>{O(!0),In(X=>!X)},tabIndex:0,children:[We.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:8},children:[We.jsx("span",{style:{display:"grid",gridTemplateColumns:`repeat(${Dt.cols}, 5px)`,gridTemplateRows:`repeat(${Dt.rows}, 5px)`,gap:2,padding:1},children:Array.from({length:Dt.rows*Dt.cols}).map((X,pe)=>We.jsx("span",{style:{width:5,height:5,borderRadius:1,background:"#90caf9",display:"block"}},pe))}),We.jsxs("span",{children:[Dt.rows,"x",Dt.cols]})]}),We.jsx("span",{style:{opacity:.8},children:qt?"▲":"▼"})]}),qt&&We.jsx("div",{style:{position:"absolute",top:"calc(100% + 8px)",right:0,background:"#222",color:"#fff",borderRadius:"6px",boxShadow:"0 2px 12px rgba(0,0,0,0.4)",padding:"12px",display:"grid",gridTemplateColumns:"repeat(3, minmax(68px, 1fr))",gap:"8px",zIndex:200,pointerEvents:"auto"},onMouseDown:X=>X.stopPropagation(),children:_r.map(X=>We.jsxs("button",{style:{minWidth:"68px",height:"54px",background:X.rows===Dt.rows&&X.cols===Dt.cols?"#444":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"13px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:6},onClick:()=>{Ko(),li({rows:X.rows,cols:X.cols}),In(!1),O(!1)},children:[We.jsx("span",{style:{display:"grid",gridTemplateColumns:`repeat(${X.cols}, 6px)`,gridTemplateRows:`repeat(${X.rows}, 6px)`,gap:2},children:Array.from({length:X.rows*X.cols}).map((pe,De)=>We.jsx("span",{style:{width:6,height:6,borderRadius:1,background:"#90caf9",display:"block"}},De))}),We.jsxs("span",{children:[X.rows,"x",X.cols]})]},`${X.rows}x${X.cols}`))})]})]}),We.jsxs("div",{style:{display:"flex",flexDirection:"row",height:"calc(100% - 48px)",gap:8},children:[We.jsxs("div",{style:{flex:1,display:"grid",margin:3,gridTemplateRows:`repeat(${Dt.rows}, 1fr)`,gridTemplateColumns:`repeat(${Dt.cols}, 1fr)`,gap:"5px",minHeight:0,minWidth:0,zIndex:1,position:"relative"},children:[Ls,We.jsx("button",{style:{position:"absolute",top:8,right:8,zIndex:2600,padding:"6px 12px",background:"#222",color:"#fff",border:"none",borderRadius:"4px",cursor:"pointer",opacity:.85,userSelect:"none"},onClick:()=>d(!0),children:"Settings"})]}),We.jsxs("div",{style:{width:h?p:0,transition:"width 220ms ease",display:"flex",flexDirection:"column",pointerEvents:h?"auto":"none",overflow:"hidden",position:"relative"},children:[h&&We.jsx("div",{onMouseDown:fa,title:"Resize stacks panel",style:{position:"absolute",left:0,top:0,width:8,height:"100%",cursor:"col-resize",zIndex:2800,background:"linear-gradient(to right, rgba(100,181,246,0.25), rgba(100,181,246,0))"}}),We.jsx("div",{style:{pointerEvents:"auto",width:"100%",height:"100%"},children:We.jsxs("div",{style:{height:"100%",width:"100%",background:"#1f2428",color:"#fff",boxShadow:"0 2px 14px rgba(0,0,0,0.45)",borderLeft:"1px solid #2f3336",transform:"translateX(0)",transition:"transform 220ms ease",display:"flex",flexDirection:"column",overflow:"hidden"},children:[We.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 12px",borderBottom:"1px solid #2b2f31"},children:[We.jsx("div",{style:{fontWeight:700},children:"Stacks"}),We.jsxs("div",{style:{fontSize:12,color:"#9bb4c8"},children:["Active VP: ",ve!==null?ve+1:"-"]}),We.jsx("div",{style:{display:"flex",gap:8,alignItems:"center"},children:We.jsx("button",{title:"Close",onClick:()=>{g(!1)},style:{background:"transparent",color:"#fff",border:"none",cursor:"pointer",fontSize:16},children:"×"})})]}),We.jsx("div",{style:{overflowY:"auto",padding:8,flex:1},children:he.length===0?We.jsx("div",{style:{color:"#999",padding:12},children:"No stacks available"}):We.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:he.map((X,pe)=>{const De=Array.isArray(X.imageIds)?X.imageIds:[],xe=X.name||(X.caseId?`Case: ${X.caseId}`:`Stack ${pe+1}`),se=De.length,ge=!Array.isArray(De)||se===0,Ee=ne.includes(pe),Oe=ve!==null&&ne[ve]===pe,Ne=Math.floor(De.length/2),Fe=De[Ne]||De[0],dt=Fe?Uf(Fe):null;return We.jsxs("div",{draggable:!ge,onDragStart:pt=>{ge||(be(pe),M(null),pt.dataTransfer.setData("text/stack-idx",String(pe)),pt.dataTransfer.effectAllowed="copy")},onDragEnd:()=>{be(null),M(null)},onClick:()=>{if(ge)return;Pt(ve??0,pe)},style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 10px",background:Oe?"#0d47a1":Ee?"#1976d2":"transparent",color:Ee?"#fff":"#ddd",border:Oe?"1px solid #64b5f6":"1px solid transparent",borderRadius:6,cursor:ge?"not-allowed":"pointer"},children:[We.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(()=>{const pt=Se[pe],Et=pt&&pt!=="BROKEN"?pt:null,Rt=Et||dt||null;return ae("thumbnail-render-source",{idx:pe,label:xe,generated:pt?_i(pt,120):null,generatedValid:Et?_i(Et,120):null,fallback:dt?_i(dt,180):null,chosenImage:Fe?_i(Fe,180):null,src:Rt?_i(Rt,180):null,requested:!!qe.current[pe]}),Rt?We.jsx("img",{"data-thumb-stack":pe,src:Rt,alt:xe,style:{width:56,height:56,objectFit:"cover",borderRadius:4,background:"#111"},onLoad:it=>{const st=it.currentTarget;ae("thumbnail-img-load",{idx:pe,label:xe,src:_i(Rt,180),naturalWidth:st.naturalWidth,naturalHeight:st.naturalHeight,clientWidth:st.clientWidth,clientHeight:st.clientHeight})},onError:()=>{console.warn("Thumbnail failed to load for stack",pe,Rt);const it=!!Et,st=!it&&QEe(Rt);if(ae("thumbnail-img-error",{idx:pe,label:xe,src:_i(Rt,180),usedGeneratedImage:it,likelyDicomFallback:st,requested:!!qe.current[pe],chosenImage:Fe?_i(Fe,180):null}),it){we(pe,"BROKEN");return}qe.current[pe]||(ae("thumbnail-img-error-trigger-generate",{idx:pe,chosenImage:Fe?_i(Fe,180):null}),yt(pe,Fe))}}):We.jsx("div",{style:{width:56,height:56,borderRadius:4,background:"#111",display:"flex",alignItems:"center",justifyContent:"center",color:"#777"},children:"No Img"})})(),We.jsxs("div",{style:{display:"flex",flexDirection:"column"},children:[We.jsx("div",{style:{fontWeight:600},children:xe}),We.jsxs("div",{style:{fontSize:12,opacity:.7},children:[se," img",se===1?"":"s"]})]})]}),We.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4},children:[We.jsx("div",{style:{fontSize:12,opacity:.8},children:X.studyId||""}),Oe&&We.jsx("div",{style:{fontSize:11,color:"#bbdefb",fontWeight:700},children:"ACTIVE"})]})]},pe)})})})]})})]})]}),u&&We.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"rgba(0,0,0,0.4)",zIndex:1e3,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>d(!1),children:We.jsxs("div",{style:{background:"#222",color:"#fff",borderRadius:"8px",minWidth:"320px",minHeight:"180px",padding:"24px",boxShadow:"0 4px 24px rgba(0,0,0,0.4)",position:"relative"},onClick:X=>X.stopPropagation(),children:[We.jsx("div",{style:{fontSize:"20px",marginBottom:"16px"},children:"Settings"}),We.jsxs("div",{style:{marginBottom:"24px"},children:[We.jsx("div",{style:{marginBottom:12,fontWeight:"bold"},children:"Mouse Button Tool Bindings"}),H7.map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," Button:"]}),We.jsx("select",{value:wr[X.value],onChange:pe=>ca(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))})]},X.value)),We.jsxs("div",{style:{margin:"12px 0"},children:[We.jsxs("button",{style:{background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 12px",cursor:"pointer",fontSize:"14px",marginBottom:"8px"},onClick:()=>Nn(X=>!X),children:[fn?"Hide":"Show"," Advanced Mouse Bindings"]}),fn&&We.jsx("div",{style:{marginTop:8},children:Qv.slice(3).map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label,":"]}),We.jsxs("select",{value:wr[X.value]||"",onChange:pe=>ca(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value))})]}),We.jsx("div",{style:{margin:"18px 0 8px 0",fontWeight:"bold"},children:"Ctrl + Mouse Button Tool Bindings"}),H7.map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," + Ctrl:"]}),We.jsxs("select",{value:Gi[X.value]||"",onChange:pe=>Wi(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value+"_ctrl")),We.jsxs("div",{style:{margin:"12px 0"},children:[We.jsxs("button",{style:{background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 12px",cursor:"pointer",fontSize:"14px",marginBottom:"8px"},onClick:()=>qr(X=>!X),children:[go?"Hide":"Show"," Advanced Ctrl + Mouse Bindings"]}),go&&We.jsx("div",{style:{marginTop:8},children:Qv.slice(3).map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," + Ctrl:"]}),We.jsxs("select",{value:Gi[X.value]||"",onChange:pe=>Wi(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value+"_ctrl"))})]})]}),We.jsx("button",{style:{position:"absolute",top:12,right:12,background:"transparent",color:"#fff",border:"none",fontSize:"20px",cursor:"pointer"},onClick:()=>d(!1),"aria-label":"Close",children:"×"})]})}),Eo&&We.jsx("div",{style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",background:"rgba(0,0,0,0.5)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>Pa(!1),children:We.jsxs("div",{style:{background:"#222",color:"#fff",borderRadius:"8px",minWidth:"320px",maxWidth:"80vw",maxHeight:"80vh",padding:"24px",boxShadow:"0 4px 24px rgba(0,0,0,0.4)",position:"relative",overflow:"auto"},onClick:X=>X.stopPropagation(),children:[We.jsx("div",{style:{fontSize:"20px",marginBottom:"16px"},children:"DICOM Metadata"}),Si,We.jsx("button",{style:{position:"absolute",top:12,right:12,background:"transparent",color:"#fff",border:"none",fontSize:"20px",cursor:"pointer"},onClick:()=>Pa(!1),"aria-label":"Close",children:"×"})]})})]})}function e8e(t){console.log("Setting up tools...",t),ki(Qu),ki(Oh),ki(Ld),ki(Gl),ki(Mh),ki(gf),ki(au),ki(pf),ki(ou),ki(Ad),ki(hf),ki(hl),ki(Ph),ki(Ba),ki(jc),ki(pd),ki(Ah);let e=ni(t);return e||(e=dF(t),e.addTool(Oh.toolName),e.addTool(Qu.toolName),e.addTool(Gl.toolName),e.addTool(Ld.toolName,{loop:!1}),e.addTool(Mh.toolName),e.addTool(gf.toolName),e.addTool(Ah.toolName,{getTextCallback:()=>""}),e.addTool(pf.toolName),e.addTool(au.toolName,{statsCalculator:()=>null}),e.addTool(ou.toolName,{calculateStats:!1,getTextCallback:()=>""}),e.addTool(Ad.toolName,{getTextCallback:()=>""}),e.addTool(hf.toolName,{calculateStats:!1}),e.addTool(hl.toolName,{}),e.addTool(Ph.toolName,{}),e.addTool(pd.toolName),e.addTool(Ba.toolName)),e}function q7(t,e,r,n){if(!r.length||!e.length)return null;const i=r.map(o=>e.findIndex(a=>a===o.metadata.referencedImageId)).filter(o=>o!==-1).sort((o,a)=>o-a);if(!i.length)return null;if(n===1){for(let o of i)if(o>t)return o;return i[0]}else{for(let o=i.length-1;o>=0;o--)if(i[o]`wadouri:/test_images/stack2/IMG${r+1}.dcm`),Array.from({length:25},(e,r)=>`wadouri:/test_images/stack5/IMG${r+1}.dcm`),Array.from({length:26},(e,r)=>`wadouri:/test_images/stack3/IMG${r+1}.dcm`)]}const n8e=t=>{const e=t.trim();return!e||e.startsWith("external:")||e.startsWith("wadors:")?e:e.startsWith("wadouri:")?`wadouri:${e.slice(8).replace(/^:+/,"")}`:`wadouri:${e.replace(/^:+/,"")}`},op=t=>t.map(n8e),X7=t=>t?{imageIds:op(t)}:{imageIds:[]};function d$(){document.querySelectorAll(".dicom-viewer-test-root").forEach(r=>{const n=r.id||"",i=()=>t8e();jC(r).render(We.jsx(K7,{container_id:n,imageStacks:i}))}),document.querySelectorAll(".dicom-viewer-root").forEach(r=>{const n=r,i=n.id||"",o=`[DV3D Mount][${i||"default"}]`;let a;const s=r.getAttribute("data-empty")==="true",c=n.getAttribute("data-named-stacks"),l=n.getAttribute("data-images");try{console.debug(o,"container-attrs",{path:window.location.pathname,isEmpty:s,hasDataNamedStacks:!!c,hasDataImages:!!l,dataNamedLength:c?c.length:0,dataImagesLength:l?l.length:0,autoCacheStack:r.getAttribute("data-auto-cache-stack")})}catch{}const f=v=>{if(!v)return[];if(Array.isArray(v)&&v.length>0&&typeof v[0]=="string")return[X7(v)];if(Array.isArray(v)){const y=[];return v.forEach((m,w)=>{if(m&&typeof m=="object"&&Array.isArray(m.stacks)){const x=m.caseId||m.caseUID||m.case||void 0,C=m.studyId||m.studyUID||m.studyInstanceUID||void 0;m.stacks.forEach((S,T)=>{let _=[];if(Array.isArray(S)?_=S:Array.isArray(S.imageIds)?_=S.imageIds:Array.isArray(S.i)&&(_=S.i),!Array.isArray(_)||_.length===0||!_.every(E=>typeof E=="string")){console.warn(`data-named-stacks: skipping invalid nested stack at parsed[${w}].stacks[${T}]`,S);return}y.push({imageIds:op(_),name:S.name||S.label||void 0,caseId:x,studyId:S.studyId||C})});return}if(m&&typeof m=="object"&&(Array.isArray(m.imageIds)||Array.isArray(m.i))){const x=Array.isArray(m.imageIds)?m.imageIds:m.i;if(!Array.isArray(x)||x.length===0||!x.every(C=>typeof C=="string")){console.warn(`data-named-stacks: skipping invalid stack object at parsed[${w}]`,m);return}y.push({imageIds:op(x),name:m.name||m.label||void 0,caseId:m.caseId||m.caseUID||void 0,studyId:m.studyId||m.studyUID||m.studyInstanceUID||void 0});return}if(Array.isArray(m)&&m.length>0&&typeof m[0]=="string"){y.push(X7(m));return}console.warn(`data-named-stacks: unknown or invalid entry at parsed[${w}] — skipping`,m)}),y}return[]};if(s)a=()=>Promise.resolve([]);else if(c){let v;try{v=JSON.parse(c)}catch(m){console.error("Invalid data-named-stacks JSON:",m),v=[]}const y=f(v);try{console.debug(o,"parsed-data-named-stacks",{descriptorCount:y.length,summary:y.map((m,w)=>{const x=Array.isArray(m.imageIds)?m.imageIds:[],C=x[Math.floor(x.length/2)]||x[0]||"";return{idx:w,name:m.name||null,caseId:m.caseId||null,studyId:m.studyId||null,imageCount:x.length,sampleImageId:C.length>180?`${C.slice(0,180)}...(${C.length} chars)`:C}})})}catch{}a=()=>Promise.resolve(y)}else if(l){let v;try{v=JSON.parse(l)}catch(y){console.error("Invalid data-images JSON:",y),v=[]}try{console.debug(o,"parsed-data-images",{topLevelIsArray:Array.isArray(v),topLevelLength:Array.isArray(v)?v.length:0})}catch{}Array.isArray(v)&&v.length>0&&typeof v[0]=="string"?a=()=>Promise.resolve([op(v)]):Array.isArray(v)?a=()=>Promise.resolve(v.map(y=>Array.isArray(y)?op(y):[])):a=()=>Promise.resolve([[]])}else a=()=>Promise.resolve([]);const u=n.getAttribute("data-auto-cache-stack"),d=u==="true"||u==="1",h=n.getAttribute("data-annotationjson"),g=n.getAttribute("data-viewerstate"),p=JSON.stringify({id:i,isEmpty:s,dataNamedLength:c?c.length:0,dataNamedHash:c?c.slice(0,300):"",dataImagesLength:l?l.length:0,dataImagesHash:l?l.slice(0,300):"",autoCacheStack:d,annotationLength:h?h.length:0,annotationHash:h?h.slice(0,200):"",viewerStateLength:g?g.length:0,viewerStateHash:g?g.slice(0,200):""});if(n.__dv3dRoot&&n.__dv3dMountSig===p){try{console.debug(o,"mount-skipped-same-signature")}catch{}return}console.log("Mounting DICOM viewer:"),console.log(g,h,d);try{console.debug(o,"mount-props",{hasViewerState:!!g,viewerStateLength:g?g.length:0,hasAnnotationJson:!!h,annotationJsonLength:h?h.length:0,autoCacheStack:d})}catch{}n.__dv3dRoot||(n.__dv3dRoot=jC(n)),n.__dv3dMountSig=p,n.__dv3dRoot.render(We.jsx(K7,{container_id:i,imageStacks:a,autoCacheStack:d,annotationJson:h||void 0,viewerState:g||void 0}))})}d$();window.mountDicomViewers=d$; +`,Nt.push(St);var er=Cl(Function,Nt).apply(null,gn);return er}function so(z,H,L,U,ee,fe){_(H>0);var ye=ao(H,L);ee=Jn(U,ee),yi([],[z],function(Ce){Ce=Ce[0];var Ie="constructor "+Ce.name;if(Ce.registeredClass.constructor_body===void 0&&(Ce.registeredClass.constructor_body=[]),Ce.registeredClass.constructor_body[H-1]!==void 0)throw new yn("Cannot register multiple constructors with identical number of parameters ("+(H-1)+") for class '"+Ce.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!");return Ce.registeredClass.constructor_body[H-1]=()=>{Yr("Cannot construct "+Ce.name+" due to unbound types",ye)},yi([],ye,function(Le){return Le.splice(1,0,null),Ce.registeredClass.constructor_body[H-1]=Ri(Ie,Le,null,ee,fe),[]}),[]})}function Rs(z,H,L,U,ee,fe,ye,Ce){var Ie=ao(L,U);H=_r(H),fe=Jn(ee,fe),yi([],[z],function(Le){Le=Le[0];var He=Le.name+"."+H;H.startsWith("@@")&&(H=Symbol[H.substring(2)]),Ce&&Le.registeredClass.pureVirtualFunctions.push(H);function ct(){Yr("Cannot call "+He+" due to unbound types",Ie)}var St=Le.registeredClass.instancePrototype,$t=St[H];return $t===void 0||$t.overloadTable===void 0&&$t.className!==Le.name&&$t.argCount===L-2?(ct.argCount=L-2,ct.className=Le.name,St[H]=ct):(Pi(St,H,He),St[H].overloadTable[L-2]=ct),yi([],Ie,function(Nt){var gn=Ri(He,Nt,Le,fe,ye);return St[H].overloadTable===void 0?(gn.argCount=L-2,St[H]=gn):St[H].overloadTable[L-2]=gn,[]}),[]})}var da=[],$i=[{},{value:void 0},{value:null},{value:!0},{value:!1}];function Ls(z){z>4&&--$i[z].refcount===0&&($i[z]=void 0,da.push(z))}function Tc(){for(var z=0,H=5;H<$i.length;++H)$i[H]!==void 0&&++z;return z}function _c(){for(var z=5;z<$i.length;++z)if($i[z]!==void 0)return $i[z];return null}function As(){o.count_emval_handles=Tc,o.get_first_emval=_c}var ha={toValue:z=>(z||Tn("Cannot use deleted val. handle = "+z),$i[z].value),toHandle:z=>{switch(z){case void 0:return 1;case null:return 2;case!0:return 3;case!1:return 4;default:{var H=da.length?da.pop():$i.length;return $i[H]={refcount:1,value:z},H}}}};function Ns(z,H){H=_r(H),fi(z,{name:H,fromWireType:function(L){var U=ha.toValue(L);return Ls(L),U},toWireType:function(L,U){return ha.toHandle(U)},argPackAdvance:8,readValueFromPointer:qr,destructorFunction:null})}function is(z){if(z===null)return"null";var H=typeof z;return H==="object"||H==="array"||H==="function"?z.toString():""+z}function Ec(z,H){switch(H){case 2:return function(L){return this.fromWireType(te[L>>2])};case 3:return function(L){return this.fromWireType(ie[L>>3])};default:throw new TypeError("Unknown float type: "+z)}}function bc(z,H,L){var U=$o(L);H=_r(H),fi(z,{name:H,fromWireType:function(ee){return ee},toWireType:function(ee,fe){return fe},argPackAdvance:8,readValueFromPointer:Ec(H,U),destructorFunction:null})}function Dc(z,H,L,U,ee,fe){var ye=ao(H,L);z=_r(z),ee=Jn(U,ee),di(z,function(){Yr("Cannot call "+z+" due to unbound types",ye)},H-1),yi([],ye,function(Ce){var Ie=[Ce[0],null].concat(Ce.slice(1));return La(z,Ri(z,Ie,null,ee,fe),H-1),[]})}function Ic(z,H,L){switch(H){case 0:return L?function(ee){return V[ee]}:function(ee){return G[ee]};case 1:return L?function(ee){return R[ee>>1]}:function(ee){return N[ee>>1]};case 2:return L?function(ee){return F[ee>>2]}:function(ee){return j[ee>>2]};default:throw new TypeError("Unknown integer type: "+z)}}function Oc(z,H,L,U,ee){H=_r(H);var fe=$o(L),ye=ct=>ct;if(U===0){var Ce=32-8*L;ye=ct=>ct<>>Ce}var Ie=H.includes("unsigned"),Le=(ct,St)=>{},He;Ie?He=function(ct,St){return Le(St,this.name),St>>>0}:He=function(ct,St){return Le(St,this.name),St},fi(z,{name:H,fromWireType:ye,toWireType:He,argPackAdvance:8,readValueFromPointer:Ic(H,fe,U!==0),destructorFunction:null})}function Mc(z,H,L){var U=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],ee=U[H];function fe(ye){ye=ye>>2;var Ce=j,Ie=Ce[ye],Le=Ce[ye+1];return new ee(A,Le,Ie)}L=_r(L),fi(z,{name:L,fromWireType:fe,argPackAdvance:8,readValueFromPointer:fe},{ignoreDuplicateRegistrations:!0})}function Pc(z,H){H=_r(H);var L=H==="std::string";fi(z,{name:H,fromWireType:function(U){var ee=j[U>>2],fe=U+4,ye;if(L)for(var Ce=fe,Ie=0;Ie<=ee;++Ie){var Le=fe+Ie;if(Ie==ee||G[Le]==0){var He=Le-Ce,ct=D(Ce,He);ye===void 0?ye=ct:(ye+="\0",ye+=ct),Ce=Le+1}}else{for(var St=new Array(ee),Ie=0;Ie>2]=fe,L&&ye)P(ee,Ie,fe+1);else if(ye)for(var Le=0;Le255&&(de(Ie),Tn("String has UTF-16 code units that do not fit in 8 bits")),G[Ie+Le]=He}else for(var Le=0;Le>1,ee=U+H/2;!(U>=ee)&&N[U];)++U;if(L=U<<1,L-z>32&&ks)return ks.decode(G.subarray(z,L));for(var fe="",ye=0;!(ye>=H/2);++ye){var Ce=R[z+ye*2>>1];if(Ce==0)break;fe+=String.fromCharCode(Ce)}return fe}function Vs(z,H,L){if(L===void 0&&(L=2147483647),L<2)return 0;L-=2;for(var U=H,ee=L>1]=ye,H+=2}return R[H>>1]=0,H-U}function Fs(z){return z.length*2}function Lc(z,H){for(var L=0,U="";!(L>=H/4);){var ee=F[z+L*4>>2];if(ee==0)break;if(++L,ee>=65536){var fe=ee-65536;U+=String.fromCharCode(55296|fe>>10,56320|fe&1023)}else U+=String.fromCharCode(ee)}return U}function os(z,H,L){if(L===void 0&&(L=2147483647),L<4)return 0;for(var U=H,ee=U+L-4,fe=0;fe=55296&&ye<=57343){var Ce=z.charCodeAt(++fe);ye=65536+((ye&1023)<<10)|Ce&1023}if(F[H>>2]=ye,H+=4,H+4>ee)break}return F[H>>2]=0,H-U}function Us(z){for(var H=0,L=0;L=55296&&U<=57343&&++L,H+=4}return H}function Bs(z,H,L){L=_r(L);var U,ee,fe,ye,Ce;H===2?(U=Rc,ee=Vs,ye=Fs,fe=()=>N,Ce=1):H===4&&(U=Lc,ee=os,ye=Us,fe=()=>j,Ce=2),fi(z,{name:L,fromWireType:function(Ie){for(var Le=j[Ie>>2],He=fe(),ct,St=Ie+4,$t=0;$t<=Le;++$t){var Nt=Ie+4+$t*H;if($t==Le||He[Nt>>Ce]==0){var gn=Nt-St,dn=U(St,gn);ct===void 0?ct=dn:(ct+="\0",ct+=dn),St=Nt+H}}return de(Ie),ct},toWireType:function(Ie,Le){typeof Le!="string"&&Tn("Cannot pass non-string to C++ string type "+L);var He=ye(Le),ct=K(4+He+H);return j[ct>>2]=He>>Ce,ee(Le,ct+4,He+H),Ie!==null&&Ie.push(de,ct),ct},argPackAdvance:8,readValueFromPointer:qr,destructorFunction:function(Ie){de(Ie)}})}function as(z,H,L,U,ee,fe){Nn[z]={name:_r(H),rawConstructor:Jn(L,U),rawDestructor:Jn(ee,fe),fields:[]}}function Ac(z,H,L,U,ee,fe,ye,Ce,Ie,Le){Nn[z].fields.push({fieldName:_r(H),getterReturnType:L,getter:Jn(U,ee),getterContext:fe,setterArgumentType:ye,setter:Jn(Ce,Ie),setterContext:Le})}function Gs(z,H){H=_r(H),fi(z,{isVoid:!0,name:H,argPackAdvance:0,fromWireType:function(){},toWireType:function(L,U){}})}function Nc(z){z>4&&($i[z].refcount+=1)}function X(z,H){var L=yt[z];return L===void 0&&Tn(H+" has unknown type "+Xr(z)),L}function pe(z,H){z=X(z,"_emval_take_value");var L=z.readValueFromPointer(H);return ha.toHandle(L)}function De(){je("")}function xe(z,H,L){G.copyWithin(z,H,H+L)}function se(){return 2147483648}function ge(z){try{return S.grow(z-A.byteLength+65535>>>16),he(S.buffer),1}catch{}}function Ee(z){var H=G.length;z=z>>>0;var L=se();if(z>L)return!1;let U=(Ie,Le)=>Ie+(Le-Ie%Le)%Le;for(var ee=1;ee<=4;ee*=2){var fe=H*(1+.2/ee);fe=Math.min(fe,z+100663296);var ye=Math.min(L,U(Math.max(z,fe),65536)),Ce=ge(ye);if(Ce)return!0}return!1}function Oe(z){return 52}function Ne(z,H,L,U,ee){return 70}var Fe=[null,[],[]];function dt(z,H){var L=Fe[z];H===0||H===10?((z===1?w:x)(b(L,0)),L.length=0):L.push(H)}function pt(z,H,L,U){for(var ee=0,fe=0;fe>2],Ce=j[H+4>>2];H+=8;for(var Ie=0;Ie>2]=ee,0}function Et(z){return z}function Rt(z){var H=o["_"+z];return H}function it(z,H){V.set(z,H)}function st(z,H,L,U,ee){var fe={string:Nt=>{var gn=0;if(Nt!=null&&Nt!==0){var dn=(Nt.length<<2)+1;gn=Qe(dn),P(Nt,gn,dn)}return gn},array:Nt=>{var gn=Qe(Nt.length);return it(Nt,gn),gn}};function ye(Nt){return H==="string"?D(Nt):H==="boolean"?!!Nt:Nt}var Ce=Rt(z),Ie=[],Le=0;if(U)for(var He=0;He0||(be(),ne>0))return;function H(){ft||(ft=!0,o.calledRun=!0,!T&&(B(),a(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),M()))}o.setStatus?(o.setStatus("Running..."),setTimeout(function(){setTimeout(function(){o.setStatus("")},1),H()},1)):H()}if(o.preInit)for(typeof o.preInit=="function"&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return at(),o.ready}})();t.exports=r})(c$);var LEe=c$.exports;const AEe=pl(LEe),NEe=new URL("/static/dv3d/openjphjs.wasm",import.meta.url),ip={codec:void 0,decoder:void 0,decodeConfig:{}};function kEe(t,e,r){const n={width:e,height:r};for(;t>0;)n.width=Math.ceil(n.width/2),n.height=Math.ceil(n.height/2),t--;return n}function VEe(t){if(ip.decodeConfig=t,ip.codec)return Promise.resolve();const e=AEe({locateFile:r=>r.endsWith(".wasm")?NEe.toString():r});return new Promise((r,n)=>{e.then(i=>{ip.codec=i,ip.decoder=new i.HTJ2KDecoder,r()},n)})}async function FEe(t,e){await VEe();const r=new ip.codec.HTJ2KDecoder,n=r.getEncodedBuffer(t.length);n.set(t);const i=e.decodeLevel||0;r.decodeSubResolution(i);const o=r.getFrameInfo();if(e.decodeLevel>0){const{width:E,height:b}=kEe(e.decodeLevel,o.width,o.height);o.width=E,o.height=b}const a=r.getDecodedBuffer();new Uint8Array(a.length).set(a);const c=`x: ${r.getImageOffset().x}, y: ${r.getImageOffset().y}`,l=r.getNumDecompositions(),f=r.getNumLayers(),u=["unknown","LRCP","RLCP","RPCL","PCRL","CPRL"][r.getProgressionOrder()+1],d=r.getIsReversible(),h=`${r.getBlockDimensions().width} x ${r.getBlockDimensions().height}`,g=`${r.getTileSize().width} x ${r.getTileSize().height}`,p=`${r.getTileOffset().x}, ${r.getTileOffset().y}`,v=`${a.length.toLocaleString()} bytes`,y=`${(a.length/n.length).toFixed(2)}:1`,m={columns:o.width,rows:o.height,bitsPerPixel:o.bitsPerSample,signed:o.isSigned,bytesPerPixel:e.bytesPerPixel,componentsPerPixel:o.componentCount};let w=UEe(o,a);const{buffer:x,byteOffset:C,byteLength:S}=w,T=x.slice(C,C+S);w=new w.constructor(T);const _={imageOffset:c,numDecompositions:l,numLayers:f,progessionOrder:u,reversible:d,blockDimensions:h,tileSize:g,tileOffset:p,decodedSize:v,compressionRatio:y};return{...e,pixelData:w,imageInfo:m,encodeOptions:_,..._,...m}}function UEe(t,e){return t.bitsPerSample>8?t.isSigned?new Int16Array(e.buffer,e.byteOffset,e.byteLength/2):new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2):t.isSigned?new Int8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function BEe(t,e){const r=t.length,{rescaleSlope:n,rescaleIntercept:i,suvbw:o,doseGridScaling:a}=e;if(e.modality==="PT"&&typeof o=="number"&&!isNaN(o))for(let s=0;s>o;let a=t.pixelData;t.pixelDataLength=t.pixelData.length;const{min:s,max:c}=ox(t.pixelData),l=typeof e.allowFloatRendering<"u"?e.allowFloatRendering:!0;let f=H8(t.photometricInterpretation)&&((m=e.targetBuffer)==null?void 0:m.offset)===void 0;const d=((w=e.preScale)==null?void 0:w.enabled)&&Object.values(e.preScale.scalingParameters).some(C=>typeof C=="number"&&!Number.isInteger(C)),h=!e.preScale.enabled||!l&&d,g=(x=e.targetBuffer)==null?void 0:x.type;if(g&&e.preScale.enabled&&!h){const C=e.preScale.scalingParameters,S=OT(s,c,C);f=!x4e(S.min,S.max,W7[g])}g&&!f?a=$Ee(e,t,W7,a):e.preScale.enabled&&!h?a=jEe(e,s,c,t):a=l$(s,c,t);let p=s,v=c;if(e.preScale.enabled&&!h){const C=e.preScale.scalingParameters;if(u$(C),zEe(C)){BEe(a,C),t.preScale={...e.preScale,scaled:!0};const T=OT(s,c,C);p=T.min,v=T.max}}else h&&(t.preScale={enabled:!0,scaled:!1},p=s,v=c);t.pixelData=a,t.smallestPixelValue=p,t.largestPixelValue=v;const y=new Date().getTime();return t.decodeTimeInMS=y-r,t}function zEe(t){const{rescaleSlope:e,rescaleIntercept:r,modality:n,doseGridScaling:i,suvbw:o}=t;return typeof e=="number"&&typeof r=="number"||n==="RTDOSE"&&typeof i=="number"||n==="PT"&&typeof o=="number"}function $Ee(t,e,r,n){const{arrayBuffer:i,type:o,offset:a=0,length:s,rows:c}=t.targetBuffer,l=r[o];if(!l)throw new Error(`target array ${o} is not supported, or doesn't exist.`);c&&c!=e.rows&&KEe(e,t.targetBuffer,l);const f=e.pixelDataLength,u=a,d=s??f-u,h=e.pixelData;if(d!==h.length)throw new Error(`target array for image does not have the same length (${d}) as the decoded image length (${h.length}).`);const g=i?new l(i,u,d):new l(d);return g.set(h,0),n=g,n}function jEe(t,e,r,n){const i=t.preScale.scalingParameters;u$(i);const o=OT(e,r,i);return l$(o.min,o.max,n)}function l$(t,e,r){const n=K8(t,e),i=new n(r.pixelData.length);return i.set(r.pixelData,0),i}function OT(t,e,r){const{rescaleSlope:n,rescaleIntercept:i,modality:o,doseGridScaling:a,suvbw:s}=r;return o==="PT"&&typeof s=="number"&&!isNaN(s)?{min:s*(t*n+i),max:s*(e*n+i)}:o==="RTDOSE"&&typeof a=="number"&&!isNaN(a)?{min:t*a,max:e*a}:typeof n=="number"&&typeof i=="number"?{min:n*t+i,max:n*e+i}:{min:t,max:e}}function u$(t){if(!t)throw new Error("options.preScale.scalingParameters must be defined if preScale.enabled is true, and scalingParameters cannot be derived from the metadata providers.")}function HEe(t,e,r){const{samplesPerPixel:n}=t,{rows:i,columns:o}=e,a=i*o*n,s=new r(a),c=s.byteLength/a;return{pixelData:s,rows:i,columns:o,frameInfo:{...t.frameInfo,rows:i,columns:o},imageInfo:{...t.imageInfo,rows:i,columns:o,bytesPerPixel:c}}}function KEe(t,e,r){const n=HEe(t,e,r),{scalingType:i="replicate"}=e;return GEe[i](t,n),Object.assign(t,n),t.pixelDataLength=t.pixelData.length,t}async function f$(t,e,r,n,i,o){const a=new Date().getTime();let s=null,c;switch(e){case"1.2.840.10008.1.2":case"1.2.840.10008.1.2.1":s=V7(t,r);break;case"1.2.840.10008.1.2.2":s=aEe(t,r);break;case"1.2.840.10008.1.2.1.99":s=V7(t,r);break;case"1.2.840.10008.1.2.5":s=sEe(t,r);break;case"1.2.840.10008.1.2.4.50":c={...t},s=pEe(r,c);break;case"1.2.840.10008.1.2.4.51":s=xEe(t,r);break;case"1.2.840.10008.1.2.4.57":s=U7(t,r);break;case"1.2.840.10008.1.2.4.70":s=U7(t,r);break;case"1.2.840.10008.1.2.4.80":c={signed:t.pixelRepresentation===1,bytesPerPixel:t.bitsAllocated<=8?1:2,...t},s=B7(r,c);break;case"1.2.840.10008.1.2.4.81":c={signed:t.pixelRepresentation===1,bytesPerPixel:t.bitsAllocated<=8?1:2,...t},s=B7(r,c);break;case"1.2.840.10008.1.2.4.90":c={...t},s=G7(r,c);break;case"1.2.840.10008.1.2.4.91":c={...t},s=G7(r,c);break;case"3.2.840.10008.1.2.4.96":case"1.2.840.10008.1.2.4.201":case"1.2.840.10008.1.2.4.202":case"1.2.840.10008.1.2.4.203":c={...t},s=FEe(r,c);break;default:throw new Error(`no decoder for transfer syntax ${e}`)}if(!s)throw new Error("decodePromise not defined");const l=await s,f=WEe(l,i,a);return o==null||o(f),f}const qEe={decodeTask({imageFrame:t,transferSyntax:e,decodeConfig:r,options:n,pixelData:i,callbackFn:o}){return f$(t,e,i,r,n,o)}};b4(qEe);const MT={constants:nEe,convertRGBColorByPixel:xz,convertRGBColorByPlane:Cz,convertYBRFullByPixel:Sz,convertYBRFullByPlane:Tz,convertPALETTECOLOR:_z,wadouri:E4e,wadors:Y4e,init:r$,convertColorSpace:zz,createImage:ax,decodeJPEGBaseline8BitColor:$z,getImageFrame:jz,getPixelData:J8,getMinMax:ox,isColorImage:H8,isJPEGBaseline8BitColor:eEe,internal:B_e,decodeImageFrame:f$};class Ah extends pf{}vb(Ah,"toolName","NoLabelArrowAnnotate");function z7(t,e){const r=wt("imagePlaneModule",t);if(!r)return;const{rowCosines:n,columnCosines:i,imagePositionPatient:o,rowPixelSpacing:a,columnPixelSpacing:s}=r;if(!n||!i||!o)return;const c=s||1,l=a||1,f=n,u=i,d=o;return[d[0]+e.x*u[0]*c+e.y*f[0]*l,d[1]+e.x*u[1]*c+e.y*f[1]*l,d[2]+e.x*u[2]*c+e.y*f[2]*l]}window.cornerstone3dTools=wz;window.cornerstone3d=Fhe;window.cornerstoneDICOMImageLoader=MT;const{MouseBindings:Vg,KeyboardBindings:$7}=tF,{IMAGE_RENDERED:Fg}=rt,XEe=[{name:"Soft Tissue",center:40,width:400},{name:"Lung",center:-600,width:1500},{name:"Bone",center:300,width:1500},{name:"Brain",center:40,width:80},{name:"Abdomen",center:60,width:400}],j7=t=>{const e=(t||"").toUpperCase(),r=[{name:"Reset to default",action:"reset"},{name:"Auto level",action:"autolevel"}];return e!=="CT"?r:[...r,...XEe.map(n=>({name:n.name,action:"preset",center:n.center,width:n.width}))]},c0=[{label:"Window/Level",value:Oh.toolName,icon:"🌓"},{label:"Pan",value:Qu.toolName,icon:"✋"},{label:"Zoom",value:Gl.toolName,icon:"🔍"},{label:"Stack Scroll",value:Ld.toolName,icon:"📚"},{label:"Rotate",value:Mh.toolName,icon:"↺"},{label:"Length",value:gf.toolName,icon:"📏"},{label:"Probe",value:au.toolName,icon:"🔎"},{label:"Arrow (No Label)",value:Ah.toolName,icon:"➡️"},{label:"Arrow Annotate",value:pf.toolName,icon:"✈️"},{label:"Rectangle ROI",value:ou.toolName,icon:"▭"},{label:"Ellipse ROI",value:Ad.toolName,icon:"◯"},{label:"Freehand ROI",value:hf.toolName,icon:"✏️"},{label:"Freehand Contour Segmentation",value:hl.toolName,icon:"🖊️"},{label:"Sculptor",value:Ph.toolName,icon:"🔧"},{label:"Reference Cursors",value:Ba.toolName,icon:"⦿"}],YEe=500,JEe=new Set(["stackThumbnails-state","thumbnail-generation-check","thumbnail-candidate","thumbnail-render-source","thumbnail-img-load"]);function ZEe(t){if(!t)return"🔖";const e=c0.find(r=>r.value===t||r.label===t);return(e==null?void 0:e.icon)||"🔖"}function Uf(t){return t?t.startsWith("wadouri:")?t.replace(/^wadouri:+/,"").replace(/^:+/,""):t:""}function _i(t,e=180){return!t||t.length<=e?t:`${t.slice(0,e)}...(${t.length} chars)`}function QEe(t){if(!t)return!1;const e=t.toLowerCase();return!!(e.startsWith("wadouri:")||e.includes(".dcm")||e.includes("/dicom")||e.includes("/wado"))}const H7=[{label:"Left",value:"Primary"},{label:"Middle",value:"Auxiliary"},{label:"Right",value:"Secondary"}],Qv=[{label:"Left",value:"Primary",mask:1},{label:"Middle",value:"Auxiliary",mask:4},{label:"Right",value:"Secondary",mask:2},{label:"Left + Right",value:"Primary_and_Secondary",mask:3},{label:"Left + Middle",value:"Primary_and_Auxiliary",mask:5},{label:"Right + Middle",value:"Secondary_and_Auxiliary",mask:6},{label:"Left + Right + Middle",value:"Primary_and_Secondary_and_Auxiliary",mask:7},{label:"Fourth Button",value:"Fourth_Button",mask:8},{label:"Fifth Button",value:"Fifth_Button",mask:16},{label:"Mouse Wheel",value:"Wheel",mask:524288},{label:"Mouse Wheel + Left",value:"Wheel_Primary",mask:524289}];function K7({container_id:t,imageStacks:e,autoCacheStack:r,annotationJson:n,viewerState:i,...o}){var Tc,_c,As,ha,Ns,is,Ec,bc,Dc,Ic,Oc,Mc,Pc,ks,Rc,Vs,Fs,Lc,os,Us,Bs,as,Ac,Gs,Nc;const a=vt.useRef(null),s=vt.useRef(null),c=vt.useRef(!1),l="dv3d_mouseToolBindings",f="dv3d_ctrlMouseToolBindings",[u,d]=vt.useState(!1),[h,g]=vt.useState(!1),[p,v]=vt.useState(320),y=`dv3d_stackPanelWidth_${t||"default"}`,m=vt.useRef({resizing:!1,startX:0,startWidth:320}),w=240,x=720,C=220,S=40,T=14,_=vt.useRef(null),[E,b]=vt.useState(null),[D,I]=vt.useState(null),[P,O]=vt.useState(!1),A=9,V="renderingEngine_"+t,G="TOOL_GROUP_"+t,R=vt.useRef(null),N=vt.useRef(!1),[F,j]=vt.useState(!0),[te,ie]=vt.useState(!1),[he,ue]=vt.useState([]),[ve,Me]=vt.useState(0),[Ue,be]=vt.useState(null),[B,M]=vt.useState(null),[$,W]=vt.useState(()=>Array(A).fill([])),Y=X=>{typeof X=="function"?W(pe=>{const De=X(pe);return console.log("setViewportImageIds (fn):",De),De}):(console.log("setViewportImageIds:",X),W(X))},[ne,re]=vt.useState(()=>Array(A).fill(0)),[Se,Re]=vt.useState({}),je=vt.useRef({}),qe=vt.useRef({}),oe=`[DV3D Thumb][${t||"default"}]`,ce=vt.useRef([]),Te=vt.useRef({}),ae=vt.useCallback((X,pe)=>{try{const De=pe||{},xe=JEe.has(X),se=typeof De.stackIdx=="number"?String(De.stackIdx):typeof De.idx=="number"?String(De.idx):"global",ge=`${X}:${se}`,Ee=Date.now(),Oe=Te.current[ge]||0,Ne=typeof window<"u"&&!!window.__DV3D_THUMB_VERBOSE__;if(xe&&!Ne&&Ee-Oe<2500)return;Te.current[ge]=Ee;const Fe={ts:new Date().toISOString(),event:X,container:t||"default",path:typeof window<"u"?window.location.pathname:"",details:De};ce.current.push(Fe),ce.current.length>YEe&&ce.current.shift(),console.debug(oe,X,De)}catch{}},[oe,t]),we=vt.useCallback((X,pe)=>{Re(De=>{const xe=De[X];try{console.debug(oe,"setStackThumbnail",{stackIdx:X,previous:xe?_i(xe,120):null,next:pe?_i(pe,120):null,previousWasBlob:!!(xe&&xe.startsWith("blob:")),nextIsBlob:!!(pe&&pe.startsWith("blob:"))})}catch{}if(xe&&xe!==pe&&xe.startsWith("blob:"))try{URL.revokeObjectURL(xe)}catch{}const se={...De,[X]:pe};return je.current=se,se})},[oe]);vt.useEffect(()=>{je.current=Se;const X=Object.entries(Se).map(([pe,De])=>({idx:Number(pe),value:_i(De,100),isBlob:De.startsWith("blob:"),isBroken:De==="BROKEN"}));ae("stackThumbnails-state",{count:X.length,entries:X})},[Se,ae]),vt.useEffect(()=>()=>{Object.values(je.current).forEach(X=>{if(typeof X=="string"&&X.startsWith("blob:"))try{URL.revokeObjectURL(X)}catch{}})},[]),vt.useEffect(()=>{try{const X=localStorage.getItem(y);if(X){const pe=Number(X);Number.isNaN(pe)||v(Math.max(w,Math.min(x,Math.round(pe))))}}catch{}},[y]),vt.useEffect(()=>{try{localStorage.setItem(y,String(Math.round(p)))}catch{}},[y,p]);function Ze(X){if(!X)return null;try{if(X.tagName&&X.tagName.toLowerCase()==="canvas")return X}catch{}try{const pe=X.querySelector&&X.querySelector("canvas");if(pe)return pe}catch{}try{const pe=X.children||[];for(let De=0;DeMath.min(It,Math.max(Mt,lt)),Et=()=>{pe.style.transform=`translate(${Ee}px, ${Oe}px) scale(${ge})`};let Rt=!0,it=!0;const st=lt=>{if(!it)return;lt.preventDefault();const Mt=pe.getBoundingClientRect(),It=lt.clientX-Mt.left,Q=lt.clientY-Mt.top,Z=-lt.deltaY,me=1+(Z>0?.1:-.1)*Math.min(4,Math.abs(Z)/100),Ve=pt(ge*me,.1,10);Ee=(Ee-It)*(Ve/ge)+It,Oe=(Oe-Q)*(Ve/ge)+Q,ge=Ve,Et()},q=lt=>{lt.button===0&&Rt&&(Ne=!0,Fe=lt.clientX,dt=lt.clientY,pe.style.cursor="grabbing",lt.preventDefault())},K=lt=>{if(!Ne)return;const Mt=lt.clientX-Fe,It=lt.clientY-dt;Ee+=Mt,Oe+=It,Fe=lt.clientX,dt=lt.clientY,Et()},de=lt=>{Ne&&(Ne=!1,pe.style.cursor="grab")},Pe=lt=>{ge=1,Ee=0,Oe=0,Et()};let Ge=0;const ot=(lt,Mt)=>Math.hypot(Mt.clientX-lt.clientX,Mt.clientY-lt.clientY),nt=lt=>{lt.touches.length===1?Rt&&(Ne=!0,Fe=lt.touches[0].clientX,dt=lt.touches[0].clientY):lt.touches.length===2&&(Ge=ot(lt.touches[0],lt.touches[1]))},ze=lt=>{if(lt.touches.length===1&&Ne){const Mt=lt.touches[0].clientX-Fe,It=lt.touches[0].clientY-dt;Ee+=Mt,Oe+=It,Fe=lt.touches[0].clientX,dt=lt.touches[0].clientY,Et()}else if(lt.touches.length===2&&it){const Mt=ot(lt.touches[0],lt.touches[1]);if(Ge>0){const It=Mt/Ge,Q=pe.getBoundingClientRect(),Z=(lt.touches[0].clientX+lt.touches[1].clientX)/2-Q.left,me=(lt.touches[0].clientY+lt.touches[1].clientY)/2-Q.top,Ve=pt(ge*It,.1,10);Ee=(Ee-Z)*(Ve/ge)+Z,Oe=(Oe-me)*(Ve/ge)+me,ge=Ve,Et()}Ge=Mt}lt.preventDefault()},Qe=lt=>{lt.touches.length===0&&(Ne=!1,Ge=0)};return X.addEventListener("wheel",st,{passive:!1}),X.addEventListener("mousedown",q),window.addEventListener("mousemove",K),window.addEventListener("mouseup",de),pe.addEventListener("dblclick",Pe),X.addEventListener("touchstart",nt,{passive:!1}),X.addEventListener("touchmove",ze,{passive:!1}),X.addEventListener("touchend",Qe),{cleanup:()=>{X.removeEventListener("wheel",st),X.removeEventListener("mousedown",q),window.removeEventListener("mousemove",K),window.removeEventListener("mouseup",de),pe.removeEventListener("dblclick",Pe),X.removeEventListener("touchstart",nt),X.removeEventListener("touchmove",ze),X.removeEventListener("touchend",Qe),pe.style.transform="",pe.style.cursor="",pe.style.willChange=""},setAllowPan:lt=>{Rt=lt},setAllowZoom:lt=>{it=lt}}}const[Ot,_t]=vt.useState(!1),[Ae,tt]=vt.useState(null),[gt,ht]=vt.useState(!1),[xt,jt]=vt.useState(null);vt.useEffect(()=>{const X=De=>{try{const xe=De&&De.message?String(De.message):"";(xe.includes("releaseGraphicsResources")||xe.includes("openGLTexture")||xe.includes("getDefaultActor")||xe.includes("setColormapGPU")||xe.includes(`can't access property "actor"`)||xe.toLowerCase().includes("webgl")||xe.toLowerCase().includes("colormap"))&&(console.error("Detected graphics/rendering error:",De),jt(xe||null),ht(!0))}catch{}},pe=De=>{try{const xe=De&&De.reason||"",se=typeof xe=="string"?xe:xe&&xe.message?xe.message:String(xe);(se.includes("releaseGraphicsResources")||se.includes("openGLTexture")||se.includes("getDefaultActor")||se.includes("setColormapGPU")||se.includes(`can't access property "actor"`)||se.toLowerCase().includes("webgl")||se.toLowerCase().includes("colormap"))&&(console.error("Detected graphics/rendering rejection:",De),jt(se||null),ht(!0))}catch{}};return window.addEventListener("error",X),window.addEventListener("unhandledrejection",pe),()=>{window.removeEventListener("error",X),window.removeEventListener("unhandledrejection",pe)}},[]),vt.useEffect(()=>{let X=!1;if(n||i){tt(n?"annotations":"viewerState");const pe=setTimeout(()=>{if(X)return;const De=t||"default";if(n)try{const xe=window[`importAnnotations_${De}`]||window.importAnnotations;typeof xe=="function"&&xe(n)}catch(xe){console.error("Failed to import annotations from prop:",xe)}if(i)try{const xe=window[`importViewerState_${De}`]||window.importViewerState;typeof xe=="function"&&xe(i)}catch(xe){console.error("Failed to import viewer state from prop:",xe)}tt(null)},2e3);return()=>{X=!0,clearTimeout(pe),tt(null)}}},[n,i,t]),vt.useEffect(()=>{let X=!0;return e().then(async pe=>{if(!X)return;const De=Array.isArray(pe)?pe:[],xe=await Promise.all(De.map(async se=>{if(Array.isArray(se))return{imageIds:se};const ge=Array.isArray(se.imageIds)?se.imageIds:Array.isArray(se.i)?se.i:[];let Ee=se.studyInstanceUID;if(!Ee&&ge.length>0)try{const Oe=ge[0];if(typeof fetch=="function"&&typeof window.dicomParser<"u"&&Oe.startsWith("wadouri:")){const Ne=Uf(Oe),dt=await(await fetch(Ne)).arrayBuffer();Ee=window.dicomParser.parseDicom(new Uint8Array(dt)).string("x0020000d")}}catch{}return{imageIds:ge,studyInstanceUID:Ee,studyId:se.studyId,name:se.name,caseId:se.caseId}}));ae("imageStacks-loaded",{descriptorCount:De.length,normalizedCount:xe.length,summary:xe.map((se,ge)=>{const Ee=Array.isArray(se.imageIds)?se.imageIds:[],Oe=Ee[Math.floor(Ee.length/2)]||Ee[0]||"";return{idx:ge,name:se.name||null,caseId:se.caseId||null,studyId:se.studyId||null,imageCount:Ee.length,sampleImageId:_i(Oe,180)}})}),ue(xe),xe[0]?(await zt(xe[0].imageIds),Y(Array(A).fill(xe[0].imageIds||[]))):Y(Array(A).fill([]))}).catch(pe=>{console.error("Failed to load imageStacks:",pe),ae("imageStacks-load-failed",{error:String((pe==null?void 0:pe.message)||pe)}),ue([]),Y(Array(A).fill([]))}),()=>{X=!1}},[ae]);const Pt=async(X,pe)=>{const De=he[pe];if(!De)return;const xe=De.imageIds;tt("displayset");try{no(se=>{const ge=[...se];return ge[X]="stack",ge}),Y(se=>{const ge=[...se];return ge[X]=xe,ge}),re(se=>{const ge=[...se];return ge[X]=pe,ge}),await zt(xe)}finally{tt(null)}},[Kt,en]=vt.useState(!1),[Dn,Xn]=vt.useState(!0),[fn,Nn]=vt.useState(!1),[go,qr]=vt.useState(!1),Xe=()=>{console.log("Sorting viewport imageIds by slice location"),Y(X=>{const pe=X.map((De,xe)=>{if(!De||De.length===0)return De;const Ee=[...De.map(Oe=>{const Ne=wt("imagePlaneModule",Oe);let Fe=null;return Ne&&(Ne.sliceLocation!==void 0?Fe=Number(Ne.sliceLocation):Ne.imagePositionPatient&&Array.isArray(Ne.imagePositionPatient)&&Ne.imagePositionPatient.length===3&&(Fe=Number(Ne.imagePositionPatient[2]))),{imageId:Oe,sortKey:Fe}})].sort((Oe,Ne)=>Oe.sortKey!==null&&Ne.sortKey!==null?Oe.sortKey-Ne.sortKey:Oe.imageId.localeCompare(Ne.imageId)).map(Oe=>Oe.imageId);return JSON.stringify(Ee)===JSON.stringify(De)?De:Ee});return _t(!0),pe})},yt=vt.useCallback(async(X,pe)=>{if(!pe){console.warn("generateThumbnail: no chosenImageId for stack",X),ae("generate-skip-no-image",{stackIdx:X});return}if(Se[X]){console.debug("generateThumbnail: thumbnail already exists for",X),ae("generate-skip-existing",{stackIdx:X,existing:_i(Se[X],120)});return}if(qe.current[X]){console.debug("generateThumbnail: already requested for",X),ae("generate-skip-requested",{stackIdx:X});return}if(le(pe)){ae("generate-external-start",{stackIdx:X,chosenImageId:_i(pe,180)});try{const ge=new Image;ge.crossOrigin="anonymous";const Ee=pe.replace(/^external:/,"");ge.src=Ee,await new Promise((dt,pt)=>{ge.onload=()=>dt(!0),ge.onerror=Et=>pt(Et)});const Oe=document.createElement("canvas"),Ne=160;Oe.width=Ne,Oe.height=Ne;const Fe=Oe.getContext("2d");if(Fe){const dt=Math.min(Ne/ge.width,Ne/ge.height),pt=ge.width*dt,Et=ge.height*dt,Rt=(Ne-pt)/2,it=(Ne-Et)/2;Fe.fillStyle="#000",Fe.fillRect(0,0,Ne,Ne),Fe.drawImage(ge,Rt,it,pt,Et);const st=Oe.toDataURL("image/png");we(X,st)}else we(X,"BROKEN")}catch(ge){console.warn("generateThumbnail: failed to generate thumbnail for external image",ge),ae("generate-external-failed",{stackIdx:X,chosenImageId:_i(pe,180),error:String((ge==null?void 0:ge.message)||ge)}),we(X,"BROKEN")}return}const De=R.current;if(!De){console.warn("generateThumbnail: no renderingEngine yet for",X),ae("generate-skip-no-engine",{stackIdx:X,chosenImageId:_i(pe,180)});return}qe.current[X]=!0,console.debug("generateThumbnail: starting for",X,pe);const xe=`THUMB_${t||"main"}_${X}`;ae("generate-start",{stackIdx:X,chosenImageId:_i(pe,180),viewportId:xe});const se=document.createElement("div");se.style.width="160px",se.style.height="160px",se.style.position="absolute",se.style.left="-9999px",se.style.top="0",document.body.appendChild(se);try{De.enableElement({viewportId:xe,type:vr.STACK,element:se});const ge=De.getViewport(xe);if(!ge){console.warn("generateThumbnail: no viewport returned after enableElement for",xe),ae("generate-failed-no-viewport",{stackIdx:X,viewportId:xe});return}try{ge.setStack([pe])}catch(Ne){console.warn("generateThumbnail: vp.setStack failed",Ne),ae("generate-setStack-failed",{stackIdx:X,viewportId:xe,error:String((Ne==null?void 0:Ne.message)||Ne)})}const Ee=await new Promise(Ne=>{let Fe=!1;const dt=setTimeout(()=>{Fe||(Fe=!0,console.warn("generateThumbnail: IMAGE_RENDERED timeout for",xe),ae("generate-render-timeout",{stackIdx:X,viewportId:xe}),Ne(!1))},2e3),pt=()=>{Fe||(Fe=!0,clearTimeout(dt),console.debug("generateThumbnail: IMAGE_RENDERED received for",xe),ae("generate-rendered",{stackIdx:X,viewportId:xe}),Ne(!0))};try{if(ge&&ge.element)try{ge.element.addEventListener(Fg,pt,{once:!0})}catch(Et){console.warn("generateThumbnail: failed to add IMAGE_RENDERED listener",Et),ae("generate-listener-failed",{stackIdx:X,viewportId:xe,error:String((Et==null?void 0:Et.message)||Et)})}if(typeof ge.render=="function")try{const Et=ge.render();Et&&typeof Et.then=="function"&&Et.catch(()=>{})}catch{}}catch(Et){clearTimeout(dt),console.warn("generateThumbnail: error while waiting for render",Et),ae("generate-render-wait-error",{stackIdx:X,viewportId:xe,error:String((Et==null?void 0:Et.message)||Et)}),Ne(!1)}});let Oe=Ze(se)||(ge&&ge.element?Ze(ge.element):null);if(Oe||(console.debug("generateThumbnail: no canvas found immediately, waiting briefly and retrying for",xe,"canvasReady=",Ee),ae("generate-canvas-missing-initial",{stackIdx:X,viewportId:xe,canvasReady:Ee}),await new Promise(Ne=>setTimeout(Ne,150)),Oe=Ze(se)||(ge&&ge.element?Ze(ge.element):null)),Oe){ae("generate-canvas-found",{stackIdx:X,viewportId:xe,canvasWidth:Oe.width,canvasHeight:Oe.height});try{if(typeof Oe.toBlob=="function"){const Ne=await new Promise(Fe=>{Oe.toBlob(dt=>{if(!dt){Fe(null);return}Fe(URL.createObjectURL(dt))},"image/png")});Ne?(ae("generate-toBlob-success",{stackIdx:X,viewportId:xe,blobUrl:_i(Ne,120)}),we(X,Ne)):(ae("generate-toBlob-empty-fallback-dataUrl",{stackIdx:X,viewportId:xe}),we(X,Oe.toDataURL("image/png")))}else ae("generate-no-toBlob-fallback-dataUrl",{stackIdx:X,viewportId:xe}),we(X,Oe.toDataURL("image/png"));console.debug("generateThumbnail: thumbnail captured for stack",X),ae("generate-success",{stackIdx:X,viewportId:xe})}catch(Ne){console.warn("generateThumbnail: toDataURL failed",Ne),ae("generate-data-extract-failed",{stackIdx:X,viewportId:xe,error:String((Ne==null?void 0:Ne.message)||Ne)}),we(X,"BROKEN")}}else console.warn("generateThumbnail: no canvas found after render for",xe,"canvasReady=",Ee,"vp.element=",!!(ge&&ge.element)),ae("generate-failed-no-canvas",{stackIdx:X,viewportId:xe,canvasReady:Ee,hasViewportElement:!!(ge&&ge.element)}),we(X,"BROKEN")}catch(ge){console.warn("Thumbnail generation failed for",pe,ge),ae("generate-failed",{stackIdx:X,chosenImageId:_i(pe||"",180),error:String((ge==null?void 0:ge.message)||ge)});try{we(X,"BROKEN")}catch{}}finally{try{De.disableElement(xe)}catch(ge){console.warn("Failed to disable thumbnail element:",ge)}ae("generate-cleanup",{stackIdx:X,viewportId:xe}),se&&se.parentNode&&se.parentNode.removeChild(se)}},[t,Se,we,ae]);vt.useEffect(()=>{!he||he.length===0||(ae("thumbnail-generation-check",{stackCount:he.length,requested:{...qe.current},thumbnailKeys:Object.keys(Se)}),!R.current)||he.forEach((pe,De)=>{const xe=Array.isArray(pe.imageIds)?pe.imageIds:[],se=Math.floor(xe.length/2),ge=xe[se]||xe[0]||null;ae("thumbnail-candidate",{idx:De,imageCount:xe.length,chosen:_i(ge||"",180),hasThumbnail:!!Se[De],requested:!!qe.current[De]}),!Se[De]&&!qe.current[De]&&yt(De,ge)})},[he,yt,Se,ae]);const zt=async(X,pe)=>{console.log("Setting loaded imageIds:",X),console.log("autoCacheStack:",r);const De=[];if(!!(r||pe!=null&&pe.force)){for(const se of X)if(se.startsWith("wadouri:"))try{const ge=Uf(se);if(MT.wadouri.dataSetCacheManager){const Ee=MT.wadouri.dataSetCacheManager.load(ge);Ee&&typeof Ee.then=="function"&&De.push(Ee)}else console.warn("MetaDataManager not found. Unable to cache metadata.")}catch(ge){console.warn(`Failed to cache metadata for ${se}:`,ge)}await Promise.all(De),yi&&(console.log("Sorting viewport imageIds by slice location"),Xe())}},[Dt,li]=vt.useState({rows:1,cols:1}),[qt,In]=vt.useState(!1),tn=vt.useRef([]),an=vt.useRef({}),ui=vt.useRef({}),[yi,ts]=vt.useState(!1),[zo,$o]=vt.useState(!0),jo=vt.useCallback(X=>{const pe=X.currentTarget.getBoundingClientRect(),De=X.clientX-pe.left,xe=X.clientY-pe.top,se=pe.width,ge=pe.height,Ee=Math.min(se,ge)*.24,Oe=[{zone:"left",distance:De},{zone:"right",distance:se-De},{zone:"top",distance:xe},{zone:"bottom",distance:ge-xe}];return Oe.sort((Ne,Fe)=>Ne.distance-Fe.distance),Oe[0].distance<=Ee?Oe[0].zone:"center"},[]),sa=vt.useCallback(X=>X==="left"||X==="right"?Dt.cols<3?X:"center":(X==="top"||X==="bottom")&&Dt.rows<3?X:"center",[Dt]),_r=[];for(let X=1;X<=3;X++)for(let pe=1;pe<=3;pe++)_r.push({rows:X,cols:pe});const[yn,Tn]=vt.useState(()=>Array(Dt.rows*Dt.cols).fill({index:0,total:0,windowCenter:"",windowWidth:"",slicePosition:"",modality:"",orientation:"",resolution:"",spacing:"",focalPoint:""})),[fi,ns]=vt.useState(()=>Array(A).fill(null).map(()=>[])),eo=vt.useRef(Array(A).fill("")),wi=vt.useRef(Array(A).fill(null)),to=vt.useRef(Array(A).fill(null)),xi=vt.useRef(Array(A).fill(null)),[jn,no]=vt.useState(()=>Array(A).fill("stack")),[Ci,Ma]=vt.useState(()=>Array(Dt.rows*Dt.cols).fill(!1)),[wr,ca]=vt.useState({Primary:Ld.toolName,Auxiliary:Qu.toolName,Secondary:Oh.toolName,Primary_and_Secondary:Gl.toolName,Fourth_Button:Mh.toolName,Wheel:Ld.toolName}),[Gi,Wi]=vt.useState({Primary:gf.toolName,Auxiliary:au.toolName,Secondary:Ah.toolName}),[bs,la]=vt.useState(!1);vt.useEffect(()=>{const X=De=>{De.ctrlKey&&la(!0)},pe=De=>{De.ctrlKey||la(!1)};return window.addEventListener("keydown",X),window.addEventListener("keyup",pe),()=>{window.removeEventListener("keydown",X),window.removeEventListener("keyup",pe)}},[]);const[Eo,Pa]=vt.useState(!1),[Si,ro]=vt.useState(null),ua=(X,pe)=>{na&&na(pe),da(De=>{const xe=[...De];return xe[X]=pe,xe})},rs=(X,pe,De)=>{const xe=mr.getAllAnnotations()||[];xe.forEach(ge=>{ge.annotationUID===pe&&(ge.isSelected=!1)}),mr.removeAnnotation(pe),R.current.render();const se=De.filter(ge=>ge.annotationUID!==pe);da(ge=>{const Ee=[...ge],Oe=se.length>0?se[0].annotationUID:null;return Ee[X]=Oe,xe.forEach(Ne=>{Ne.isSelected=Ne.annotationUID===Oe}),na(Oe),R.current.render(),Ee})},Ds=()=>{const X=$.findIndex(se=>se&&se.length>0);if(X===-1){ro("No images loaded."),Pa(!0);return}const pe=$[X][0],De=["imagePlaneModule","generalSeriesModule","generalStudyModule","patientModule","imagePixelModule","voiLutModule","modalityLutModule","sopCommonModule","petIsotopeModule","multiframeModule","cineModule","overlayPlaneModule","generalImageModule","stackModule","voiLutModule","modalityLutModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule","petSeriesModule","petImageModule","petIsotopeModule"],xe={};De.forEach(se=>{const ge=wt(se,pe);ge!==void 0&&(xe[se]=ge)}),ro(We.jsx("pre",{style:{maxHeight:600,overflow:"auto",fontSize:13,color:"#fff"},children:JSON.stringify(xe,null,2)})),Pa(!0)};vt.useEffect(()=>{try{const X=localStorage.getItem(l),pe=localStorage.getItem(f);X&&ca(JSON.parse(X)),pe&&Wi(JSON.parse(pe))}catch{}},[]),vt.useEffect(()=>{try{localStorage.setItem(l,JSON.stringify(wr))}catch{}},[wr]),vt.useEffect(()=>{try{localStorage.setItem(f,JSON.stringify(Gi))}catch{}},[Gi]),vt.useEffect(()=>(window.loadDicomStackFromFiles=X=>{const pe=Array.from(X);Rr({target:{files:pe}})},()=>{window.loadDicomStackFromFiles=void 0}),[]);const[bo,Is]=vt.useState(!1),[xc,Os]=vt.useState(!1);vt.useEffect(()=>{const X=ni(G);X&&["ArrowAnnotate","NoLabelArrowAnnotate","Length","RectangleROI","EllipticalROI","PlanarFreehandROI","PlanarFreehandContourSegmentation"].forEach(pe=>{X.setToolConfiguration(pe,{color:"#00e676",selectedColor:"#ffeb3b"})})},[G]),vt.useEffect(()=>{const X=xe=>{xe.altKey&&Is(!0),xe.shiftKey&&Os(!0)},pe=xe=>{xe.altKey||Is(!1),xe.shiftKey||Os(!1)},De=()=>{Is(!1),Os(!1)};return window.addEventListener("keydown",X),window.addEventListener("keyup",pe),window.addEventListener("blur",De),()=>{window.removeEventListener("keydown",X),window.removeEventListener("keyup",pe),window.removeEventListener("blur",De)}},[]),vt.useEffect(()=>{const X=ni(G);if(!X)return;if(xc||zo&&bo){const De=Dt.rows*Dt.cols;$.slice(0,De).filter((se,ge)=>jn[ge]==="stack"&&Array.isArray(se)&&se.length>0).forEach(se=>{zt(se,{force:!0}).catch(ge=>{console.warn("Reference cursor metadata warm-up failed:",ge)})}),X.hasTool(Ba.toolName)||X.addTool(Ba.toolName),X.setToolEnabled(Ba.toolName),X.setToolActive(Ba.toolName)}else X.hasTool(Ba.toolName)&&X.setToolDisabled(Ba.toolName)},[bo,xc,zo,Dt.rows,Dt.cols,$,jn,zt]);const Ms=vt.useCallback(()=>{[ni(G)].forEach(pe=>{if(pe){c0.forEach(xe=>{pe.setToolPassive(xe.value,{removeAllBindings:!0})}),pe.setToolDisabled(Ba.toolName);const De={};Object.entries(wr).forEach(([xe,se])=>{De[se]||(De[se]=[]);const ge=Qv.find(Ee=>Ee.value===xe);ge?De[se].push({mouseButton:ge.mask}):Vg[xe]&&De[se].push({mouseButton:Vg[xe]})}),Object.entries(Gi).forEach(([xe,se])=>{if(!se)return;De[se]||(De[se]=[]);const ge=Qv.find(Ee=>Ee.value===xe);ge?De[se].push({mouseButton:ge.mask,modifierKey:$7.Ctrl}):Vg[xe]&&De[se].push({mouseButton:Vg[xe],modifierKey:$7.Ctrl})}),Object.entries(De).forEach(([xe,se])=>{pe.setToolActive(xe,{bindings:se})});try{const xe=wr.Primary,se=wr.Wheel,ge=wr.Auxiliary,Ee=xe===Qu.toolName||ge===Qu.toolName,Oe=xe===Gl.toolName||se===Gl.toolName||wr.Primary_and_Secondary===Gl.toolName;tn.current.forEach(Ne=>{if(!Ne)return;const Fe=Ne._externalPanZoom;Fe&&(typeof Fe.setAllowPan=="function"&&Fe.setAllowPan(!!Ee),typeof Fe.setAllowZoom=="function"&&Fe.setAllowZoom(!!Oe))})}catch{}}})},[wr,Gi]),[io,oo]=vt.useState(!1),[Pi,di]=vt.useState("add"),Ho=vt.useRef(null),fa=vt.useCallback(X=>{h&&(X.preventDefault(),X.stopPropagation(),m.current={resizing:!0,startX:X.clientX,startWidth:p},document.body.style.cursor="col-resize",document.body.style.userSelect="none")},[h,p]);vt.useEffect(()=>{const X=De=>{if(!m.current.resizing)return;const xe=m.current.startX-De.clientX,se=Math.max(w,Math.min(x,m.current.startWidth+xe));v(se)},pe=()=>{m.current.resizing&&(m.current.resizing=!1,document.body.style.cursor="",document.body.style.userSelect="")};return window.addEventListener("mousemove",X),window.addEventListener("mouseup",pe),()=>{window.removeEventListener("mousemove",X),window.removeEventListener("mouseup",pe),document.body.style.cursor="",document.body.style.userSelect=""}},[]);const Ra=io?C-S/2:-S+T;vt.useEffect(()=>{try{Ho.current&&(Ho.current.setAttribute("webkitdirectory","true"),Ho.current.setAttribute("directory",""),Ho.current.setAttribute("mozdirectory",""))}catch{}},[]);async function Er(X,pe=""){const De=[],xe=X.entries?X.entries():X.values();for await(const se of xe)try{let ge,Ee;if(Array.isArray(se)&&se.length>=2?(Ee=se[0],ge=se[1]):(ge=se,Ee=ge.name),!ge)continue;if(ge.kind==="file"){const Oe=await ge.getFile();try{Object.defineProperty(Oe,"webkitRelativePath",{value:pe+(Ee||ge.name),configurable:!0})}catch{}De.push(Oe)}else if(ge.kind==="directory"){const Oe=await Er(ge,pe+(Ee||ge.name)+"/");De.push(...Oe)}}catch(ge){console.debug("collectFilesFromDirectoryHandle: skipping entry due to error",ge)}return De}const Cc=async()=>{var X;if(window.showDirectoryPicker)try{const pe=await window.showDirectoryPicker(),De=await Er(pe);De&&De.length>0?await Rr({target:{files:De}}):alert("No files found in selected folder.");return}catch(pe){console.warn("showDirectoryPicker failed or cancelled",pe)}(X=Ho.current)==null||X.click()},hi=vt.useRef(null),Rr=async X=>{const pe=X.target.files;if(!pe||pe.length===0)return;ts(!1);const De=Array.from(pe).sort((Ee,Oe)=>Ee.name.localeCompare(Oe.name)),xe=await Promise.all(De.map(async Ee=>{const Oe=Ee.type&&Ee.type.startsWith("image/");let Ne,Fe,dt,pt,Et=!1;if(!Oe)try{const it=await Ee.arrayBuffer(),st=Nr.parseDicom(new Uint8Array(it));Ne=st.string("x0020000d"),Fe=st.string("x0020000e");const q=st.string("x00200013");q!=null&&q!==""&&(dt=parseInt(q,10));const K=st.string("x00201041")||st.string("x00201040");K!=null&&K!==""&&(pt=parseFloat(K)),Et=!0}catch{Et=!1}const Rt=Oe?`external:${URL.createObjectURL(Ee)}`:`wadouri:${URL.createObjectURL(Ee)}`;return{file:Ee,imageId:Rt,studyInstanceUID:Ne,seriesInstanceUID:Fe,instanceNumber:dt,sliceLocation:pt,isImage:Oe,parsedSuccessfully:Et}})),se=new Map;for(const Ee of xe){if(!Ee.isImage&&!Ee.parsedSuccessfully){console.debug("Skipping non-DICOM/non-image file:",Ee.file.name);continue}const Oe=Ee.seriesInstanceUID||Ee.studyInstanceUID||(Ee.file.webkitRelativePath?Ee.file.webkitRelativePath.split("/")[0]:Ee.file.name);se.has(Oe)||se.set(Oe,{entries:[],studyInstanceUID:Ee.studyInstanceUID,seriesInstanceUID:Ee.seriesInstanceUID}),se.get(Oe).entries.push(Ee)}const ge=[];for(const[Ee,Oe]of se.entries()){const Ne=Oe.entries;Ne.sort((dt,pt)=>yi&&dt.sliceLocation!==void 0&&pt.sliceLocation!==void 0?dt.sliceLocation-pt.sliceLocation:dt.instanceNumber!==void 0&&pt.instanceNumber!==void 0?dt.instanceNumber-pt.instanceNumber:(dt.file.webkitRelativePath||dt.file.name).localeCompare(pt.file.webkitRelativePath||pt.file.name));const Fe=Ne.map(dt=>dt.imageId);ge.push({imageIds:Fe,studyInstanceUID:Oe.studyInstanceUID,seriesInstanceUID:Oe.seriesInstanceUID})}if(ge.length!==0)if(Pi==="replace"){try{const Ee=R.current;if(Ee)for(let Oe=0;Oe{const Ee=Array(A).fill([]);for(let Oe=0;Oe{const Oe=[...Ee,...ge];Y(Ne=>{const Fe=[...Ne];return Fe[0]=ge[ge.length-1].imageIds,Fe}),re(Ne=>{const Fe=[...Ne];return Fe[0]=Oe.length-1,Fe});for(const Ne of ge)zt(Ne.imageIds);return Oe})},pr=vt.useCallback((X,pe)=>{var Et,Rt;if(!pe)return;let De=0,xe=0,se="",ge="",Ee="",Oe="",Ne="",Fe="",dt="",pt="";if(jn[X]==="stack"){De=typeof pe.getCurrentImageIdIndex=="function"?pe.getCurrentImageIdIndex():0;const it=typeof pe.getImageIds=="function"?pe.getImageIds():[];xe=it.length;const st=it[De];if(st){const q=wt("generalSeriesModule",st),K=wt("imagePlaneModule",st),de=wt("imagePixelModule",st);Oe=(q==null?void 0:q.modality)||"",de!=null&&de.rows&&(de!=null&&de.columns)&&(Fe=`${de.columns} x ${de.rows}`);const Pe=[K==null?void 0:K.columnPixelSpacing,K==null?void 0:K.rowPixelSpacing,K==null?void 0:K.sliceThickness].filter(Ge=>Ge!=null&&Ge!=="");Pe.length>0&&(dt=Pe.join(" x "))}if(typeof pe.getCamera=="function"){const q=pe.getCamera();q!=null&&q.focalPoint&&Array.isArray(q.focalPoint)&&(pt=q.focalPoint.map(K=>K.toFixed(1)).join(", "))}if(De>=0&&ns(q=>{const K=[...q],de=new Set(K[X]||[]);return de.has(De)?q:(de.add(De),K[X]=Array.from(de).sort((Pe,Ge)=>Pe-Ge),K)}),typeof pe.getProperties=="function"){const q=pe.getProperties();if(q.voiRange){const{lower:K,upper:de}=q.voiRange;se=((de+K)/2).toFixed(0),ge=(de-K).toFixed(0),wi.current[X]===null&&(wi.current[X]={lower:K,upper:de})}}}else if(jn[X]==="volume"){if(typeof pe.getSliceIndex=="function"&&(De=pe.getSliceIndex()),typeof pe.getNumberOfSlices=="function"&&(xe=pe.getNumberOfSlices()),typeof pe.getProperties=="function"){let st;if(pe.volumeIds&&pe.volumeIds.size>0){const q=Array.from(pe.volumeIds)[0];st=pe.getProperties(q)}else st=pe.getProperties();if(st&&st.voiRange){const{lower:q,upper:K}=st.voiRange;se=((K+q)/2).toFixed(0),ge=(K-q).toFixed(0),wi.current[X]===null&&(wi.current[X]={lower:q,upper:K})}}if(typeof pe.getSlicePlaneCoordinates=="function"){const st=pe.getSlicePlaneCoordinates();st&&typeof st.position=="number"&&(Ee=st.position.toFixed(2)+" mm")}const it=(Et=$[X])==null?void 0:Et[0];if(it){const st=wt("generalSeriesModule",it),q=wt("imagePlaneModule",it),K=wt("imagePixelModule",it);Oe=(st==null?void 0:st.modality)||"",Ne=String(((Rt=pe.viewportProperties)==null?void 0:Rt.orientation)||"").toUpperCase(),K!=null&&K.rows&&(K!=null&&K.columns)&&(Fe=`${K.columns} x ${K.rows}`);const de=[q==null?void 0:q.columnPixelSpacing,q==null?void 0:q.rowPixelSpacing,q==null?void 0:q.sliceThickness].filter(Pe=>Pe!=null&&Pe!=="");de.length>0&&(dt=de.join(" x "))}if(typeof pe.getCamera=="function"){const st=pe.getCamera();st!=null&&st.focalPoint&&Array.isArray(st.focalPoint)&&(pt=st.focalPoint.map(q=>q.toFixed(1)).join(", "))}}Tn(it=>{const st=[...it];return st[X]={index:De+1,total:xe,windowCenter:se,windowWidth:ge,slicePosition:Ee,modality:Oe,orientation:Ne,resolution:Fe,spacing:dt,focalPoint:pt},st})},[jn,$]);vt.useEffect(()=>{ns(X=>{let pe=!1;const De=[...X];for(let xe=0;xe{const xe=he[pe];if(!xe)return;const se=sa(De);if(se==="center"){await Pt(X,pe),Me(X);return}const ge=Dt.rows,Ee=Dt.cols,Oe=Math.floor(X/Ee),Ne=X%Ee,Fe=se==="top"||se==="bottom"?ge+1:ge,dt=se==="left"||se==="right"?Ee+1:Ee;if(Fe>3||dt>3||Fe*dt>A){await Pt(X,pe),Me(X);return}const pt=Array(A).fill([]),Et=Array(A).fill("stack"),Rt=Array(A).fill(0),it=se==="top"?Oe:se==="bottom"?Oe+1:Oe,st=se==="left"?Ne:se==="right"?Ne+1:Ne,q=it*dt+st;for(let K=0;KNe?ot=Pe+1:ot=se==="left"?Pe+1:Pe),(se==="top"||se==="bottom")&&Pe===Ne&&(deOe?Ge=de+1:Ge=se==="top"?de+1:de);const nt=Ge*dt+ot;pt[nt]=$[K]||[],Et[nt]=jn[K]||"stack",Rt[nt]=ne[K]??0}pt[q]=xe.imageIds,Et[q]="stack",Rt[q]=pe,tt("displayset");try{Ko(),li({rows:Fe,cols:dt}),Y(pt),no(Et),re(Rt),Me(q),await zt(xe.imageIds)}finally{tt(null)}};vt.useEffect(()=>{const X=async()=>{var ge;if(console.log("setup"),!c.current){c.current=!0,await AA(),await rG(),r$();try{ld("external",Ee=>({promise:(async()=>{const Ne=Ee.replace(/^external:/,""),Fe=new Image;Fe.crossOrigin="anonymous",Fe.src=Ne,await new Promise((q,K)=>{Fe.onload=()=>q(!0),Fe.onerror=de=>K(de)});const dt=Fe.naturalWidth||Fe.width,pt=Fe.naturalHeight||Fe.height,Et=document.createElement("canvas");Et.width=dt,Et.height=pt;const Rt=Et.getContext("2d");if(!Rt)throw new Error("Unable to create canvas context");Rt.drawImage(Fe,0,0,dt,pt);const it=Rt.getImageData(0,0,dt,pt);return{imageId:Ee,minPixelValue:0,maxPixelValue:255,slope:1,intercept:0,rows:pt,columns:dt,height:pt,width:dt,color:!0,rgba:!0,sizeInBytes:it.data.length,getPixelData:()=>it.data,getImageData:()=>it,getCanvas:()=>Et}})()}))}catch(Ee){console.warn("Failed to register external image loader",Ee)}}let De=R.current;if(!De){De=new iE(V),R.current=De;try{he&&he.length>0&&he.forEach((Ee,Oe)=>{const Ne=Array.isArray(Ee.imageIds)?Ee.imageIds:[],Fe=Math.floor(Ne.length/2),dt=Ne[Fe]||Ne[0]||null;dt&&!Se[Oe]&&!qe.current[Oe]&&yt(Oe,dt)})}catch{}}let xe=ni(G);xe||(xe=e8e(G)),jn.slice(0,Dt.rows*Dt.cols).filter(Ee=>Ee==="volume").length,Xr(xe);for(let Ee=0;Ee{if(Fe.offsetWidth>0&&Fe.offsetHeight>0){De.resize();const it=De.getViewport(Ne);it&&typeof it.resize=="function"&&it.resize(),it&&typeof it.render=="function"&&it.render()}});Rt.observe(Fe),Fe._resizeObserver=Rt}if(jn[Ee]==="stack"){if(Oe&&Oe.length>0){const Rt=Oe[0];if(le(Rt))try{try{const q=Fe._externalPanZoom;q&&typeof q.cleanup=="function"&&q.cleanup()}catch{}Fe.innerHTML="";const it=document.createElement("img");it.style.width="100%",it.style.height="100%",it.style.objectFit="contain",it.style.display="block",it.src=Rt.replace(/^external:/,""),it.setAttribute("draggable","false"),Fe.appendChild(it);const st=Tt(Fe,it);Fe._externalPanZoom=st,xe.removeViewports(V,Ne)}catch(it){console.warn("Failed to render external image in viewport",it)}else try{pt.setStack(Oe)}catch(it){console.warn("viewport.setStack failed",it)}}Kt?xe.removeViewports(V,Ne):xe.addViewport(Ne,V)}else if(jn[Ee]==="volume"){xe.addViewport(Ne,V);const Rt=`myVolumeId_${Ee}`;(await p1(Rt,{imageIds:Oe})).load(),pt.setVolumes([{volumeId:Rt}]),pt.render(),Fe._overlayListener&&pt.element.removeEventListener(Fg,Fe._overlayListener);const st=()=>pr(Ee,pt);pt.element.addEventListener(Fg,st),Fe._overlayListener=st,pr(Ee,pt);continue}if(pt.render(),!N.current){ui.current[Ee]!==void 0&&typeof pt.setImageIdIndex=="function"&&ds(pt.element,{imageIndex:ui.current[Ee]});const Rt=an.current[Ee];if(Rt&&typeof pt.setProperties=="function"){const{voiRange:it,invert:st,interpolationType:q,VOILUTFunction:K,colormap:de}=Rt,Pe={};it&&it.lower!==void 0&&it.upper!==void 0&&(Pe.voiRange=it),st!==void 0&&(Pe.invert=st),q!==void 0&&(Pe.interpolationType=q),K&&(Pe.VOILUTFunction=K),de!=null&&(typeof de=="string"||typeof de=="object"&&!("actor"in de))&&(Pe.colormap=de),setTimeout(()=>{console.log("Restoring properties (timeout) for viewport",Ee,Pe),pt.setProperties(Pe),pt.render()},100)}}Fe._overlayListener&&pt.element.removeEventListener(Fg,Fe._overlayListener);const Et=()=>pr(Ee,pt);pt.element.addEventListener(Fg,Et),Fe._overlayListener=Et,pr(Ee,pt)}for(let Ee=0;Ee=2?(xe.hasTool(jc.toolName)||xe.addTool(jc.toolName),xe.setToolEnabled(jc.toolName),xe.setToolConfiguration(jc.toolName,{}),xe.setToolActive(jc.toolName,{bindings:[{mouseButton:Vg.Primary}]})):xe.hasTool(jc.toolName)&&xe.setToolDisabled(jc.toolName)),Ms()},pe=requestAnimationFrame(()=>{X()});return()=>{tn.current.forEach(De=>{De&&De._resizeObserver&&(De._resizeObserver.disconnect(),delete De._resizeObserver)}),cancelAnimationFrame(pe)}},[s,pr,Dt,jn,$]);const La=vt.useCallback(X=>{const pe=`CT_${X}`,xe=R.current.getViewport(pe);xe&&typeof xe.resetCamera=="function"&&(xe.resetCamera(),console.log("Restoring viewport properties for viewport",X),xe.resetProperties(),xe.render())},[]),Ps=vt.useCallback((X,pe,De)=>{const xe=`CT_${X}`;try{const se=R.current;if(se){const ge=se.getViewport(xe);ge&&typeof ge.setProperties=="function"&&(console.log(`Applying preset to viewport ${X}: center=${pe}, width=${De}`),ge.setProperties({voiRange:{lower:pe-De/2,upper:pe+De/2}}),ge.render(),pr(X,ge))}}catch{}},[pr]),qo=vt.useCallback((X,pe=!1)=>{const De=`CT_${X}`;try{const xe=R.current,se=xe==null?void 0:xe.getViewport(De);if(!se)return!1;const ge=typeof se.getImageIds=="function"?se.getImageIds():$[X]||[],Ee=typeof se.getCurrentImageIdIndex=="function"?se.getCurrentImageIdIndex():0,Oe=ge[Ee]||ge[0],Ne=wi.current[X],Fe=Oe?wt("voiLutModule",Oe)||{}:{},dt=Oe?wt("imagePixelModule",Oe)||{}:{},pt=Oe?wt("modalityLutModule",Oe)||{}:{},Et=Array.isArray(Fe.windowCenter)?Fe.windowCenter[0]:Fe.windowCenter,Rt=Array.isArray(Fe.windowWidth)?Fe.windowWidth[0]:Fe.windowWidth,it=Number(dt.smallestPixelValue??dt.smallestImagePixelValue),st=Number(dt.largestPixelValue??dt.largestImagePixelValue),q=Number(pt.rescaleSlope??1),K=Number(pt.rescaleIntercept??0);if(Ne)se.setProperties({voiRange:Ne});else if(Number.isFinite(Number(Et))&&Number.isFinite(Number(Rt))&&Number(Rt)>0){const de=Number(Et),Pe=Number(Rt);se.setProperties({voiRange:{lower:de-Pe/2,upper:de+Pe/2}})}else Number.isFinite(it)&&Number.isFinite(st)&&st>it?se.setProperties({voiRange:{lower:it*q+K,upper:st*q+K}}):typeof se.resetProperties=="function"&&se.resetProperties();return pe&&typeof se.resetCamera=="function"&&se.resetCamera(),se.render(),pr(X,se),!0}catch(xe){return console.warn("Failed to apply default window level",xe),!1}},[pr,$]),Aa=vt.useCallback(X=>{const pe=`CT_${X}`;(async()=>{const De=R.current;if(!De)return;const xe=De.getViewport(pe);if(!xe)return;const se=typeof xe.getImageIds=="function"?xe.getImageIds():$[X]||[],ge=typeof xe.getCurrentImageIdIndex=="function"?xe.getCurrentImageIdIndex():0,Ee=se[ge]||se[0];if(!Ee){qo(X);return}const Oe=wt("imagePixelModule",Ee)||{},Ne=wt("modalityLutModule",Ee)||{},Fe=wt("voiLutModule",Ee)||{},dt=wi.current[X];let pt=Number(Oe.smallestPixelValue??Oe.smallestImagePixelValue),Et=Number(Oe.largestPixelValue??Oe.largestImagePixelValue),Rt=Number(Ne.rescaleSlope??1),it=Number(Ne.rescaleIntercept??0);if(!Number.isFinite(pt)||!Number.isFinite(Et)||Et<=pt)try{const K=await _s(Ee);pt=Number(K==null?void 0:K.minPixelValue),Et=Number(K==null?void 0:K.maxPixelValue),Rt=Number((K==null?void 0:K.slope)??Rt),it=Number((K==null?void 0:K.intercept)??it)}catch{const de=se.filter(Pe=>!!Pe).slice(0,6);for(const Pe of de)try{const Ge=await _s(Pe);if(pt=Number(Ge==null?void 0:Ge.minPixelValue),Et=Number(Ge==null?void 0:Ge.maxPixelValue),Rt=Number((Ge==null?void 0:Ge.slope)??Rt),it=Number((Ge==null?void 0:Ge.intercept)??it),Number.isFinite(pt)&&Number.isFinite(Et)&&Et>pt)break}catch{}}const st=Array.isArray(Fe.windowCenter)?Fe.windowCenter[0]:Fe.windowCenter,q=Array.isArray(Fe.windowWidth)?Fe.windowWidth[0]:Fe.windowWidth;if(Number.isFinite(pt)&&Number.isFinite(Et)&&Et>pt)xe.setProperties({voiRange:{lower:pt*Rt+it,upper:Et*Rt+it}});else if(Number.isFinite(Number(st))&&Number.isFinite(Number(q))&&Number(q)>0){const K=Number(st),de=Number(q);xe.setProperties({voiRange:{lower:K-de/2,upper:K+de/2}})}else if(dt)xe.setProperties({voiRange:dt});else{qo(X);return}xe.render(),pr(X,xe)})().catch(()=>{qo(X)})},[qo,pr,$]),Jn=vt.useCallback((X,pe,De=!0,xe=!0)=>{if(De&&(to.current[X]=pe),pe.action==="reset"){qo(X,xe);return}if(pe.action==="autolevel"){Aa(X);return}const se=pe;Ps(X,se.center,se.width)},[qo,Ps,Aa]);vt.useEffect(()=>{const X=()=>{const De=R.current;if(!De)return;const xe=Dt.rows*Dt.cols;for(let se=0;sewindow.clearTimeout(pe)},[Jn,yn,Dt,jn]),vt.useEffect(()=>{const X=pe=>{var Oe,Ne;const De=pe.target;if(De){const Fe=(Oe=De.tagName)==null?void 0:Oe.toLowerCase(),dt=De.getAttribute("contenteditable")==="true";if(Fe==="input"||Fe==="textarea"||Fe==="select"||dt)return}if(pe.ctrlKey||pe.altKey||pe.metaKey||ve===null)return;const xe=(Ne=yn[ve])==null?void 0:Ne.modality,se=j7(xe);if(pe.key==="0"){const Fe=se.find(dt=>dt.action==="reset");Fe&&(Jn(ve,Fe),pe.preventDefault());return}if(!/^[1-9]$/.test(pe.key))return;const ge=Number(pe.key)-1,Ee=se.filter(Fe=>Fe.action==="preset");ge>=Ee.length||(Jn(ve,Ee[ge]),pe.preventDefault())};return window.addEventListener("keydown",X),()=>window.removeEventListener("keydown",X)},[ve,Jn,yn]);const Na=vt.useCallback(()=>{const X=a.current;X&&(document.fullscreenElement===X?document.exitFullscreen():X.requestFullscreen?X.requestFullscreen():X.webkitRequestFullscreen?X.webkitRequestFullscreen():X.msRequestFullscreen&&X.msRequestFullscreen())},[]);vt.useEffect(()=>{Tn(Array(Dt.rows*Dt.cols).fill({index:0,total:0,windowCenter:"",windowWidth:"",slicePosition:"",modality:"",orientation:"",resolution:"",spacing:"",focalPoint:""})),Ma(Array(Dt.rows*Dt.cols).fill(!1))},[Dt]),vt.useEffect(()=>{Ms()},[wr,Gi,bs,Ms]),vt.useEffect(()=>{if(!Ci.some(Boolean))return;const X=pe=>{const De=document.querySelector(".preset-menu");De&&!De.contains(pe.target)&&Ma(xe=>xe.map(()=>!1))};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[Ci]),vt.useEffect(()=>{if(!qt)return;const X=pe=>{const De=_.current;De&&!De.contains(pe.target)&&(In(!1),O(!1))};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[qt]),vt.useEffect(()=>{const X=pe=>{if(pe.button===3||pe.button===4)return pe.preventDefault(),!1};return window.addEventListener("mousedown",X,!0),window.addEventListener("mouseup",X,!0),window.addEventListener("auxclick",X,!0),()=>{window.removeEventListener("mousedown",X,!0),window.removeEventListener("mouseup",X,!0),window.removeEventListener("auxclick",X,!0)}},[]),vt.useEffect(()=>{const X=a.current;if(!X)return;const pe=De=>{De.preventDefault()};return X.addEventListener("contextmenu",pe),()=>{X.removeEventListener("contextmenu",pe)}},[]),vt.useEffect(()=>{if(!Dn)return;const X=ni(G);Xr(X)},[ve,Dn]),vt.useEffect(()=>{hi.current&&(hi.current.setAttribute("webkitdirectory","true"),hi.current.setAttribute("directory","true"))},[]),vt.useEffect(()=>(window.loadDicomStackFromWadouriList=async X=>{if(!X||X.length===0)return;let pe;try{const De=X[0];if(De&&De.startsWith("wadouri:")){const xe=Uf(De),ge=await(await fetch(xe)).arrayBuffer();pe=Nr.parseDicom(new Uint8Array(ge)).string("x0020000d")}}catch{}ue(De=>{const xe=[...De,{imageIds:X,studyInstanceUID:pe}];return Y(se=>{const ge=[...se];return ge[0]=X,ge}),re(se=>{const ge=[...se];return ge[0]=xe.length-1,ge}),zt(X),xe})},()=>{window.loadDicomStackFromWadouriList=void 0}),[ue,Y,re,zt]),vt.useEffect(()=>{!yi||!$.every(pe=>!pe||pe.length===0||pe.every(De=>!!wt("imagePlaneModule",De)))||Y(pe=>{let De=!1;const xe=pe.map(se=>{if(!se||se.length===0)return se;const Oe=[...se.map(Ne=>({imageId:Ne,sliceLoc:(()=>{const Fe=wt("imagePlaneModule",Ne);return Fe&&Fe.sliceLocation!==void 0?Number(Fe.sliceLocation):null})()}))].sort((Ne,Fe)=>Ne.sliceLoc!==null&&Fe.sliceLoc!==null?Ne.sliceLoc-Fe.sliceLoc:Ne.imageId.localeCompare(Fe.imageId)).map(Ne=>Ne.imageId);return JSON.stringify(Oe)!==JSON.stringify(se)?(De=!0,Oe):se});return De&&_t(!0),xe})},[yi,he]);function Xr(X){if(!X)return;const pe=`CT_${ve}`;Dn?(X.setToolEnabled(pd.toolName),X.setToolConfiguration(pd.toolName,{sourceViewportId:pe})):X.setToolDisabled(pd.toolName)}function Yr(){var pe,De,xe;const X=R.current;if(X)for(let se=0;se{if(typeof pe=="string"&&pe.startsWith("blob:"))try{URL.revokeObjectURL(pe)}catch{}}),je.current={},Re({}),qe.current={},_t(!1),Me(0)}function ao(X,pe){var Ee,Oe;if(console.log("Truncating stack from",X,"to",pe),console.log(Ot),Dt.rows!==1||Dt.cols!==1||he.length!==1||!$[0]||$[0].length===0||Ot)return alert("Truncation is only allowed when a single stack is loaded in a single viewport (and the order has not been modified in the viewer)."),!1;const De=he[0],xe=De.imageIds;if(X<0||pe>=xe.length||X>=pe)return alert("Invalid truncation bounds."),!1;const se=xe.slice(X,pe+1);ue([{...De,imageIds:se}]),Y([se]),re([0]);const ge=R.current;if(ge){const Ne=ge.getViewport("CT_0");Ne&&typeof Ne.setStack=="function"&&(Ne.setStack(se),(Ee=Ne.setImageIdIndex)==null||Ee.call(Ne,0),(Oe=Ne.render)==null||Oe.call(Ne))}return!0}function Cl(X=0){const pe=R.current;if(!pe)return null;const De=pe.getViewport(`CT_${X}`);return!De||typeof De.getCurrentImageIdIndex!="function"?null:De.getCurrentImageIdIndex()}vt.useEffect(()=>{const X=t||"default";function pe(xe,se){const ge=R.current;if(!ge)return;const Ee=ge.getViewport(`CT_${xe}`);if(!Ee||typeof Ee.getImageIds!="function")return;const Ne=Ee.getImageIds().map(pt=>Uf(pt)),Fe=Uf(se),dt=Ne.indexOf(Fe);dt!==-1&&typeof Ee.setImageIdIndex=="function"&&(ds(Ee.element,{imageIndex:dt}),pr(xe,Ee))}window[`getViewport_${X}`]=xe=>{const se=R.current;if(se)return se.getViewport(`CT_${xe}`)},window[`getAllViewports_${X}`]=()=>{const xe=R.current;return xe?Array.from({length:A},(se,ge)=>xe.getViewport(`CT_${ge}`)).filter(Boolean):[]},window[`jumpToSliceByImageId_${X}`]=pe,window[`resetViewer_${X}`]=Yr,window[`clearViewer_${X}`]=Sc,window[`truncateStack_${X}`]=ao,window[`getCurrentStackPosition_${X}`]=Cl,window[`loadAdditionalStack_${X}`]=async(xe,se)=>{var Ee;if(!Array.isArray(xe)||xe.length===0)return;let ge=se;if(!ge&&((Ee=xe[0])!=null&&Ee.startsWith("wadouri:")))try{const Oe=Uf(xe[0]),Fe=await(await fetch(Oe)).arrayBuffer();ge=Nr.parseDicom(new Uint8Array(Fe)).string("x0020000d")}catch{}ue(Oe=>[...Oe,{imageIds:xe,studyInstanceUID:ge}]),Y(Oe=>{const Ne=[...Oe],Fe=Ne.findIndex(dt=>!dt||dt.length===0);return Fe!==-1&&(Ne[Fe]=xe),Ne}),zt(xe)},window[`exportViewerState_${X}`]=()=>{var it;const xe=Dt.rows*Dt.cols,se=jn.slice(0,xe),ge=ne.slice(0,xe),Ee=he.map(st=>({i:st.imageIds,u:st.studyInstanceUID}));console.log("Exporting viewer state with",xe,"active viewports"),console.log("modes",se);const Oe=R.current,Ne=[],Fe=[],dt=[],pt=[],Et=[];for(let st=0;st{try{N.current=!0;const se=typeof xe=="string"?JSON.parse(xe):xe;if(se.grid&&li(se.grid),se.modes&&no(se.modes),se.stacks&&ue(se.stacks.map(Ne=>({imageIds:Ne.i,studyInstanceUID:Ne.u}))),se.stackIdx&&se.stacks){const Ne=se.stackIdx.map(Fe=>{var dt;return((dt=se.stacks[Fe])==null?void 0:dt.i)||[]});Y(Ne),re(se.stackIdx)}const ge=30;let Ee=0;async function Oe(){var Et,Rt,it,st,q,K,de,Pe,Ge,ot,nt;const Ne=R.current;if(!Ne){N.current=!1;return}const Fe=((Et=se.grid)==null?void 0:Et.rows)*((Rt=se.grid)==null?void 0:Rt.cols)||1;let dt=!0;for(let ze=0;zeQ===Mt[Z])){console.warn(`Viewport ${ze}: importedImageIds do not match viewportImageIds`,{importedImageIds:Mt,viewportImageIds:It}),dt=!1;break}}catch{dt=!1}}if(!dt&&Ee{Oe()},500);return}for(let ze=0;ze{try{ds(Qe.element,{imageIndex:se.volumeSliceIndices[ze]})}catch{}},100)}else{try{Qe.setStack&&(Qe.setStack(Mt),Qe.render())}catch(It){console.warn("Failed to set stack for viewport",ze,It)}if(se.stackPos&&typeof se.stackPos[ze]=="number"&&typeof Qe.setImageIdIndex=="function")try{Rn&&ds?ds(Qe.element,{imageIndex:se.stackPos[ze]}):Qe.setImageIdIndex(se.stackPos[ze])}catch{}}}const pt=1500;console.log(`Waiting ${pt}ms before applying properties/camera to viewports`),await new Promise(ze=>setTimeout(ze,pt));for(let ze=0;ze{Oe()},100)}catch(se){N.current=!1,alert("Failed to import viewer state: "+se)}},window[`exportAnnotations_${X}`]=()=>{try{let xe=mr.getAllAnnotations();if(console.log("Exporting annotations:",xe),Array.isArray(xe)){const se=[gf.toolName,Ah.toolName,pf.toolName,ou.toolName,Ad.toolName,hf.toolName,hl.toolName,au.toolName,Ph.toolName];xe=xe.filter(ge=>se.includes(ge.metadata.toolName))}else return"{}";return JSON.stringify(xe,null,2)}catch(xe){return alert("Failed to export annotations: "+xe),"{}"}},window.__pendingImportAnnotations=window.__pendingImportAnnotations||{};const De=xe=>{try{const se=window.__pendingImportAnnotations&&window.__pendingImportAnnotations[xe];if(!se||!se.length)return;const ge=mr;if(!ge||typeof ge.addAnnotation!="function")return;for(;(window.__pendingImportAnnotations[xe]||[]).length;){const Ee=(window.__pendingImportAnnotations[xe]||[]).shift();Ee&&Array.isArray(Ee)&&Ee.forEach(Oe=>{try{ge.addAnnotation(Oe,Oe.annotationUID)}catch(Ne){console.error("Failed to add queued annotation",Ne,Oe)}})}R.current&&R.current.render()}catch(se){console.error("Error flushing pending annotations:",se)}};return window[`importAnnotations_${X}`]=xe=>{try{const se=typeof xe=="string"?JSON.parse(xe):xe,ge=mr;if(!ge||typeof ge.addAnnotation!="function"){window.__pendingImportAnnotations[X]=window.__pendingImportAnnotations[X]||[],window.__pendingImportAnnotations[X].push(se),console.warn("importAnnotations: annotation state not ready, queued import",X),setTimeout(()=>De(X),500);return}if(ge.removeAllAnnotations)try{ge.removeAllAnnotations()}catch(Ee){console.warn("removeAllAnnotations failed",Ee)}Array.isArray(se)&&se.forEach(Ee=>{try{ge.addAnnotation(Ee,Ee.annotationUID)}catch(Oe){console.error("Failed to add annotation",Oe,Ee)}}),R.current&&R.current.render()}catch(se){console.error("Failed to import annotations:",se,{apiKey:X,cornerstoneTools:!!wz,renderingEngine:!!R.current});try{alert("Failed to import annotations: "+se)}catch{}}try{De(X)}catch{}},window[`importLegacyAnnotations_${X}`]=xe=>{mr.removeAllAnnotations&&mr.removeAllAnnotations();let se;try{se=typeof xe=="string"?JSON.parse(xe):xe}catch{alert("Invalid legacy annotation JSON");return}const ge={ArrowAnnotate:"ArrowAnnotate"};Object.entries(se).forEach(([Ee,Oe])=>{console.log("Importing legacy annotations for imageId:",Ee),Object.entries(Oe).forEach(([Ne,Fe])=>{const dt=ge[Ne]||Ne;Fe.data&&Array.isArray(Fe.data)&&Fe.data.forEach(pt=>{const Et=z7(Ee,{x:pt.handles.start.y,y:pt.handles.start.x}),Rt=z7(Ee,{x:pt.handles.end.y,y:pt.handles.end.x});console.log("Importing legacy annotation:"),console.log(" Image ID:",Ee),console.log(" Start World:",Et),console.log(" End World:",Rt);const it=wt("imagePlaneModule",Ee);console.log(R4);let st=wt("frameOfReferenceUID",Ee);!st&&it&&it.frameOfReferenceUID&&(st=it.frameOfReferenceUID);const q=it!=null&&it.rowCosines&&(it!=null&&it.columnCosines)?[it.rowCosines[1]*it.columnCosines[2]-it.rowCosines[2]*it.columnCosines[1],it.rowCosines[2]*it.columnCosines[0]-it.rowCosines[0]*it.columnCosines[2],it.rowCosines[0]*it.columnCosines[1]-it.rowCosines[1]*it.columnCosines[0]]:void 0;Array.isArray(q)&&q.length,typeof pt.rotation=="number"&&pt.rotation;const K={annotationUID:pt.uuid,metadata:{toolName:dt,referencedImageId:Ee,FrameOfReferenceUID:st,viewPlaneNormal:q},data:{handles:{points:[Et,Rt],textBox:pt.handles.textBox},text:pt.text||""},visibility:pt.visible!==!1,active:pt.active||!1};mr.addAnnotation(K,K.annotationUID)})})}),R.current&&R.current.render()},window[`importLegacyViewport_${X}`]=xe=>{let se;try{se=typeof xe=="string"?JSON.parse(xe):xe}catch{alert("Invalid legacy viewport JSON");return}const ge=R.current;if(!ge)return;const Ee=`CT_${ve??0}`,Oe=ge.getViewport(Ee);if(!Oe)return;const Ne={};if(se.voi&&(Ne.voiRange={lower:se.voi.windowCenter-se.voi.windowWidth/2,upper:se.voi.windowCenter+se.voi.windowWidth/2}),typeof se.invert=="boolean"&&(Ne.invert=se.invert),typeof se.pixelReplication=="boolean"&&(Ne.interpolationType=se.pixelReplication?0:1),typeof se.hflip=="boolean"&&(Ne.hflip=se.hflip),typeof se.vflip=="boolean"&&(Ne.vflip=se.vflip),typeof Oe.setProperties=="function"&&Oe.setProperties(Ne),se.translation||se.scale){const Fe=Oe.getCamera?Oe.getCamera():{};se.translation&&(Fe.translation={...Fe.translation,...se.translation}),se.scale&&(Fe.parallelScale=200/se.scale),console.log("Applying legacy camera properties:",Fe),typeof Oe.setCamera=="function"&&Oe.setCamera(Fe)}typeof se.rotation=="number"&&Oe.setRotation(se.rotation),Oe.render(),pr(ve??0,Oe)},window[`exportThumbDebug_${X}`]=()=>{try{return JSON.stringify(ce.current,null,2)}catch{return"[]"}},window[`clearThumbDebug_${X}`]=()=>(ce.current=[],!0),()=>{window[`exportViewerState_${X}`]=void 0,window[`importViewerState_${X}`]=void 0,window[`exportAnnotations_${X}`]=void 0,window[`importAnnotations_${X}`]=void 0,window[`importLegacyAnnotations_${X}`]=void 0,window[`importLegacyViewport_${X}`]=void 0,window[`jumpToSliceByImageId_${X}`]=void 0,window[`resetViewer_${X}`]=void 0,window[`clearViewer_${X}`]=void 0,window[`truncateStack_${X}`]=void 0,window[`getCurrentStackPosition_${X}`]=void 0,window[`loadAdditionalStack_${X}`]=void 0,window[`getViewport_${X}`]=void 0,window[`getAllViewports_${X}`]=void 0,window[`exportThumbDebug_${X}`]=void 0,window[`clearThumbDebug_${X}`]=void 0}},[Dt,jn,ne,he,$,li,no,re,ue,Y,ue,Y,zt]),vt.useEffect(()=>{const X=a.current;if(!X)return;function pe(De){if(console.log("Handling arrow key navigation",De.key),console.log("activeViewport",ve),ve===null)return;const xe=R.current;if(!xe)return;const se=xe.getViewport(`CT_${ve}`);if(se){if(console.log(se),jn[ve]==="stack"){if(typeof se.getCurrentImageIdIndex!="function"||typeof se.setImageIdIndex!="function")return;const ge=$[ve];if(!ge||ge.length===0)return;De.key==="ArrowUp"||De.key==="ArrowRight"?(sc(se,{delta:-1}),De.preventDefault()):(De.key==="ArrowDown"||De.key==="ArrowLeft")&&(sc(se,{delta:1}),De.preventDefault())}jn[ve]==="volume"&&typeof se.getSliceIndex=="function"&&typeof se.getNumberOfSlices=="function"&&se.getNumberOfSlices()>1&&(De.key==="ArrowUp"||De.key==="ArrowRight"?(sc(se,{delta:-1}),De.preventDefault()):(De.key==="ArrowDown"||De.key==="ArrowLeft")&&(sc(se,{delta:1}),De.preventDefault()))}}return X.addEventListener("keydown",pe),()=>{X.removeEventListener("keydown",pe)}},[ve,jn,$,pr]);const Ri=ve!==null?ne[ve]:0,so=he[Ri];so==null||so.studyInstanceUID;const[Rs,da]=vt.useState(()=>Array(A).fill(null)),$i=Dt.rows*Dt.cols,Ls=[];for(let X=0;X<$i;X++){const pe=Xtn.current[X]=se,style:{flex:1,border:pe?"1px solid #222":"none",background:"#000",minWidth:0,minHeight:0,position:"relative",overflow:"hidden",flexDirection:"column",gridRow:Math.floor(X/Dt.cols)+1,gridColumn:X%Dt.cols+1,height:"100%",boxShadow:ve===X?"0 0 0 4px #1976d2, 0 0 16px 4px #1976d2cc":void 0,zIndex:ve===X?10:1},onClick:()=>{Me(X),In(!1)},onDoubleClick:()=>La(X),onDragEnter:se=>{if(!se.dataTransfer.getData("text/stack-idx"))return;se.preventDefault();const Ee=jo(se);M({viewportIdx:X,zone:Ee})},onDragOver:se=>{if(!se.dataTransfer.getData("text/stack-idx"))return;se.preventDefault();const Ee=jo(se),Oe=sa(Ee);M({viewportIdx:X,zone:Ee}),se.dataTransfer.dropEffect=Oe===Ee?"copy":"move"},onDragLeave:se=>{if((B==null?void 0:B.viewportIdx)!==X)return;const ge=se.relatedTarget;ge&&se.currentTarget.contains(ge)||M(null)},onDrop:se=>{se.preventDefault();const ge=se.dataTransfer.getData("text/stack-idx"),Ee=parseInt(ge,10);if(!isNaN(Ee)){const Oe=jo(se);zi(X,Ee,Oe).catch(Ne=>{console.error("Failed to apply dropped stack:",Ne)})}M(null),be(null)},children:[Ue!==null&&De&&We.jsx("div",{style:{position:"absolute",inset:0,zIndex:19,pointerEvents:"none",background:"rgba(0,0,0,0.08)"},children:We.jsx("div",{style:{position:"absolute",left:xe==="left"?0:xe==="right"?"50%":"20%",top:xe==="top"?0:xe==="bottom"?"50%":"20%",width:xe==="left"||xe==="right"?"50%":"60%",height:xe==="top"||xe==="bottom"?"50%":"60%",border:"2px solid #90caf9",boxShadow:"0 0 0 9999px rgba(17, 29, 45, 0.22)",background:"rgba(25, 118, 210, 0.28)",borderRadius:6,display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:12,fontWeight:700,textTransform:"uppercase",letterSpacing:.4},children:xe==="center"?"Load Here":`Split ${xe}`})}),We.jsx("button",{style:{position:"absolute",top:8,left:8,zIndex:20,background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 8px",cursor:"pointer",fontSize:"12px",opacity:.85},onClick:()=>{no(se=>{const ge=[...se];return ge[X]=se[X]==="stack"?"volume":"stack",ge})},children:jn[X]==="stack"?"Volume":"Stack"}),jn[X]==="volume"&&We.jsxs("div",{style:{position:"absolute",top:8,left:70,zIndex:21,display:"flex",gap:"6px",background:"rgba(34,34,34,0.85)",borderRadius:"4px",padding:"2px 6px",alignItems:"center"},children:[We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px",marginRight:"2px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("axial"),ge.render())},children:"Axial"}),We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px",marginRight:"2px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("sagittal"),ge.render())},children:"Sagittal"}),We.jsx("button",{style:{background:"#444",color:"#fff",border:"none",borderRadius:"3px",padding:"2px 8px",cursor:"pointer",fontSize:"12px"},onClick:()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);ge&&ge.setOrientation&&(ge.setOrientation("coronal"),ge.render())},children:"Coronal"})]}),We.jsxs("button",{style:{position:"absolute",top:40,left:8,zIndex:20,background:"#111",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 8px",cursor:"pointer",fontSize:"13px",opacity:.85,marginTop:"4px",display:"flex",alignItems:"center",gap:"6px"},title:"Toggle Fullscreen",onClick:se=>{se.stopPropagation();const ge=tn.current[X];document.fullscreenElement===ge?document.exitFullscreen():ge!=null&&ge.requestFullscreen?ge.requestFullscreen():ge!=null&&ge.webkitRequestFullscreen?ge.webkitRequestFullscreen():ge!=null&&ge.msRequestFullscreen&&ge.msRequestFullscreen()},onMouseEnter:()=>b(X),onMouseLeave:()=>b(null),children:[We.jsx("span",{style:{fontSize:"18px",lineHeight:1},children:"⛶"}),E===X&&We.jsx("span",{style:{marginLeft:6},children:document.fullscreenElement===tn.current[X]?"Exit Fullscreen":"Fullscreen"})]}),jn[X]==="stack"&&F&&(()=>{var Rt;const se=$[X],Ee=(mr.getAllAnnotations()||[]).filter(it=>it.metadata&&it.metadata.referencedImageId&&se.includes(it.metadata.referencedImageId)&&it.metadata.toolName!==Ba.toolName);if(!Ee.length)return null;const Oe=R.current,Ne=Oe==null?void 0:Oe.getViewport(`CT_${X}`),Fe=((Rt=Ne==null?void 0:Ne.getCurrentImageIdIndex)==null?void 0:Rt.call(Ne))??0,dt=se[Fe],pt=Ee.filter(it=>it.metadata.referencedImageId===dt),Et=Rs[X];return We.jsxs("div",{style:{position:"absolute",left:"50%",bottom:60,transform:"translateX(-50%)",zIndex:30,display:"flex",gap:4,pointerEvents:"auto",alignItems:"center"},children:[We.jsx("button",{style:{background:"rgba(30,30,30,0.7)",color:"#fff",border:"none",borderRadius:"50%",width:28,height:28,fontSize:"16px",fontWeight:"bold",cursor:"pointer",opacity:.7,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.18)",transition:"opacity 0.2s"},title:"Previous Annotation","aria-label":"Previous Annotation",onClick:()=>{const it=R.current,st=it==null?void 0:it.getViewport(`CT_${X}`);if(!st||typeof st.getCurrentImageIdIndex!="function")return;const q=st.getCurrentImageIdIndex(),K=q7(q,se,Ee,-1);if(K!==null&&typeof st.setImageIdIndex=="function"){ds(st.element,{imageIndex:K}),pr(X,st);const de=se[K],Pe=Ee.filter(Ge=>Ge.metadata.referencedImageId===de);ua(X,Pe.length>0?Pe[0].annotationUID:null)}},children:We.jsx("span",{"aria-hidden":"true",children:"◀"})}),We.jsx("button",{style:{background:"rgba(30,30,30,0.7)",color:"#fff",border:"none",borderRadius:"50%",width:28,height:28,fontSize:"16px",fontWeight:"bold",cursor:"pointer",opacity:.7,display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(0,0,0,0.18)",transition:"opacity 0.2s"},title:"Next Annotation","aria-label":"Next Annotation",onClick:()=>{const it=R.current,st=it==null?void 0:it.getViewport(`CT_${X}`);if(!st||typeof st.getCurrentImageIdIndex!="function")return;const q=st.getCurrentImageIdIndex(),K=q7(q,se,Ee,1);if(K!==null&&typeof st.setImageIdIndex=="function"){ds(st.element,{imageIndex:K}),pr(X,st);const de=se[K],Pe=Ee.filter(Ge=>Ge.metadata.referencedImageId===de);ua(X,Pe.length>0?Pe[0].annotationUID:null)}},children:We.jsx("span",{"aria-hidden":"true",children:"▶"})}),pt.length>0&&We.jsx("div",{style:{display:"flex",gap:2,alignItems:"center"},children:pt.map(it=>We.jsxs("div",{style:{display:"flex",alignItems:"center",background:Et===it.annotationUID?"rgb(4, 225, 0)":"#444",color:Et===it.annotationUID?"#222":"#fff",borderRadius:"4px",padding:"2px 6px",marginRight:2,cursor:"pointer",border:Et===it.annotationUID?"2px solid #1976d2":"none",fontWeight:Et===it.annotationUID?"bold":"normal"},onClick:()=>ua(X,it.annotationUID),children:[We.jsxs("span",{style:{marginRight:4},title:it.metadata.toolName||"Annotation",children:[Et===it.annotationUID?"★ ":"",We.jsx("span",{style:{fontSize:14,lineHeight:1},children:ZEe(it.metadata.toolName)})]}),We.jsx("button",{style:{background:"transparent",color:"#f44336",border:"1px solid #f44336",borderRadius:3,width:16,height:16,fontSize:10,lineHeight:1,cursor:"pointer",marginLeft:4,display:"flex",alignItems:"center",justifyContent:"center",opacity:.95,padding:0},title:"Delete this annotation","aria-label":"Delete annotation",onClick:st=>{st.stopPropagation(),rs(X,it.annotationUID,pt)},children:We.jsx("span",{"aria-hidden":"true",children:"✖"})})]},it.annotationUID))})]})})(),We.jsx("div",{style:{position:"absolute",left:8,bottom:8,background:"rgba(0,0,0,0.7)",color:"#fff",padding:"6px 12px",borderRadius:"4px",fontSize:"14px",zIndex:10,pointerEvents:"none",minWidth:"120px",userSelect:"none"},children:jn[X]==="stack"?We.jsxs(We.Fragment,{children:[We.jsxs("div",{children:["Image: ",(Tc=yn[X])==null?void 0:Tc.index," / ",(_c=yn[X])==null?void 0:_c.total]}),We.jsxs("div",{children:["WC: ",(As=yn[X])==null?void 0:As.windowCenter,"   WW: ",(ha=yn[X])==null?void 0:ha.windowWidth]}),te&&We.jsxs(We.Fragment,{children:[We.jsxs("div",{children:["Ori: ",((Ns=yn[X])==null?void 0:Ns.orientation)||"N/A"]}),((is=yn[X])==null?void 0:is.resolution)&&We.jsxs("div",{children:["Res: ",(Ec=yn[X])==null?void 0:Ec.resolution]}),((bc=yn[X])==null?void 0:bc.spacing)&&We.jsxs("div",{children:["Spacing: ",(Dc=yn[X])==null?void 0:Dc.spacing]}),((Ic=yn[X])==null?void 0:Ic.focalPoint)&&We.jsxs("div",{children:["Pos: ",(Oc=yn[X])==null?void 0:Oc.focalPoint]})]})]}):We.jsxs("div",{children:["Slice: ",(Mc=yn[X])==null?void 0:Mc.index," / ",(Pc=yn[X])==null?void 0:Pc.total,((ks=yn[X])==null?void 0:ks.slicePosition)&&We.jsxs("span",{children:["   (",(Rc=yn[X])==null?void 0:Rc.slicePosition,")"]}),We.jsx("br",{}),"WC: ",(Vs=yn[X])==null?void 0:Vs.windowCenter,"   WW: ",(Fs=yn[X])==null?void 0:Fs.windowWidth,te&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Ori: ",((Lc=yn[X])==null?void 0:Lc.orientation)||"N/A",((os=yn[X])==null?void 0:os.resolution)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Res: ",(Us=yn[X])==null?void 0:Us.resolution]}),((Bs=yn[X])==null?void 0:Bs.spacing)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Spacing: ",(as=yn[X])==null?void 0:as.spacing]}),((Ac=yn[X])==null?void 0:Ac.focalPoint)&&We.jsxs(We.Fragment,{children:[We.jsx("br",{}),"Pos: ",(Gs=yn[X])==null?void 0:Gs.focalPoint]})]})]})}),We.jsx("div",{style:{position:"absolute",right:8,bottom:8,zIndex:110,pointerEvents:"auto"},children:We.jsxs("div",{className:"preset-menu",style:{background:"rgba(0,0,0,0.7)",color:"#fff",borderRadius:"4px",fontSize:"14px",minWidth:"120px",overflow:"hidden",cursor:"pointer",position:"relative",boxShadow:Ci[X]?"0 2px 8px rgba(0,0,0,0.3)":void 0,pointerEvents:"auto"},onClick:se=>se.stopPropagation(),children:[We.jsxs("div",{style:{padding:"6px 12px",fontWeight:"bold",userSelect:"none"},onClick:se=>{se.stopPropagation(),Ma(ge=>{const Ee=[...ge];return Ee[X]=!Ee[X],Ee})},children:["Presets (",((Nc=yn[X])==null?void 0:Nc.modality)||"Unknown",")",We.jsx("span",{style:{float:"right",fontWeight:"normal"},children:Ci[X]?"▲":"▼"})]}),Ci[X]&&We.jsx("div",{className:"preset-menu-content",style:{background:"rgba(0,0,0,0.95)",borderRadius:"0 0 4px 4px",padding:"6px 0 6px 0",display:"flex",flexDirection:"column",zIndex:111,pointerEvents:"auto"},onClick:se=>se.stopPropagation(),children:(()=>{var Ee;const se=j7((Ee=yn[X])==null?void 0:Ee.modality);let ge=0;return se.map(Oe=>{let Ne="";return Oe.action==="reset"?Ne="0":Oe.action==="preset"&&(ge+=1,Ne=String(ge)),We.jsxs("button",{title:Ne?`Shortcut: ${Ne}`:void 0,style:{display:"block",width:"100%",margin:"2px 0",background:Oe.action==="preset"?"#333":"#444",color:"#fff",border:"none",borderRadius:"3px",cursor:"pointer",padding:Oe.action==="preset"?"4px 0":"6px 0",fontSize:"13px",opacity:.9,fontWeight:Oe.action==="preset"?"normal":"600"},onClick:Fe=>{Fe.stopPropagation(),Jn(X,Oe),Ma(dt=>{const pt=[...dt];return pt[X]=!1,pt})},children:[Oe.name,Ne?` (${Ne})`:""]},Oe.name)})})()})]})}),jn[X]==="stack"&&$[X]&&We.jsx("div",{style:{position:"absolute",top:"10%",right:8,width:"14px",height:"80%",maxHeight:"100%",minHeight:0,zIndex:35,display:$[X].length>0?"flex":"none",alignItems:"flex-start",justifyContent:"center",pointerEvents:"auto",flexDirection:"column",padding:0},children:(()=>{const se=$[X]||[],ge=se.length;if(ge===0)return null;const Ee=R.current,Oe=Ee==null?void 0:Ee.getViewport(`CT_${X}`),Ne=Oe&&typeof Oe.getCurrentImageIdIndex=="function"?Oe.getCurrentImageIdIndex():-1,Fe=new Set(fi[X]||[]),dt=se.map(st=>st.startsWith("external:")?!0:!!wt("imagePlaneModule",st)||!!wt("generalSeriesModule",st)),pt=dt.reduce((st,q)=>st+(q?1:0),0),Et=se.reduce((st,q,K)=>st+(Fe.has(K)?1:0),0),Rt=Math.min(ge,180),it=Array.from({length:Rt},()=>({loaded:!1,viewed:!1,current:!1}));for(let st=0;st{var nt;const K=st.currentTarget.getBoundingClientRect(),de=Math.min(K.height,Math.max(0,st.clientY-K.top)),Pe=K.height>0?de/K.height:0,Ge=Math.min(ge-1,Math.max(0,Math.round(Pe*(ge-1)))),ot=(nt=R.current)==null?void 0:nt.getViewport(`CT_${X}`);ot&&typeof ot.setImageIdIndex=="function"&&jn[X]==="stack"&&(ds(ot.element,{imageIndex:Ge}),pr(X,ot))},children:[it.map((st,q)=>{let K="#3f3f3f";return st.loaded&&(K="#2e7d32"),st.viewed&&(K="#1565c0"),st.current&&(K="#fbc02d"),We.jsx("div",{style:{width:"100%",height:`${100/Rt}%`,minHeight:1,background:K,opacity:st.loaded||st.viewed||st.current?.95:.45,borderBottom:q=0&&ge>Rt&&We.jsx("div",{style:{position:"absolute",left:0,right:0,top:`${Ne/Math.max(1,ge-1)*100}%`,height:2,background:"#ffeb3b",boxShadow:"0 0 4px #ffeb3b",transform:"translateY(-1px)",pointerEvents:"none"}})]})})()}),jn[X]==="volume"&&(()=>{const se=R.current,ge=se==null?void 0:se.getViewport(`CT_${X}`);let Ee=0,Oe=0;return ge&&typeof ge.getNumberOfSlices=="function"&&typeof ge.getSliceIndex=="function"&&(Ee=ge.getNumberOfSlices(),Oe=ge.getSliceIndex()),Ee>1?We.jsx("div",{style:{position:"absolute",top:"10%",right:8,width:"12px",height:"80%",maxHeight:"100%",minHeight:0,zIndex:30,display:"flex",alignItems:"flex-start",justifyContent:"center",pointerEvents:"auto",flexDirection:"column",padding:0},children:We.jsx("div",{style:{width:"8px",height:"100%",maxHeight:"100%",minHeight:0,borderRadius:"6px",background:"#222",position:"relative",display:"flex",flexDirection:"column",justifyContent:"flex-start",boxShadow:"0 0 8px #2196f3cc",overflow:"hidden",cursor:"pointer"},onClick:Ne=>{const dt=Ne.currentTarget.getBoundingClientRect(),pt=Ne.clientY-dt.top,Et=Math.floor(pt/dt.height*Ee),Rt=R.current,it=Rt==null?void 0:Rt.getViewport(`CT_${X}`);it&&(ds(it.element,{imageIndex:Et}),it.render(),pr(X,it))},children:Array.from({length:Ee}).map((Ne,Fe)=>{const dt=Fe===Oe;return We.jsx("div",{style:{width:"100%",height:`${100/Ee}%`,minHeight:dt?1:0,background:dt?"linear-gradient(to right, #ffeb3b 60%, #ff9800 100%)":"#444",opacity:dt?.95:.4,transition:"background 0.3s, opacity 0.3s",borderBottom:Fe1||!$[X]||$[X].length===0)&&We.jsx("div",{style:{position:"absolute",left:0,right:0,bottom:8,zIndex:20,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"auto",width:"100%",background:"none",borderRadius:"0",padding:0},children:We.jsxs("div",{style:{position:"relative"},children:[We.jsxs("button",{onClick:se=>{se.stopPropagation(),I(ge=>ge===X?null:X)},style:{padding:"6px 12px",background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",cursor:"pointer",pointerEvents:"auto",fontSize:13},title:"Choose stack",children:[(()=>{const se=Array.isArray(ne)?ne[X]:void 0,ge=typeof se=="number"&&he[se]?he[se]:void 0,Ee=ge&&Array.isArray(ge.imageIds)?ge.imageIds:[],Oe=ge?ge.name||(ge.caseId?`Case: ${ge.caseId}`:void 0):void 0;if(Oe)return Oe;if(Ee.length>0)return`Stack ${typeof se=="number"?se+1:"1"}`;const Ne=$[X]||[];return Ne.length>0?`Stack (${Ne.length} images)`:"No stack"})(),We.jsx("span",{style:{marginLeft:8,opacity:.8},children:D===X?"▲":"▼"})]}),D===X&&We.jsx("div",{ref:se=>{se&&se.focus()},tabIndex:0,style:{position:"absolute",left:0,bottom:"110%",background:"#222",border:"1px solid #444",borderRadius:"4px",boxShadow:"0 2px 8px rgba(0,0,0,0.3)",zIndex:100,minWidth:220,maxHeight:260,overflowY:"auto",overscrollBehavior:"contain",scrollbarWidth:"thin",padding:6},role:"listbox",onMouseDown:se=>se.stopPropagation(),onWheel:se=>{var Ee;try{se.stopPropagation()}catch{}try{se.preventDefault()}catch{}const ge=se.currentTarget;if(ge){const Oe=se.deltaY??((Ee=se.nativeEvent)==null?void 0:Ee.deltaY)??0;ge.scrollTop+=Oe}},onBlur:se=>{setTimeout(()=>{se.currentTarget.contains(document.activeElement)||I(null)},0)},children:(()=>{const se={};return he.forEach((ge,Ee)=>{const Oe=ge.studyId||ge.studyInstanceUID||"Unspecified";se[Oe]||(se[Oe]=[]),se[Oe].push({idx:Ee,stack:ge})}),Object.keys(se).map(ge=>We.jsxs("div",{style:{marginBottom:6},children:[We.jsx("div",{style:{fontSize:12,color:"#aaa",padding:"4px 8px",fontWeight:700},children:ge==="Unspecified"?"Unspecified study":`Study: ${ge}`}),We.jsx("div",{children:se[ge].map(({idx:Ee,stack:Oe})=>{const Ne=Array.isArray(Oe.imageIds)?Oe.imageIds:[],Fe=Oe&&(Oe.name||Oe.caseId)?Oe.name||`Case: ${Oe.caseId}`:`Stack ${Ee+1}`,dt=Ne.length,pt=!Array.isArray(Ne)||dt===0;return We.jsxs("button",{role:"option","aria-selected":!1,title:pt?"Invalid stack descriptor":`${Fe} — ${dt} image${dt===1?"":"s"}${Oe!=null&&Oe.caseId?` — case ${Oe.caseId}`:""}`,style:{display:"flex",flexDirection:"column",alignItems:"flex-start",width:"100%",padding:"8px 12px",background:"transparent",color:"#fff",border:"none",textAlign:"left",cursor:pt?"not-allowed":"pointer"},onClick:Et=>{if(Et.stopPropagation(),pt){console.warn(`Attempted to select invalid stack at index ${Ee}`,Oe);return}Pt(X,Ee).catch(Rt=>console.error("Failed to load stack:",Rt)),I(null)},children:[We.jsx("div",{style:{fontWeight:"600",fontSize:13},children:Fe}),We.jsxs("div",{style:{fontSize:12,opacity:.7},children:[dt," image",dt===1?"":"s",Oe!=null&&Oe.caseId?` • case ${Oe.caseId}`:""]})]},Ee)})})]},ge))})()})]})})]},X))}return We.jsxs("div",{ref:a,style:{position:"relative",inset:0,width:"100%",height:"100%",boxSizing:"border-box",background:"#222",padding:"12px",overflow:"hidden"},children:[Ae&&We.jsx("div",{style:{position:"absolute",zIndex:3e3,top:0,left:0,width:"100%",height:"100%",background:"rgba(0,0,0,0.7)",color:"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:28,fontWeight:"bold",letterSpacing:1},children:Ae==="annotations"?"Loading Annotations...":Ae==="displayset"?"Loading Display Set...":"Loading Viewer State..."}),gt&&We.jsxs("div",{style:{position:"fixed",top:12,left:12,right:12,zIndex:1e4,background:"#fff3cd",color:"#856404",border:"1px solid #ffeeba",padding:"10px 14px",borderRadius:6,display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[We.jsxs("div",{style:{flex:1,fontSize:14},children:[We.jsx("strong",{children:"Graphics error:"})," The viewer encountered a WebGL/graphics error and may be unstable. Please reload the page.",xt?We.jsx("div",{style:{marginTop:6,fontSize:12,color:"#6b4f00"},children:xt}):null]}),We.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[We.jsx("button",{onClick:()=>window.location.reload(),style:{padding:"6px 10px"},children:"Reload"}),We.jsx("button",{onClick:()=>ht(!1),style:{padding:"6px 10px"},children:"Dismiss"})]})]}),!h&&We.jsx("button",{onClick:()=>g(!0),"aria-pressed":!1,title:"Open stacks",style:{position:"absolute",right:8,top:76,zIndex:120,width:24,height:42,background:"#1976d2",color:"#fff",border:"none",borderRadius:5,cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 2px 8px rgba(0,0,0,0.3)",pointerEvents:"auto"},children:"▶"}),We.jsxs("div",{children:[We.jsx("button",{style:{position:"absolute",top:"50%",transform:"translateY(-50%)",left:Ra,zIndex:200,width:S,height:S,background:"#222",color:"#fff",border:"none",borderRadius:"50%",fontWeight:"bold",cursor:"pointer",fontSize:"22px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",transition:"left 0.25s cubic-bezier(.4,2,.6,1), background 0.2s"},onClick:()=>oo(X=>!X),"aria-label":"Open menu",children:"☰"}),io&&We.jsx("div",{style:{position:"absolute",top:0,left:0,width:C,height:"100%",background:"#222",color:"#fff",zIndex:199,boxShadow:"2px 0 12px rgba(0,0,0,0.3)",flexDirection:"column",padding:"24px 16px 16px 16px",display:"flex",overflow:"hidden"},children:We.jsxs("div",{style:{flex:1,minHeight:0,overflowY:"auto",display:"flex",flexDirection:"column"},children:[We.jsxs("div",{style:{fontWeight:"bold",fontSize:18,marginBottom:24},children:["Menu",We.jsx("button",{style:{float:"right",background:"transparent",color:"#fff",border:"none",fontSize:"22px",cursor:"pointer"},onClick:()=>oo(!1),"aria-label":"Close menu",children:"×"})]}),We.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",marginBottom:8},children:[We.jsxs("label",{style:{fontSize:13},children:[We.jsx("input",{type:"radio",name:"folderLoadMode",value:"add",checked:Pi==="add",onChange:()=>di("add")})," Add (append)"]}),We.jsxs("label",{style:{fontSize:13},children:[We.jsx("input",{type:"radio",name:"folderLoadMode",value:"replace",checked:Pi==="replace",onChange:()=>di("replace")})," Replace all"]})]}),We.jsx("button",{style:{padding:"10px 18px",background:"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:Cc,children:"Load DICOM Folder"}),We.jsx("input",{ref:Ho,type:"file",style:{display:"none"},multiple:!0,onChange:Rr}),We.jsx("input",{ref:hi,type:"file",style:{display:"none"},multiple:!0,onChange:Rr,accept:".dcm,application/dicom"}),We.jsxs("div",{style:{marginBottom:"18px",display:"flex",alignItems:"center",gap:"8px"},children:[We.jsx("input",{type:"checkbox",id:"orderBySliceLocation",checked:yi,onChange:X=>ts(X.target.checked),style:{accentColor:"#666"}}),We.jsx("label",{htmlFor:"orderBySliceLocation",style:{fontSize:"15px",cursor:"pointer"},children:"Order by Slice Location"})]}),We.jsx("button",{style:{padding:"10px 18px",background:"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:Ds,children:"Show DICOM Metadata"}),We.jsxs("button",{style:{padding:"10px 18px",background:Kt?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>en(X=>!X),children:[Kt?"Disable":"Enable"," Cross Reference Lines"]}),We.jsxs("button",{style:{padding:"10px 18px",background:Dn?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>Xn(X=>!X),children:[Dn?"Disable":"Enable"," Reference Lines"]}),We.jsx("button",{onClick:Xe,style:{margin:8,padding:8},children:"Sort All Viewports by Slice Location"}),We.jsx("button",{style:{padding:"10px 18px",background:zo?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>$o(X=>!X),children:zo?"Disable Alt Key for Reference Cursors (Shift always works)":"Enable Alt Key for Reference Cursors (Shift always works)"}),We.jsxs("button",{style:{padding:"10px 18px",background:F?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>j(X=>!X),children:[F?"Hide":"Show"," Annotation Navigation"]}),We.jsxs("button",{style:{padding:"10px 18px",background:te?"#1976d2":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"15px",marginBottom:"18px",width:"100%"},onClick:()=>ie(X=>!X),children:[te?"Disable":"Enable"," Volume Diagnostics"]})]})})]}),We.jsxs("div",{ref:_,className:"grid-menu-hover-container",style:{position:"absolute",top:qt||P?8:-18,left:"50%",transform:"translateX(-50%)",zIndex:100,display:"flex",flexDirection:"row",alignItems:"flex-start",gap:8,width:"auto",pointerEvents:"auto",transition:"top 180ms ease",paddingTop:28,marginTop:-28,paddingBottom:12},onMouseEnter:()=>O(!0),onMouseLeave:()=>{qt||O(!1)},children:[We.jsxs("button",{style:{height:40,padding:"6px 12px 6px 10px",background:"#222",color:"#fff",border:"none",borderRadius:"0 0 4px 4px",fontWeight:"bold",cursor:"pointer",fontSize:"14px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",display:"inline-flex",alignItems:"center",gap:8},title:"Toggle viewer fullscreen",onFocus:()=>O(!0),onClick:()=>{O(!0),Na()},children:[We.jsx("span",{style:{fontSize:16,lineHeight:1},children:"⛶"}),We.jsx("span",{children:"Fullscreen"})]}),We.jsxs("div",{style:{position:"relative",display:"flex",flexDirection:"column",alignItems:"stretch"},children:[We.jsxs("button",{className:"grid-menu-btn",style:{height:40,padding:"6px 14px 6px 10px",background:"#222",color:"#fff",border:"none",borderRadius:"0 0 4px 4px",fontWeight:"bold",cursor:"pointer",fontSize:"14px",boxShadow:"0 2px 8px rgba(0,0,0,0.2)",display:"inline-flex",alignItems:"center",gap:10,justifyContent:"space-between",minWidth:136},onFocus:()=>O(!0),onClick:()=>{O(!0),In(X=>!X)},tabIndex:0,children:[We.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:8},children:[We.jsx("span",{style:{display:"grid",gridTemplateColumns:`repeat(${Dt.cols}, 5px)`,gridTemplateRows:`repeat(${Dt.rows}, 5px)`,gap:2,padding:1},children:Array.from({length:Dt.rows*Dt.cols}).map((X,pe)=>We.jsx("span",{style:{width:5,height:5,borderRadius:1,background:"#90caf9",display:"block"}},pe))}),We.jsxs("span",{children:[Dt.rows,"x",Dt.cols]})]}),We.jsx("span",{style:{opacity:.8},children:qt?"▲":"▼"})]}),qt&&We.jsx("div",{style:{position:"absolute",top:"calc(100% + 8px)",right:0,background:"#222",color:"#fff",borderRadius:"6px",boxShadow:"0 2px 12px rgba(0,0,0,0.4)",padding:"12px",display:"grid",gridTemplateColumns:"repeat(3, minmax(68px, 1fr))",gap:"8px",zIndex:200,pointerEvents:"auto"},onMouseDown:X=>X.stopPropagation(),children:_r.map(X=>We.jsxs("button",{style:{minWidth:"68px",height:"54px",background:X.rows===Dt.rows&&X.cols===Dt.cols?"#444":"#333",color:"#fff",border:"none",borderRadius:"4px",fontWeight:"bold",cursor:"pointer",fontSize:"13px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:6},onClick:()=>{Ko(),li({rows:X.rows,cols:X.cols}),In(!1),O(!1)},children:[We.jsx("span",{style:{display:"grid",gridTemplateColumns:`repeat(${X.cols}, 6px)`,gridTemplateRows:`repeat(${X.rows}, 6px)`,gap:2},children:Array.from({length:X.rows*X.cols}).map((pe,De)=>We.jsx("span",{style:{width:6,height:6,borderRadius:1,background:"#90caf9",display:"block"}},De))}),We.jsxs("span",{children:[X.rows,"x",X.cols]})]},`${X.rows}x${X.cols}`))})]})]}),We.jsxs("div",{style:{display:"flex",flexDirection:"row",height:"calc(100% - 48px)",gap:8},children:[We.jsxs("div",{style:{flex:1,display:"grid",margin:3,gridTemplateRows:`repeat(${Dt.rows}, 1fr)`,gridTemplateColumns:`repeat(${Dt.cols}, 1fr)`,gap:"5px",minHeight:0,minWidth:0,zIndex:1,position:"relative"},children:[Ls,We.jsx("button",{style:{position:"absolute",top:8,right:8,zIndex:2600,padding:"6px 12px",background:"#222",color:"#fff",border:"none",borderRadius:"4px",cursor:"pointer",opacity:.85,userSelect:"none"},onClick:()=>d(!0),children:"Settings"})]}),We.jsxs("div",{style:{width:h?p:0,transition:"width 220ms ease",display:"flex",flexDirection:"column",pointerEvents:h?"auto":"none",overflow:"hidden",position:"relative"},children:[h&&We.jsx("div",{onMouseDown:fa,title:"Resize stacks panel",style:{position:"absolute",left:0,top:0,width:8,height:"100%",cursor:"col-resize",zIndex:2800,background:"linear-gradient(to right, rgba(100,181,246,0.25), rgba(100,181,246,0))"}}),We.jsx("div",{style:{pointerEvents:"auto",width:"100%",height:"100%"},children:We.jsxs("div",{style:{height:"100%",width:"100%",background:"#1f2428",color:"#fff",boxShadow:"0 2px 14px rgba(0,0,0,0.45)",borderLeft:"1px solid #2f3336",transform:"translateX(0)",transition:"transform 220ms ease",display:"flex",flexDirection:"column",overflow:"hidden"},children:[We.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 12px",borderBottom:"1px solid #2b2f31"},children:[We.jsx("div",{style:{fontWeight:700},children:"Stacks"}),We.jsxs("div",{style:{fontSize:12,color:"#9bb4c8"},children:["Active VP: ",ve!==null?ve+1:"-"]}),We.jsx("div",{style:{display:"flex",gap:8,alignItems:"center"},children:We.jsx("button",{title:"Close",onClick:()=>{g(!1)},style:{background:"transparent",color:"#fff",border:"none",cursor:"pointer",fontSize:16},children:"×"})})]}),We.jsx("div",{style:{overflowY:"auto",padding:8,flex:1},children:he.length===0?We.jsx("div",{style:{color:"#999",padding:12},children:"No stacks available"}):We.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:he.map((X,pe)=>{const De=Array.isArray(X.imageIds)?X.imageIds:[],xe=X.name||(X.caseId?`Case: ${X.caseId}`:`Stack ${pe+1}`),se=De.length,ge=!Array.isArray(De)||se===0,Ee=ne.includes(pe),Oe=ve!==null&&ne[ve]===pe,Ne=Math.floor(De.length/2),Fe=De[Ne]||De[0],dt=Fe?Uf(Fe):null;return We.jsxs("div",{draggable:!ge,onDragStart:pt=>{ge||(be(pe),M(null),pt.dataTransfer.setData("text/stack-idx",String(pe)),pt.dataTransfer.effectAllowed="copy")},onDragEnd:()=>{be(null),M(null)},onClick:()=>{if(ge)return;Pt(ve??0,pe)},style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"8px 10px",background:Oe?"#0d47a1":Ee?"#1976d2":"transparent",color:Ee?"#fff":"#ddd",border:Oe?"1px solid #64b5f6":"1px solid transparent",borderRadius:6,cursor:ge?"not-allowed":"pointer"},children:[We.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(()=>{const pt=Se[pe],Et=pt&&pt!=="BROKEN"?pt:null,Rt=Et||dt||null;return ae("thumbnail-render-source",{idx:pe,label:xe,generated:pt?_i(pt,120):null,generatedValid:Et?_i(Et,120):null,fallback:dt?_i(dt,180):null,chosenImage:Fe?_i(Fe,180):null,src:Rt?_i(Rt,180):null,requested:!!qe.current[pe]}),Rt?We.jsx("img",{"data-thumb-stack":pe,src:Rt,alt:xe,style:{width:56,height:56,objectFit:"cover",borderRadius:4,background:"#111"},onLoad:it=>{const st=it.currentTarget;ae("thumbnail-img-load",{idx:pe,label:xe,src:_i(Rt,180),naturalWidth:st.naturalWidth,naturalHeight:st.naturalHeight,clientWidth:st.clientWidth,clientHeight:st.clientHeight})},onError:()=>{console.warn("Thumbnail failed to load for stack",pe,Rt);const it=!!Et,st=!it&&QEe(Rt);if(ae("thumbnail-img-error",{idx:pe,label:xe,src:_i(Rt,180),usedGeneratedImage:it,likelyDicomFallback:st,requested:!!qe.current[pe],chosenImage:Fe?_i(Fe,180):null}),it){we(pe,"BROKEN");return}qe.current[pe]||(ae("thumbnail-img-error-trigger-generate",{idx:pe,chosenImage:Fe?_i(Fe,180):null}),yt(pe,Fe))}}):We.jsx("div",{style:{width:56,height:56,borderRadius:4,background:"#111",display:"flex",alignItems:"center",justifyContent:"center",color:"#777"},children:"No Img"})})(),We.jsxs("div",{style:{display:"flex",flexDirection:"column"},children:[We.jsx("div",{style:{fontWeight:600},children:xe}),We.jsxs("div",{style:{fontSize:12,opacity:.7},children:[se," img",se===1?"":"s"]})]})]}),We.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"flex-end",gap:4},children:[We.jsx("div",{style:{fontSize:12,opacity:.8},children:X.studyId||""}),Oe&&We.jsx("div",{style:{fontSize:11,color:"#bbdefb",fontWeight:700},children:"ACTIVE"})]})]},pe)})})})]})})]})]}),u&&We.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"rgba(0,0,0,0.4)",zIndex:1e3,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>d(!1),children:We.jsxs("div",{style:{background:"#222",color:"#fff",borderRadius:"8px",minWidth:"320px",minHeight:"180px",padding:"24px",boxShadow:"0 4px 24px rgba(0,0,0,0.4)",position:"relative"},onClick:X=>X.stopPropagation(),children:[We.jsx("div",{style:{fontSize:"20px",marginBottom:"16px"},children:"Settings"}),We.jsxs("div",{style:{marginBottom:"24px"},children:[We.jsx("div",{style:{marginBottom:12,fontWeight:"bold"},children:"Mouse Button Tool Bindings"}),H7.map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," Button:"]}),We.jsx("select",{value:wr[X.value],onChange:pe=>ca(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))})]},X.value)),We.jsxs("div",{style:{margin:"12px 0"},children:[We.jsxs("button",{style:{background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 12px",cursor:"pointer",fontSize:"14px",marginBottom:"8px"},onClick:()=>Nn(X=>!X),children:[fn?"Hide":"Show"," Advanced Mouse Bindings"]}),fn&&We.jsx("div",{style:{marginTop:8},children:Qv.slice(3).map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label,":"]}),We.jsxs("select",{value:wr[X.value]||"",onChange:pe=>ca(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value))})]}),We.jsx("div",{style:{margin:"18px 0 8px 0",fontWeight:"bold"},children:"Ctrl + Mouse Button Tool Bindings"}),H7.map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," + Ctrl:"]}),We.jsxs("select",{value:Gi[X.value]||"",onChange:pe=>Wi(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value+"_ctrl")),We.jsxs("div",{style:{margin:"12px 0"},children:[We.jsxs("button",{style:{background:"#333",color:"#fff",border:"none",borderRadius:"4px",padding:"4px 12px",cursor:"pointer",fontSize:"14px",marginBottom:"8px"},onClick:()=>qr(X=>!X),children:[go?"Hide":"Show"," Advanced Ctrl + Mouse Bindings"]}),go&&We.jsx("div",{style:{marginTop:8},children:Qv.slice(3).map(X=>We.jsxs("div",{style:{marginBottom:10},children:[We.jsxs("label",{style:{marginRight:8},children:[X.label," + Ctrl:"]}),We.jsxs("select",{value:Gi[X.value]||"",onChange:pe=>Wi(De=>({...De,[X.value]:pe.target.value})),style:{background:"#333",color:"#fff",border:"1px solid #444",borderRadius:"4px",padding:"4px 8px",fontSize:"14px"},children:[We.jsx("option",{value:"",children:"(None)"}),c0.map(pe=>We.jsx("option",{value:pe.value,title:pe.label,children:`${pe.icon?`${pe.icon} `:""}${pe.label}`},pe.value))]})]},X.value+"_ctrl"))})]})]}),We.jsx("button",{style:{position:"absolute",top:12,right:12,background:"transparent",color:"#fff",border:"none",fontSize:"20px",cursor:"pointer"},onClick:()=>d(!1),"aria-label":"Close",children:"×"})]})}),Eo&&We.jsx("div",{style:{position:"fixed",top:0,left:0,width:"100vw",height:"100vh",background:"rgba(0,0,0,0.5)",zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center"},onClick:()=>Pa(!1),children:We.jsxs("div",{style:{background:"#222",color:"#fff",borderRadius:"8px",minWidth:"320px",maxWidth:"80vw",maxHeight:"80vh",padding:"24px",boxShadow:"0 4px 24px rgba(0,0,0,0.4)",position:"relative",overflow:"auto"},onClick:X=>X.stopPropagation(),children:[We.jsx("div",{style:{fontSize:"20px",marginBottom:"16px"},children:"DICOM Metadata"}),Si,We.jsx("button",{style:{position:"absolute",top:12,right:12,background:"transparent",color:"#fff",border:"none",fontSize:"20px",cursor:"pointer"},onClick:()=>Pa(!1),"aria-label":"Close",children:"×"})]})})]})}function e8e(t){console.log("Setting up tools...",t),ki(Qu),ki(Oh),ki(Ld),ki(Gl),ki(Mh),ki(gf),ki(au),ki(pf),ki(ou),ki(Ad),ki(hf),ki(hl),ki(Ph),ki(Ba),ki(jc),ki(pd),ki(Ah);let e=ni(t);return e||(e=dF(t),e.addTool(Oh.toolName),e.addTool(Qu.toolName),e.addTool(Gl.toolName),e.addTool(Ld.toolName,{loop:!1}),e.addTool(Mh.toolName),e.addTool(gf.toolName),e.addTool(Ah.toolName,{getTextCallback:()=>""}),e.addTool(pf.toolName),e.addTool(au.toolName,{statsCalculator:()=>null}),e.addTool(ou.toolName,{calculateStats:!1,getTextCallback:()=>""}),e.addTool(Ad.toolName,{getTextCallback:()=>""}),e.addTool(hf.toolName,{calculateStats:!1}),e.addTool(hl.toolName,{}),e.addTool(Ph.toolName,{}),e.addTool(pd.toolName),e.addTool(Ba.toolName)),e}function q7(t,e,r,n){if(!r.length||!e.length)return null;const i=r.map(o=>e.findIndex(a=>a===o.metadata.referencedImageId)).filter(o=>o!==-1).sort((o,a)=>o-a);if(!i.length)return null;if(n===1){for(let o of i)if(o>t)return o;return i[0]}else{for(let o=i.length-1;o>=0;o--)if(i[o]`wadouri:/test_images/stack2/IMG${r+1}.dcm`),Array.from({length:25},(e,r)=>`wadouri:/test_images/stack5/IMG${r+1}.dcm`),Array.from({length:26},(e,r)=>`wadouri:/test_images/stack3/IMG${r+1}.dcm`)]}const n8e=t=>{const e=t.trim();return!e||e.startsWith("external:")||e.startsWith("wadors:")?e:e.startsWith("wadouri:")?`wadouri:${e.slice(8).replace(/^:+/,"")}`:`wadouri:${e.replace(/^:+/,"")}`},op=t=>t.map(n8e),X7=t=>t?{imageIds:op(t)}:{imageIds:[]};function d$(){document.querySelectorAll(".dicom-viewer-test-root").forEach(r=>{const n=r.id||"",i=()=>t8e();j3(r).render(We.jsx(K7,{container_id:n,imageStacks:i}))}),document.querySelectorAll(".dicom-viewer-root").forEach(r=>{const n=r.id||"",i=`[DV3D Mount][${n||"default"}]`;let o;const a=r.getAttribute("data-empty")==="true",s=r.getAttribute("data-named-stacks"),c=r.getAttribute("data-images");try{console.debug(i,"container-attrs",{path:window.location.pathname,isEmpty:a,hasDataNamedStacks:!!s,hasDataImages:!!c,dataNamedLength:s?s.length:0,dataImagesLength:c?c.length:0,autoCacheStack:r.getAttribute("data-auto-cache-stack")})}catch{}const l=g=>{if(!g)return[];if(Array.isArray(g)&&g.length>0&&typeof g[0]=="string")return[X7(g)];if(Array.isArray(g)){const p=[];return g.forEach((v,y)=>{if(v&&typeof v=="object"&&Array.isArray(v.stacks)){const m=v.caseId||v.caseUID||v.case||void 0,w=v.studyId||v.studyUID||v.studyInstanceUID||void 0;v.stacks.forEach((x,C)=>{let S=[];if(Array.isArray(x)?S=x:Array.isArray(x.imageIds)?S=x.imageIds:Array.isArray(x.i)&&(S=x.i),!Array.isArray(S)||S.length===0||!S.every(T=>typeof T=="string")){console.warn(`data-named-stacks: skipping invalid nested stack at parsed[${y}].stacks[${C}]`,x);return}p.push({imageIds:op(S),name:x.name||x.label||void 0,caseId:m,studyId:x.studyId||w})});return}if(v&&typeof v=="object"&&(Array.isArray(v.imageIds)||Array.isArray(v.i))){const m=Array.isArray(v.imageIds)?v.imageIds:v.i;if(!Array.isArray(m)||m.length===0||!m.every(w=>typeof w=="string")){console.warn(`data-named-stacks: skipping invalid stack object at parsed[${y}]`,v);return}p.push({imageIds:op(m),name:v.name||v.label||void 0,caseId:v.caseId||v.caseUID||void 0,studyId:v.studyId||v.studyUID||v.studyInstanceUID||void 0});return}if(Array.isArray(v)&&v.length>0&&typeof v[0]=="string"){p.push(X7(v));return}console.warn(`data-named-stacks: unknown or invalid entry at parsed[${y}] — skipping`,v)}),p}return[]};if(a)o=()=>Promise.resolve([]);else if(s){let g;try{g=JSON.parse(s)}catch(v){console.error("Invalid data-named-stacks JSON:",v),g=[]}const p=l(g);try{console.debug(i,"parsed-data-named-stacks",{descriptorCount:p.length,summary:p.map((v,y)=>{const m=Array.isArray(v.imageIds)?v.imageIds:[],w=m[Math.floor(m.length/2)]||m[0]||"";return{idx:y,name:v.name||null,caseId:v.caseId||null,studyId:v.studyId||null,imageCount:m.length,sampleImageId:w.length>180?`${w.slice(0,180)}...(${w.length} chars)`:w}})})}catch{}o=()=>Promise.resolve(p)}else if(c){let g;try{g=JSON.parse(c)}catch(p){console.error("Invalid data-images JSON:",p),g=[]}try{console.debug(i,"parsed-data-images",{topLevelIsArray:Array.isArray(g),topLevelLength:Array.isArray(g)?g.length:0})}catch{}Array.isArray(g)&&g.length>0&&typeof g[0]=="string"?o=()=>Promise.resolve([op(g)]):Array.isArray(g)?o=()=>Promise.resolve(g.map(p=>Array.isArray(p)?op(p):[])):o=()=>Promise.resolve([[]])}else o=()=>Promise.resolve([]);const f=r.getAttribute("data-auto-cache-stack"),u=f==="true"||f==="1",d=r.getAttribute("data-annotationjson"),h=r.getAttribute("data-viewerstate");console.log("Mounting DICOM viewer:"),console.log(h,d,u);try{console.debug(i,"mount-props",{hasViewerState:!!h,viewerStateLength:h?h.length:0,hasAnnotationJson:!!d,annotationJsonLength:d?d.length:0,autoCacheStack:u})}catch{}j3(r).render(We.jsx(K7,{container_id:n,imageStacks:o,autoCacheStack:u,annotationJson:d||void 0,viewerState:h||void 0}))})}d$();window.mountDicomViewers=d$;