@cornerstonejs/tools 1.70.3 → 1.70.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/umd/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Filters/General/AppendPolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):"function"==typeof define&&define.amd?define(["gl-matrix","@cornerstonejs/core","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Common/Core/CellArray","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Filters/General/AppendPolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget","@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor","@kitware/vtk.js/Rendering/Core/AxesActor","@kitware/vtk.js/IO/XML/XMLPolyDataReader"],t):"object"==typeof exports?exports.cornerstoneTools3D=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Filters/General/AppendPolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):e.cornerstoneTools3D=t(e.window,e.cornerstone3D,e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Common/Core/CellArray"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Filters/General/AppendPolyData"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"],e["@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"],e["@kitware/vtk.js/Rendering/Core/AxesActor"],e["@kitware/vtk.js/IO/XML/XMLPolyDataReader"])}(self,((e,t,n,o,i,a,r,s,l,c,d,h,u,g,v,m,p,f,I)=>(()=>{var w={907:(e,t,n)=>{e=n.nmd(e);var o="__lodash_hash_undefined__",i=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",c="[object GeneratorFunction]",d="[object Map]",h="[object Number]",u="[object Object]",g="[object Promise]",v="[object RegExp]",m="[object Set]",p="[object String]",f="[object Symbol]",I="[object WeakMap]",w="[object ArrayBuffer]",E="[object DataView]",C="[object Float32Array]",_="[object Float64Array]",b="[object Int8Array]",D="[object Int16Array]",T="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",M="[object Uint16Array]",x="[object Uint32Array]",O=/\w*$/,P=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[w]=R[E]=R[r]=R[s]=R[C]=R[_]=R[b]=R[D]=R[T]=R[d]=R[h]=R[u]=R[v]=R[m]=R[p]=R[f]=R[S]=R[y]=R[M]=R[x]=!0,R["[object Error]"]=R[l]=R[I]=!1;var N="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,L="object"==typeof self&&self&&self.Object===Object&&self,k=N||L||Function("return this")(),U=t&&!t.nodeType&&t,V=U&&e&&!e.nodeType&&e,W=V&&V.exports===U;function H(e,t){return e.set(t[0],t[1]),e}function B(e,t){return e.add(t),e}function F(e,t,n,o){var i=-1,a=e?e.length:0;for(o&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function G(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function q(e){var t=-1,n=Array(e.size);return e.forEach((function(e,o){n[++t]=[o,e]})),n}function j(e,t){return function(n){return e(t(n))}}function z(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}var K,Y=Array.prototype,X=Function.prototype,J=Object.prototype,Z=k["__core-js_shared__"],$=(K=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+K:"",Q=X.toString,ee=J.hasOwnProperty,te=J.toString,ne=RegExp("^"+Q.call(ee).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),oe=W?k.Buffer:void 0,ie=k.Symbol,ae=k.Uint8Array,re=j(Object.getPrototypeOf,Object),se=Object.create,le=J.propertyIsEnumerable,ce=Y.splice,de=Object.getOwnPropertySymbols,he=oe?oe.isBuffer:void 0,ue=j(Object.keys,Object),ge=ke(k,"DataView"),ve=ke(k,"Map"),me=ke(k,"Promise"),pe=ke(k,"Set"),fe=ke(k,"WeakMap"),Ie=ke(Object,"create"),we=Be(ge),Ee=Be(ve),Ce=Be(me),_e=Be(pe),be=Be(fe),De=ie?ie.prototype:void 0,Te=De?De.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function Me(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function xe(e){this.__data__=new ye(e)}function Oe(e,t,n){var o=e[t];ee.call(e,t)&&Fe(o,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Fe(e[n][0],t))return n;return-1}function Ae(e,t,n,o,i,g,I){var P;if(o&&(P=g?o(e,i,g,I):o(e)),void 0!==P)return P;if(!Ke(e))return e;var A=Ge(e);if(A){if(P=function(e){var t=e.length,n=e.constructor(t);return t&&"string"==typeof e[0]&&ee.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!t)return function(e,t){var n=-1,o=e.length;for(t||(t=Array(o));++n<o;)t[n]=e[n];return t}(e,P)}else{var N=Ve(e),L=N==l||N==c;if(je(e))return function(e,t){if(t)return e.slice();var n=new e.constructor(e.length);return e.copy(n),n}(e,t);if(N==u||N==a||L&&!g){if(G(e))return g?e:{};if(P=function(e){return"function"!=typeof e.constructor||He(e)?{}:Ke(t=re(e))?se(t):{};var t}(L?{}:e),!t)return function(e,t){return Ne(e,Ue(e),t)}(e,function(e,t){return e&&Ne(t,Ye(t),e)}(P,e))}else{if(!R[N])return g?e:{};P=function(e,t,n,o){var i,a=e.constructor;switch(t){case w:return Re(e);case r:case s:return new a(+e);case E:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,o);case C:case _:case b:case D:case T:case S:case y:case M:case x:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,o);case d:return function(e,t,n){return F(t?n(q(e),!0):q(e),H,new e.constructor)}(e,o,n);case h:case p:return new a(e);case v:return function(e){var t=new e.constructor(e.source,O.exec(e));return t.lastIndex=e.lastIndex,t}(e);case m:return function(e,t,n){return F(t?n(z(e),!0):z(e),B,new e.constructor)}(e,o,n);case f:return i=e,Te?Object(Te.call(i)):{}}}(e,N,Ae,t)}}I||(I=new xe);var k=I.get(e);if(k)return k;if(I.set(e,P),!A)var U=n?function(e){return function(e,t,n){var o=t(e);return Ge(e)?o:function(e,t){for(var n=-1,o=t.length,i=e.length;++n<o;)e[i+n]=t[n];return e}(o,n(e))}(e,Ye,Ue)}(e):Ye(e);return function(e,t){for(var n=-1,o=e?e.length:0;++n<o&&!1!==t(e[n],n););}(U||e,(function(i,a){U&&(i=e[a=i]),Oe(P,a,Ae(i,t,n,o,a,e,I))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Ne(e,t,n,o){n||(n={});for(var i=-1,a=t.length;++i<a;){var r=t[i],s=o?o(n[r],e[r],r,n,e):void 0;Oe(n,r,void 0===s?e[r]:s)}return n}function Le(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function ke(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!Ke(e)||(t=e,$&&$ in t))&&(ze(e)||G(e)?ne:P).test(Be(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=Ie?Ie(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(Ie){var n=t[e];return n===o?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return Ie?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=Ie&&void 0===t?o:t,this},ye.prototype.clear=function(){this.__data__=[]},ye.prototype.delete=function(e){var t=this.__data__,n=Pe(t,e);return!(n<0||(n==t.length-1?t.pop():ce.call(t,n,1),0))},ye.prototype.get=function(e){var t=this.__data__,n=Pe(t,e);return n<0?void 0:t[n][1]},ye.prototype.has=function(e){return Pe(this.__data__,e)>-1},ye.prototype.set=function(e,t){var n=this.__data__,o=Pe(n,e);return o<0?n.push([e,t]):n[o][1]=t,this},Me.prototype.clear=function(){this.__data__={hash:new Se,map:new(ve||ye),string:new Se}},Me.prototype.delete=function(e){return Le(this,e).delete(e)},Me.prototype.get=function(e){return Le(this,e).get(e)},Me.prototype.has=function(e){return Le(this,e).has(e)},Me.prototype.set=function(e,t){return Le(this,e).set(e,t),this},xe.prototype.clear=function(){this.__data__=new ye},xe.prototype.delete=function(e){return this.__data__.delete(e)},xe.prototype.get=function(e){return this.__data__.get(e)},xe.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var o=n.__data__;if(!ve||o.length<199)return o.push([e,t]),this;n=this.__data__=new Me(o)}return n.set(e,t),this};var Ue=de?j(de,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?i:t)&&("number"==typeof e||A.test(e))&&e>-1&&e%1==0&&e<t}function He(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||J)}function Be(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Fe(e,t){return e===t||e!=e&&t!=t}(ge&&Ve(new ge(new ArrayBuffer(1)))!=E||ve&&Ve(new ve)!=d||me&&Ve(me.resolve())!=g||pe&&Ve(new pe)!=m||fe&&Ve(new fe)!=I)&&(Ve=function(e){var t=te.call(e),n=t==u?e.constructor:void 0,o=n?Be(n):void 0;if(o)switch(o){case we:return E;case Ee:return d;case Ce:return g;case _e:return m;case be:return I}return t});var Ge=Array.isArray;function qe(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=i}(e.length)&&!ze(e)}var je=he||function(){return!1};function ze(e){var t=Ke(e)?te.call(e):"";return t==l||t==c}function Ke(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ye(e){return qe(e)?function(e,t){var n=Ge(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&qe(e)}(e)&&ee.call(e,"callee")&&(!le.call(e,"callee")||te.call(e)==a)}(e)?function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}(e.length,String):[],o=n.length,i=!!o;for(var r in e)!t&&!ee.call(e,r)||i&&("length"==r||We(r,o))||n.push(r);return n}(e):function(e){if(!He(e))return ue(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Ae(e,!0,!0)}},485:(e,t,n)=>{var o,i="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",c=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,d=/^\w*$/,h=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,g=/\\(\\)?/g,v=/^\[object .+?Constructor\]$/,m="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,f=m||p||Function("return this")(),I=Array.prototype,w=Function.prototype,E=Object.prototype,C=f["__core-js_shared__"],_=(o=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"",b=w.toString,D=E.hasOwnProperty,T=E.toString,S=RegExp("^"+b.call(D).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,M=I.splice,x=V(f,"Map"),O=V(Object,"create"),P=y?y.prototype:void 0,A=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function N(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function L(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function k(e,t){for(var n,o,i=e.length;i--;)if((n=e[i][0])===(o=t)||n!=n&&o!=o)return i;return-1}function U(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function V(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!G(e)||_&&_ in e)return!1;var t=function(e){var t=G(e)?T.call(e):"";return t==r||t==s}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?S:v;return t.test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}R.prototype.clear=function(){this.__data__=O?O(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(O){var n=t[e];return n===i?void 0:n}return D.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return O?void 0!==t[e]:D.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=O&&void 0===t?i:t,this},N.prototype.clear=function(){this.__data__=[]},N.prototype.delete=function(e){var t=this.__data__,n=k(t,e);return!(n<0||(n==t.length-1?t.pop():M.call(t,n,1),0))},N.prototype.get=function(e){var t=this.__data__,n=k(t,e);return n<0?void 0:t[n][1]},N.prototype.has=function(e){return k(this.__data__,e)>-1},N.prototype.set=function(e,t){var n=this.__data__,o=k(n,e);return o<0?n.push([e,t]):n[o][1]=t,this},L.prototype.clear=function(){this.__data__={hash:new R,map:new(x||N),string:new R}},L.prototype.delete=function(e){return U(this,e).delete(e)},L.prototype.get=function(e){return U(this,e).get(e)},L.prototype.has=function(e){return U(this,e).has(e)},L.prototype.set=function(e,t){return U(this,e).set(e,t),this};var W=B((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return A?A.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(u,(function(e,t,o,i){n.push(o?i.replace(g,"$1"):t||e)})),n}));function H(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function B(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var o=arguments,i=t?t.apply(this,o):o[0],a=n.cache;if(a.has(i))return a.get(i);var r=e.apply(this,o);return n.cache=a.set(i,r),r};return n.cache=new(B.Cache||L),n}B.Cache=L;var F=Array.isArray;function G(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function q(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&T.call(e)==l}e.exports=function(e,t,n){var o=null==e?void 0:function(e,t){var n;t=function(e,t){if(F(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!q(e))||d.test(e)||!c.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:F(n=t)?n:W(n);for(var o=0,i=t.length;null!=e&&o<i;)e=e[H(t[o++])];return o&&o==i?e:void 0}(e,t);return void 0===o?n:o}},396:e=>{"use strict";e.exports=l},785:e=>{"use strict";e.exports=i},807:e=>{"use strict";e.exports=n},847:e=>{"use strict";e.exports=v},348:e=>{"use strict";e.exports=c},283:e=>{"use strict";e.exports=a},441:e=>{"use strict";e.exports=r},70:e=>{"use strict";e.exports=d},127:e=>{"use strict";e.exports=h},543:e=>{"use strict";e.exports=o},614:e=>{"use strict";e.exports=I},518:e=>{"use strict";e.exports=m},474:e=>{"use strict";e.exports=u},744:e=>{"use strict";e.exports=p},424:e=>{"use strict";e.exports=f},795:e=>{"use strict";e.exports=s},610:e=>{"use strict";e.exports=g},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},E={};function C(e){var t=E[e];if(void 0!==t)return t.exports;var n=E[e]={id:e,loaded:!1,exports:{}};return w[e](n,n.exports,C),n.loaded=!0,n.exports}C.m=w,C.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return C.d(t,{a:t}),t},C.d=(e,t)=>{for(var n in t)C.o(t,n)&&!C.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},C.u=e=>e+".index.js",C.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),C.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),C.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},C.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;C.g.importScripts&&(e=C.g.location+"");var t=C.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&!e;)e=n[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),C.p=e})(),C.b=document.baseURI||self.location.href;var _={};return(()=>{"use strict";C.r(_),C.d(_,{AdvancedMagnifyTool:()=>Tw,AngleTool:()=>nw,AnnotationDisplayTool:()=>ed,AnnotationTool:()=>nd,ArrowAnnotateTool:()=>QI,BaseTool:()=>fi,BidirectionalTool:()=>$d,BrushTool:()=>kc,CONSTANTS:()=>j,CircleROIStartEndThresholdTool:()=>qw,CircleROITool:()=>DI,CircleScissorsTool:()=>Ww,CobbAngleTool:()=>rw,CrosshairsTool:()=>oI,DragProbeTool:()=>Mf,EllipticalROITool:()=>II,Enums:()=>te,EraserTool:()=>Aw,KeyImageTool:()=>vw,LengthTool:()=>Yf,LivewireContourSegmentationTool:()=>XI,LivewireContourTool:()=>KI,MIPJumpToClickTool:()=>qf,MagnifyTool:()=>fw,OrientationMarkerTool:()=>tE,OverlayGridTool:()=>cI,PaintFillTool:()=>sE,PanTool:()=>wf,PlanarFreehandContourSegmentationTool:()=>_v,PlanarFreehandROITool:()=>Ev,PlanarRotateTool:()=>Uf,ProbeTool:()=>Tf,RectangleROIStartEndThresholdTool:()=>Md,RectangleROIThresholdTool:()=>Td,RectangleROITool:()=>bd,RectangleScissorsTool:()=>Uw,ReferenceCursors:()=>yw,ReferenceLines:()=>rI,ReferenceLinesTool:()=>rI,ScaleOverlayTool:()=>Ow,SegmentSelectTool:()=>oE,SegmentationDisplayTool:()=>xv,SegmentationIntersectionTool:()=>gI,SphereScissorsTool:()=>Bw,SplineContourSegmentationTool:()=>WI,SplineROITool:()=>UI,StackScrollMouseWheelTool:()=>Wf,StackScrollTool:()=>Nf,Synchronizer:()=>sp,SynchronizerManager:()=>G,ToolGroupManager:()=>q,TrackballRotateTool:()=>Cf,Types:()=>X,UltrasoundDirectionalTool:()=>dw,VideoRedactionTool:()=>cE,VolumeRotateMouseWheelTool:()=>Ff,WindowLevelTool:()=>Of,ZoomTool:()=>Af,addTool:()=>il,annotation:()=>Z,cancelActiveManipulations:()=>ip,cursors:()=>Y,destroy:()=>tp,drawing:()=>K,init:()=>ep,removeTool:()=>al,segmentation:()=>ee,state:()=>Ye,synchronizers:()=>z,utilities:()=>F});var e={};C.r(e),C.d(e,{checkAndDefineIsLockedProperty:()=>me,getAnnotationsLocked:()=>ue,getAnnotationsLockedCount:()=>ve,isAnnotationLocked:()=>ge,setAnnotationLocked:()=>de,unlockAllAnnotations:()=>he});var t={};C.r(t),C.d(t,{deselectAnnotation:()=>be,getAnnotationsSelected:()=>De,getAnnotationsSelectedByToolName:()=>Te,getAnnotationsSelectedCount:()=>ye,isAnnotationSelected:()=>Se,setAnnotationSelected:()=>_e});var n={};C.r(n),C.d(n,{checkAndDefineIsVisibleProperty:()=>Le,isAnnotationVisible:()=>Ne,setAnnotationVisibility:()=>Ae,showAllAnnotations:()=>Re});var o={};C.r(o),C.d(o,{addAnnotation:()=>gt,addChildAnnotation:()=>dt,clearParentAnnotation:()=>ct,getAllAnnotations:()=>lt,getAnnotation:()=>pt,getAnnotationManager:()=>it,getAnnotations:()=>st,getChildAnnotations:()=>ut,getNumberOfAnnotations:()=>vt,getParentAnnotation:()=>ht,invalidateAnnotation:()=>It,removeAllAnnotations:()=>ft,removeAnnotation:()=>mt,resetAnnotationManager:()=>rt,setAnnotationManager:()=>at});var i={};C.r(i),C.d(i,{triggerSegmentationDataModified:()=>Vt,triggerSegmentationModified:()=>Ut,triggerSegmentationRemoved:()=>Nt,triggerSegmentationRepresentationModified:()=>kt,triggerSegmentationRepresentationRemoved:()=>Lt});var a={};C.r(a),C.d(a,{addColorLUT:()=>gn,addSegmentation:()=>Gt,addSegmentationRepresentation:()=>nn,findSegmentationRepresentationByUID:()=>Kt,getAllSegmentationRepresentations:()=>jt,getColorLUT:()=>hn,getDefaultSegmentationStateManager:()=>Ht,getGlobalConfig:()=>on,getNextColorLUTIndex:()=>un,getSegmentSpecificRepresentationConfig:()=>Qt,getSegmentation:()=>Bt,getSegmentationIdRepresentations:()=>zt,getSegmentationRepresentationByUID:()=>rn,getSegmentationRepresentationSpecificConfig:()=>$t,getSegmentationRepresentations:()=>qt,getSegmentations:()=>Ft,getToolGroupIdFromSegmentationRepresentationUID:()=>tn,getToolGroupIdsWithSegmentation:()=>Yt,getToolGroupSpecificConfig:()=>Xt,removeColorLUT:()=>dn,removeSegmentation:()=>sn,removeSegmentationRepresentation:()=>ln,removeSegmentationRepresentations:()=>cn,setGlobalConfig:()=>an,setSegmentSpecificRepresentationConfig:()=>en,setSegmentationRepresentationSpecificConfig:()=>Zt,setToolGroupSpecificConfig:()=>Jt});var r={};C.r(r),C.d(r,{copyPoints:()=>go,copyPointsList:()=>uo,getDeltaDistance:()=>lo,getDeltaDistanceBetweenIPoints:()=>ho,getDeltaPoints:()=>so,getDeltaRotation:()=>co,getMeanPoints:()=>vo,getMeanTouchPoints:()=>mo});var s={};C.r(s),C.d(s,{getSegmentVisibility:()=>mi,getSegmentationVisibility:()=>ui,setSegmentVisibility:()=>vi,setSegmentationVisibility:()=>hi,setSegmentsVisibility:()=>gi});var l={};C.r(l),C.d(l,{addColorLUT:()=>Xi,getColorForSegmentIndex:()=>Zi,setColorForSegmentIndex:()=>$i,setColorLUT:()=>Ji});var c={};C.r(c),C.d(c,{InterpolationManager:()=>yl});var d={};C.r(d),C.d(d,{AnnotationToPointData:()=>ns,acceptAutogeneratedInterpolations:()=>xl,areCoplanarContours:()=>Br,calculatePerimeter:()=>Al,contourFinder:()=>jr,detectContourHoles:()=>Kr,findHandlePolylineIndex:()=>Pl,generateContourSetsFromLabelmap:()=>Zr,getContourHolesDataCanvas:()=>is,getContourHolesDataWorld:()=>os,getDeduplicatedVTKPolyDataPoints:()=>zr,interpolation:()=>c,updateContourPolyline:()=>us});var h={};C.r(h),C.d(h,{hideElementCursor:()=>Dc,initElementCursor:()=>Cc,resetElementCursor:()=>bc,setElementCursor:()=>_c});var u={};C.r(u),C.d(u,{getActiveSegmentation:()=>yc,getActiveSegmentationRepresentation:()=>Sc,setActiveSegmentationRepresentation:()=>Mc});var g={};C.r(g),C.d(g,{getLockedSegments:()=>Pc,isSegmentIndexLocked:()=>xc,setSegmentIndexLocked:()=>Oc});var v={};C.r(v),C.d(v,{getActiveSegmentIndex:()=>Nc,setActiveSegmentIndex:()=>Rc});var m={};C.r(m),C.d(m,{contourAndFindLargestBidirectional:()=>jd,createBidirectionalToolData:()=>zd,createImageIdReferenceMap:()=>ga,createLabelmapVolumeForViewport:()=>Ld,createMergedLabelmapForIndex:()=>Ad,floodFill:()=>Wl,getBrushSizeForToolGroup:()=>Ud,getBrushThresholdForToolGroup:()=>Wd,getBrushToolInstances:()=>Uc,getDefaultRepresentationConfig:()=>Nd,getHoveredContourSegmentationAnnotation:()=>sh,getSegmentAtLabelmapBorder:()=>ah,getSegmentAtWorldPoint:()=>ih,getUniqueSegmentIndices:()=>Rt,invalidateBrushCursor:()=>Ac,isValidRepresentationConfig:()=>Rd,rectangleROIThresholdVolumeByRange:()=>Pd,segmentContourAction:()=>Qd,setBrushSizeForToolGroup:()=>kd,setBrushThresholdForToolGroup:()=>Vd,thresholdSegmentationByRange:()=>Hd,thresholdVolumeByRange:()=>Hc,triggerSegmentationRender:()=>Pv});var p={};C.r(p),C.d(p,{getTextBoxCoordsCanvas:()=>hd});var f={};C.r(f),C.d(f,{distanceToPoint:()=>ch,distanceToPointSquared:()=>lh,intersectAABB:()=>bs});var I={};C.r(I),C.d(I,{BasicStatsCalculator:()=>Id,Calculator:()=>pd});var w={};C.r(w),C.d(w,{getCanvasEllipseCorners:()=>Kl,pointInEllipse:()=>Yl,precalculatePointInEllipse:()=>Xl});var E={};C.r(E),C.d(E,{distanceToPoint:()=>cd,distanceToPointSquared:()=>ss,distanceToPointSquaredInfo:()=>rs,intersectLine:()=>Yd,isPointOnLineSegment:()=>Ls});var b={};C.r(b),C.d(b,{distanceToPoint:()=>dh,distanceToPointSquared:()=>as,mirror:()=>hh});var D={};C.r(D),C.d(D,{addCanvasPointsToArray:()=>wh,containsPoint:()=>Os,containsPoints:()=>Ps,decimate:()=>cs,getAABB:()=>_s,getArea:()=>uh,getClosestLineSegmentIntersection:()=>mh,getFirstLineSegmentIntersectionIndexes:()=>ys,getLineSegmentIntersectionsCoordinates:()=>vh,getLineSegmentIntersectionsIndexes:()=>As,getNormal2:()=>Rs,getNormal3:()=>gh,getSignedArea:()=>ds,getSubPixelSpacingAndXYDirections:()=>fh,getWindingDirection:()=>hs,intersectPolyline:()=>Ms,isClosed:()=>xs,isPointInsidePolyline3D:()=>oh,mergePolylines:()=>qs,pointCanProjectOnLine:()=>Eh,pointsAreWithinCloseContourProximity:()=>Ih,projectTo2D:()=>nh,subtractPolylines:()=>js});var T={};C.r(T),C.d(T,{distanceToPoint:()=>dd});var S={};C.r(S),C.d(S,{findClosestPoint:()=>sd,liangBarksyClip:()=>Th});var y={};C.r(y),C.d(y,{BasicStatsCalculator:()=>I,aabb:()=>f,ellipse:()=>w,lineSegment:()=>E,point:()=>b,polyline:()=>D,rectangle:()=>T,vec2:()=>S});var M={};C.r(M),C.d(M,{default:()=>Ph,filterAnnotationsForDisplay:()=>Kc,filterAnnotationsWithinSlice:()=>zc,getPointInLineOfSightWithCriteria:()=>Mh,getWorldWidthAndHeightFromCorners:()=>ud,isPlaneIntersectingAABB:()=>Oh});var x={};C.r(x),C.d(x,{filterViewportsWithFrameOfReferenceUID:()=>zs,filterViewportsWithParallelNormals:()=>$s,filterViewportsWithToolEnabled:()=>Js,getViewportIdsWithToolToRender:()=>Qs});var O={};C.r(O),C.d(O,{getOrientationStringLPS:()=>Ah,invertOrientationStringLPS:()=>Rh});var P={};C.r(P),C.d(P,{Events:()=>Lh,addToolState:()=>Uh,getToolState:()=>Vh,playClip:()=>Gh,stopClip:()=>qh});var A={};C.r(A),C.d(A,{extend2DBoundingBoxInViewAxis:()=>xd,getBoundingBoxAroundShape:()=>Or,getBoundingBoxAroundShapeIJK:()=>Or,getBoundingBoxAroundShapeWorld:()=>Pr});var R={};C.r(R),C.d(R,{default:()=>eu,smoothAnnotation:()=>Qh});var N={};C.r(N),C.d(N,{getBoundsIJKFromRectangleAnnotations:()=>Od,isAxisAlignedRectangle:()=>ou});var L={};C.r(L),C.d(L,{isViewportPreScaled:()=>vd,jumpToSlice:()=>Sr,jumpToWorld:()=>Tu});var k={};C.r(k),C.d(k,{generateImageFromTimeData:()=>yu,getDataInTime:()=>Su});var U={};C.r(U),C.d(U,{getPoint:()=>Mu,getPolyDataPointIndexes:()=>xu,getPolyDataPoints:()=>Ou});var V={};C.r(V),C.d(V,{ColorbarRangeTextPosition:()=>Pu});var W={};C.r(W),C.d(W,{Colorbar:()=>Fu,Enums:()=>V,ViewportColorbar:()=>ju});var H={};C.r(H),C.d(H,{colorbar:()=>W});var B={};C.r(B),C.d(B,{addContourSegmentationAnnotation:()=>ol,areSameSegment:()=>tl,isContourSegmentationAnnotation:()=>el,removeContourSegmentationAnnotation:()=>nl});var F={};C.r(F),C.d(F,{annotationFrameRange:()=>Nr,boundingBox:()=>A,calibrateImageSpacing:()=>br,cine:()=>P,clip:()=>Cr,contourSegmentation:()=>B,contours:()=>d,debounce:()=>Gi,drawing:()=>p,dynamicVolume:()=>k,getAnnotationNearPoint:()=>fr,getAnnotationNearPointOnEnabledElement:()=>Ir,getCalibratedAreaUnits:()=>ur,getCalibratedLengthUnits:()=>dr,getCalibratedScale:()=>gr,getSphereBoundsInfo:()=>Rr,getViewportForAnnotation:()=>Hr,isObject:()=>Fi,jumpToSlice:()=>Sr,math:()=>y,orientation:()=>O,planar:()=>M,planarFreehandROITool:()=>R,pointInShapeCallback:()=>yr,pointInSurroundingSphereCallback:()=>Ur,pointToString:()=>xi,polyDataUtils:()=>U,rectangleROITool:()=>N,roundNumber:()=>zu,scroll:()=>Tr,segmentation:()=>m,stackContextPrefetch:()=>Du,stackPrefetch:()=>Iu,throttle:()=>Er,touch:()=>r,triggerAnnotationRender:()=>ka,triggerAnnotationRenderForToolGroupIds:()=>Dr,triggerAnnotationRenderForViewportIds:()=>Ua,triggerEvent:()=>ne.triggerEvent,viewport:()=>L,viewportFilters:()=>x,voi:()=>H});var G={};C.r(G),C.d(G,{createSynchronizer:()=>lp,destroy:()=>cp,destroySynchronizer:()=>up,getAllSynchronizers:()=>hp,getSynchronizer:()=>dp,getSynchronizersForViewport:()=>Wm});var q={};C.r(q),C.d(q,{createToolGroup:()=>Hp,destroy:()=>$m,destroyToolGroup:()=>Zm,getAllToolGroups:()=>Bp,getToolGroup:()=>ei,getToolGroupForViewport:()=>Qo,getToolGroupsWithToolName:()=>$e});var j={};C.r(j),C.d(j,{COLOR_LUT:()=>Ta});var z={};C.r(z),C.d(z,{createCameraPositionSynchronizer:()=>qp,createImageSliceSynchronizer:()=>of,createPresentationViewSynchronizer:()=>Kp,createSlabThicknessSynchronizer:()=>sf,createStackImageSynchronizer:()=>lf,createVOISynchronizer:()=>Xp,createZoomPanSynchronizer:()=>$p});var K={};C.r(K),C.d(K,{draw:()=>Oa,drawArrow:()=>hf,drawCircle:()=>vc,drawEllipse:()=>df,drawEllipseByCoordinates:()=>cf,drawHandle:()=>Bc,drawHandles:()=>Fc,drawLine:()=>rd,drawLinkedTextBox:()=>ld,drawPath:()=>tv,drawPolyline:()=>nv,drawRect:()=>Gc,drawRedactionRect:()=>uf,drawTextBox:()=>ad,setAttributesIfNecessary:()=>uc,setNewAttributesIfValid:()=>gc});var Y={};C.r(Y),C.d(Y,{CursorNames:()=>vf,CursorSVG:()=>bp,ImageMouseCursor:()=>mp,MouseCursor:()=>fc,SVGMouseCursor:()=>xp,elementCursor:()=>h,registerCursor:()=>Tp,setCursorForElement:()=>gf});var X={};C.r(X);var J={};C.r(J),C.d(J,{getFont:()=>mf,getState:()=>$c,style:()=>Yc});var Z={};C.r(Z),C.d(Z,{AnnotationGroup:()=>pf,FrameOfReferenceSpecificAnnotationManager:()=>Ge,config:()=>J,locking:()=>e,selection:()=>t,state:()=>o,visibility:()=>n});var $={};C.r($),C.d($,{color:()=>l,getGlobalConfig:()=>ti,getGlobalRepresentationConfig:()=>oi,getSegmentSpecificConfig:()=>ci,getSegmentationRepresentationSpecificConfig:()=>si,getToolGroupSpecificConfig:()=>ai,setGlobalConfig:()=>ni,setGlobalRepresentationConfig:()=>ii,setSegmentSpecificConfig:()=>di,setSegmentationRepresentationSpecificConfig:()=>li,setToolGroupSpecificConfig:()=>ri,visibility:()=>s});var Q={};C.r(Q),C.d(Q,{canComputeRequestedRepresentation:()=>Hi,computeAndAddContourRepresentation:()=>Dv,computeAndAddLabelmapRepresentation:()=>pa,computeAndAddSurfaceRepresentation:()=>qa});var ee={};C.r(ee),C.d(ee,{activeSegmentation:()=>u,addRepresentationData:()=>Bi,addSegmentationRepresentations:()=>Va,addSegmentations:()=>ff,config:()=>$,convertStackToVolumeSegmentation:()=>Ha,convertVolumeToStackSegmentation:()=>ma,polySeg:()=>Q,removeSegmentationsFromToolGroup:()=>Jm,segmentIndex:()=>v,segmentLocking:()=>g,state:()=>a,triggerSegmentationEvents:()=>i});var te={};C.r(te),C.d(te,{AnnotationStyleStates:()=>Zc,ChangeTypes:()=>je,Events:()=>ie,KeyboardBindings:()=>$u,MouseBindings:()=>Zu,SegmentationRepresentations:()=>Et,StrategyCallbacks:()=>Nl,Swipe:()=>ao,ToolModes:()=>Je,WorkerTypes:()=>Mi});var ne=C(953),oe=function(e){return e.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",e.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",e.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE",e}(oe||{});const ie=oe;function ae(e){return ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(e)}function re(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ae(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,"string");if("object"!==ae(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ae(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var se=C(907),le=C.n(se);const ce=new Set;function de(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=pe();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,ce,n):fe(e,ce,n)),Ie(n,ce)}function he(){const e=pe();!function(e,t){e.forEach((n=>{fe(n,e,t)}))}(ce,e),Ie(e,ce)}function ue(){return Array.from(ce)}function ge(e){return ce.has(e)}function ve(){return ce.size}function me(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==we||t.get!==Ee):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:we,get:Ee}),de(e,t)}}function pe(){return Object.freeze({added:[],removed:[],locked:[]})}function fe(e,t,n){t.delete(e)&&n.removed.push(e)}function Ie(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_LOCK_CHANGE,e))}function we(e){de(this,e)}function Ee(){return ge(this)}const Ce=new Set;function _e(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?be(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=Me();t||xe(Ce,n),e&&!Ce.has(e)&&(Ce.add(e),n.added.push(e)),Oe(n,Ce)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function be(e){const t=Me();e?Ce.delete(e)&&t.removed.push(e):xe(Ce,t),Oe(t,Ce)}function De(){return Array.from(Ce)}function Te(e){return De().filter((t=>{var n;const o=pt(t);return(null==o||null===(n=o.metadata)||void 0===n?void 0:n.toolName)===e}))}function Se(e){return Ce.has(e)}function ye(){return Ce.size}function Me(){return Object.freeze({added:[],removed:[],selection:[]})}function xe(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function Oe(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_SELECTION_CHANGE,e))}const Pe=new Set;function Ae(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ke();e&&(t?Ue(e,Pe,n):function(e,t,n){t.has(e)||(t.add(e),Se(e)&&be(e),n.lastHidden.push(e))}(e,Pe,n)),Ve(n)}function Re(){const e=ke();Pe.forEach((t=>{Ue(t,Pe,e)})),Ve(e)}function Ne(e){if(pt(e))return!Pe.has(e)}function Le(e){if(e){var t;const n=null===(t=e.isVisible)||void 0===t||t;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isVisible");return t?t.configurable&&(t.set!==We||t.get!==He):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:We,get:He}),Ae(e.annotationUID,n)}}function ke(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function Ue(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function Ve(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Pe.forEach((t=>{e.hidden.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_VISIBILITY_CHANGE,e))}function We(e){Ae(this.annotationUID,e)}function He(){return Ne(this.annotationUID)}class Be{constructor(e){re(this,"annotations",void 0),re(this,"uid",void 0),re(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,ne.getEnabledElement)(t);if(!n)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return n.FrameOfReferenceUID})),re(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,o=this.annotations[n];o&&Object.keys(o).forEach((e=>{o[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),re(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),re(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]?n[e][t]:[]:n[e]:[]})),re(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const o=t[n];for(const t in o){const n=o[t];for(const t of n)if(e===t.annotationUID)return t}}})),re(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let o=0;for(const e in n)o+=n[e].length;return o})),re(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:o,toolName:i}=n;t=t||o;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[i];s||(r[i]=[],s=r[i]),s.push(e),me(e),Le(e)})),re(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const o=t[n];for(const t in o){const n=o[t],i=n.findIndex((t=>t.annotationUID===e));-1!==i&&(n.splice(i,1),0===n.length&&delete o[t])}0===Object.keys(o).length&&delete t[n]}})),re(this,"removeAnnotations",((e,t)=>{const n=this.annotations;n[e]&&(t?delete n[e][t]:delete n[e])})),re(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const o=n[e];if(!o)return;const i=o[t];return le()(i)}if(e){const t=n[e];return le()(t)}return le()(n)})),re(this,"restoreAnnotations",((e,t,n)=>{const o=this.annotations;if(t&&n){let i=o[t];i||(o[t]={},i=o[t]),i[n]=e}else t?o[t]=e:this.annotations=le()(e)})),re(this,"getAllAnnotations",(()=>Object.values(this.annotations).map((e=>Object.values(e))).flat(2))),re(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const o=t[n];for(const t in o)e+=o[t].length}return e})),re(this,"removeAllAnnotations",(()=>{this.annotations={}})),e||(e=ne.utilities.uuidv4()),this.annotations={},this.uid=e,ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const Fe=new Be("DEFAULT"),Ge=Be;var qe=function(e){return e.Interaction="Interaction",e.HandlesUpdated="HandlesUpdated",e.StatsUpdated="StatsUpdated",e.InitialSetup="InitialSetup",e.Completed="Completed",e.InterpolationUpdated="InterpolationUpdated",e}(qe||{});const je=qe;let ze={};const Ke={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:ze,enabledElements:[],handleRadius:6};let Ye={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:ze,enabledElements:[],handleRadius:6};var Xe=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(Xe||{});const Je=Xe,Ze=[Je.Active,Je.Passive,Je.Enabled],$e=function(e){return Ye.toolGroups.filter((t=>{let{toolOptions:n}=t;const o=Object.keys(n);for(let t=0;t<o.length;t++)if(e===o[t]&&n[e]&&Ze.includes(n[e].mode))return!0;return!1}))};function Qe(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.HandlesUpdated;const o=(0,ne.getEnabledElement)(t),{viewportId:i,renderingEngineId:a}=o,r=ie.ANNOTATION_MODIFIED,s={annotation:e,viewportId:i,renderingEngineId:a,changeType:n};(0,ne.triggerEvent)(ne.eventTarget,r,s)}function et(e){nt({annotation:e})}function tt(e){nt({annotation:e,contourHoleProcessingEnabled:arguments.length>1&&void 0!==arguments[1]&&arguments[1]})}function nt(e){const t=ie.ANNOTATION_COMPLETED;(0,ne.triggerEvent)(ne.eventTarget,t,e)}let ot=Fe;function it(){return ot}function at(e){ot=e}function rt(){ot=Fe}function st(e,t){const n=it(),o=n.getGroupKey(t);return n.getAnnotations(o,e)}function lt(){return it().getAllAnnotations()}function ct(e){const{annotationUID:t,parentAnnotationUID:n}=e;if(!n)return;const o=pt(n),i=o.childAnnotationUIDs.indexOf(t);o.childAnnotationUIDs.splice(i,1),e.parentAnnotationUID=void 0}function dt(e,t){const{annotationUID:n}=e,{annotationUID:o}=t;ct(t),e.childAnnotationUIDs||(e.childAnnotationUIDs=[]),e.childAnnotationUIDs.includes(o)||(e.childAnnotationUIDs.push(o),t.parentAnnotationUID=n)}function ht(e){return e.parentAnnotationUID?pt(e.parentAnnotationUID):void 0}function ut(e){var t,n;return null!==(t=null===(n=e.childAnnotationUIDs)||void 0===n?void 0:n.map((e=>pt(e))))&&void 0!==t?t:[]}function gt(e,t){e.annotationUID||(e.annotationUID=ne.utilities.uuidv4());const n=it();if(t instanceof HTMLDivElement){const o=n.getGroupKey(t);n.addAnnotation(e,o),function(e,t){const n=(0,ne.getEnabledElement)(t),{renderingEngine:o,viewportId:i}=n,a=ie.ANNOTATION_ADDED,r={annotation:e,viewportId:i,renderingEngineId:o.id};(0,ne.triggerEvent)(ne.eventTarget,a,r)}(e,t)}else n.addAnnotation(e),function(e){const{toolName:t}=e.metadata,n=$e(t);if(!n.length)return;const o=[];n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:i}=t,{FrameOfReferenceUID:a}=(0,ne.getEnabledElementByIds)(i,n);e.metadata.FrameOfReferenceUID===a&&o.push(t)}))}));const i=ie.ANNOTATION_ADDED,a={annotation:e};o.length?o.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;a.viewportId=n,a.renderingEngineId=t,(0,ne.triggerEvent)(ne.eventTarget,i,a)})):(0,ne.triggerEvent)(ne.eventTarget,i,a)}(e);return e.annotationUID}function vt(e,t){const n=it(),o=n.getGroupKey(t);return n.getNumberOfAnnotations(o,e)}function mt(e){var t;if(!e)return;const n=it(),o=n.getAnnotation(e);if(!o)return;null===(t=o.childAnnotationUIDs)||void 0===t||t.forEach((e=>mt(e))),n.removeAnnotation(e);const i=ie.ANNOTATION_REMOVED,a={annotation:o,annotationManagerUID:n.uid};(0,ne.triggerEvent)(ne.eventTarget,i,a)}function pt(e){return it().getAnnotation(e)}function ft(){it().removeAllAnnotations()}function It(e){let t=e;for(;t;)t.invalidated=!0,t=t.parentAnnotationUID?pt(t.parentAnnotationUID):void 0}var wt=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(wt||{});const Et=wt,Ct={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidthActive:2,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDashActive:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3},_t={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},bt=function(){return _t},Dt={renderFill:!0,fillAlpha:1},Tt=bt(),St=Ct,yt=Dt,Mt={colorLUT:[],segmentations:[],globalConfig:{renderInactiveSegmentations:!0,representations:{[Et.Labelmap]:Tt,[Et.Contour]:St,[Et.Surface]:yt}},toolGroups:{}},xt=new class{constructor(e){re(this,"state",void 0),re(this,"uid",void 0),e||(e=ne.utilities.uuidv4()),this.state=le()(Mt),this.uid=e}getState(){return this.state}getToolGroups(){return Object.keys(this.state.toolGroups)}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this.state=le()(Mt)}getSegmentation(e){return this.state.segmentations.find((t=>t.segmentationId===e))}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error("Segmentation with id ".concat(e.segmentationId," already exists"));this.state.segmentations.push(e)}getSegmentationRepresentations(e){const t=this.state.toolGroups[e];if(t)return t.segmentationRepresentations}getAllSegmentationRepresentations(){const e={};return Object.entries(this.state.toolGroups).forEach((t=>{let[n,o]=t;e[n]=o.segmentationRepresentations})),e}addSegmentationRepresentation(e,t){this.state.toolGroups[e]||(this.state.toolGroups[e]={segmentationRepresentations:[],config:{}}),this.state.toolGroups[e].segmentationRepresentations.push(t),this._handleActiveSegmentation(e,t)}getGlobalConfig(){return this.state.globalConfig}setGlobalConfig(e){this.state.globalConfig=e}getSegmentationRepresentationByUID(e,t){const n=this.getSegmentationRepresentations(e);return null==n?void 0:n.find((e=>e.segmentationRepresentationUID===t))}removeSegmentation(e){this.state.segmentations=this.state.segmentations.filter((t=>t.segmentationId!==e))}removeSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No viewport specific segmentation state found for viewport ".concat(e));const o=n.findIndex((e=>e.segmentationRepresentationUID===t));-1===o&&console.warn("No viewport specific segmentation state data found for viewport ".concat(e," and segmentation data UID ").concat(t));const i=n[o];n.splice(o,1),this._handleActiveSegmentation(e,i)}setActiveSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No segmentation data found for toolGroupId: ".concat(e));const o=n.find((e=>e.segmentationRepresentationUID===t));if(!o)throw new Error("No segmentation data found for segmentation data UID ".concat(t));o.active=!0,this._handleActiveSegmentation(e,o)}getToolGroupSpecificConfig(e){const t=this.state.toolGroups[e];if(t)return t.config}getSegmentationRepresentationSpecificConfig(e,t){const n=this.getSegmentationRepresentationByUID(e,t);if(n)return n.segmentationRepresentationSpecificConfig}setSegmentationRepresentationSpecificConfig(e,t,n){const o=this.getSegmentationRepresentationByUID(e,t);o&&(o.segmentationRepresentationSpecificConfig=n)}getSegmentSpecificConfig(e,t,n){const o=this.getSegmentationRepresentationByUID(e,t);if(o)return o.segmentSpecificConfig[n]}setSegmentSpecificConfig(e,t,n,o){const i=this.getSegmentationRepresentationByUID(e,t);i&&((!i.segmentSpecificConfig||null!=o&&o.clear)&&(i.segmentSpecificConfig={}),Object.keys(n).forEach((e=>{i.segmentSpecificConfig[e]=n[e]})))}setSegmentationRepresentationConfig(e,t){let n=this.state.toolGroups[e];n||(this.state.toolGroups[e]={segmentationRepresentations:[],config:{renderInactiveSegmentations:!0,representations:{}}},n=this.state.toolGroups[e]),n.config={...n.config,...t}}addColorLUT(e,t){this.state.colorLUT[t]&&console.warn("Color LUT table already exists, overwriting"),this.state.colorLUT[t]=le()(e)}removeColorLUT(e){delete this.state.colorLUT[e]}_handleActiveSegmentation(e,t){const n=this.getSegmentationRepresentations(e);0!==n.length&&(1!==n.length&&0!==n.filter((e=>e.active)).length?t.active&&n.forEach((e=>{e.segmentationRepresentationUID!==t.segmentationRepresentationUID&&(e.active=!1)})):n[0].active=!0)}}("DEFAULT");function Ot(e,t){const{imageIdReferenceMap:n}=e,{volumeId:o}=e;if(o&&!n)return!0;if(n&&!o)return!1;if(o&&n&&!t)throw new Error("isVolumeSegmentation: viewport is required when both volumeId and imageIdReferenceMap are provided");return t instanceof ne.VolumeViewport}const Pt=new Map,At=e=>{const t=Pt.get(e);t&&(t.isDirty=!0)};function Rt(e){const t=function(e){const t=Pt.get(e);return t&&!t.isDirty?t.indices:null}(e);if(t)return t;const n=Bt(e);if(!n)throw new Error("No segmentation found for segmentationId ".concat(e));let o;switch(n.type){case Et.Labelmap:o=function(e,t){const n=e.representationData[Et.Labelmap],o=new Set;return Ot(n)?function(e,t){ne.cache.getVolume(t).getScalarData().forEach((t=>{0!==t&&e.add(t)}))}(o,t):function(e,t){t.forEach((t=>{ne.cache.getImage(t).getPixelData().forEach((t=>{0!==t&&e.add(t)}))}))}(o,n.imageIdReferenceMap),Array.from(o).map(Number).sort(((e,t)=>e-t))}(n,e);break;case Et.Contour:o=function(e){const{annotationUIDsMap:t,geometryIds:n}=e.representationData.CONTOUR||{};if(!n)throw new Error("No geometryIds found for segmentationId ".concat(e.segmentationId));const o=new Set([...t.keys()]);return n.forEach((e=>{const t=ne.cache.getGeometry(e);o.add(t.data.getSegmentIndex())})),Array.from(o).sort(((e,t)=>e-t))}(n);break;case Et.Surface:o=function(e){var t,n;const o=null!==(t=null===(n=e.representationData.SURFACE)||void 0===n?void 0:n.geometryIds)&&void 0!==t?t:[];return Array.from(o.keys()).map(Number).sort(((e,t)=>e-t))}(n);break;default:throw new Error("Unsupported segmentation type: ".concat(n.type))}return Pt.set(e,{indices:o,isDirty:!1}),o}function Nt(e){const t={segmentationId:e};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REMOVED,t)}function Lt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_REMOVED,n)}function kt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};t?(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_MODIFIED,n):(qt(e)||[]).forEach((t=>{const{segmentationRepresentationUID:n}=t,o={toolGroupId:e,segmentationRepresentationUID:n};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_MODIFIED,o)}))}function Ut(e){let t;t=e?[e]:Ft().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_MODIFIED,t)}))}function Vt(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};At(e),(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_DATA_MODIFIED,n)}const Wt=function(e){const{segmentationId:t,representation:n}=e,o=n.type===Et.Contour;let i=n.data?{...n.data}:null;if(i=!i&&o?{}:i,!i)throw new Error("Segmentation representation data may not be undefined");if(o){var a,r;const e=i;e.geometryIds=null!==(a=e.geometryIds)&&void 0!==a?a:[],e.annotationUIDsMap=null!==(r=e.annotationUIDsMap)&&void 0!==r?r:new Map}return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...i}}}};function Ht(){return xt}function Bt(e){return Ht().getSegmentation(e)}function Ft(){return Ht().getState().segmentations}function Gt(e,t){const n=Ht(),o=Wt(e);n.addSegmentation(o),t||Ut(o.segmentationId)}function qt(e){return Ht().getSegmentationRepresentations(e)}function jt(){return Ht().getAllSegmentationRepresentations()}function zt(e){const t=jt()||{},n=[];for(const o in t){const i=t[o].find((t=>t.segmentationId===e));i&&n.push(i)}return n}function Kt(e){const t=jt()||[],n=Object.keys(t);for(const t of n){const n=jt()[t].find((t=>t.segmentationRepresentationUID===e));if(n)return{segmentationRepresentation:n,toolGroupId:t}}}function Yt(e){if(!e)throw new Error("getToolGroupIdsWithSegmentation: segmentationId is empty");const t=Ht(),n=t.getState(),o=Object.keys(n.toolGroups),i=[];return o.forEach((n=>{t.getSegmentationRepresentations(n).forEach((t=>{t.segmentationId===e&&i.push(n)}))})),i}function Xt(e){return Ht().getToolGroupSpecificConfig(e)}function Jt(e,t,n){Ht().setSegmentationRepresentationConfig(e,t),n||kt(e)}function Zt(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ht().setSegmentationRepresentationSpecificConfig(e,t,n),o||kt(e,t)}function $t(e,t){return Ht().getSegmentationRepresentationSpecificConfig(e,t)}function Qt(e,t,n){return Ht().getSegmentSpecificConfig(e,t,n)}function en(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ht().setSegmentSpecificConfig(e,t,n),o||kt(e,t)}function tn(e){const t=jt()||[],n=Object.keys(t);for(const t of n)if(jt()[t].find((t=>t.segmentationRepresentationUID===e)))return t}function nn(e,t,n){Ht().addSegmentationRepresentation(e,t),n||kt(e,t.segmentationRepresentationUID)}function on(){return Ht().getGlobalConfig()}function an(e,t){Ht().setGlobalConfig(e),t||Ut()}function rn(e,t){return Ht().getSegmentationRepresentationByUID(e,t)}function sn(e){Ht().removeSegmentation(e),Nt(e)}function ln(e,t){Ht().removeSegmentationRepresentation(e,t),Lt(e,t)}function cn(e){(qt(e)||[]).forEach((t=>{ln(e,t.segmentationRepresentationUID)}))}function dn(e){Ht().removeColorLUT(e)}function hn(e){return Ht().getColorLUT(e)}function un(){return Ht().getNextColorLUTIndex()}function gn(e,t){Ht().addColorLUT(e,t)}function vn(e,t){const n=t||e.currentTarget,{viewport:o}=(0,ne.getEnabledElement)(n),i=function(e){return[e.clientX,e.clientY]}(e),a=function(e){return[e.pageX,e.pageY]}(e),r=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,a);return{page:a,client:i,canvas:r,world:o.canvasToWorld(r)}}const mn=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:o}=(0,ne.getEnabledElement)(t),i=vn(e,t),a={event:e,eventName:ie.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:o,camera:{},element:t,startPoints:i,lastPoints:i,currentPoints:i,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,ne.triggerEvent)(t,ie.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},pn=ie.MOUSE_MOVE,fn=function(e){const t=e.currentTarget,n=(0,ne.getEnabledElement)(t),{renderingEngineId:o,viewportId:i}=n,a={renderingEngineId:o,viewportId:i,camera:{},element:t,currentPoints:vn(e),eventName:pn,event:e};!(0,ne.triggerEvent)(t,pn,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:In,MOUSE_DOWN_ACTIVATE:wn,MOUSE_CLICK:En,MOUSE_UP:Cn,MOUSE_DRAG:_n}=ie,bn=3,Dn={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 Tn={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 Sn={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function yn(e){const t=vn(e,Tn.element),n=kn(Tn.element,Tn.lastPoints),o=Un(t,n);if(Sn.doubleClickTimeout){if(!On(o.canvas))return;An()}const i={event:e,eventName:_n,mouseButton:Tn.mouseButton,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},element:Tn.element,startPoints:Ln(Tn.startPoints),lastPoints:Ln(n),currentPoints:t,deltaPoints:o};!(0,ne.triggerEvent)(Tn.element,_n,i)&&(e.stopImmediatePropagation(),e.preventDefault()),Tn.lastPoints=Ln(t)}function Mn(e){if(clearTimeout(Tn.preventClickTimeout),Sn.doubleClickTimeout)Sn.mouseUpEvent?Nn():(Sn.mouseUpEvent=e,Tn.element.addEventListener("mousemove",xn));else{const t=Tn.isClickEvent?En:Cn,n=vn(e,Tn.element),o=Un(n,Tn.lastPoints),i={event:e,eventName:t,mouseButton:Tn.mouseButton,element:Tn.element,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},startPoints:Ln(Tn.startPoints),lastPoints:Ln(Tn.lastPoints),currentPoints:n,deltaPoints:o};(0,ne.triggerEvent)(i.element,t,i),Nn()}document.removeEventListener("mousemove",yn)}function xn(e){On(Un(vn(e,Tn.element),kn(Tn.element,Tn.lastPoints)).canvas)&&(An(),fn(e))}function On(e){return Math.abs(e[0])+Math.abs(e[1])>bn}function Pn(){Tn.isClickEvent=!1}function An(){Sn.ignoreDoubleClick=!0;const e=Sn.mouseDownEvent,t=Sn.mouseUpEvent;Rn(),function(e){const t=Un(Tn.startPoints,Tn.startPoints),n={event:e,eventName:In,element:Tn.element,mouseButton:Tn.mouseButton,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},startPoints:Tn.startPoints,lastPoints:Tn.startPoints,currentPoints:Tn.startPoints,deltaPoints:t};Tn.lastPoints=Ln(n.lastPoints),(0,ne.triggerEvent)(n.element,In,n)&&(0,ne.triggerEvent)(n.element,wn,n)}(e),t&&Mn(t)}function Rn(){Sn.doubleClickTimeout&&(clearTimeout(Sn.doubleClickTimeout),Sn.doubleClickTimeout=null),Sn.mouseDownEvent=null,Sn.mouseUpEvent=null}function Nn(){var e,t;document.removeEventListener("mouseup",Mn),null===(e=Tn.element)||void 0===e||e.removeEventListener("mousemove",xn),null===(t=Tn.element)||void 0===t||t.addEventListener("mousemove",fn),Rn(),Tn=JSON.parse(JSON.stringify(Dn))}function Ln(e){return JSON.parse(JSON.stringify(e))}function kn(e,t){const{viewport:n}=(0,ne.getEnabledElement)(e),o=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:o}}function Un(e,t){return{page:Vn(e.page,t.page),client:Vn(e.client,t.client),canvas:Vn(e.canvas,t.canvas),world:(n=e.world,o=t.world,[n[0]-o[0],n[1]-o[1],n[2]-o[2]])};var n,o}function Vn(e,t){return[e[0]-t[0],e[1]-t[1]]}function Wn(e){Sn.ignoreDoubleClick?(Sn.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):Nn()}const Hn=function(e){if(Sn.doubleClickTimeout){if(e.buttons===Sn.mouseDownEvent.buttons)return;return Sn.mouseDownEvent=e,void An()}Sn.doubleClickTimeout=setTimeout(An,1===e.buttons?400:150),Sn.mouseDownEvent=e,Sn.ignoreDoubleClick=!1,Tn.element=e.currentTarget,Tn.mouseButton=e.buttons;const t=(0,ne.getEnabledElement)(Tn.element),{renderingEngineId:n,viewportId:o}=t;Tn.renderingEngineId=n,Tn.viewportId=o,Tn.preventClickTimeout=setTimeout(Pn,Tn.clickDelay),Tn.element.removeEventListener("mousemove",fn);const i=vn(e,Tn.element);Tn.startPoints=Ln(i),Tn.lastPoints=Ln(i),document.addEventListener("mouseup",Mn),document.addEventListener("mousemove",yn)};function Bn(e){e.removeEventListener("dblclick",mn),e.removeEventListener("mousedown",Hn),e.removeEventListener("mousemove",fn),e.removeEventListener("dblclick",Wn,{capture:!0})}const Fn={enable:function(e){Bn(e),e.addEventListener("dblclick",mn),e.addEventListener("mousedown",Hn),e.addEventListener("mousemove",fn),e.addEventListener("dblclick",Wn,{capture:!0})},disable:Bn},Gn=function(e){const t=e.currentTarget,n=(0,ne.getEnabledElement)(t),{renderingEngineId:o,viewportId:i}=n;if(e.deltaY>-1&&e.deltaY<1)return;e.preventDefault();const{spinX:a,spinY:r,pixelX:s,pixelY:l}=function(e){let t=0,n=0,o=0,i=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),o=10*t,i=10*n,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(o=e.deltaX),(o||i)&&e.deltaMode&&(1===e.deltaMode?(o*=40,i*=40):(o*=800,i*=800)),o&&!t&&(t=o<1?-1:1),i&&!n&&(n=i<1?-1:1),{spinX:t,spinY:n,pixelX:o,pixelY:i}}(e),c=r<0?-1:1,d={event:e,eventName:ie.MOUSE_WHEEL,renderingEngineId:o,viewportId:i,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:c},points:vn(e)};(0,ne.triggerEvent)(t,ie.MOUSE_WHEEL,d)};function qn(e){e.removeEventListener("wheel",Gn)}const jn={enable:function(e){qn(e),e.addEventListener("wheel",Gn,{passive:!1})},disable:qn},zn=0,Kn=1;let Yn,Xn;function Jn(e,t){const n=Date.now();if(e!==Yn){if(n-Xn<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Yn=e}Xn=n}const Zn=Jn.bind(null,zn),$n=Jn.bind(null,Kn);function Qn(e,t,n){const o=n?Zn:$n;t.forEach((function(t){e.addEventListener(t,o,{passive:!1})}))}function eo(e,t,n){const o=n?Zn:$n;t.forEach((function(t){e.removeEventListener(t,o)}))}const to=["mousedown","mouseup","mousemove"],no=["touchstart","touchend"];function oo(e){eo(e,to,zn),eo(e,no,Kn)}const io={enable:function(e){oo(e),Qn(e,to,zn),Qn(e,no,Kn)},disable:oo};var ao=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(ao||{});function ro(e,t){const n=t||e.currentTarget,o="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(o).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(o[e]),i=function(e){return[e.pageX,e.pageY]}(o[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,i),{viewport:r}=(0,ne.getEnabledElement)(n);return{page:i,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:o[e].radiusX,radiusY:o[e].radiusY,force:o[e].force,rotationAngle:o[e].rotationAngle}}}))}function so(e,t){const n=vo(e),o=vo(t);return{page:po(n.page,o.page),client:po(n.client,o.client),canvas:po(n.canvas,o.canvas),world:(i=n.world,a=o.world,[i[0]-a[0],i[1]-a[1],i[2]-a[2]])};var i,a}function lo(e,t){const n=vo(e),o=vo(t);return{page:Io(n.page,o.page),client:Io(n.client,o.client),canvas:Io(n.canvas,o.canvas),world:wo(n.world,o.world)}}function co(e,t){}function ho(e,t){const n=fo(e),o=fo(t);return{page:n.page-o.page,client:n.client-o.client,canvas:n.canvas-o.canvas,world:n.world-o.world}}function uo(e){return JSON.parse(JSON.stringify(e))}function go(e){return JSON.parse(JSON.stringify(e))}function vo(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length]})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function mo(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length],touch:{identifier:null,radiusX:t.touch.radiusX+n.touch.radiusX/e.length,radiusY:t.touch.radiusY+n.touch.radiusY/e.length,force:t.touch.force+n.touch.force/e.length,rotationAngle:t.touch.rotationAngle+n.touch.rotationAngle/e.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 po(e,t){return[e[0]-t[0],e[1]-t[1]]}function fo(e){const t=[];for(let n=0;n<e.length;n++)for(let o=0;o<e.length;o++)n<o&&t.push({page:Io(e[n].page,e[o].page),client:Io(e[n].client,e[o].client),canvas:Io(e[n].canvas,e[o].canvas),world:wo(e[n].world,e[o].world)});return t.reduce(((e,n)=>({page:e.page+n.page/t.length,client:e.client+n.client/t.length,canvas:e.canvas+n.canvas/t.length,world:e.world+n.world/t.length})),{page:0,client:0,canvas:0,world:0})}function Io(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function wo(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}ne.Settings.getRuntimeSettings();const{TOUCH_START:Eo,TOUCH_START_ACTIVATE:Co,TOUCH_PRESS:_o,TOUCH_DRAG:bo,TOUCH_END:Do,TOUCH_TAP:To,TOUCH_SWIPE:So}=ie,yo={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},Mo={page:0,client:0,canvas:0,world:0},xo={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...yo,touch:null}],lastPointsList:[{...yo,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:Mo,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},Oo={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...yo,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let Po=JSON.parse(JSON.stringify(xo)),Ao=JSON.parse(JSON.stringify(Oo));function Ro(e,t,n){return(0,ne.triggerEvent)(e,t,n)}function No(e){const t=ro(e,Po.element),n=ko(Po.element,Po.lastPointsList),o=t.length===n.length?so(t,n):yo,i=t.length===n.length?ho(t,n):Mo,a=t.length===n.length?lo(t,Po.lastPointsList):Mo;Po.accumulatedDistance={page:Po.accumulatedDistance.page+a.page,client:Po.accumulatedDistance.client+a.client,canvas:Po.accumulatedDistance.canvas+a.canvas,world:Po.accumulatedDistance.world+a.world};const r={event:e,eventName:bo,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,startPoints:mo(Po.startPointsList),lastPoints:mo(n),currentPoints:mo(t),startPointsList:uo(Po.startPointsList),lastPointsList:uo(n),currentPointsList:t,deltaPoints:o,deltaDistance:i};Ro(Po.element,bo,r),function(e,t){const n=(new Date).getTime(),o=Po.startTime.getTime();if(Po.swiped||n-o>Po.swipeToleranceMs)return;const[i,a]=t.canvas,r={event:e,eventName:So,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,swipe:null};Math.abs(i)>Po.swipeDistanceThreshold&&(r.swipe=i>0?ao.RIGHT:ao.LEFT,Ro(r.element,So,r),Po.swiped=!0),Math.abs(a)>Po.swipeDistanceThreshold&&(r.swipe=a>0?ao.DOWN:ao.UP,Ro(r.element,So,r),Po.swiped=!0)}(e,o),Po.lastPointsList=uo(t)}function Lo(e){clearTimeout(Po.pressTimeout);const t=ro(e,Po.element),n=ko(Po.element,Po.lastPointsList),o=t.length===n.length?so(t,n):so(t,t),i=t.length===n.length?ho(t,n):ho(t,t),a={event:e,eventName:Do,element:Po.element,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},startPointsList:uo(Po.startPointsList),lastPointsList:uo(n),currentPointsList:t,startPoints:mo(Po.startPointsList),lastPoints:mo(n),currentPoints:mo(t),deltaPoints:o,deltaDistance:i};Ro(a.element,Do,a),function(e){if((new Date).getTime()-Po.startTime.getTime()>Ao.tapToleranceMs)return;if(0===Ao.taps&&(Ao.element=Po.element,Ao.renderingEngineId=Po.renderingEngineId,Ao.viewportId=Po.viewportId,Ao.startPointsList=Po.startPointsList),Ao.taps>0&&(Ao.element!=Po.element||Ao.renderingEngineId!=Po.renderingEngineId||Ao.viewportId!=Po.viewportId))return;const t=ro(e,Ao.element);lo(t,Ao.startPointsList).canvas>Ao.tapMaxDistance||(clearTimeout(Ao.tapTimeout),Ao.taps+=1,Ao.tapTimeout=setTimeout((()=>{const n={event:e,eventName:To,element:Ao.element,renderingEngineId:Ao.renderingEngineId,viewportId:Ao.viewportId,camera:{},currentPointsList:t,currentPoints:mo(t),taps:Ao.taps};Ro(n.element,To,n),Ao=JSON.parse(JSON.stringify(Oo))}),Ao.tapToleranceMs))}(e),Po=JSON.parse(JSON.stringify(xo)),document.removeEventListener("touchmove",No),document.removeEventListener("touchend",Lo)}function ko(e,t){const{viewport:n}=(0,ne.getEnabledElement)(e);return t.map((e=>{const t=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:t,touch:e.touch}}))}const Uo=function(e){Po.element=e.currentTarget;const t=(0,ne.getEnabledElement)(Po.element),{renderingEngineId:n,viewportId:o}=t;Po.renderingEngineId=n,Po.viewportId=o,Po.isTouchStart||(clearTimeout(Po.pressTimeout),Po.pressTimeout=setTimeout((()=>function(e){if(Po.accumulatedDistance.canvas>Po.pressMaxDistance)return;const t={event:e,eventName:_o,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,startPointsList:uo(Po.startPointsList),lastPointsList:uo(Po.lastPointsList),startPoints:go(mo(Po.startPointsList)),lastPoints:go(mo(Po.lastPointsList))};Ro(t.element,_o,t)}(e)),Po.pressDelay),function(e){Po.isTouchStart=!0,Po.startTime=new Date;const t=ro(e,Po.element),n=mo(t),o=yo,i=Mo,a={event:e,eventName:Eo,element:Po.element,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:o,deltaDistance:i};Po.startPointsList=uo(a.startPointsList),Po.lastPointsList=uo(a.lastPointsList),Ro(a.element,Eo,a)&&Ro(a.element,Co,a)}(e),document.addEventListener("touchmove",No),document.addEventListener("touchend",Lo))};function Vo(e){io.disable(e),e.removeEventListener("touchstart",Uo)}const Wo={enable:function(e){Vo(e),io.enable(e),e.addEventListener("touchstart",Uo,{passive:!1})},disable:Vo},Ho={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let Bo={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Fo(e){Bo.element=e.currentTarget;const t=(0,ne.getEnabledElement)(Bo.element),{renderingEngineId:n,viewportId:o}=t;Bo.renderingEngineId=n,Bo.viewportId=o,Bo.key=e.key,Bo.keyCode=e.keyCode,e.preventDefault();const i={renderingEngineId:Bo.renderingEngineId,viewportId:Bo.viewportId,element:Bo.element,key:Bo.key,keyCode:Bo.keyCode};(0,ne.triggerEvent)(i.element,ie.KEY_DOWN,i),document.addEventListener("keyup",qo),document.addEventListener("visibilitychange",Go),Bo.element.removeEventListener("keydown",Fo)}function Go(){document.removeEventListener("visibilitychange",Go),"hidden"===document.visibilityState&&jo()}function qo(e){const t={renderingEngineId:Bo.renderingEngineId,viewportId:Bo.viewportId,element:Bo.element,key:Bo.key,keyCode:Bo.keyCode};document.removeEventListener("keyup",qo),document.removeEventListener("visibilitychange",Go),Bo.element.addEventListener("keydown",Fo),Bo=le()(Ho),(0,ne.triggerEvent)(t.element,ie.KEY_UP,t)}function jo(){Bo.keyCode=void 0}const zo=Fo;function Ko(e){e.removeEventListener("keydown",zo)}const Yo={enable:function(e){Ko(e),e.addEventListener("keydown",zo)},disable:Ko,getModifierKey:function(){return Bo.keyCode}};var Xo=C(785),Jo=C.n(Xo),Zo=C(283),$o=C.n(Zo);const Qo=function(e,t){var n;t||(t=null===(n=(0,ne.getRenderingEngines)().find((t=>t.getViewports().find((t=>t.id===e)))))||void 0===n?void 0:n.id);const o=Ye.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(o.length){if(o.length>1)throw new Error("Multiple tool groups found for renderingEngineId: ".concat(t," and viewportId: ").concat(e,". You should only\n have one tool group per viewport in a renderingEngine."));return o[0]}},ei=function(e){return Ye.toolGroups.find((t=>t.id===e))};function ti(){return on()}function ni(e){an(e)}function oi(e){return ti().representations[e]}function ii(e,t){const n=ti();ni({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function ai(e){return Xt(e)}function ri(e,t){Jt(e,t)}function si(e,t){return $t(e,t)}function li(e,t,n){Zt(e,t,n)}function ci(e,t,n){return Qt(e,t,n)}function di(e,t,n){en(e,t,n)}function hi(e,t,n){const o=qt(e);if(!o)return;const i=o.find((e=>e.segmentationRepresentationUID===t));if(!i)return;const{segmentsHidden:a,segmentationId:r}=i,s=Rt(r);n?a.clear():s.forEach((e=>{a.add(e)})),kt(e,i.segmentationRepresentationUID)}function ui(e,t){const n=qt(e).find((e=>e.segmentationRepresentationUID===t));if(!n)return;const{segmentsHidden:o,segmentationId:i}=n,a=Rt(i),r=new Set(a);return o.forEach((e=>r.delete(e))),!!r.size}function gi(e,t,n,o){const i=rn(e,t);i&&(n.forEach((e=>{o?i.segmentsHidden.delete(e):i.segmentsHidden.add(e)})),kt(e,t))}function vi(e,t,n,o){const i=rn(e,t);i&&(o?i.segmentsHidden.delete(n):i.segmentsHidden.add(n),kt(e,t))}function mi(e,t,n){const o=rn(e,t);return!!o&&!o.segmentsHidden.has(n)}class pi{constructor(e,t){re(this,"supportedInteractionTypes",void 0),re(this,"configuration",void 0),re(this,"toolGroupId",void 0),re(this,"mode",void 0);const n=ne.utilities.deepMerge(t,e),{configuration:o={},supportedInteractionTypes:i,toolGroupId:a}=n;o.strategies||(o.strategies={},o.defaultStrategy=void 0,o.activeStrategy=void 0,o.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=i||[],this.configuration=Object.assign({},o),this.mode=Je.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){var n;const{strategies:o,activeStrategy:i}=this.configuration;return null===(n=o[i])||void 0===n?void 0:n.call(this,e,t)}applyActiveStrategyCallback(e,t,n){var o;const{strategies:i,activeStrategy:a}=this.configuration;if(!i[a])throw new Error("applyActiveStrategyCallback: active strategy ".concat(a," not found, check tool configuration or spellings"));return null===(o=i[a][n])||void 0===o?void 0:o.call(this,e,t)}setConfiguration(e){this.configuration=ne.utilities.deepMerge(this.configuration,e)}setActiveStrategy(e){this.setConfiguration({activeStrategy:e})}getTargetVolumeId(e){var t;if(this.configuration.volumeId)return this.configuration.volumeId;const n=e.getActors();return n?null===(t=n.find((e=>"vtkVolume"===e.actor.getClassName())))||void 0===t?void 0:t.uid:void 0}getTargetIdImage(e,t){if(e.startsWith("imageId:")){const n=e.split("imageId:")[1],o=ne.utilities.imageIdToURI(n);let i=ne.utilities.getViewportsWithImageURI(o,t.id);if(!i||!i.length)return;if(i=i.filter((e=>e.getCurrentImageId()===n)),!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("volumeId:")){const n=ne.utilities.getVolumeId(e),o=ne.utilities.getViewportsWithVolumeId(n,t.id);if(!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("videoId:")){const n=ne.utilities.imageIdToURI(e),o=ne.utilities.getViewportsWithImageURI(n,t.id);if(!o||!o.length)return;return o[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){var t;const n=null===(t=e.getReferenceId)||void 0===t?void 0:t.call(e);if(n)return n;if(e instanceof ne.BaseVolumeViewport)return"volumeId:".concat(this.getTargetVolumeId(e));throw new Error("getTargetId: viewport must have a getTargetId method")}}re(pi,"toolName",void 0),pi.toolName="BaseTool";const fi=pi,Ii=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);o.removeActors(i)};var wi=C(610),Ei=C.n(wi),Ci=C(474),_i=C.n(Ci),bi=C(70),Di=C.n(bi),Ti=C(396),Si=C.n(Ti),yi=function(e){return e.POLYSEG_CONTOUR_TO_LABELMAP="polySeg/convertContourToVolumeLabelmap",e.POLYSEG_SURFACE_TO_LABELMAP="polySeg/convertSurfacesToVolumeLabelmap",e.POLYSEG_CONTOUR_TO_SURFACE="polySeg/convertContourToSurface",e.POLYSEG_LABELMAP_TO_SURFACE="polySeg/convertLabelmapToSurface",e.SURFACE_CLIPPING="surfaceClipping",e}(yi||{});const Mi=yi;function xi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return parseFloat(e[0]).toFixed(t)+","+parseFloat(e[1]).toFixed(t)+","+parseFloat(e[2]).toFixed(t)+","}let Oi=!1;function Pi(){Oi||(Oi=!0,(0,ne.getWebWorkerManager)().registerWorker("polySeg",(()=>new Worker(new URL(C.p+C.u(985),C.b),{name:"polySeg"})),{maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:2e3}}))}const Ai=(0,ne.getWebWorkerManager)(),Ri=new Map,Ni=new Map,Li=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.SURFACE_CLIPPING})};async function ki(e,t,n){var o;Pi();const i=null===(o=t.getSlicesClippingPlanes)||void 0===o?void 0:o.call(t);if(!i)return;const a=t.getSliceIndex();i.sort(((e,t)=>Math.abs(e.sliceIndex-a)-Math.abs(t.sliceIndex-a))),Li(ne.eventTarget,0),await async function(e){const t=e.filter((e=>!Ni.has(e.id)));if(!t.length)return;(await Ai.executeTask("polySeg","getSurfacesAABBs",{surfacesInfo:t},{callbacks:[e=>{let{progress:t}=e;Li(ne.eventTarget,t)}]})).forEach(((e,t)=>{Ni.set(t,e)}))}(e);const r=new Map;e.forEach((e=>{r.set(e.id,Ni.get(e.id))}));const s=t.getCamera();return await Ai.executeTask("polySeg","cutSurfacesIntoPlanes",{surfacesInfo:e,planesInfo:i,surfacesAABB:r},{callbacks:[e=>{let{progress:t}=e;Li(ne.eventTarget,t)},e=>{let{sliceIndex:o,polyDataResults:i}=e;i.forEach(((e,i)=>{const a="".concat(n,"_").concat(i),r=function(e,t,n){return"".concat(e.id,"-").concat(xi(t),"-").concat(n)}(t,s.viewPlaneNormal,o);!function(e,t,n){const{points:o,lines:i,numberOfCells:a}=n;let r=Ri.get(e);r||(r=new Map,Ri.set(e,r)),r.set(t,{points:o,lines:i,numberOfCells:a})}(a,r,e)}))}]}).catch((e=>{console.error(e)})),Li(ne.eventTarget,1),Ri}function Ui(e){if("volumeId"in e){if(!ne.cache.getVolume(e.volumeId))throw new Error("volumeId of ".concat(e.volumeId," not found in cache, you should load and cache volume before adding segmentation"))}else{if(!("imageIdReferenceMap"in e))throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData");if(!e.imageIdReferenceMap)throw new Error("The segmentationInput.representationData.imageIdReferenceMap is undefined, please provide a valid representationData.imageIdReferenceMap")}}function Vi(e){Ui(e)}const Wi=new Map([[Et.Labelmap,new Set([Et.Surface,Et.Contour])],[Et.Contour,new Set([Et.Labelmap,Et.Surface])],[Et.Surface,new Set([Et.Labelmap])]]);function Hi(e){const t=Kt(e);if(null==t||!t.segmentationRepresentation)return!1;const{segmentationRepresentation:n}=t,{type:o,polySeg:i}=n;if(!i||!i.enabled)return!1;const{representationData:a}=Bt(n.segmentationId),r=function(e){const t=[];return Object.keys(e).forEach((n=>{const o=e[n];let i;if(n===Et.Labelmap&&(i=Vi),i)try{i(o),t.push(n)}catch(e){console.warn("Validation failed for labelmap of type ".concat(n))}else t.push(n)})),t}(a);return r.some((e=>async function(e,t){var n;return(null===(n=Wi.get(e))||void 0===n?void 0:n.has(t))||!1}(e,o)))}const Bi=function(e){let{segmentationId:t,type:n,data:o}=e;const i=Bt(t);switch(i.representationData[n]&&console.warn("Representation data of type ".concat(n," already exists for segmentation ").concat(t,", overwriting it.")),n){case Et.Labelmap:case Et.Contour:case Et.Surface:o&&(i.representationData[n]=o);break;default:throw new Error("Invalid representation type ".concat(n))}},Fi=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},Gi=function(e,t,n){let o,i,a,r,s,l,c=0,d=!1,h=!1,u=!0;const g=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const n=o,a=i;return o=i=void 0,c=t,r=e.apply(a,n),r}function m(e,t){return g?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-c>=a}function f(){const e=Date.now();if(p(e))return I(e);s=m(f,function(e){const n=e-c,o=t-(e-l);return h?Math.min(o,a-n):o}(e))}function I(e){return s=void 0,u&&o?v(e):(o=i=void 0,r)}function w(){const e=Date.now(),n=p(e);for(var a=arguments.length,u=new Array(a),g=0;g<a;g++)u[g]=arguments[g];if(o=u,i=this,l=e,n){if(void 0===s)return function(e){return c=e,s=m(f,t),d?v(e):r}(l);if(h)return s=m(f,t),v(l)}return void 0===s&&(s=m(f,t)),r}return t=Number(t)||0,Fi(n)&&(d=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,u="trailing"in n?Boolean(n.trailing):u),w.cancel=function(){void 0!==s&&function(e){if(g)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),c=0,o=l=i=s=void 0},w.flush=function(){return void 0===s?r:I(Date.now())},w.pending=function(){return void 0!==s},w},qi=new Map;async function ji(e,t,n,o){Pi();const i=await n();Bi({segmentationId:e,type:t,data:i}),qi.has(e)||qi.set(e,[]);const a=qi.get(e);return a.includes(t)||a.push(t),function(e){e._debouncedUpdateFunction=t=>{zi(t,e)},ne.eventTarget.removeEventListener(ie.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction),ne.eventTarget.addEventListener(ie.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction)}(o),Ut(e),i}const zi=Gi(((e,t)=>{const n=e.detail.segmentationId,o=qi.get(n);o&&o.length&&(t(n),o.length&&Ut(n))}),300),Ki=(0,ne.getWebWorkerManager)(),Yi=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_CONTOUR_TO_SURFACE})};function Xi(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");ne.utilities.isEqual(e[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"),e.unshift([0,0,0,0])),gn(e,t)}function Ji(e,t,n){const o=rn(e,t);if(!o)throw new Error("setColorLUT: could not find segmentation representation with UID ".concat(t));if(!hn(n))throw new Error("setColorLUT: could not find colorLUT with index ".concat(n));o.colorLUTIndex=n,kt(e,t)}function Zi(e,t,n){const o=rn(e,t);if(!o)throw new Error("segmentation representation with UID ".concat(t," does not exist for tool group ").concat(e));const{colorLUTIndex:i}=o,a=hn(i);let r=a[n];if(!r){if("number"!=typeof n)throw new Error("Can't create colour for LUT index ".concat(n));r=a[n]=[0,0,0,0]}return r}function $i(e,t,n,o){const i=Zi(e,t,n);for(let e=0;e<o.length;e++)i[e]=o[e];kt(e,t)}async function Qi(e,t){let n,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.segmentationRepresentationUID&&({segmentationRepresentation:n,toolGroupId:o}=Kt(i.segmentationRepresentationUID));const a=Bt(e),r=new Map,s=Object.keys(t).map((async e=>{const i=t[e],s=i.segmentIndex,l=n;if(Zi(o,n.segmentationRepresentationUID,s).slice(0,3),!l)throw new Error("No color found for segment index, unable to create surface");const c={id:"segmentation_".concat(a.segmentationId,"_surface_").concat(s),color:l,frameOfReferenceUID:"test-frameOfReferenceUID",data:{points:i.data.points,polys:i.data.polys}},d=c.id;return r.set(s,d),ne.geometryLoader.createAndCacheGeometry(d,{type:ne.Enums.GeometryType.SURFACE,geometryData:c})}));return await Promise.all(s),{geometryIds:r}}var ea=C(441),ta=C.n(ea),na=C(795),oa=C.n(na);const ia=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;o instanceof ne.StackViewport||o.removeVolumeActors([t])};var aa=C(976);const ra=(0,ne.getWebWorkerManager)(),sa=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_CONTOUR_TO_LABELMAP})};async function la(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{viewport:n}=t,o=ne.utilities.getViewportImageIds(n);if(!o)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");const i=ne.utilities.uuidv4(),a=ne.utilities.generateVolumePropsFromImageIds(o,i),{metadata:r,dimensions:s,origin:l,direction:c,spacing:d,scalarData:h}=a,u=await ne.volumeLoader.createLocalSegmentationVolume({dimensions:s,origin:l,direction:c,spacing:d,metadata:r,imageIds:o.map((e=>"generated://".concat(e))),referencedImageIds:o},i),{segmentIndices:g,annotationUIDsInSegmentMap:v}=da(e,t);sa(ne.eventTarget,0);const m=await ra.executeTask("polySeg","convertContourToVolumeLabelmap",{segmentIndices:g,dimensions:s,scalarData:h,origin:l,direction:c,spacing:d,annotationUIDsInSegmentMap:v},{callbacks:[e=>{sa(ne.eventTarget,e)}]});return sa(ne.eventTarget,1),u.imageData.getPointData().getScalars().setData(m),u.imageData.modified(),u.modified(),{volumeId:u.volumeId}}async function ca(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("No viewport provided, labelmap computation from contour requires viewports");const n=t.viewport.getImageIds();if(!n)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");n.forEach((e=>{if(!ne.cache.getImageLoadObject(e))throw new Error("ImageIds must be cached before converting contour to labelmap")}));const{imageIds:o}=await ne.imageLoader.createAndCacheDerivedSegmentationImages(n),{segmentIndices:i,annotationUIDsInSegmentMap:a}=da(e,t),r=new Map;o.forEach(((e,t)=>{var o,i,a,s,l;const c=ne.cache.getImage(e),d=ne.metaData.get(ne.Enums.MetadataModules.IMAGE_PLANE,e);let{columnCosines:h,rowCosines:u,rowPixelSpacing:g,columnPixelSpacing:v,imagePositionPatient:m}=d;h=null!==(o=h)&&void 0!==o?o:[0,1,0],u=null!==(i=u)&&void 0!==i?i:[1,0,0],g=null!==(a=g)&&void 0!==a?a:1,v=null!==(s=v)&&void 0!==s?s:1,m=null!==(l=m)&&void 0!==l?l:[0,0,0];const p=aa.vec3.fromValues(u[0],u[1],u[2]),f=aa.vec3.fromValues(h[0],h[1],h[2]),I=aa.vec3.create();aa.vec3.cross(I,p,f);const w=[...p,...f,...I],E=[g,v,1],C=m;r.set(n[t],{direction:w,spacing:E,origin:C,scalarData:c.getPixelData(),imageId:e,dimensions:[c.width,c.height,1]})})),sa(ne.eventTarget,0);const s=await ra.executeTask("polySeg","convertContourToStackLabelmap",{segmentationsInfo:r,annotationUIDsInSegmentMap:a,segmentIndices:i},{callbacks:[e=>{sa(ne.eventTarget,e)}]});sa(ne.eventTarget,1);const l=new Map;return s.forEach(((e,t)=>{var n;let{scalarData:o}=e;const i=r.get(t),{imageId:a}=i,s=ne.cache.getImage(a);s.getPixelData().set(o),null===(n=s.imageFrame)||void 0===n||null===(n=n.pixelData)||void 0===n||n.set(o),l.set(t,a)})),{imageIdReferenceMap:l}}function da(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=e.annotationUIDsMap,i=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Array.from(o.keys()),a=new Map;return i.forEach((e=>{const t=o.get(e);let n=Array.from(t);n=n.filter((e=>!pt(e).parentAnnotationUID));const i=n.map((e=>{var t;const n=pt(e),o=null===(t=n.childAnnotationUIDs)||void 0===t?void 0:t.length;return{polyline:n.data.contour.polyline,referencedImageId:n.metadata.referencedImageId,holesPolyline:o&&n.childAnnotationUIDs.map((e=>pt(e).data.contour.polyline))}}));a.set(e,i)})),{segmentIndices:i,annotationUIDsInSegmentMap:a}}const ha=(0,ne.getWebWorkerManager)(),ua=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_SURFACE_TO_LABELMAP})};function ga(e,t){return new Map(e.map(((e,n)=>[e,t[n]])))}async function va(e){let{volumeId:t}=e;const n=ne.cache.getVolume(t);let o=!1;n.imageCacheOffsetMap.size>0&&(o=n.imageIds.every((e=>ne.cache.getImage(e))));const i=(0,ne.getRenderingEngines)()[0].getVolumeViewports().find((e=>e.hasVolumeId(t)));n.decache(!i&&o);const a=function(e){var t,n;if(null!==(t=e.additionalDetails)&&void 0!==t&&t.imageIdReferenceMap)return e.additionalDetails.imageIdReferenceMap;if(null!==(n=e.referencedImageIds)&&void 0!==n&&n.length&&!e.referencedImageIds[0].startsWith("derived"))return ga(e.referencedImageIds,[...e.imageIds].reverse());{var o,i,a;const t=e.referencedVolumeId,n=ne.cache.getVolume(t);if(!n)throw new Error("Cannot convert volumetric segmentation without referenced volume to stack segmentation yet");if(null==n||null===(o=n.imageIds)||void 0===o||!o.length)throw new Error("Cannot convert volumetric segmentation without imageIds to stack segmentation yet");if(null!==(i=n.imageIds)&&void 0!==i&&i[0].startsWith("derived"))throw new Error("Cannot convert volume segmentation that is derived from another segmentation\n to stack segmentation yet, include the additionalDetails.imageIdReferenceMap\n in the volume segmentation in case you need it for the conversion");const r=n.imageIds;let s=e.imageIds;return null!==(a=s)&&void 0!==a&&a.length||(s=e.convertToImageSlicesAndCache()),ga(r,[...s].reverse())}}(n);return{imageIdReferenceMap:a}}async function ma(e){let{segmentationId:t,options:n}=e;const o=Bt(t).representationData.LABELMAP,{imageIdReferenceMap:i}=await va({volumeId:o.volumeId});await async function(e){let{segmentationId:t,toolGroupId:n,imageIdReferenceMap:o,options:i}=e;const a=Bt(t);if(null!=i&&i.removeOriginal){const e=a.representationData.LABELMAP;ne.cache.getVolume(e.volumeId)&&ne.cache.removeVolumeLoadObject(e.volumeId),a.representationData.LABELMAP={imageIdReferenceMap:o}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,imageIdReferenceMap:o};await Va(n,[{segmentationId:t,type:Et.Labelmap}]),Pv(n),ne.eventTarget.addEventListenerOnce(ie.SEGMENTATION_RENDERED,(()=>Vt(t)))}({segmentationId:t,toolGroupId:n.toolGroupId,imageIdReferenceMap:i,options:n})}function pa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Labelmap,(()=>async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e);let i;const a=Bt(e),r=a.representationData;try{r.CONTOUR?i=await async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null===(t=o.viewport instanceof ne.VolumeViewport)||void 0===t||t;if(i&&!o.viewport)throw new Error("Cannot compute labelmap from contour segmentation without providing the viewport");const a=null!==(n=o.segmentIndices)&&void 0!==n&&n.length?o.segmentIndices:Rt(e),r=Bt(e).representationData.CONTOUR,s=i?la:ca;return await s(r,{segmentIndices:a,segmentationRepresentationUID:o.segmentationRepresentationUID,viewport:o.viewport})}(e,{segmentIndices:o,...n}):r.SURFACE&&(i=await async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null===(t=o.viewport instanceof ne.VolumeViewport)||void 0===t||t,a=null!==(n=o.segmentIndices)&&void 0!==n&&n.length?o.segmentIndices:Rt(e),r=Bt(e),s=new Map;if(r.representationData.SURFACE.geometryIds.forEach(((e,t)=>{a.includes(t)&&s.set(t,e)})),i&&!o.viewport)throw new Error("Cannot compute labelmap from surface segmentation without providing the viewport");let l;if(i){const e=o.viewport.getDefaultActor(),{uid:t}=e;l=await ne.volumeLoader.createAndCacheDerivedSegmentationVolume(t)}else{const e=o.viewport.getImageIds(),t="generatedSegmentationVolumeId",n=ne.utilities.generateVolumePropsFromImageIds(e,t);delete n.imageIds,l=await ne.volumeLoader.createLocalSegmentationVolume({...n,scalarData:n.scalarData,referencedImageIds:e},t)}const c=await async function(e,t){const{geometryIds:n}=e;if(null==n||!n.size)throw new Error("No geometry IDs found for surface representation");const o=new Map;n.forEach(((e,t)=>{const n=ne.cache.getGeometry(e).data,i=n.getPoints(),a=n.getPolys();o.set(t,{points:i,polys:a})}));const{dimensions:i,direction:a,origin:r,spacing:s}=t;ua(ne.eventTarget,0);const l=await ha.executeTask("polySeg","convertSurfacesToVolumeLabelmap",{segmentsInfo:o,dimensions:i,spacing:s,direction:a,origin:r},{callbacks:[e=>{ua(ne.eventTarget,e)}]});return ua(ne.eventTarget,1),t.imageData.getPointData().getScalars().setData(l),t.imageData.modified(),t.modified(),{volumeId:t.volumeId}}({geometryIds:s},l);return i?c:await va({volumeId:l.volumeId})}(a.segmentationId,{segmentIndices:o,...n}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return i}(e,t)),(()=>{}))}const fa=new Map;function Ia(){const e=oa().newInstance(),t=ta().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}let wa=!1;function Ea(e,t,n,o){const i={...e,...t,...o||{}};return{fillAlpha:n?i.fillAlpha:i.fillAlphaInactive,outlineWidth:n?i.outlineWidthActive:i.outlineWidthInactive,renderFill:n?i.renderFill:i.renderFillInactive,renderOutline:i.renderOutline,outlineOpacity:n?i.outlineOpacity:i.outlineOpacityInactive}}function Ca(e,t,n,o){let{fillAlpha:i,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l,segmentsHidden:c}=o;const d="".concat(e,"-").concat(t,"-").concat(n),h=fa.get(d);if(!h)return fa.set(d,{fillAlpha:i,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(c)}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:u,renderFill:g,renderOutline:v,outlineWidth:m,segmentColor:p,segmentsHidden:f}=h,I=p[0]!==s[0]||p[1]!==s[1]||p[2]!==s[2],w=p[3]!==s[3]||u!==i||g!==a||v!==r||m!==l||f.has(n)!==c.has(n);return fa.set(d,{fillAlpha:i,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(c)}),{forceOpacityUpdate:w,forceColorUpdate:I}}async function _a(e,t,n){await async function(e,t,n){const o=(0,ne.getEnabledElement)(e),{renderingEngine:i,viewport:a}=o,{id:r}=a;if(Ot(t,a)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:ne.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,ne.addVolumesToViewports)(i,e,[r],!1,!0)}else{const e=[{imageId:t.imageIdReferenceMap.get(a.getCurrentImageId()),actorUID:n}];await(0,ne.addImageSlicesToViewports)(i,e,[r],!1,!0)}}(e.element,t,n)}const ba={getRepresentationRenderingConfig:Ia,render:async function(e,t,n){const{colorLUTIndex:o,active:i,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s,config:l}=t,c=Bt(a);if(!c)return void console.warn("No segmentation found for segmentationId: ",a);let d=c.representationData[Et.Labelmap],h=e.getActor(r);if(!d&&Hi(r)&&!wa){if(wa=!0,d=await pa(a,{segmentationRepresentationUID:r,viewport:e}),!d)throw new Error("No labelmap data found for segmentationId ".concat(a,"."));wa=!1}if(!d)return;if(Ot(d,e)){var u;if(e instanceof ne.StackViewport)return;const{volumeId:t}=d;if(!ne.cache.getVolume(t))throw new Error("No Labelmap found for volumeId: ".concat(t));if(!function(e,t){if(!t)return!0;const n=e.getDefaultActor();if(!n)return!1;const{uid:o}=n,i=ne.cache.getVolume(o);if(i){const e=ne.cache.getVolume(t);if(e&&i.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,null===(u=d)||void 0===u?void 0:u.referencedVolumeId))return;h||await _a(e,d,r),h=e.getActor(r)}else{if(e instanceof ne.VolumeViewport)return;const t=e.getCurrentImageId(),{imageIdReferenceMap:n}=d;if(!n.has(t))return;h||await _a(e,d,r),h=e.getActor(r)}if(!h)return;const{cfun:g,ofun:v}=l,m=n.renderInactiveSegmentations;!function(e,t,n,o,i,a,r,s,l,c){const{segmentSpecificConfig:d,segmentationRepresentationSpecificConfig:h}=r,u=h[Et.Labelmap],g=hn(i),v=Math.min(256,g.length),{uid:m}=t,{outlineWidth:p,renderOutline:f,outlineOpacity:I}=Ea(a,u,s);for(let t=0;t<v;t++){var w;const i=t,r=g[i],l=null===(w=d[i])||void 0===w?void 0:w[Et.Labelmap],{fillAlpha:h,outlineWidth:v,renderFill:p,renderOutline:f}=Ea(a,u,s,l),{forceOpacityUpdate:I,forceColorUpdate:E}=Ca(e,m,i,{fillAlpha:h,renderFill:p,renderOutline:f,segmentColor:r,outlineWidth:v,segmentsHidden:c});if(E&&n.addRGBPoint(i,r[0]/255,r[1]/255,r[2]/255),I)if(p){const e=c.has(i)?0:r[3]/255*h;o.removePoint(i),o.addPointLong(i,e,.5,1)}else o.addPointLong(i,.01,.5,1)}const E=t.actor;E.getProperty().setRGBTransferFunction(0,n),o.setClamping(!1),E.getProperty().setScalarOpacity(0,o),E.getProperty().setInterpolationTypeToNearest(),E.getProperty().setUseLabelOutline(f),E.getProperty().setLabelOutlineOpacity(I);const{activeSegmentIndex:C}=Bt(r.segmentationId),_=new Array(v-1);for(let e=1;e<v;e++)_[e-1]=e===C?p+a.activeSegmentOutlineWidthDelta:p;E.getProperty().setLabelOutlineThickness(_);const b=s||l;E.setVisibility(b)}(e.id,h,g,v,o,n.representations[Et.Labelmap],t,i,m,s)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);ia(i.viewport.element,t)}})(e,t),ln(e,t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}};function Da(e){const{type:t}=e;return t===Et.Labelmap?Ia():{}}const Ta=[[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 Sa(e,t){if(Ye.svgNodeCache[e])return Ye.svgNodeCache[e][t]?Ye.svgNodeCache[e][t].domRef:void 0}function ya(e,t,n,o){if(!Ye.svgNodeCache[t])return null;Ye.svgNodeCache[t][o]={touched:!0,domRef:n},e.appendChild(n)}function Ma(e,t){Ye.svgNodeCache[e]&&Ye.svgNodeCache[e][t]&&(Ye.svgNodeCache[e][t].touched=!0)}function xa(e,t){Ye.svgNodeCache[t]&&Object.keys(Ye.svgNodeCache[t]).forEach((n=>{const o=Ye.svgNodeCache[t][n];!o.touched&&o.domRef&&(e.removeChild(o.domRef),delete Ye.svgNodeCache[t][n])}))}const Oa=function(e,t){const n=function(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n,renderingEngineId:o}=t,i="".concat(n,":").concat(o),a=function(e){const t=".".concat("viewport-element");return e.querySelector(t).querySelector(":scope > .svg-layer")}(e);return Object.keys(Ye.svgNodeCache[i]).forEach((e=>{Ye.svgNodeCache[i][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:Ye.svgNodeCache,getSvgNode:Sa.bind(this,i),appendNode:ya.bind(this,a,i),setNodeTouched:Ma.bind(this,i),clearUntouched:xa.bind(this,a,i)}}(e);t(n),n.clearUntouched()};function Pa(e,t){const n=(0,ne.getEnabledElement)(e),{renderingEngineId:o,viewportId:i}=n,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],o=a.toolOptions[n];if(o&&t.includes(o.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:Aa,Passive:Ra,Enabled:Na}=Je,La=new class{constructor(){re(this,"hasBeenDestroyed",void 0),re(this,"_needsRender",new Set),re(this,"_animationFrameSet",!1),re(this,"_animationFrameHandle",null),re(this,"_viewportElements",void 0),re(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let t=0;t<e.length;t++){const n=e[t];if(this._needsRender.has(n)&&(this._triggerRender(n),this._needsRender.delete(n),0===this._needsRender.size))break}this._animationFrameSet=!1,this._animationFrameHandle=null,this._render()})),this._viewportElements=new Map}addViewportElement(e,t){this._viewportElements.set(e,t)}removeViewportElement(e,t){this._viewportElements.delete(e),this._needsRender.delete(t),this._reset()}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}_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.")}_setAllViewportsToBeRenderedNextFrame(){[...this._viewportElements.values()].forEach((e=>{this._needsRender.add(e)})),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const t=[...this._viewportElements.values()];e.forEach((e=>{-1!==t.indexOf(e)&&this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const t=(0,ne.getEnabledElement)(e);if(!t)return;if(!(0,ne.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=Pa(e,[Aa,Ra,Na]),{renderingEngineId:o,viewportId:i}=t,a={element:e,renderingEngineId:o,viewportId:i};Oa(e,(o=>{let i=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,o);i=i||n}})),i&&(0,ne.triggerEvent)(e,ie.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},ka=function(e){La.renderViewport(e)},Ua=function(e,t){t.length&&e&&t.forEach((t=>{const n=e.getViewport(t);if(!n)return void console.warn("Viewport not available for ".concat(t));const{element:o}=n;ka(o)}))};const Va=async function(e,t,n){if(!ei(e))throw new Error("No tool group found for toolGroupId: ".concat(e));const o=t.map((t=>async function(e,t,n){var o;const{segmentationId:i,options:a={}}=t,r=(null===(o=t.options)||void 0===o?void 0:o.segmentationRepresentationUID)||ne.utilities.uuidv4(),s=new Set,l=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).colorLUTOrIndex;let t;if("number"==typeof e)t=e;else{const n=un();gn(Array.isArray(e)?e:Ta,n),t=n}return t}(a),c={segmentationId:i,segmentationRepresentationUID:r,type:t.type,segmentsHidden:s,colorLUTIndex:l,active:!0,segmentationRepresentationSpecificConfig:{},segmentSpecificConfig:{},config:Da(t),polySeg:a.polySeg};if(n){const t=ai(e),o=ne.utilities.deepMerge(t,n);ri(e,{renderInactiveSegmentations:o.renderInactiveSegmentations||!0,representations:{...o.representations}})}return nn(e,c),t.type===Et.Contour&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getRenderingEngine)(n);Ua(o,[t])})),r}(e,t,n)));return await Promise.all(o)};async function Wa(e){var t;let{imageIdReferenceMap:n,options:o}=e;const i=Array.from(n.values()),a={imageIdReferenceMap:n},r=null!==(t=null==o?void 0:o.volumeId)&&void 0!==t?t:ne.utilities.uuidv4();return await ne.volumeLoader.createAndCacheVolumeFromImages(r,i,{additionalDetails:a}),{volumeId:r}}async function Ha(e){let{segmentationId:t,options:n}=e;const o=Bt(t).representationData.LABELMAP,{volumeId:i}=await Wa({imageIdReferenceMap:o.imageIdReferenceMap,options:n});await async function(e){let{segmentationId:t,toolGroupId:n,volumeId:o,options:i}=e;const a=Bt(t);if(null!=i&&i.removeOriginal){const e=a.representationData.LABELMAP.imageIdReferenceMap;Array.from(e.values()).forEach((e=>{ne.cache.removeImageLoadObject(e)})),a.representationData.LABELMAP={volumeId:o}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,volumeId:o};await Va(n,[{segmentationId:t,type:Et.Labelmap}]),Pv(n),ne.eventTarget.addEventListenerOnce(ie.SEGMENTATION_RENDERED,(()=>Vt(t)))}({segmentationId:t,toolGroupId:n.toolGroupId,options:n,volumeId:i})}const Ba=(0,ne.getWebWorkerManager)(),Fa=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_LABELMAP_TO_SURFACE})};async function Ga(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=Bt(e);if(null==o||null===(t=o.representationData)||void 0===t||!t.LABELMAP)return void console.warn("Only support surface update from labelmaps");const i=Ot(o.representationData.LABELMAP),a=o.representationData.LABELMAP,r=n.segmentIndices||Rt(e),s=r.map((e=>{const t=async function(e,t){let n;if(arguments.length>2&&void 0!==arguments[2]&&!arguments[2]){const{imageIdReferenceMap:t}=e;({volumeId:n}=await Wa({imageIdReferenceMap:t}))}else n=e.volumeId;const o=ne.cache.getVolume(n),i=o.getScalarData(),{dimensions:a,spacing:r,origin:s,direction:l}=o;Fa(ne.eventTarget,0);const c=await Ba.executeTask("polySeg","convertLabelmapToSurface",{scalarData:i,dimensions:a,spacing:r,origin:s,direction:l,segmentIndex:t},{callbacks:[e=>{Fa(ne.eventTarget,e)}]});return Fa(ne.eventTarget,1),c}(a,e,i);return t})),l=await Promise.allSettled(s),c=l.filter((e=>"rejected"===e.status));if(c.length>0)throw console.error(c),new Error("Failed to convert labelmap to surface");return l.map(((e,t)=>{if("fulfilled"===e.status)return{segmentIndex:r[t],data:e.value}})).filter(Boolean)}function qa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Surface,(()=>async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e);let i;const a=Bt(e),r=a.representationData;try{r.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Bt(e).representationData.CONTOUR,o=(t.segmentIndices||Rt(e)).map((async e=>{const t=await async function(e,t){const{annotationUIDsMap:n}=e,o=[],i=[],a=n.get(t);for(const e of a){const t=pt(e),{polyline:n}=t.data.contour;i.push(n.length),n.forEach((e=>o.push(...e)))}Yi(ne.eventTarget,0);const r=await Ki.executeTask("polySeg","convertContourToSurface",{polylines:o,numPointsArray:i},{callbacks:[e=>{Yi(ne.eventTarget,e)}]});return Yi(ne.eventTarget,1),r}(n,e);return{segmentIndex:e,data:t}}));return await Promise.all(o)}(e,{segmentIndices:o,...n}):r.LABELMAP&&(i=await Ga(a.segmentationId,{segmentIndices:o,...n}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return await Qi(e,i,n)}(e,t)),(()=>async function(e){const t=await Ga(e);if(!t)return;const n=Bt(e),o=Rt(e);if(!o.length)return n.representationData.SURFACE.geometryIds.forEach((e=>{const t=ne.cache.getGeometry(e).data;t.setPoints([]),t.setPolys([])})),void Ut(e);const i=t.map((t=>{let{data:i,segmentIndex:a}=t;const r="segmentation_".concat(e,"_surface_").concat(a),s=ne.cache.getGeometry(r);if(!s)return Yt(e).map((t=>qt(t).map((t=>{if(t.type===Et.Surface)return n.representationData.SURFACE.geometryIds.set(a,r),Qi(e,[{segmentIndex:a,data:i}],{segmentationRepresentationUID:t.segmentationRepresentationUID})}))));if(o.includes(a)){const e=s.data;e.setPoints(i.points),e.setPolys(i.polys)}else{const e=s.data;e.setPoints([]),e.setPolys([])}}));await Promise.all(i),Ut(e)}(e)))}const ja={render:async function(e,t){const{colorLUTIndex:n,segmentationId:o,segmentationRepresentationUID:i}=t,a=Bt(o);if(!a)return;if(!(e instanceof ne.VolumeViewport3D))throw new Error("Surface rendering is only supported in 3D viewports, if you need to visualize the surface cuts in 2D viewports, you can use the Contour representation, see polySeg converters");let r=a.representationData[Et.Surface];if(!r&&Hi(i)&&(r=await qa(o,{segmentationRepresentationUID:i}),!r))throw new Error("No Surface data found for segmentationId ".concat(o,"."));const{geometryIds:s}=r;null!=s&&s.size||console.warn("No Surfaces found for segmentationId ".concat(o,". Skipping render."));const l=hn(n),c=[];s.forEach(((t,n)=>{const o=ne.cache.getGeometry(t);if(null==o||!o.data)return void console.warn("No Surfaces found for geometryId ".concat(t,". Skipping render."));const a=o.data,r=l[n];a.setColor(r.slice(0,3)),function(e,t,n){var o;const i=function(e,t){return"".concat(e,"_").concat(t)}(n,t.id),a=(0,ne.getEnabledElement)(e),{viewport:r}=a,s=null===(o=r.getActor(i))||void 0===o?void 0:o.actor;if(s){const e=s.getMapper(),n=e.getInputData(),o=t.getPoints(),i=t.getPolys(),a=n.getPoints().getData(),l=n.getPolys().getData();if(o.length===a.length&&i.length===l.length)return;const c=Di().newInstance();c.getPoints().setData(o,3);const d=Si().newInstance({values:Float32Array.from(i)});return c.setPolys(d),e.setInputData(c),e.modified(),void setTimeout((()=>{r.getRenderer().resetCameraClippingRange()}),0)}const l=t.getPoints(),c=t.getPolys(),d=t.getColor(),h=Di().newInstance();h.getPoints().setData(l,3);const u=Si().newInstance({values:Float32Array.from(c)});h.setPolys(u);const g=Ei().newInstance({});g.setInputData(h);const v=_i().newInstance();v.setMapper(g),v.getProperty().setColor(d[0]/255,d[1]/255,d[2]/255),v.getProperty().setLineWidth(2),r.addActor({actor:v,uid:i,clippingFilter:void 0}),r.resetCamera(),r.render(),setTimeout((()=>{r.getRenderer().resetCameraClippingRange()}),0)}(e.element,a,i),c.push(a)})),e.render()},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);Ii(i.viewport.element,t)}})(e,t),ln(e,t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}};var za=C(127),Ka=C.n(za),Ya=C(348),Xa=C.n(Ya);function Ja(e,t,n){var o;let i=null===(o=e.segmentSpecificConfig)||void 0===o?void 0:o[t];var a;return i||(i=null===(a=e.segmentSpecificConfig)||void 0===a?void 0:a[n]),i?i.CONTOUR:null}const Za=new Map;function $a(e){return Za.get(e)}function Qa(e,t){Za.set(e,t)}function er(e,t,n,o,i){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=Ka().newInstance(),l=new Map,c=new Map;t.forEach((e=>{const t=ne.cache.getGeometry(e);if(!t)return void console.warn("No geometry found for geometryId ".concat(e,". Skipping render."));const o=t.data.getSegmentIndex();!function(e){if(!e)throw new Error("No contours found for geometryId ".concat(e.id));const t=e.id;if(e.type!==ne.Enums.GeometryType.CONTOUR)throw new Error("Geometry type ".concat(e.type," not supported for rendering."));e.data||console.warn("No contours found for geometryId ".concat(t,". Skipping render."))}(t);const i=Ja(n,e,o),a=t.data,d=function(e){const t=[],n=Xa().newInstance(),o=Si().newInstance();let i=0;e.getContours().forEach((e=>{const n=e.getPoints(),a=e.getFlatPointsArray(),r=e.getType(),s=n.map(((e,t)=>t+i));r===ne.Enums.ContourType.CLOSED_PLANAR&&s.push(s[0]);const l=Float32Array.from(a);t.push(...l),o.insertNextCell([...s]),i+=n.length})),n.setData(t,3);const a=Di().newInstance();return a.setPoints(n),a.setLines(o),a}(a),h=a.getColor(),u=d.getPoints().getNumberOfPoints(),g=Jo().newInstance({size:4*u,numberOfComponents:4,dataType:"Uint8Array"});for(let e=0;e<u;++e)g.setTuple(e,[...h,255]);d.getPointData().setScalars(g),i&&c.set(o,i),l.set(o,[...h,r.has(o)?0:255]),0===o?s.setInputData(d):s.addInputData(d)}));const d=s.getOutputData(),h=o.representations.CONTOUR.outlineWidthActive,u=Ei().newInstance();u.setInputData(d);const g=_i().newInstance();g.setMapper(u),g.getProperty().setLineWidth(h),Qa(a,Object.assign({},$a(a),{segmentsHidden:new Set(r),segmentSpecificMap:c,outlineWidthActive:h})),g.setForceOpaque(!0),e.addActor({uid:i,actor:g}),e.resetCamera(),e.render()}function tr(e,t,n,o,i){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=o.representations.CONTOUR,l=$a(a),c=e.getActor(i);if(!c)return void console.warn("No contour actor found for actorUID ".concat(i,". Skipping render."));const{actor:d}=c,h=s.outlineWidthActive;(null==l?void 0:l.outlineWidthActive)!==h&&(d.getProperty().setLineWidth(h),Qa(a,Object.assign({},l,{outlineWidthActive:h})));const u=d.getMapper(),g=u.getLookupTable(),v=[],m=[];for(const e of r)l.segmentsHidden.has(e)||v.push(e);for(const e of l.segmentsHidden)r.has(e)||m.push(e);const p=Array.from(l.segmentsHidden).filter((e=>!m.includes(e))).concat(v),{contourSets:f,segmentSpecificConfigs:I}=t.reduce(((e,t)=>{const o=ne.cache.getGeometry(t),{data:i}=o,a=i.getSegmentIndex(),r=Ja(n,t,a);return e.contourSets.push(i),e.segmentSpecificConfigs[a]=null!=r?r:{},e}),{contourSets:[],segmentSpecificConfigs:{}}),w=[...p,...m],E=Object.values(I).some((e=>Object.keys(e).length>0));let C=!1;if(w.length||E){const e=u.getInputData(),t=e.getPointData().getScalars().getData();let n=0;f.forEach((e=>{var o;const i=e.getSegmentIndex(),a=e.getTotalNumberOfPoints();if(w.includes(i)||null!==(o=I[i])&&void 0!==o&&o.fillAlpha){const o=e.getColor();let r=p.includes(i)?0:255;const s=I[i];void 0!==s.fillAlpha&&(r=255*s.fillAlpha);for(let e=0;e<a;++e)t[n+4*e]=o[0],t[n+4*e+1]=o[1],t[n+4*e+2]=o[2],t[n+4*e+3]=r;C=!0}n+=4*a})),C&&e.modified(),Qa(a,Object.assign({},l,{segmentsHidden:new Set(r)})),u.setLookupTable(g)}e.render()}const nr=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getActors().map((e=>{let{uid:n}=e;return n.includes(t)?n:void 0})).filter(Boolean);o.removeActors(i)};function or(e,t){const n=new Map;for(const[o,i]of e){const e=o.split("_")[1];for(const[o,a]of i){if(!a)continue;const o=Number(e)||(null==t?void 0:t.get(e));o&&(n.has(o)||n.set(o,[]),n.get(o).push(a))}}return n}const{CalibrationTypes:ir}=ne.Enums,ar="px",rr=[1],sr=["3,3"],lr=["4,3"],cr={3:"cm",4:"seconds"},dr=(e,t)=>{const{calibration:n,hasPixelSpacing:o}=t,i=o?"mm":ar;return n&&(n.type||n.sequenceOfUltrasoundRegions)?n.type===ir.UNCALIBRATED?ar:n.sequenceOfUltrasoundRegions?"US Region":"".concat(i," ").concat(n.type):i},hr="²",ur=(e,t)=>{const{calibration:n,hasPixelSpacing:o}=t,i=(o?"mm":ar)+hr;return n&&n.type?n.sequenceOfUltrasoundRegions?"US Region":"".concat(i," ").concat(n.type):i},gr=function(e){var t,n;if(null===(t=e.calibration)||void 0===t||!t.sequenceOfUltrasoundRegions)return null!==(n=e.calibration)&&void 0!==n&&n.scale?e.calibration.scale:1},vr=(e,t)=>{const[n,o]=t,{calibration:i,hasPixelSpacing:a}=e;let r=a?"mm":ar;const s=r+hr;let l=1,c="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:r,areaUnits:s,scale:l};if(i.type===ir.UNCALIBRATED)return{units:ar,areaUnits:ar+hr,scale:l};if(i.sequenceOfUltrasoundRegions){var d;let e=i.sequenceOfUltrasoundRegions.filter((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1&&o[0]>=e.regionLocationMinX0&&o[0]<=e.regionLocationMaxX1&&o[1]>=e.regionLocationMinY0&&o[1]<=e.regionLocationMaxY1));if(null===(d=e)||void 0===d||!d.length)return{units:r,areaUnits:s,scale:l};if(e=e.filter((e=>rr.includes(e.regionDataType)&&sr.includes("".concat(e.physicalUnitsXDirection,",").concat(e.physicalUnitsYDirection)))),!e.length)return{units:ar,areaUnits:ar+hr,scale:l};const t=e[0],a=Math.abs(t.physicalDeltaX),h=Math.abs(t.physicalDeltaY);if(!ne.utilities.isEqual(a,h,.001))return{units:ar,areaUnits:ar+hr,scale:l};l=1/(a*h*100),c="US Region",r="mm"}else i.scale&&(l=i.scale);return[ir.ERMF,ir.USER,ir.ERROR,ir.PROJECTION].includes(null==i?void 0:i.type)&&(c=i.type),{units:r+(c?" ".concat(c):""),areaUnits:s+(c?" ".concat(c):""),scale:l}},mr=(e,t)=>{const[n]=t,{calibration:o}=e;let i=["raw"],a=[null],r="";if(!o||!o.type&&!o.sequenceOfUltrasoundRegions)return{units:i,values:a};if(o.sequenceOfUltrasoundRegions){const e=o.sequenceOfUltrasoundRegions.filter((e=>rr.includes(e.regionDataType)&&lr.includes("".concat(e.physicalUnitsXDirection,",").concat(e.physicalUnitsYDirection))));if(null==e||!e.length)return{units:i,values:a};const t=e.find((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1));if(!t)return{units:i,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:c,physicalDeltaY:d}=t,h=(n[1]-t.regionLocationMinY0-l)*d;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*c,h],i=[cr[t.physicalUnitsXDirection],cr[t.physicalUnitsYDirection]]}return{units:i,values:a,calibrationType:r}},pr=e=>{var t;return(null===(t=e.calibration)||void 0===t?void 0:t.aspect)||1};function fr(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const o=(0,ne.getEnabledElement)(e);if(!o)throw new Error("getAnnotationNearPoint: enabledElement not found");return Ir(o,t,n)}function Ir(e,t,n){const{renderingEngineId:o,viewportId:i}=e,a=Qo(i,o);if(!a)return null;const{_toolInstances:r}=a;for(const o in r){const i=wr(r[o],e,t,n);if(i)return i}return null}function wr(e,t,n,o){var i;const{viewport:a}=t,r=st(e.constructor.toolName,null==a?void 0:a.element),s=null==a||null===(i=a.getCurrentImageId)||void 0===i?void 0:i.call(a);if(null!=r&&r.length){const{element:i}=t.viewport;for(const t of r){var l;const a=null===(l=t.metadata)||void 0===l?void 0:l.referencedImageId;if(!(s&&a&&s!==a||!e.isPointNearTool)&&(e.isPointNearTool(i,t,n,o,"")||e.getHandleNearImagePoint(i,t,n,o)))return t}}return null}const Er=function(e,t,n){let o=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return Fi(n)&&(o="leading"in n?Boolean(n.leading):o,i="trailing"in n?Boolean(n.trailing):i),Gi(e,t,{leading:o,trailing:i,maxWait:t})};const Cr=function(e,t,n){return Math.min(Math.max(t,e),n)},{calibratedPixelSpacingMetadataProvider:_r}=ne.utilities;function br(e,t,n){"number"==typeof n&&(n={type:ne.Enums.CalibrationTypes.USER,scale:n}),_r.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}const Dr=function(e){e.forEach((e=>{const t=ei(e);t?t.getViewportsInfo().forEach((e=>{const{renderingEngineId:t,viewportId:n}=e,o=(0,ne.getRenderingEngine)(t);if(!o)return void console.warn("RenderingEngine not available for ".concat(t));const i=o.getViewport(n);ka(i.element)})):console.warn("ToolGroup not available for ".concat(e))}))};function Tr(e,t){if(!(0,ne.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof ne.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{type:n}=e,{volumeId:o,delta:i,scrollSlabs:a}=t;if(e instanceof ne.StackViewport)e.scroll(i,t.debounceLoading,t.loop);else if(e instanceof ne.VolumeViewport)!function(e,t,n){const o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:i,currentStepIndex:a,sliceRangeInfo:r}=ne.utilities.getVolumeViewportScrollInfo(e,t,o);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:c}=r,{focalPoint:d,viewPlaneNormal:h,position:u}=c,{newFocalPoint:g,newPosition:v}=ne.utilities.snapFocalPointToSlice(d,u,s,h,l,n);e.setCamera({focalPoint:g,position:v}),e.render();const m=a+n,p={volumeId:t,viewport:e,delta:n,desiredStepIndex:m,currentStepIndex:a,numScrollSteps:i,currentImageId:e.getCurrentImageId()};(m>i||m<0)&&e.getCurrentImageId()?ne.utilities.triggerEvent(ne.eventTarget,ne.EVENTS.VOLUME_SCROLL_OUT_OF_BOUNDS,p):ne.utilities.triggerEvent(ne.eventTarget,ne.EVENTS.VOLUME_VIEWPORT_SCROLL,p)}(e,o,i,a);else{if(!(e instanceof ne.VideoViewport))throw new Error("Not implemented for Viewport Type: ".concat(n));e.scroll(i)}}const Sr=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:o,volumeId:i}=t,a=(0,ne.getEnabledElement)(e);if(!a)throw new Error("Element has been disabled");const{viewport:r}=a,{imageIndex:s,numberOfSlices:l}=function(e,t){if(e instanceof ne.StackViewport)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};if(e instanceof ne.VolumeViewport)return ne.utilities.getImageSliceDataForVolumeViewport(e);throw new Error("Unsupported viewport type")}(r,o),c=function(e,t){return Cr(t,0,e-1)}(l,n);Tr(r,{delta:c-s,debounceLoading:o,volumeId:i})};function yr(e,t,n,o){let i,a,r,s,l,c,d;const{numComps:h}=e;d=e.getScalarData?e.getScalarData():e.getPointData().getScalars().getData();const u=e.getDimensions();o?[[i,a],[r,s],[l,c]]=o:(i=0,a=u[0],r=0,s=u[1],l=0,c=u[2]);const g=aa.vec3.fromValues(i,r,l),v=e.getDirection(),m=v.slice(0,3),p=v.slice(3,6),f=v.slice(6,9),I=e.getSpacing(),[w,E,C]=I,_=e.indexToWorld(g),b=aa.vec3.fromValues(m[0]*w,m[1]*w,m[2]*w),D=aa.vec3.fromValues(p[0]*E,p[1]*E,p[2]*E),T=aa.vec3.fromValues(f[0]*C,f[1]*C,f[2]*C),S=h||d.length/u[2]/u[1]/u[0],y=u[0]*S,M=u[1]*y,x=[],O=aa.vec3.clone(_);for(let e=l;e<=c;e++){const o=aa.vec3.clone(O);for(let o=r;o<=s;o++){const r=aa.vec3.clone(O);for(let r=i;r<=a;r++){const i=[r,o,e];if(t(O,i)){const t=e*M+o*y+r*S;let a;a=S>2?[d[t],d[t+1],d[t+2]]:d[t],x.push({value:a,index:t,pointIJK:i,pointLPS:O.slice()}),n&&n({value:a,index:t,pointIJK:i,pointLPS:O})}aa.vec3.add(O,O,b)}aa.vec3.copy(O,r),aa.vec3.add(O,O,D)}aa.vec3.copy(O,o),aa.vec3.add(O,O,T)}return x}const{EPSILON:Mr}=ne.CONSTANTS;function xr(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=1/0,a=o?-1/0:0,r=1/0,s=o?-1/0:0,l=1/0,c=o?-1/0:0;const d=3===(null===(n=e[0])||void 0===n?void 0:n.length);for(let t=0;t<e.length;t++){const n=e[t];var h,u;i=Math.min(n[0],i),a=Math.max(n[0],a),r=Math.min(n[1],r),s=Math.max(n[1],s),d&&(l=Math.min(null!==(h=n[2])&&void 0!==h?h:l,l),c=Math.max(null!==(u=n[2])&&void 0!==u?u:c,c))}return t?(i=Math.max(o?t[0]+Mr:0,i),a=Math.min(o?t[0]-Mr:t[0]-1,a),r=Math.max(o?t[1]+Mr:0,r),s=Math.min(o?t[1]-Mr:t[1]-1,s),d&&3===t.length&&(l=Math.max(o?t[2]+Mr:0,l),c=Math.min(o?t[2]-Mr:t[2]-1,c))):o||(i=Math.max(0,i),a=Math.min(1/0,a),r=Math.max(0,r),s=Math.min(1/0,s),d&&(l=Math.max(0,l),c=Math.min(1/0,c))),d?[[i,a],[r,s],[l,c]]:[[i,a],[r,s],null]}function Or(e,t){return xr(e,t,!1)}function Pr(e,t){return xr(e,t,!0)}const{transformWorldToIndex:Ar}=ne.utilities;function Rr(e,t,n){const[o,i]=e,a=aa.vec3.fromValues((o[0]+i[0])/2,(o[1]+i[1])/2,(o[2]+i[2])/2),r=aa.vec3.distance(o,i)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:c}=function(e,t,n,o,i){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),c=aa.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),d=aa.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=aa.vec3.create();aa.vec3.cross(h,c,d);const u=aa.vec3.create(),g=aa.vec3.create();aa.vec3.scaleAndAdd(u,r,d,i),aa.vec3.scaleAndAdd(g,a,d,-i),aa.vec3.scaleAndAdd(u,u,h,-i),aa.vec3.scaleAndAdd(g,g,h,i);return{boundsIJK:Or([Ar(e,u),Ar(e,g),...n.map((t=>Ar(e,t)))],s),topLeftWorld:u,bottomRightWorld:g}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:c}}class Nr{static imageIdToFrames(e){const t=e.match(this.frameRangeExtractor);if(!t||!t[2])return null;const n=t[2].split("-").map((e=>Number(e)));return 1===n.length?n[0]:n}static framesToString(e){return Array.isArray(e)?"".concat(e[0],"-").concat(e[1]):String(e)}static framesToImageId(e,t){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const o=this.framesToString(t);return e.replace(this.frameRangeExtractor,"".concat(n[1]).concat(o))}static setFrameRange(e,t,n){const{referencedImageId:o}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(o,t);const i={...n,annotation:e};(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_MODIFIED,i)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}function Lr(e,t){const{center:n,radius:o}=e,i=e.radius2||o*o;return(t[0]-n[0])*(t[0]-n[0])+(t[1]-n[1])*(t[1]-n[1])+(t[2]-n[2])*(t[2]-n[2])<=i}re(Nr,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const{transformWorldToIndex:kr}=ne.utilities;function Ur(e,t,n,o){const{boundsIJK:i,centerWorld:a,radiusWorld:r}=function(e,t,n){const[o,i]=e,a=aa.vec3.fromValues((o[0]+i[0])/2,(o[1]+i[1])/2,(o[2]+i[2])/2),r=aa.vec3.distance(o,i)/2;let s;if(!n){const e=kr(t,a),n=t.getSpacing(),o=Math.min(...n),i=Math.ceil(r/o);return s=[[e[0]-i,e[0]+i],[e[1]-i,e[1]+i],[e[2]-i,e[2]+i]],{boundsIJK:s,centerWorld:a,radiusWorld:r}}return s=function(e,t,n,o,i){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),c=aa.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),d=aa.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=aa.vec3.create();aa.vec3.cross(h,c,d);const u=aa.vec3.create(),g=aa.vec3.create();aa.vec3.scaleAndAdd(u,r,d,i),aa.vec3.scaleAndAdd(g,a,d,-i),aa.vec3.scaleAndAdd(u,u,h,-i),aa.vec3.scaleAndAdd(g,g,h,i);return Or([kr(e,u),kr(e,g)],s)}(t,n,e,0,r),{boundsIJK:s,centerWorld:a,radiusWorld:r}}(t,e,o),s={center:a,radius:r};yr(e,(e=>Lr(s,e)),n,i)}const{isEqual:Vr}=ne.utilities;function Wr(e){const{metadata:t}=e;return(0,ne.getEnabledElements)().filter((e=>{if(e.FrameOfReferenceUID===t.FrameOfReferenceUID){const n=e.viewport,{viewPlaneNormal:o,viewUp:i}=n.getCamera();return Vr(o,t.viewPlaneNormal)&&(!t.viewUp||Vr(i,t.viewUp))}})).map((e=>e.viewport))}function Hr(e){const t=Wr(e);return t.length?t[0]:void 0}function Br(e,t){const{viewPlaneNormal:n}=e.metadata,{viewPlaneNormal:o}=t.metadata,i=aa.vec3.dot(n,o);if(!aa.glMatrix.equals(1,Math.abs(i)))return!1;const{polyline:a}=e.data.contour,{polyline:r}=t.data.contour,s=aa.vec3.dot(n,a[0]),l=aa.vec3.dot(n,r[0]);return aa.glMatrix.equals(s,l)}function Fr(e,t,n){let o=-1;if(t.forEach(((t,n)=>{o>=0||t.a==e.b&&(o=n)})),o>=0){const e=t[o];return t.splice(o,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:Fr(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Gr(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const o=Fr(n,e,t);if(0==o.remainingLines.length)return[{type:o.type,contourPoints:o.contourPoints}];{const e=Gr(o.remainingLines);return e.push({type:o.type,contourPoints:o.contourPoints}),e}}function qr(e){return Gr(e)}const jr={findContours:Gr,findContoursFromReducedSet:qr};function zr(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),o=e.getLines(),i=new Array(n.getNumberOfPoints()).fill(0).map(((e,t)=>n.getPoint(t).slice())),a=new Array(o.getNumberOfCells()).fill(0).map(((e,t)=>{const n=o.getCell(3*t).slice();return{a:n[0],b:n[1]}}));if(t)return{points:i,lines:a};const r=[];for(const[e,t]of i.entries()){const n=r.findIndex((e=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]));if(n>=0)a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)));else{const n=r.length;r.push(t),a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)))}}return{points:r,lines:a.filter((e=>e.a!==e.b))}}const Kr={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=e.filter((e=>"CLOSED_PLANAR"!==e.type)),i=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return i.forEach(((e,n)=>{const o=[];i.forEach(((i,a)=>{n!=a&&function(e,t,n){const o=[];e.contourPoints.forEach((e=>{o.push([n[e][0],n[e][1]])}));let i=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],o=e[1];let i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){const r=t[e][0],s=t[e][1],l=t[a][0],c=t[a][1];s>o!=c>o&&n<(l-r)*(o-s)/(c-s)+r&&(i=!i)}return i})([n[e][0],n[e][1]],o)||i++})),0===i}(e,i,t)&&o.push(a)})),o.length>0?a.push({contour:e,holes:o}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",o.push(e.contour),e.holes.forEach((e=>{i[e].type="CLOSEDPLANAR_XOR",o.push(i[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{o.push(i[e])}))),o}};var Yr=C(543),Xr=C.n(Yr);const{Labelmap:Jr}=Et;function Zr(e){let{segmentations:t}=e;const{representationData:n,segments:o=[0,1]}=t,{volumeId:i}=n[Jr],a=ne.cache.getVolume(i);if(!a)return void console.warn("No volume found for ".concat(i));const r=a.dimensions[2],s=a.imageData.getPointData().getScalars().getData(),l=a.dimensions[0]*a.dimensions[1];for(let e=0;e<r;e++)for(let t=0;t<a.dimensions[1];t++){const n=t*a.dimensions[0]+e*l;s[n]=0,s[n+a.dimensions[0]-1]=0}const c=[],{FrameOfReferenceUID:d}=a.metadata,h=o.length;for(let e=0;e<h;e++){const t=o[e];if(!t)continue;const n=[],i=Jo().newInstance({name:"Scalars",numberOfComponents:1,size:l*r,dataType:"Uint8Array"}),{containedSegmentIndices:h}=t;for(let t=0;t<r;t++){if($r(t,s,l,e))continue;const o=t*l;try{var u;for(let t=0;t<l;t++){const n=s[t+o];n===e||null!=h&&h.has(n)?i.setValue(t+o,1):i.setValue(t,0)}const r=Xr().newInstance({slice:t}),c=$o().newInstance();c.shallowCopy(a.imageData),c.getPointData().setScalars(i),r.setInputData(c);const g=[1];r.setContourValues(g),r.setMergePoints(!1);const v=zr(r.getOutputData());if(null!==(u=v.points)&&void 0!==u&&u.length){const e=qr(v.lines);n.push({contours:e,polyData:v,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:d})}}catch(e){console.warn(t),console.warn(e)}}const g={FrameOfReferenceUID:d},v={label:t.label,color:t.color,metadata:g,sliceContours:n};c.push(v)}return c}function $r(e,t,n,o){const i=e*n,a=i+n;for(let e=i;e<a;e++)if(t[e]===o)return!1;return!0}class Qr{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:o,projectionPointsImageIds:i}=n.cachedStats;return o.map(((e,n)=>{const o=function(e){const t=[...e[0],...e[1],...e[3],...e[2]].flat().map((e=>e.toFixed(2)));return t}(e),a=function(e,t){const n=t.get("sopCommonModule",e);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(i[n],t);return{NumberOfContourPoints:o.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:o}}))}}re(Qr,"toolName",void 0),Qr.toolName="RectangleROIStartEndThreshold";const es=Qr;class ts{constructor(){}static convert(e,t,n){!function(e){if(null==e||!e.data)throw new Error("Tool data is empty");if(!e.metadata||e.metadata.referenceImageId)throw new Error("Tool data is not associated with any imageId")}(e);const{toolName:o}=e.metadata,i=ts.TOOL_NAMES[o];if(!i)throw new Error("Unknown tool type: ".concat(o,", cannot convert to RTSSReport"));const a=i.getContourSequence(e,n);return{ReferencedROINumber:t+1,ROIDisplayColor:[Math.floor(255*Math.random()),Math.floor(255*Math.random()),Math.floor(255*Math.random())],ContourSequence:a}}static register(e){ts.TOOL_NAMES[e.toolName]=e}}re(ts,"TOOL_NAMES",{}),ts.register(es);const ns=ts;function os(e){var t;return(null!==(t=e.childAnnotationUIDs)&&void 0!==t?t:[]).map((e=>pt(e).data.contour.polyline))}function is(e,t){const n=os(e),o=[];return n.forEach((e=>{const n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);o.push(i)})),o}function as(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,o,i=0]=e,[a,r,s=0]=t,l=a-n,c=r-o,d=s-i;return l*l+c*c+d*d}function rs(e,t,n){let o;const i=as(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(o=e),!o){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/i;o=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...o],distanceSquared:as(n,o)}}function ss(e,t,n){return rs(e,t,n).distanceSquared}const ls=.1;function cs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ls;const n=e.length;if(n<3)return e;const o=t*t,i=[[0,n-1]],a=new Array(n).fill(!1);let r=2;for(a[0]=!0,a[n-1]=!0;i.length;){const[t,n]=i.pop();if(n-t==1)continue;const s=e[t],l=e[n];let c=-1/0,d=-1;for(let o=t+1;o<n;o++){const t=ss(s,l,e[o]);t>c&&(c=t,d=o)}c<o||(a[d]=!0,r++,i.push([d,n]),i.push([t,d]))}const s=new Array(r);for(let t=0,o=0;t<n;t++)a[t]&&(s[o++]=e[t]);return s}function ds(e){if(e.length<3)return 0;const t=e[0];let n=0;for(let o=0,i=e.length;o<i;o++){const a=e[o],r=e[o===i-1?0:o+1],s=a[0]-t[0],l=a[1]-t[1],c=r[0]-t[0];n+=s*(r[1]-t[1])-l*c}return n*=.5,n}function hs(e){return ds(e)>=0?1:-1}function us(e,t,n,o){var i;const{canvasToWorld:a}=n,{data:r}=e,{targetWindingDirection:s}=t;let{points:l}=t;var c;null!=o&&null!==(i=o.decimate)&&void 0!==i&&i.enabled&&(l=cs(t.points,null==o||null===(c=o.decimate)||void 0===c?void 0:c.epsilon));let{closed:d}=t;const h=l.length,u=new Array(h),g=hs(l),v=ht(e);if(void 0===d){let e=!1;if(l.length>3){const t=as(l[0],l[h-1]);e=ne.utilities.isEqual(0,t)}d=e}let m=v?-1*v.data.contour.windingDirection:s;void 0===m?m=g:m!==g&&l.reverse();for(let e=0;e<h;e++)u[e]=a(l[e]);r.contour.polyline=u,r.contour.closed=d,r.contour.windingDirection=m,It(e)}const gs="PlanarFreehandContourSegmentationTool";function vs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const{viewport:n,sliceData:o,annotation:i}=e,a=new Map,{toolName:r,originalToolName:s}=i.metadata,l=s||r,c=(st(l,n.element)||[]).filter((e=>!e.metadata.originalToolName||e.metadata.originalToolName===l));if(l!==gs){const e=st(gs,n.element);null!=e&&e.length&&e.forEach((e=>{const{metadata:t}=e;t.originalToolName===l&&t.originalToolName!==t.toolName&&c.push(e)}))}if(null==c||!c.length)return a;for(let e=0;e<o.numberOfSlices;e++){const n=c.filter((t=>t.metadata.sliceIndex===e));if(null==n||!n.length)continue;const o=n.filter((e=>t.every((t=>{const n=t.parentKey?t.parentKey(e):e,o=null==n?void 0:n[t.key];return Array.isArray(o)?o.every(((e,n)=>e===t.value[n])):o===t.value}))));o.length&&a.set(e,o)}return a}function ms(e,t,n){const o=ne.utilities.deepMerge({data:{},metadata:{}},n);return Object.assign(o,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(o.data,{handles:{points:t.points||t||[],interpolationSources:t.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:{...n.data.contour,polyline:e}}),o}function ps(e,t){const n=e.get(t);return!(null!=n&&n.length)||1===n.length&&n[0].autoGenerated}function fs(e,t,n){const[o]=e;t[o]||(t[o]={pair:e,list:[]}),t[o].list.push(n)}function Is(e,t,n){const o=[];let i=!0;for(let a=e-1;a>=t[0];a--){const e=n.get(a);if(null!=e&&e.length){if(e[0].autoGenerated)continue;e.length>1&&(i=!1),o.push(a);break}}if(i&&o.length){for(let a=e+1;a<=t[1];a++){const e=n.get(a);if(null!=e&&e.length){if(e[0].autoGenerated)continue;e.length>1&&(i=!1),o.push(a);break}}if(i&&!(o.length<2))return o}}const{PointsManager:ws}=ne.utilities;function Es(e,t,n,o,i){n<t&&(n+=i);const a=n-t,r=Math.ceil(a/o);if(r<=0)return e[e.length-1]!==n&&e.push(Cs(n,i)),n;for(let n=1;n<=r;n++){const o=Cs(t+n*a/r,i);e.push(o)}return e[e.length-1]}function Cs(e,t){return(Math.round(e)+t)%t}function _s(e,t){let n=e;const o=(null==t?void 0:t.numDimensions)||2,i=3===o;if(!Array.isArray(e[0])){const t=e,a=t.length/o;n=new Array(t.length/o);for(let e=0,r=a;e<r;e++)n[e]=[t[e*o],t[e*o+1]],i&&n[e].push(t[e*o+2])}let a=1/0,r=1/0,s=-1/0,l=-1/0,c=1/0,d=-1/0;for(let e=0,t=n.length;e<t;e++){const[t,o,h]=n[e];a=a<t?a:t,r=r<o?r:o,s=s>t?s:t,l=l>o?l:o,i&&(c=c<h?c:h,d=d>h?d:h)}return i?{minX:a,maxX:s,minY:r,maxY:l,minZ:c,maxZ:d}:{minX:a,maxX:s,minY:r,maxY:l}}function bs(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function Ds(e,t,n,o){let i=!1;const a=e[0]<t[0]?e[0]:t[0],r=e[1]<t[1]?e[1]:t[1],s=e[0]>t[0]?e[0]:t[0],l=e[1]>t[1]?e[1]:t[1],c=n[0]<o[0]?n[0]:o[0],d=n[1]<o[1]?n[1]:o[1],h=n[0]>o[0]?n[0]:o[0],u=n[1]>o[1]?n[1]:o[1];if(a>h||s<c||r>u||l<d)return!1;const g=[Ts(e,t,n),Ts(e,t,o),Ts(n,o,e),Ts(n,o,t)];return g[0]!==g[1]&&g[2]!==g[3]||((0===g[0]&&Ss(e,n,t)||0===g[1]&&Ss(e,o,t)||0===g[2]&&Ss(n,e,o)||0===g[3]&&Ss(n,t,o))&&(i=!0),i)}function Ts(e,t,n){const o=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===o?0:o>0?1:2}function Ss(e,t,n){return t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1])}function ys(e,t,n){let o,i;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(i=0,o=1):(i=e.length-1,o=0);for(let a=o;a<e.length;a++){if(Ds(t,n,e[i],e[a]))return[i,a];i=a}}function Ms(e,t){for(let n=0,o=e.length;n<o;n++){const i=ys(t,e[n],e[n===o-1?0:n+1]);if(2===(null==i?void 0:i.length))return!0}return!1}function xs(e){if(e.length<3)return!1;const t=e.length,n=as(e[0],e[t-1]);return aa.glMatrix.equals(0,n)}function Os(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{closed:void 0};if(e.length<3)return!1;const o=e.length;let i=0;const{closed:a,holes:r}=n;if(null!=r&&r.length)for(const e of r)if(Os(e,t))return!1;const s=!(void 0===a?xs(e):a),l=e.length-(s?1:2);for(let n=0;n<=l;n++){const a=e[n],r=e[n===o-1?0:n+1],s=a[0]>=r[0]?a[0]:r[0],l=a[1]>=r[1]?a[1]:r[1],c=a[1]<=r[1]?a[1]:r[1];if(t[0]<=s&&t[1]>=c&&t[1]<l){let e=a[0]===r[0];if(!e){const n=(t[1]-a[1])*(r[0]-a[0])/(r[1]-a[1])+a[0];e=t[0]<=n}i+=e?1:0}}return!!(i%2)}function Ps(e,t){for(let n=0,o=t.length;n<o;n++)if(!Os(e,t[n]))return!1;return!0}function As(e,t,n){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const i=[],a=e.length,r=a-(o?1:2);for(let o=0;o<=r;o++){const r=o===a-1?0:o+1;Ds(t,n,e[o],e[r])&&i.push([o,r])}return i}function Rs(e){const t=ds(e);return[0,0,t/Math.abs(t)]}const Ns=.01;function Ls(e,t,n){const o=e[0]<=t[0]?e[0]:t[0],i=e[0]>=t[0]?e[0]:t[0],a=e[1]<=t[1]?e[1]:t[1],r=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=o-Ns&&n[0]<=i+Ns&&n[1]>=a-Ns&&n[1]<=r+Ns))return!1;const s=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(s>=0?s:-s)<=Ns}const ks=.01;function Us(e,t,n,o){const i=[t[0]-e[0],t[1]-e[1]],a=[o[0]-n[0],o[1]-n[1]],r=a[1]*i[0]-a[0]*i[1];if((r>=0?r:-r)<ks){const i=[e[0]<t[0]?e[0]:t[0],e[0]>t[0]?e[0]:t[0],e[1]<t[1]?e[1]:t[1],e[1]>t[1]?e[1]:t[1]],a=[n[0]<o[0]?n[0]:o[0],n[0]>o[0]?n[0]:o[0],n[1]<o[1]?n[1]:o[1],n[1]>o[1]?n[1]:o[1]];if(!(i[0]<=a[1]&&i[1]>=a[0]&&i[2]<=a[3]&&i[3]>=a[2]))return;if(!(Ls(e,t,n)||Ls(e,t,o)||Ls(n,o,e)))return;return[.5*((i[0]>a[0]?i[0]:a[0])+(i[1]<a[1]?i[1]:a[1])),.5*((i[2]>a[2]?i[2]:a[2])+(i[3]<a[3]?i[3]:a[3]))]}let s=e[1]-n[1],l=e[0]-n[0];const c=i[0]*s-i[1]*l;return s=(a[0]*s-a[1]*l)/r,l=c/r,[e[0]+s*i[0],e[1]+s*i[1]]}var Vs=function(e){return e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection",e}(Vs||{}),Ws=function(e){return e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside",e}(Ws||{}),Hs=function(e){return e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering",e}(Hs||{});function Bs(e){for(let t=0,n=e.length;t<n;t++){const o=e[t];o.next||(o.next=e[t===n-1?0:t+1])}}function Fs(e,t){const n=[],o=[],i=new Map;let a=Os(t,e[0])?Hs.Exiting:Hs.Entering;for(let o=0,r=e.length;o<r;o++){const s=e[o],l=Os(t,s),c={type:Vs.Vertex,coordinates:s,position:l?Ws.Inside:Ws.Outside,visited:!1,next:null};n.push(c);const d=e[o===r-1?0:o+1],h=As(t,s,d).map((e=>{const n=e[0],o=t[e[0]],i=t[e[1]],a=Us(s,d,o,i);return{sourceLineSegmentId:n,coordinate:a,targetStartPointDistSquared:as(s,a)}}));h.sort(((e,t)=>e.targetStartPointDistSquared-t.targetStartPointDistSquared)),h.forEach((e=>{const{sourceLineSegmentId:t,coordinate:o}=e,r={type:Vs.Intersection,coordinates:o,position:Ws.Edge,direction:a,visited:!1,next:null},s={...r,direction:Hs.Unknown,cloned:!0};a===Hs.Entering?r.next=s:s.next=r;let l=i.get(t);l||(l=[],i.set(t,l)),n.push(r),l.push(s),a*=-1}))}for(let e=0,n=t.length;e<n;e++){const n=e,a=t[e],r={type:Vs.Vertex,coordinates:a,visited:!1,next:null};o.push(r);const s=i.get(n);null!=s&&s.length&&s.map((e=>({intersectionPoint:e,lineSegStartDistSquared:as(a,e.coordinates)}))).sort(((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared)).map((e=>{let{intersectionPoint:t}=e;return t})).forEach((e=>o.push(e)))}return Bs(n),Bs(o),{targetPolylinePoints:n,sourcePolylinePoints:o}}function Gs(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.visited&&n.position===Ws.Outside)return n}}function qs(e,t){const n=Rs(e),o=Rs(t),i=aa.vec3.dot(o,n);aa.glMatrix.equals(1,i)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Fs(e,t),r=Gs(a);if(!r)return e.slice();const s=[r.coordinates];let l=r.next;for(;l!==r;)l.type===Vs.Intersection&&l.cloned||s.push(l.coordinates),l=l.next;return s}function js(e,t){const n=Rs(e),o=Rs(t),i=aa.vec3.dot(o,n);aa.glMatrix.equals(-1,i)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Fs(e,t);let r=null;const s=[];for(;r=Gs(a);){const e=[r.coordinates];let t=r.next;for(r.visited=!0;t!==r;)t.visited=!0,t.type===Vs.Intersection&&t.cloned||e.push(t.coordinates),t=t.next;s.push(e)}return s}function zs(e,t){const n=e.length,o=[];for(let i=0;i<n;i++){const n=e[i];n.getFrameOfReferenceUID()===t&&o.push(n)}return o}const{Active:Ks,Passive:Ys,Enabled:Xs}=Je;function Js(e,t){const n=e.length,o=[];for(let i=0;i<n;i++){const n=e[i],a=Qo(n.id,n.renderingEngineId);a&&(Zs(a,t)&&o.push(n))}return o}function Zs(e,t){const{toolOptions:n}=e,o=n[t];if(!o)return!1;const i=o.mode;return i===Ks||i===Ys||i===Xs}const $s=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const o=e.getCamera();return Math.abs(aa.vec3.dot(o.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Qs(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=(0,ne.getEnabledElement)(e),{renderingEngine:i,FrameOfReferenceUID:a}=o;let r=i.getViewports();r=zs(r,a),r=Js(r,t);const s=i.getViewport(o.viewportId);return n&&(r=$s(r,s.getCamera())),r.map((e=>e.id))}function el(e){var t;return!(null===(t=e.data)||void 0===t||!t.segmentation)}function tl(e,t){const{segmentation:n}=e.data,{segmentation:o}=t.data;return n.segmentationId===o.segmentationId&&n.segmentIndex===o.segmentIndex}function nl(e){if(!e.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,o=Bt(t),{annotationUIDsMap:i}=(null==o?void 0:o.representationData.CONTOUR)||{},a=null==i?void 0:i.get(n);a&&(a.delete(e.annotationUID),a.size||i.delete(n))}function ol(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,o=Bt(t);o.representationData.CONTOUR||(o.representationData.CONTOUR={annotationUIDsMap:new Map});const{annotationUIDsMap:i}=o.representationData.CONTOUR;let a=i.get(n);a||(a=new Set,i.set(n,a)),i.set(n,a.add(e.annotationUID))}function il(e){const t=e.toolName,n=void 0!==Ye.tools[t];if(!t)throw new Error("No Tool Found for the ToolClass ".concat(e.name));if(n)throw new Error("".concat(t," has already been added globally"));Ye.tools[t]={toolClass:e}}function al(e){const t=e.toolName;if(!t)throw new Error("No tool found for: ".concat(e.name));if(void 0===!Ye.tools[t])throw new Error("".concat(t," cannot be removed because it has not been added"));delete Ye.tools[t]}let rl=function(e){return e[e.CounterClockwise=-1]="CounterClockwise",e[e.Unknown=0]="Unknown",e[e.Clockwise=1]="Clockwise",e}({});const sl="PlanarFreehandContourSegmentationTool";function ll(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{toolName:n}=_v,o=Qo(e.id,e.renderingEngineId);let i;return o.hasTool(n)?o.getToolOptions(n)||(i="Tool ".concat(n," must be in active/passive state")):i="Tool ".concat(n," not added to ").concat(o.id," toolGroup"),i&&!t&&console.warn(i),!i}function cl(e,t){const n=e.length,o=new Array(n);for(let i=0;i<n;i++)o[i]=t.worldToCanvas(e[i]);return o}function dl(e,t,n){const{windingDirection:o}=t.data.contour,{windingDirection:i}=n.data.contour;o===i&&(n.data.contour.polyline.reverse(),n.data.contour.windingDirection=-1*o),dt(t,n),nl(n);const{element:a}=e,r=(0,ne.getEnabledElement)(a),{renderingEngine:s}=r,l=new Set([sl,t.metadata.toolName,n.metadata.toolName]);for(const e of l.values()){const t=Qs(a,e);Ua(s,t)}}const{PointsManager:hl}=ne.utilities;function ul(e,t,n,o){const i=n.get(t[0])[0],a=n.get(t[1])[0],r=Cl(i.data.contour.polyline),s=Cl(a.data.contour.polyline),{c1Interp:l,c2Interp:c}=function(e,t){const n=El(e),o=El(t),i=Math.max(Math.ceil(n[n.length-1]/.2),Math.ceil(o[o.length-1]/.2)),a=wl(n),r=wl(o),s=i+t.x.length,l=i+e.x.length,c=Il(s,a),d=Il(l,r),h=fl(s-2,e.x.length),u=fl(l-2,t.x.length),g=pl(c,h),v=pl(d,u),m=ml(e,g),p=ml(t,v);return function(e,t){const n=e.x.length,o={startingNode:0,totalSquaredXYLengths:1/0};for(let i=0;i<n;i++){let a=i,r=0;for(let o=0;o<n;o++)r+=(e.x[a]-t.x[o])**2+(e.y[a]-t.y[o])**2+(e.z[a]-t.z[o])**2,a++,a===n&&(a=0);r<o.totalSquaredXYLengths&&(o.totalSquaredXYLengths=r,o.startingNode=i)}const i=o.startingNode;vl(e.x,i),vl(e.y,i),vl(e.z,i),vl(e.I,i)}(m,p),function(e,t){const n={x:[],y:[],z:[],I:[]},o={x:[],y:[],z:[],I:[]};for(let i=0;i<e.x.length;i++)(e.I[i]||t.I[i])&&(n.x.push(e.x[i]),n.y.push(e.y[i]),n.z.push(e.z[i]),n.I.push(e.I[i]),o.x.push(t.x[i]),o.y.push(t.y[i]),o.z.push(t.z[i]),o.I.push(t.I[i]));return{c1Interp:n,c2Interp:o}}(m,p)}(r,s);l.kIndex=t[0],c.kIndex=t[1],e.forEach((function(e){!function(e,t,n,o,i,a,r){const[s,l]=o,c=(n-s)/(l-s),d=i.get(s)[0],h=i.get(l)[0],u=function(e,t,n,o){const i=o?e.I:t.I,a=hl.fromXYZ(e),r=hl.fromXYZ(t),{length:s}=a,l=hl.create3(s),c=aa.vec3.create(),d=aa.vec3.create(),h=hl.create3(s);h.kIndex=e.kIndex;const u=hl.create3(s);u.kIndex=t.kIndex;for(let t=0;t<e.x.length;t++)if(i[t]){const e=a.getPoint(t),o=r.getPoint(t);h.push(e),u.push(o),aa.vec3.sub(c,o,e),l.push(aa.vec3.scaleAndAdd(d,e,c,n))}return l.sources=[h,u],l}(e,t,c,a),g=c>.5?h:d,v=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;const n=ws.create3(t);n.sources=[];const{sources:o}=n,{length:i,sources:a=[]}=e;if(i<15)return e.subselect(t);const r=Math.floor(Math.max(2*i/t,10));a.forEach((()=>o.push(ws.create3(t))));const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const{length:n}=e,o=aa.vec3.create(),i=aa.vec3.create(),a=new Float32Array(n);for(let r=0;r<n;r++){const s=e.getPoint(r),l=e.getPoint(r-t),c=e.getPoint((r+t)%n);aa.vec3.sub(o,s,l),aa.vec3.sub(i,c,s);const d=aa.vec3.dot(o,i)/(aa.vec3.len(o)*aa.vec3.len(i));a[r]=d}return a}(e,5),l=function(e,t){const{max:n,deviation:o}=function(e){const{length:t}=e;let n=0,o=1/0,i=-1/0,a=0;for(let a=0;a<t;a++){const t=e[a];n+=t,o=Math.min(o,t),i=Math.max(i,t)}const r=n/t;for(let n=0;n<t;n++){const t=e[n]-r;a+=t*t}return{mean:r,max:i,min:o,sumSq:a,deviation:Math.sqrt(a/t)}}(e),{length:i}=e;if(o<.01||i<3*t)return[];const a=[];let r,s=null,l=0;for(let t=0;t<i;t++){const i=e[t];i<n-o?s?(s[2]=t,i<r&&(r=i,l=t),s[1]=l):(r=i,l=t,s=[t,t,t]):s&&(a.push(s),s=null)}return s&&(0===a[0][0]?a[0][0]=s[0]:(s[1]=l,s[2]=i-1,a.push(s))),a}(s,t),c=[];if((null==l?void 0:l.length)>2){let e=-1;const t=r/3;l.forEach((n=>{const[o,,a]=n,s=Math.ceil((o+a)/2);a-e<t||(s-o>2*t?(Es(c,e,o,r,i),e=Es(c,o,s,r,i)):e=Es(c,e,s,r,i),a-e>t&&(e=Es(c,e,a,r,i)))}));const n=c[0];Cs(n+i-e,i)>2*t&&Es(c,e,n-t,r,i)}else{const e=Math.floor(i/t);Es(c,-1,i-e,e,i)}return c.forEach((t=>{const i=e.getPointArray(t);n.push(i),a.forEach(((e,n)=>o[n].push(e.getPoint(t))))})),n}(u);i.has(n)?function(e,t,n,o,i){const a=gl(o,n,i),r=ms(e.points,t,a);Object.assign(a,{metadata:r.metadata,data:r.data})}(u,v,n,g,r):function(e,t,n,o,i){var a;const r=e.points,{viewport:s}=i,l=ms(r,t,o),c=s.getReferenceId({sliceIndex:n});l.metadata.referencedImageId=c,l.metadata.sliceIndex=n,gt(l,s.element),null===(a=o.onInterpolationComplete)||void 0===a||a.call(o,l,o);const{parentAnnotationUID:d}=o;d&&dl(s,gl(pt(d),n,i),l)}(u,v,n,g,r)}(l,c,e,t,n,r.x.length>s.x.length,o)}))}function gl(e,t,n){const{viewport:o}=n,i=st(e.metadata.toolName,o.element);for(let n=0;n<i.length;n++){const o=i[n];if(o.interpolationUID===e.interpolationUID&&o.metadata.sliceIndex===t)return o}}function vl(e,t){t-=e.length*Math.floor(t/e.length);const n=e.splice(0,t);return e.push(...n),e}function ml(e,t){const n={x:[],y:[],z:[],I:[]};for(let o=0;o<e.x.length-1;o++){n.x.push(e.x[o]),n.y.push(e.y[o]),n.z.push(e.z[o]),n.I.push(!0);const i=(e.x[o+1]-e.x[o])/(t[o]+1),a=(e.y[o+1]-e.y[o])/(t[o]+1),r=(e.z[o+1]-e.z[o])/(t[o]+1);for(let e=0;e<t[o]-1;e++)n.x.push(n.x[n.x.length-1]+i),n.y.push(n.y[n.y.length-1]+a),n.z.push(n.z[n.z.length-1]+r),n.I.push(!1)}return n}function pl(e,t){const n=[];for(let t=0;t<e.length;++t)n[t]=t;n.sort((function(t,n){return e[t]<e[n]?-1:1}));const o=[];for(let e=0;e<t.length;e++)o.push(t[n[e]]);const i=o.reduce((function(e,t,n){return t&&e.push(n),e}),[]),a=[];for(let e=0;e<i.length-1;e++)a.push(i[e+1]-i[e]);return a}function fl(e,t){const n=new Array(e+t);return n.fill(!1,0,e),n.fill(!0,e,e+t),n}function Il(e,t){const n=1/(e-1),o=[n];for(let t=1;t<e-2;t++)o.push(o[o.length-1]+n);return o.concat(t)}function wl(e){const t=[];for(let n=0;n<e.length;n++)t.push(e[n]/e[e.length-1]);return t}function El(e){const t=[0];for(let n=1;n<e.x.length;n++){const o=Math.sqrt((e.x[n]-e.x[n-1])**2+(e.y[n]-e.y[n-1])**2+(e.z[n]-e.z[n-1])**2);t.push(t[n-1]+o)}return t}function Cl(e){const t={x:[],y:[],z:[]};for(let n=0;n<e.length;n++)t.x[n]=e[n][0],t.y[n]=e[n][1],t.z[n]=e[n][2];return t.x.push(t.x[0]),t.y.push(t.y[0]),t.z.push(t.z[0]),t}const _l=function(e){if(!e.annotation)return;const{isInterpolationUpdate:t,annotation:n}=e;queueMicrotask((()=>{try{t&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(e){const{annotation:t}=e;!function(e){const{parentAnnotationUID:t,annotationUID:n}=e;if(!t)return e.interpolationUID;const o=pt(t),{interpolationUID:i}=o,a=o.childAnnotationUIDs.indexOf(n);e.interpolationUID="".concat(i,"-").concat(a),e.interpolationUID}(t);const{interpolationData:n,interpolationList:o}=function(e,t){const n=vs(t,[{key:"interpolationUID",value:t.interpolationUID}]),o=function(e){let t=1/0,n=-1/0,o=!1;for(const[i,a]of e.entries())a.length&&(t=Math.min(i,t),n=Math.max(i,n),o=!0);if(o)return[t,n]}(n);if(!o)return void console.warn("No annotations found to interpolate",n);const i=function(e,t){for(const[n,o]of e)for(let e=0;e<o.length;e++)if(o[e].annotationUID===t)return n}(n,e.annotationUID),a=[];for(let e=o[0]+1;e<o[1];e++)if(ps(n,e)){const t=Is(e,o,n);(null==t?void 0:t[0])!==i&&(null==t?void 0:t[1])!==i||fs(t,a,e)}return{interpolationData:n,interpolationList:a}}(t,e)||{};if(!n||!o)return;const i={toolName:t.metadata.toolName,toolType:t.metadata.toolName,viewport:e.viewport};for(let e=0;e<o.length;e++)o[e]&&ul(o[e].list,o[e].pair,n,i);const{id:a,renderingEngineId:r,element:s}=e.viewport,l={annotation:t,element:s,viewportId:a,renderingEngineId:r};o.length&&(0,ne.triggerEvent)(e.viewport.element,ie.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,l)}(e)}finally{t&&(n.autoGenerated=!0)}}))};function bl(e){const{annotation:t}=e,n=vs(e,[{key:"interpolationUID",value:e.interpolationUID}]),o=t.metadata.sliceIndex;let i=-1,a=e.sliceData.numberOfSlices;for(const[e,t]of n.entries()){if(e===o)continue;const n=t.find((e=>!e.autoGenerated));n&&(e<o?i=Math.max(e,i):a=Math.min(e,a))}const r=[];for(const[e,t]of n.entries())e<=i||e>=a||e===o||t.forEach((e=>{e.autoGenerated&&(mt(e.annotationUID),r.push(e))}));if(r.length){const t={annotations:r,element:e.viewport.element,viewportId:e.viewport.id,renderingEngineId:e.viewport.getRenderingEngine().id};(0,ne.triggerEvent)(e.viewport.element,ie.INTERPOLATED_ANNOTATIONS_REMOVED,t)}if(i>=0&&a<e.sliceData.numberOfSlices){const t=n.get(a)[0],o={viewport:e.viewport,sliceData:{numberOfSlices:e.sliceData.numberOfSlices,imageIndex:t.metadata.sliceIndex},annotation:t,interpolationUID:t.interpolationUID};_l(o)}}var Dl;const{uuidv4:Tl}=ne.utilities,Sl=[je.HandlesUpdated,je.InterpolationUpdated];class yl{static addTool(e){this.toolNames.includes(e)||this.toolNames.push(e)}static acceptAutoGenerated(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{toolNames:n,segmentationId:o,segmentIndex:i,sliceIndex:a}=t;for(const t of n||yl.toolNames){const n=st(t,e);if(null!=n&&n.length)for(const e of n){const{interpolationUID:t,data:n,autoGenerated:r,metadata:s}=e;t&&(e.interpolationCompleted=!0),r&&(i&&i!==n.segmentation.segmentIndex||void 0!==a&&s&&a!==s.sliceIndex||o&&o!==n.segmentation.segmentationId||(ol(e),e.autoGenerated=!1))}}}}function Ml(e){return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getCurrentImageIdIndex()}}function xl(e,t){yl.acceptAutoGenerated(e,t)}Dl=yl,re(yl,"toolNames",[]),re(yl,"handleAnnotationCompleted",(e=>{var t;const n=e.detail.annotation;if(null==n||!n.metadata)return;const{toolName:o,originalToolName:i}=n.metadata;if(!Dl.toolNames.includes(o)&&!Dl.toolNames.includes(i))return;const a=Hr(n);if(!a)return void console.warn("Unable to find viewport for",n);const r={viewport:a,sliceData:Ml(a),annotation:n,interpolationUID:n.interpolationUID},s=!!n.interpolationUID;if(n.autoGenerated=!1,s)return bl(r),void _l(r);const l=[{key:"segmentIndex",value:n.data.segmentation.segmentIndex,parentKey:e=>e.data.segmentation},{key:"viewPlaneNormal",value:n.metadata.viewPlaneNormal,parentKey:e=>e.metadata},{key:"viewUp",value:n.metadata.viewUp,parentKey:e=>e.metadata}];let c=function(e,t){const n=vs(e,t),o=[];if(null==n||!n.size)return o;for(const e of n.values())e.forEach((e=>{o.push(e)}));return o}(r,l);const{sliceIndex:d}=n.metadata,h=new Set;c.forEach((e=>{if(e.interpolationCompleted||e.metadata.sliceIndex===d){const{interpolationUID:t}=e;h.add(t)}})),c=c.filter((e=>!h.has(e.interpolationUID))),n.interpolationUID=(null===(t=c[0])||void 0===t?void 0:t.interpolationUID)||Tl(),r.interpolationUID=n.interpolationUID,_l(r)})),re(yl,"handleAnnotationUpdate",(e=>{const t=e.detail.annotation,{changeType:n=je.HandlesUpdated}=e.detail;if(null==t||!t.metadata)return;const{toolName:o,originalToolName:i}=t.metadata;if(!Dl.toolNames.includes(o)&&!Dl.toolNames.includes(i)||!Sl.includes(n))return;const a=Hr(t);if(!a)return void console.warn("Unable to find matching viewport for annotation interpolation",t);t.autoGenerated&&(ol(t),t.autoGenerated=!1);const r={viewport:a,sliceData:Ml(a),annotation:t,interpolationUID:t.interpolationUID,isInterpolationUpdate:n===je.InterpolationUpdated};_l(r)})),re(yl,"handleAnnotationDelete",(e=>{const t=e.detail.annotation;if(null==t||!t.metadata)return;const{toolName:n}=t.metadata;if(!Dl.toolNames.includes(n)||t.autoGenerated)return;const o=Hr(t);if(!o)return void console.warn("No viewport, can't delete interpolated results",t);const i={viewport:o,sliceData:Ml(o),annotation:t,interpolationUID:t.interpolationUID};t.autoGenerated=!1,bl(i)}));const{isEqual:Ol}=ne.utilities;function Pl(e,t){const{polyline:n}=e.data.contour,{points:o}=e.data.handles,{length:i}=o;if(t===i)return n.length;if(t<0&&(t=(t+i)%i),0===t)return 0;const a=o[t],r=n.findIndex((e=>Ol(a,e)));if(-1!==r)return r;let s=1/0;return n.reduce(((e,t,n)=>{const o=aa.vec3.squaredDistance(t,a);return o<s?(s=o,n):e}),-1)}const Al=function(e,t){let n=0;for(let t=0;t<e.length-1;t++){const o=e[t],i=e[t+1];n+=Math.sqrt(Math.pow(i[0]-o[0],2)+Math.pow(i[1]-o[1],2))}if(t){const t=e[0],o=e[e.length-1];n+=Math.sqrt(Math.pow(o[0]-t[0],2)+Math.pow(o[1]-t[1],2))}return n};var Rl=function(e){return e.OnInteractionStart="onInteractionStart",e.OnInteractionEnd="onInteractionEnd",e.Preview="preview",e.RejectPreview="rejectPreview",e.AcceptPreview="acceptPreview",e.Fill="fill",e.StrategyFunction="strategyFunction",e.CreateIsInThreshold="createIsInThreshold",e.Initialize="initialize",e.INTERNAL_setValue="setValue",e.ComputeInnerCircleRadius="computeInnerCircleRadius",e}(Rl||{});const Nl=Rl,Ll={[Nl.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[Nl.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:o,centerIJK:i,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(null==a||!a.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let c=!1,d=!1;if(yr(s,r.isInObject,(e=>{let{value:o}=e;c||(c=o===t),d||(d=o===n)}),o.boundsIJK),!c&&!d)return;let h=o.getAtIJKPoint(i);if(h===n){if(!l)return;h=l.segmentIndex}else d&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},kl={[Nl.Initialize]:e=>{const{operationName:t,centerIJK:n,strategySpecificConfiguration:o,segmentationVoxelManager:i,imageVoxelManager:a,segmentIndex:r}=e,{THRESHOLD:s}=o;if(null==s||!s.isDynamic||!n||!r)return;if(t===Nl.RejectPreview||t===Nl.OnInteractionEnd)return;const{boundsIJK:l}=i,{threshold:c,dynamicRadius:d=0}=s,h=c?0:d,u=l.map(((e,t)=>{const[o,i]=e;return[Math.max(o,n[t]-h),Math.min(i,n[t]+h)]})),g=c||[1/0,-1/0];a.forEach((e=>{let{value:t}=e;const n=Array.isArray(t)?aa.vec3.len(t):t;g[0]=Math.min(n,g[0]),g[1]=Math.max(n,g[1])}),{boundsIJK:u}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[Nl.OnInteractionStart]:e=>{var t;const{strategySpecificConfiguration:n,preview:o}=e;(null!=n&&null!==(t=n.THRESHOLD)&&void 0!==t&&t.isDynamic||o)&&(n.THRESHOLD.threshold=null)},[Nl.ComputeInnerCircleRadius]:e=>{const{configuration:t,viewport:n}=e,{THRESHOLD:{dynamicRadius:o=0}={}}=t.strategySpecificConfiguration||{},{spacing:i}=n.getImageData(),a=[n.element.clientWidth/2,n.element.clientHeight/2],r=o*i[0],s=n.canvasToWorld(a).map((e=>e+r)),l=n.worldToCanvas(s),c=Math.abs(a[0]-l[0]),{strategySpecificConfiguration:d,activeStrategy:h}=t;d[h]||(d[h]={}),d[h].dynamicRadiusInCanvas=c}},Ul={[Nl.Initialize]:e=>{e.segmentIndex=0}};function Vl(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const Wl=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=n.onFlood,i=n.onBoundary,a=n.equals,r=n.diagonals||!1,s=v(t),l=function(e){const t=[],n=function(e){return e.split("").map((function(e){return parseInt(e,10)-1}))};for(let o=0;o<Math.pow(3,e);o+=1){const i=Vl(o.toString(3),"0",e);t.push(n(i))}return t}(t.length).filter((function(e){const t=function(e){let t=0;for(let n=0;n<e.length;n+=1)0!==e[n]&&(t+=1);return t}(e);return 0!==t&&(1===t||r)})),c=[],d=[],h=new Set,u=new Map;for(c.push({currentArgs:t});c.length>0;)g(c.pop());return{flooded:d,boundaries:function(){const e=Array.from(u.values());return e.reverse(),e}()};function g(e){const t=e.currentArgs,n=e.previousArgs;(function(e){const[t,n,o=0]=e,i=t+32768+65536*(n+32768+65536*(o+32768));return h.has(i)})(t)||(function(e){const[t,n,o=0]=e,i=t+32768+65536*(n+32768+65536*(o+32768));h.add(i)}(t),function(e){const t=v(e);return a?a(t,s):t===s}(t)?(function(e){d.push(e),o&&o(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],o=e.slice(0);for(let t=0;t<e.length;t+=1)o[t]+=n[t];c.push({currentArgs:o,previousArgs:e})}}(t)):function(e){const[t,n,o=0]=e,a=t+32768+65536*(n+32768+65536*(o+32768));u.set(a,e),i&&i(...e)}(n))}function v(t){return e(...t)}},Hl={determineSegmentIndex:Ll,dynamicThreshold:kl,erase:Ul,islandRemoval:{[Nl.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:o,previewSegmentIndex:i,segmentIndex:a}=e;if(!o.THRESHOLD||null===a)return;const r=t.getPoints();if(null==r||!r.length)return;if(void 0===i)return;const s=t.getBoundsIJK().map(((e,t)=>[Math.min(e[0],...r.map((e=>e[t]))),Math.max(e[1],...r.map((e=>e[t])))]));if(s.find((e=>e[0]<0||e[1]>65535)))return;const l=new Set,c=(e,t,o)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||o<s[2][0]||o>s[2][1])return-1;const r=n.toIndex([e,t,o]);if(l.has(r))return-2;const c=n.getAtIndex(r),d=c===i||c===a?1:0;return d||n.addPoint(r),d};let d=0;const h=(e,o,a)=>{const r=n.toIndex([e,o,a]);l.has(r)||(t.setAtIJK(e,o,a,i),l.add(r),d++)};r.forEach((e=>{1===c(...e)&&Wl(c,e,{onFlood:h,diagonals:!0})}));let u=0,g=0;t.forEach((e=>{let{index:o,pointIJK:r,value:s}=e;const c=n.getAtIndex(o);if(l.has(o)){g++;const e=s===a?a:i;t.setAtIJKPoint(r,e)}else if(c===i){u++;const e=null!=s?s:0;t.setAtIJKPoint(r,e)}}),{}),d-g!=0&&console.warn("There were flooded=",d,"cleared=",u,"preview count=",g,"not handled",d-g);const v=new Set(n.points||[]);l.clear();for(const e of v.keys()){if(l.has(e))continue;let n=!0;const o=new Set,a=(e,i,a)=>{const r=t.toIndex([e,i,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||i!==s[1][0]&&i!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&o.add(r)},r=t.toIJK(e);if(0===c(...r)&&(Wl(c,r,{onFlood:a,diagonals:!1}),n))for(const e of o)t.setAtIndex(e,i)}Vt(e.segmentationId,t.getArrayOfSlices())}},preview:{[Nl.Preview]:function(e){var t;const{previewColors:n,strategySpecificConfiguration:o,enabledElement:i}=e;if(!n||!o)return;e.preview&&delete e.preview,delete o.centerSegmentIndex,null===(t=this.onInteractionStart)||void 0===t||t.call(this,i,e);const a=this.fill(i,e);var r;return a&&(a.isPreviewFromHover=!0,e.preview=a,null===(r=this.onInteractionEnd)||void 0===r||r.call(this,i,e)),a},[Nl.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:o,previewSegmentIndex:i,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!i)return;const s=null==a?void 0:a[n],l=Zi(t,o,n);(s||l)&&$i(t,o,i,s||l.map((e=>.9*e)))},[Nl.AcceptPreview]:e=>{var t;const{segmentationVoxelManager:n,previewVoxelManager:o,previewSegmentIndex:i,preview:a}=e;if(void 0===i)return;const r=null!==(t=null==a?void 0:a.segmentIndex)&&void 0!==t?t:e.segmentIndex,s=o;s&&0!==s.modifiedSlices.size&&(s.forEach((e=>{let{index:t}=e;n.getAtIndex(t)===i&&n.setAtIndex(t,r)}),{}),Vt(e.segmentationId,s.getArrayOfSlices()),s.clear())},[Nl.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:o}=e;n.setAtIndex(t,o)})),Vt(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[Nl.Fill]:e=>{var t;const{segmentsLocked:n,segmentationImageData:o,segmentationVoxelManager:i,previewVoxelManager:a,imageVoxelManager:r,brushStrategy:s,centerIJK:l}=e,c=null===(t=s.createIsInThreshold)||void 0===t?void 0:t.call(s,e),{setValue:d}=s,h=c?t=>{const{value:o,index:i}=t;!n.includes(o)&&c(i)&&d(e,t)}:t=>d(e,t);yr(o,(null==r?void 0:r.isInObject)||i.isInObject,h,i.boundsIJK),a.addPoint(l)}},setValue:{[Nl.INTERNAL_setValue]:(e,t)=>{let{value:n,index:o}=t;const{segmentsLocked:i,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,c=l.getAtIndex(o);if(null===a){const e=r.getAtIndex(o);return void(void 0!==e&&r.setAtIndex(o,e))}if(c===a||i.includes(n))return;if(c===s){if(void 0!==r.getAtIndex(o))return;l.setAtIndex(o,a)}const d=null!=s?s:a;r.setAtIndex(o,d)}},threshold:{[Nl.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:o}=e;if(n&&o)return e=>{const{THRESHOLD:o,THRESHOLD_INSIDE_CIRCLE:i}=n,a=t.getAtIndex(e),r=Array.isArray(a)?aa.vec3.length(a):a,{threshold:s}=o||i||{};return null==s||!s.length||s[0]<=r&&r<=s[1]}}}},{VoxelManager:Bl}=ne.utilities;function Fl(e){let t,n,o,i,a,r,s,{operationData:l,viewport:c}=e;if(Ot(l,c)){const{volumeId:e,referencedVolumeId:r}=l,c=ne.cache.getVolume(e);if(!c)return;if(s=c.voxelManager,r){const e=ne.cache.getVolume(r);o=e.getScalarData(),i=e.dimensions}({imageData:t}=c),n=c.getScalarData(),a=c.dimensions}else{var d;const{imageIdReferenceMap:e,segmentationRepresentationUID:h}=l;if(!e)return;const u=c.getCurrentImageId();if(!u)return;const g=c.getActor(h);if(!g)return;t=g.actor.getMapper().getInputData(),s=t.voxelManager;const v=e.get(u),m=ne.cache.getImage(v);if(!m)return;n=null===(d=m.getPixelData)||void 0===d?void 0:d.call(m);const p=ne.cache.getImage(u),f=p?null:c.getImageData();o=(null==p?void 0:p.getPixelData())||f.getScalarData(),i=p?[p.columns,p.rows,1]:f.dimensions,a=[m.columns,m.rows,1],r=null==p?void 0:p.voxelManager}return s||(s=Bl.createVolumeVoxelManager(a,n)),r||(r=i&&Bl.createVolumeVoxelManager(i,o)),{segmentationImageData:t,segmentationScalarData:n,segmentationVoxelManager:s,imageScalarData:o,imageVoxelManager:r}}const{VoxelManager:Gl}=ne.utilities;class ql{constructor(e){re(this,"compositions",void 0),re(this,"strategyFunction",void 0),re(this,"configurationName",void 0),re(this,"_initialize",[]),re(this,"_fill",[]),re(this,"_acceptPreview",void 0),re(this,"_onInteractionStart",[]),re(this,"fill",((e,t)=>{const n=this.initialize(e,t,Nl.Fill);if(!n)return;const{strategySpecificConfiguration:o={},centerIJK:i}=n;if(ne.utilities.isEqual(i,o.centerIJK))return t.preview;o.centerIJK=i,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return Vt(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),re(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(null!=n&&n.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const o=this.initialize(e,t);o&&this._onInteractionStart.forEach((e=>e.call(this,o)))})),re(this,"onInteractionEnd",void 0),re(this,"rejectPreview",void 0),re(this,"acceptPreview",void 0),re(this,"preview",void 0),re(this,"setValue",void 0),re(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!ql.childFunctions[e])throw new Error("Didn't find ".concat(e," as a brush strategy"));ql.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(ql.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t,n){var o;const{viewport:i}=e,a=Fl({operationData:t,viewport:i});if(!a)return console.warn("No data found for BrushStrategy"),t.preview;const{imageVoxelManager:r,segmentationVoxelManager:s,segmentationImageData:l}=a,c=(null===(o=t.preview)||void 0===o?void 0:o.previewVoxelManager)||Gl.createHistoryVoxelManager(s),d={operationName:n,previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:r,segmentationVoxelManager:s,segmentationImageData:l,previewVoxelManager:c,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function jl(e,t){const n="_".concat(e);return(o,i)=>{o[n]||(o[n]=[]),o[n].push(i),o[e]||(o[e]=t?(i,a)=>{const r=o[t](i,a,e);o[n].forEach((e=>e.call(o,r)))}:e=>{o[n].forEach((t=>t.call(o,e)))})}}function zl(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,o)=>{if(n[e])throw new Error("The singleton method ".concat(e," already exists"));n[e]=t?o:(e,t)=>(t.enabledElement=e,o.call(n,t))}}function Kl(e){const[t,n,o,i]=e;return[[o[0],n[1]],[i[0],t[1]]]}function Yl(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||Xl(e,n),n.precalculated(t)}re(ql,"COMPOSITIONS",Hl),re(ql,"childFunctions",{[Nl.OnInteractionStart]:jl(Nl.OnInteractionStart,Nl.Initialize),[Nl.OnInteractionEnd]:jl(Nl.OnInteractionEnd,Nl.Initialize),[Nl.Fill]:jl(Nl.Fill),[Nl.Initialize]:jl(Nl.Initialize),[Nl.CreateIsInThreshold]:zl(Nl.CreateIsInThreshold),[Nl.AcceptPreview]:jl(Nl.AcceptPreview,Nl.Initialize),[Nl.RejectPreview]:jl(Nl.RejectPreview,Nl.Initialize),[Nl.INTERNAL_setValue]:zl(Nl.INTERNAL_setValue),[Nl.Preview]:zl(Nl.Preview,!1),[Nl.ComputeInnerCircleRadius]:jl(Nl.ComputeInnerCircleRadius),compositions:null});const Xl=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:o,zRadius:i}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==o?1/o**2:0,t.invZRadiusSq=0!==i?1/i**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[c,d,h]=l;return t.precalculated=e=>{const t=e[0]-c;let n=t*t*a;if(n>1)return!1;const o=e[1]-d;if(n+=o*o*r,n>1)return!1;const i=e[2]-h;return n+=i*i*s,n<=1},t},{transformWorldToIndex:Jl,isEqual:Zl}=ne.utilities,$l={[Nl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:o,segmentationImageData:i,segmentationVoxelManager:a}=e;if(!t)return;const r=aa.vec3.fromValues(0,0,0);t.forEach((e=>{aa.vec3.add(r,r,e)})),aa.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Jl(i,r);const s=t.map((e=>o.worldToCanvas(e))),[l,c]=Kl(s),d=o.canvasToWorld(l),h=o.canvasToWorld(c),u=Or(t.map((e=>Jl(i,e))),i.getDimensions());a.boundsIJK=u,n.isInObject=Ql({topLeftWorld:d,bottomRightWorld:h,center:r})}};function Ql(e){const{topLeftWorld:t,bottomRightWorld:n,center:o}=e,i=Math.abs(t[0]-n[0])/2,a=Math.abs(t[1]-n[1])/2,r=Math.abs(t[2]-n[2])/2,s=Math.max(i,a,r);if(Zl(i,s)&&Zl(a,s)&&Zl(r,s)){const e={center:o,radius:s,radius2:s*s};return t=>Lr(e,t)}const l={center:o,xRadius:i,yRadius:a,zRadius:r},{precalculated:c}=Xl(l,{});return c}const ec=new ql("Circle",Hl.regionFill,Hl.setValue,$l,Hl.determineSegmentIndex,Hl.preview),tc=new ql("CircleThreshold",Hl.regionFill,Hl.setValue,$l,Hl.determineSegmentIndex,Hl.dynamicThreshold,Hl.threshold,Hl.preview,Hl.islandRemoval),nc=ec.strategyFunction,oc=tc.strategyFunction,{transformWorldToIndex:ic}=ne.utilities,ac={[Nl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:o,segmentationImageData:i,segmentationVoxelManager:a}=e;if(!t)return;const r=aa.vec3.fromValues(0,0,0);t.forEach((e=>{aa.vec3.add(r,r,e)})),aa.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=ic(i,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:c}=Rr(t.slice(0,2),i,o);a.boundsIJK=s,n?n.isInObject=Ql({topLeftWorld:l,bottomRightWorld:c,center:r}):a.isInObject=Ql({topLeftWorld:l,bottomRightWorld:c,center:r})}},rc=new ql("Sphere",Hl.regionFill,Hl.setValue,ac,Hl.determineSegmentIndex,Hl.preview),sc=rc.strategyFunction,lc=new ql("SphereThreshold",...rc.compositions,Hl.dynamicThreshold,Hl.threshold,Hl.islandRemoval).strategyFunction,cc=new ql("EraseSphere",Hl.erase,...rc.compositions).strategyFunction,dc=new ql("EraseCircle",Hl.erase,...ec.compositions).strategyFunction,hc=function(e,t,n){return"".concat(e,"::").concat(t,"::").concat(n)},uc=function(e,t){Object.keys(e).forEach((n=>{const o=t.getAttribute(n),i=e[n];void 0===i||""===i?t.removeAttribute(n):o!==i&&t.setAttribute(n,i)}))},gc=function(e,t){Object.keys(e).forEach((n=>{const o=e[n];void 0!==o&&""!==o&&t.setAttribute(n,o)}))},vc=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,fill:l,width:c,lineWidth:d,lineDash:h,fillOpacity:u,strokeOpacity:g}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),v=d||c,m=hc(t,"circle",n),p=e.getSvgNode(m),f={cx:"".concat(o[0]),cy:"".concat(o[1]),r:"".concat(i),stroke:s,fill:l,"stroke-width":v,"stroke-dasharray":h,"fill-opacity":u,"stroke-opacity":g};if(p)uc(f,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),gc(f,t),e.appendNode(t,m)}},mc=Symbol("DefinedCursors"),pc=new Set(["alias","all-scroll","auto","cell","col-resize","context-menu","copy","crosshair","default","e-resize","ew-resize","grab","grabbing","help","move","ne-resize","nesw-resize","no-drop","none","not-allowed","n-resize","ns-resize","nw-resize","nwse-resize","pointer","progress","row-resize","se-resize","s-resize","sw-resize","text","vertical-text","wait","w-resize","zoom-in","zoom-out"]);class fc{constructor(e,t){re(this,"name",void 0),re(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof fc?"".concat(e,", ").concat(t.getStyleProperty()):e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=Ic(fc,mc);let n=t.get(e);return n instanceof fc?n:pc.has(e)?(n=new fc(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof fc&&(Ic(fc,mc).set(e,t),!0)}}function Ic(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const wc=pc.values(),Ec=Symbol("ElementCursorsMap");function Cc(e,t){Tc(e)[0]=t,_c(e,t)}function _c(e,t){const n=Tc(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof fc?t:fc.getDefinedCursor("auto")).getStyleProperty()}function bc(e){_c(e,Tc(e)[1])}function Dc(e){_c(e,fc.getDefinedCursor("none"))}function Tc(e){let t=Tc[Ec];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(Tc,Ec,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}function Sc(e){const t=Ht().getSegmentationRepresentations(e);if(t)return t.find((e=>e.active))}function yc(e){const t=Sc(e);if(t)return Bt(t.segmentationId)}function Mc(e,t){Ht().setActiveSegmentationRepresentation(e,t),kt(e,t)}function xc(e,t){const n=Bt(e);if(!n)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:o}=n;return o.has(t)}function Oc(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=Bt(e);if(!o)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:i}=o;n?i.add(t):i.delete(t),Ut(e)}function Pc(e){const t=Bt(e);if(!t)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:n}=t;return Array.from(n)}function Ac(e){const t=ei(e);if(void 0===t)return;Uc(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo(),o=Object.keys(n).map((e=>n[e]));if(!o.length)return;const{renderingEngineId:i}=o[0],a=t.getViewportIds(),r=(0,ne.getRenderingEngine)(i);Ua(r,a)}function Rc(e,t){const n=Bt(e);"string"==typeof t&&(console.warn("segmentIndex is a string, converting to number"),t=Number(t)),(null==n?void 0:n.activeSegmentIndex)!==t&&(n.activeSegmentIndex=t,Ut(e)),Yt(e).forEach((e=>{Ac(e)}))}function Nc(e){const t=Bt(e);if(t)return t.activeSegmentIndex}class Lc extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:nc,ERASE_INSIDE_CIRCLE:dc,FILL_INSIDE_SPHERE:sc,ERASE_INSIDE_SPHERE:cc,THRESHOLD_INSIDE_CIRCLE:oc,THRESHOLD_INSIDE_SPHERE:lc},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70],dynamicRadius:0}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",thresholdVolumeId:null,brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[Nl.AcceptPreview]:{method:Nl.AcceptPreview,bindings:[{key:"Enter"}]},[Nl.RejectPreview]:{method:Nl.RejectPreview,bindings:[{key:"Escape"}]}}}}),re(this,"_editData",void 0),re(this,"_hoverData",void 0),re(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),re(this,"onSetToolPassive",(e=>{this.disableCursor()})),re(this,"onSetToolEnabled",(()=>{this.disableCursor()})),re(this,"onSetToolDisabled",(e=>{this.disableCursor()})),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o;this._editData=this.createEditData(n),this._activateDraw(n),Dc(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const a=this._hoverData||this.createHoverData(n);return Ua(i,a.viewportIdsToRender),this.applyActiveStrategyCallback(o,this.getOperationData(n),Nl.OnInteractionStart),!0})),re(this,"mouseMoveCallback",(e=>{if(this.mode===Je.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:o}=this.configuration.preview,{currentPoints:i,element:a}=e.detail,{canvas:r}=i,{preview:s,startPoint:l,timer:c,timerStart:d,isDrag:h}=this._previewData,u=aa.vec2.distance(r,l),g=Date.now()-d;if((u>n||g>t&&u>o)&&(c&&(window.clearTimeout(c),this._previewData.timer=null),s&&!h&&this.rejectPreview(a)),!this._previewData.timer){const e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:r,element:a})}}})),re(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,ne.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),Nl.Preview))})),re(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=(0,ne.getEnabledElement)(n),{renderingEngine:a}=i;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;Ua(a,r);const s=aa.vec2.distance(o.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:c}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<c||(this._previewData.preview=this.applyActiveStrategy(i,this.getOperationData(n)),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=o.canvas)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),i=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(o,i),this._deactivateDraw(n),bc(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(o,i,Nl.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,ne.getEnabledElement)(e),{viewport:n}=t,o=Sc(this.toolGroupId);if(!o)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:i,type:a,segmentationRepresentationUID:r}=o;if(a===Et.Contour)throw new Error("Not implemented yet");const s=Pc(i),{representationData:l}=Bt(i),c=l[Et.Labelmap];if(Ot(c,n)){var d,h,u;const{volumeId:e}=l[a],t=n.getActors().map((e=>ne.cache.getVolume(e.referenceId))),o=ne.cache.getVolume(e),i=(null===(d=t.find((e=>ne.utilities.isEqual(e.dimensions,o.dimensions))))||void 0===d?void 0:d.volumeId)||(null===(h=t[0])||void 0===h?void 0:h.volumeId);return{volumeId:e,referencedVolumeId:null!==(u=this.configuration.thresholdVolumeId)&&void 0!==u?u:i,segmentsLocked:s,segmentationRepresentationUID:r}}{const{imageIdReferenceMap:e}=c,t=n.getCurrentImageId();if(!e.get(t))return;if(this.configuration.activeStrategy.includes("SPHERE"))throw new Error("Sphere manipulation is not supported for stacks of image segmentations yet");return{imageIdReferenceMap:e,segmentsLocked:s,segmentationRepresentationUID:r}}}createHoverData(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getCamera(),{viewPlaneNormal:a,viewUp:r}=i,s=[o.id],{segmentIndex:l,segmentationId:c,segmentationRepresentationUID:d,segmentColor:h}=this.getActiveSegmentationData()||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:o.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,segmentationId:c,segmentationRepresentationUID:d,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(){const e=this.toolGroupId,t=Sc(e);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationRepresentationUID:n,segmentationId:o}=t,i=Nc(o);return{segmentIndex:i,segmentationId:o,segmentationRepresentationUID:n,segmentColor:Zi(e,n,i)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas;this._hoverData=this.createHoverData(n,i),this._calculateCursor(n,i),this._hoverData&&Ua((0,ne.getEnabledElement)(n).renderingEngine,this._hoverData.viewportIdsToRender)}getOperationData(e){var t,n;const o=this._editData||this.createEditData(e),{segmentIndex:i,segmentationId:a,segmentationRepresentationUID:r,brushCursor:s}=this._hoverData||this.createHoverData(e),{data:l,metadata:c={}}=s||{},{viewPlaneNormal:d,viewUp:h}=c;return{...o,points:null==l||null===(t=l.handles)||void 0===t?void 0:t.points,segmentIndex:i,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:d,toolGroupId:this.toolGroupId,segmentationId:a,segmentationRepresentationUID:r,viewUp:h,strategySpecificConfiguration:this.configuration.strategySpecificConfiguration,preview:null===(n=this._previewData)||void 0===n?void 0:n.preview}}_calculateCursor(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,{canvasToWorld:i}=o,a=o.getCamera(),{brushSize:r}=this.configuration,s=aa.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=aa.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),c=aa.vec3.create();aa.vec3.cross(c,s,l);const d=i([t[0],t[1]]),h=aa.vec3.create(),u=aa.vec3.create(),g=aa.vec3.create(),v=aa.vec3.create();for(let e=0;e<=2;e++)h[e]=d[e]-s[e]*r,u[e]=d[e]+s[e]*r,g[e]=d[e]-c[e]*r,v[e]=d[e]+c[e]*r;if(!this._hoverData)return;const{brushCursor:m}=this._hoverData,{data:p}=m;void 0===p.handles&&(p.handles={}),p.handles.points=[h,u,g,v];const f=this.configuration.activeStrategy,I=this.configuration.strategies[f];"function"==typeof I.computeInnerCircleRadius&&I.computeInnerCircleRadius({configuration:this.configuration,viewport:o}),p.invalidated=!1}rejectPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e||!this._previewData.preview)return;const t=(0,ne.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Nl.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e)return;const t=(0,ne.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Nl.AcceptPreview),this._previewData.isDrag=!1,this._previewData.preview=null}invalidateBrushCursor(){if(void 0===this._hoverData)return;const{data:e}=this._hoverData.brushCursor;e.invalidated=!0;const{segmentColor:t}=this.getActiveSegmentationData()||{};this._hoverData.brushCursor.metadata.segmentColor=t}renderAnnotation(e,t){var n;if(!this._hoverData)return;const{viewport:o}=e;if(!this._hoverData.viewportIdsToRender.includes(o.id))return;const i=this._hoverData.brushCursor;if(!0===i.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=o;this._calculateCursor(t,e)}const a=i.metadata;if(!a)return;const r=a.brushCursorUID,s=i.data,{points:l}=s.handles,c=l.map((e=>o.worldToCanvas(e))),d=c[0],h=c[1],u=[Math.floor((d[0]+h[0])/2),Math.floor((d[1]+h[1])/2)],g=Math.abs(d[1]-Math.floor((d[1]+h[1])/2)),v="rgb(".concat((null===(n=a.segmentColor)||void 0===n?void 0:n.slice(0,3))||[0,0,0],")");if(!o.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");vc(t,r,"0",u,g,{color:v});const m=this.configuration.activeStrategy,{dynamicRadiusInCanvas:p}=this.configuration.strategySpecificConfiguration[m]||{dynamicRadiusInCanvas:0};p&&vc(t,r,"1",u,p,{color:v})}}re(Lc,"toolName",void 0),Lc.toolName="Brush";const kc=Lc;function Uc(e,t){const n=ei(e);if(void 0===n)return;const o=n._toolInstances;return Object.keys(o).length?t&&o[t]?[o[t]]:Object.values(o).filter((e=>e instanceof kc)):void 0}function Vc(e,t,n,o){const i=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...o];r[0]=r[0]+(2*e-1)*n[0]/2,r[1]=r[1]+(2*t-1)*n[1]/2,r[2]=r[2]+(2*a-1)*n[2]/2,i.push(r)}return Or(i.map((t=>ne.utilities.transformWorldToIndex(e,t))),t)}function Wc(e,t){const{spacing:n}=e,o=e.getScalarData(),i=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:c,dimensions:d}=t[e].volume,h=t[e].volume.getScalarData().length;h===o.length&&(r=c,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const u=l.getPointData().getScalars().getData(),g=t[e].lower,v=t[e].upper;i.push({imageData:l,referenceValues:u,lower:g,upper:v,spacing:c,dimensions:d,volumeSize:h})}var r,s;return{volumeInfoList:i,baseVolumeIdx:a}}const Hc=function(e,t,n){const{imageData:o}=e,i=e.getScalarData(),{overwrite:a,boundsIJK:r}=n,s=(null==n?void 0:n.overlapType)||0;if(a)for(let e=0;e<i.length;e++)i[e]=0;const{baseVolumeIdx:l,volumeInfoList:c}=Wc(e,t);let d,h,u;const g=(e,t,n)=>{const{imageData:o,dimensions:i,lower:a,upper:r}=e,l=Vc(o,i,t,n);h=0,d=0,u={lower:a,upper:r};let c=!1;return yr(o,(()=>!0),(e=>{let{value:t}=e;h+=1,t>=u.lower&&t<=u.upper&&(d+=1)}),l),0===s?c=d>0:1==s&&(c=d===h),c},v=(e,t)=>{const{imageData:n,referenceValues:o,lower:i,upper:a}=e,r=o[n.computeOffsetIndex(t)];return!(r<=i||r>=a)};return yr(o,(()=>!0),(e=>{let{index:t,pointIJK:o,pointLPS:a}=e,r=c.length>0;for(let e=0;e<c.length&&(r=c[e].volumeSize===i.length?v(c[e],o):g(c[e],c[l].spacing,a),r);e++);r&&(i[t]=n.segmentIndex||1)}),r),Vt(e.volumeId),e},Bc=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5?arguments[5]:void 0;const{color:r,handleRadius:s,width:l,lineWidth:c,fill:d,type:h,opacity:u}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},i),g=c||l,v=hc(t,"handle","hg-".concat(n,"-index-").concat(a));let m;if("circle"===h)m={cx:"".concat(o[0]),cy:"".concat(o[1]),r:s,stroke:r,fill:d,"stroke-width":g,opacity:u};else{if("rect"!==h)throw new Error("Unsupported handle type: ".concat(h));{const e=1.5*parseFloat(s),t=o[0]-.5*e,n=o[1]-.5*e;m={x:"".concat(t),y:"".concat(n),width:"".concat(e),height:"".concat(e),stroke:r,fill:d,"stroke-width":g,rx:"".concat(.1*e),opacity:u}}}const p=e.getSvgNode(v);if(p)uc(m,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);gc(m,t),e.appendNode(t,v)}},Fc=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};o.forEach(((o,a)=>{Bc(e,t,n,o,i,a)}))};function Gc(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,width:l,lineWidth:c,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),h=c||l,u=hc(t,"rect",n),g=e.getSvgNode(u),v=[Math.min(o[0],i[0]),Math.min(o[1],i[1])],m=Math.abs(o[0]-i[0]),p=Math.abs(o[1]-i[1]),f={x:"".concat(v[0]),y:"".concat(v[1]),width:"".concat(m),height:"".concat(p),stroke:s,fill:"transparent","stroke-width":h,"stroke-dasharray":d};if(g)uc(f,g),e.setNodeTouched(u);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==r&&t.setAttribute("data-id",r),gc(f,t),e.appendNode(t,u)}}const{EPSILON:qc}=ne.CONSTANTS,jc=1-qc;function zc(e,t,n){const{viewPlaneNormal:o}=t,i=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:o}=ne.metaData.get("imagePlaneModule",n),i=aa.vec3.fromValues(o[0],o[1],o[2]),a=aa.vec3.fromValues(o[3],o[4],o[5]);t=aa.vec3.create(),aa.vec3.cross(t,i,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(aa.vec3.dot(o,t))>jc;return t&&n}));if(!i.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of i){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=aa.vec3.create();aa.vec3.sub(n,r,t);const i=aa.vec3.dot(n,o);Math.abs(i)<a&&s.push(e)}return s}function Kc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e instanceof ne.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:o}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return zc(t,n,o)}if(e instanceof ne.StackViewport){const t=e.getCurrentImageId(),o=t.indexOf(":");n.imageURI=t.substring(o+1)}return t.filter((t=>!!t.isVisible&&e.isReferenceViewable(t.metadata,n)))}const Yc=new class{constructor(){re(this,"config",void 0),this._initializeConfig({color:"rgb(255, 255, 0)",colorHighlighted:"rgb(0, 255, 0)",colorSelected:"rgb(0, 220, 0)",colorLocked:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"",shadow:!0,textBoxVisibility:!0,textBoxFontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",textBoxFontSize:"14px",textBoxColor:"rgb(255, 255, 0)",textBoxColorHighlighted:"rgb(0, 255, 0)",textBoxColorSelected:"rgb(0, 255, 0)",textBoxColorLocked:"rgb(255, 255, 0)",textBoxBackground:"",textBoxLinkLineWidth:"1",textBoxLinkLineDash:"2,3",textBoxShadow:!0})}getAnnotationToolStyles(e){return this.config.annotations&&this.config.annotations[e]}getViewportToolStyles(e){return this.config.viewports&&this.config.viewports[e]}getToolGroupToolStyles(e){return this.config.toolGroups&&this.config.toolGroups[e]}getDefaultToolStyles(){return this.config.default}setAnnotationStyles(e,t){let n=this.config.annotations;n||(this.config={...this.config,annotations:{}},n=this.config.annotations),n[e]=t}setViewportToolStyles(e,t){let n=this.config.viewports;n||(this.config={...this.config,viewports:{}},n=this.config.viewports),n[e]=t}setToolGroupToolStyles(e,t){let n=this.config.toolGroups;n||(this.config={...this.config,toolGroups:{}},n=this.config.toolGroups),n[e]=t}setDefaultToolStyles(e){this.config.default=e}getStyleProperty(e,t){const{annotationUID:n,viewportId:o,toolGroupId:i,toolName:a}=t;return this._getToolStyle(e,n,o,i,a)}_getToolStyle(e,t,n,o,i){if(t){const n=this.getAnnotationToolStyles(t);if(n&&void 0!==n[e])return n[e]}if(n){const t=this.getViewportToolStyles(n);if(t){if(t[i]&&void 0!==t[i][e])return t[i][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(o){const t=this.getToolGroupToolStyles(o);if(t){if(t[i]&&void 0!==t[i][e])return t[i][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[i]&&void 0!==a[i][e]?a[i][e]:a.global&&void 0!==a.global[e]?a.global[e]:void 0}_initializeConfig(e){const t={};for(const n in e)t[n]=e[n];this.config={default:{global:t}}}};function Xc(e,t,n,o){const i=function(e,t,n){const o=["".concat(e)];return t&&o.push("".concat(o[0]).concat(t)),n&&o.push("".concat(o[o.length-1]).concat(n)),o}(e,n,o);for(let e=i.length-1;e>=0;--e){const n=Yc.getStyleProperty(i[e],t);if(void 0!==n)return n}}var Jc=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e.AutoGenerated="AutoGenerated",e}(Jc||{});const Zc=Jc,$c=function(e){if(e){if(e.data&&e.highlighted)return Zc.Highlighted;if(Se(e.annotationUID))return Zc.Selected;if(ge(e))return Zc.Locked;if(e.data&&e.autoGenerated)return Zc.AutoGenerated}return Zc.Default};class Qc extends fi{constructor(){super(...arguments),re(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,o=ne.utilities.imageIdToURI(n),i=it();i.getFramesOfReference().forEach((e=>{const n=i.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{var t;null!==(t=e.metadata)&&void 0!==t&&t.referencedImageId&&ne.utilities.imageIdToURI(e.metadata.referencedImageId)===o&&(e.invalidated=!0,e.data.cachedStats={})})),ka(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;return Kc(o,t)}getReferencedImageId(e,t,n,o){const i=this.getTargetId(e);let a;if(e instanceof ne.StackViewport)a=i.split("imageId:")[1];else if(e instanceof ne.VideoViewport)a=i.split("videoId:")[1];else{const e=ne.utilities.getVolumeId(i),o=ne.cache.getVolume(e);a=ne.utilities.getClosestImageId(o,t,n)}return a}getStyle(e,t,n){return Xc(e,t,$c(n),this.mode)}}re(Qc,"toolName",void 0),Qc.toolName="AnnotationDisplayTool";const ed=Qc;class td extends ed{static createAnnotation(){let e={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(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];for(const t of n)e=ne.utilities.deepMerge(e,t);return e}static createAnnotationForViewport(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return this.createAnnotation({metadata:e.getViewReference()},...n)}static createAndAddAnnotation(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const i=this.createAnnotationForViewport(e,...n);gt(i,e.element),Qe(i,e.element)}constructor(e,t){var n,o;super(e,t),re(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:o}=e.detail,i=o.canvas;let a=!1;for(const e of t){if(ge(e)||!Ne(e.annotationUID))continue;const{data:t}=e,o=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,i,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==o&&(a=!0)}return a})),null!==(n=e.configuration)&&void 0!==n&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),null!==(o=e.configuration)&&void 0!==o&&o.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s,textBox:l}=r.handles;if(l){const{worldBoundingBox:e}=l;if(e){const t={topLeft:a.worldToCanvas(e.topLeft),topRight:a.worldToCanvas(e.topRight),bottomLeft:a.worldToCanvas(e.bottomLeft),bottomRight:a.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return r.handles.activeHandleIndex=null,l}}for(let e=0;e<(null==s?void 0:s.length);e++){const t=s[e],i=a.worldToCanvas(t);if(!0==aa.vec2.distance(n,i)<o)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackground",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t)}}isSuvScaled(e,t,n){if(e instanceof ne.BaseVolumeViewport){var o;const e=ne.utilities.getVolumeId(t);return void 0!==(null===(o=ne.cache.getVolume(e).scaling)||void 0===o?void 0:o.PT)}const i=n&&ne.metaData.get("scalingModule",n);return"number"==typeof(null==i?void 0:i.suvbw)}getAnnotationStyle(e){const{annotation:t,styleSpecifier:n}=e,o=e=>this.getStyle(e,n,t),{annotationUID:i}=t,a=Ne(i),r=ge(t),s=o("lineWidth"),l=o("lineDash"),c=o("color");return{visibility:a,locked:r,color:c,lineWidth:s,lineDash:l,lineOpacity:1,fillColor:c,fillOpacity:0,shadow:o("shadow"),textbox:this.getLinkedTextBoxStyle(n,t)}}_imagePointNearToolOrHandle(e,t,n,o){return!!this.getHandleNearImagePoint(e,t,n,o)||(!!this.isPointNearTool(e,t,n,o,"mouse")||void 0)}}re(td,"toolName",void 0),td.toolName="AnnotationTool";const nd=td;function od(e){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");return t.setAttribute("x","0"),t.setAttribute("dy","1.2em"),t.textContent=e,t}function id(e,t){let n=e.querySelector("rect.background");if(!t)return n&&e.removeChild(n),e.getBBox();n||(n=document.createElementNS("http://www.w3.org/2000/svg","rect"),n.setAttribute("class","background"),e.insertBefore(n,e.firstChild));const o=e.getBBox(),i={x:"".concat(o.x),y:"".concat(o.y),width:"".concat(o.width),height:"".concat(o.height),fill:t};return uc(i,n),o}const ad=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],i=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:c,background:d}=a;let h;const[u,g]=[i[0]+r,i[1]+r],v=hc(t,"text",n),m=e.getSvgNode(v);if(m){const t=m.querySelector("text"),n=Array.from(t.children);for(let e=0;e<n.length;e++){const t=n[e],i=o[e]||"";t.textContent=i}if(o.length>n.length){for(let e=0;e<o.length-n.length;e++){const i=od(o[e+n.length]);t.appendChild(i)}m.appendChild(t),e.appendNode(m,v)}const i={fill:s,"font-size":c,"font-family":l},a={transform:"translate(".concat(u," ").concat(g,")")};uc(i,t),uc(a,m),h=id(m,d),e.setNodeTouched(v)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform","translate(".concat(u," ").concat(g,")"));const n=function(e,t){const{color:n,fontFamily:o,fontSize:i}=t,a=document.createElementNS("http://www.w3.org/2000/svg","text"),r="filter:url(#shadow-".concat(e.svgLayerElement.id,");"),s="".concat("user-select: none; pointer-events: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0);").concat(r);return a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("fill",n),a.setAttribute("font-family",o),a.setAttribute("font-size",i),a.setAttribute("style",s),a}(e,a);for(let e=0;e<o.length;e++){const t=od(o[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,v),h=id(t,d)}return Object.assign({},h,{x:u,y:g,height:h.height+r,width:h.width+r})}(e,t,n,o,i,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function rd(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(o[0])||isNaN(o[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:s,width:l,lineWidth:c,lineDash:d,shadow:h}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),u=c||l,g=hc(t,"line",n),v=e.getSvgNode(g),m=h?"filter:url(#shadow-".concat(e.svgLayerElement.id,");"):"",p={x1:"".concat(o[0]),y1:"".concat(o[1]),x2:"".concat(i[0]),y2:"".concat(i[1]),stroke:s,style:m,"stroke-width":u,"stroke-dasharray":d};if(v)uc(p,v),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),gc(p,t),e.appendNode(t,g)}}function sd(e,t){let n=[0,0],o=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const i=function(e,t){const[n,o]=e,[i,a]=t;return Math.sqrt(Math.pow(n-i,2)+Math.pow(o-a,2))}(t,e);i<o&&(o=i,n=[...e])})),n}const ld=function(e,t,n,o,i,a,r){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};const l=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),c=ad(e,t,n,o,i,l);return function(e,t,n,o,i,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=o.length>0?sd(o,i):i,l=sd(function(e){const{x:t,y:n,height:o,width:i}=e,a=i/2,r=o/2;return[[t+a,n],[t,n+r],[t+a,n+o],[t+i,n+r]]}(a),s),c=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r);rd(e,t,"link-".concat(n),s,l,c)}(e,t,n,a,i,c,l),c};function cd(e,t,n){if(2!==e.length||2!==t.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(ss(e,t,n))}function dd(e,t){if(4!==e.length||2!==t.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[n,o,i,a]=e;let r=655535;const s=function(e,t,n,o){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+o]],bottom:[[e+n,t+o],[e,t+o]],left:[[e,t+o],[e,t]]}}(n,o,i,a);return Object.keys(s).forEach((e=>{const[n,o]=s[e],i=cd(n,o,t);i<r&&(r=i)})),r}function hd(e){const t=function(e){const t=[e[0],e[1]].sort((function(e,t){return e[0]<t[0]?-1:1})),n=[e[0],e[1]].sort((function(e,t){return e[1]<t[1]?-1:1})),o=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:o}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function ud(e,t,n,o){const i=aa.vec3.create();aa.vec3.cross(i,t,e);const a=aa.vec3.fromValues(...n),r=aa.vec3.fromValues(...o),s=aa.vec3.create();aa.vec3.subtract(s,a,r);const l=aa.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const c=aa.vec3.dot(s,i)/(l*aa.vec3.length(i));return{worldWidth:Math.sqrt(1-c*c)*l,worldHeight:c*l}}function gd(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=ne.metaData.get("generalSeriesModule",e);if("PT"===(null==n?void 0:n.modality)){const t=ne.metaData.get("petSeriesModule",e);return(null==t?void 0:t.units)||"unitless"}}(t,n):""}function vd(e,t){if(e instanceof ne.BaseVolumeViewport){const e=t.split("volumeId:"),n=e.length>1?e[1].split("?")[0]:e[0],o=ne.cache.getVolume(n);return!(null==o||!o.scaling)&&Object.keys(o.scaling).length>0}if(e instanceof ne.StackViewport){const{preScale:t}=e.getImageData()||{};return!(null==t||!t.scaled)}return!1}class md{}re(md,"run",void 0),re(md,"getStatistics",void 0);const pd=md;var fd;class Id extends pd{}function wd(e){return 1===e.length?e[0]:e}fd=Id,re(Id,"max",[-1/0]),re(Id,"sum",[0]),re(Id,"sumSquares",[0]),re(Id,"squaredDiffSum",[0]),re(Id,"count",0),re(Id,"statsCallback",(e=>{let{value:t}=e;Array.isArray(t)&&t.length>1&&1===fd.max.length&&(fd.max.push(fd.max[0],fd.max[0]),fd.sum.push(fd.sum[0],fd.sum[0]),fd.sumSquares.push(fd.sumSquares[0],fd.sumSquares[0]),fd.squaredDiffSum.push(fd.squaredDiffSum[0],fd.squaredDiffSum[0]));const n=Array.isArray(t)?t:[t];fd.count+=1,fd.max.forEach(((e,t)=>fd.max[t]=Math.max(e,n[t]))),fd.sum.map(((e,t)=>fd.sum[t]+=n[t])),fd.sumSquares.map(((e,t)=>fd.sumSquares[t]+=n[t]**2)),fd.squaredDiffSum.map(((e,t)=>fd.squaredDiffSum[t]+=Math.pow(n[t]-fd.sum[t]/fd.count,2)))})),re(Id,"getStatistics",(()=>{const e=fd.sum.map((e=>e/fd.count)),t=fd.squaredDiffSum.map((e=>Math.sqrt(e/fd.count))),n=fd.sumSquares.map(((t,n)=>Math.sqrt(fd.sumSquares[n]/fd.count-e[n]**2))),o={max:{name:"max",label:"Max Pixel",value:wd(fd.max),unit:null},mean:{name:"mean",label:"Mean Pixel",value:wd(e),unit:null},stdDev:{name:"stdDev",label:"Standard Deviation",value:wd(t),unit:null},stdDevWithSumSquare:{name:"stdDevWithSumSquare",value:wd(n),unit:null},count:{name:"count",label:"Pixel Count",value:fd.count,unit:null},array:[]};return o.array.push(o.max,o.mean,o.stdDev,o.stdDevWithSumSquare,o.count),fd.max=[-1/0],fd.sum=[0],fd.sumSquares=[0],fd.squaredDiffSum=[0],fd.count=0,o}));const{transformWorldToIndex:Ed}=ne.utilities;class Cd extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:_d,statsCalculator:Id}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{label:"",handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[3]),d=this._getRectangleImageCoordinates([l,c]),h=[n[0],n[1]],{left:u,top:g,width:v,height:m}=d;return dd([u,g,v,m],h)<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=s.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,i=(0,ne.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=i.viewport,c=e.world,{points:d}=s.handles;let h,u,g,v,m,p,f,I;switch(d[a]=[...c],a){case 0:case 3:h=r(d[0]),v=r(d[3]),u=[v[0],h[1]],g=[h[0],v[1]],p=l(u),f=l(g),d[1]=p,d[2]=f;break;case 1:case 2:u=r(d[1]),g=r(d[2]),h=[g[0],u[1]],v=[u[0],g[1]],m=l(h),I=l(v),d[0]=m,d[3]=I}o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles,v=u.map((e=>a.worldToCanvas(e)));d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),{viewPlaneNormal:I,viewUp:w}=a.getCamera();if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,I,w,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(o,I,w,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let E;if(!Ne(r))continue;ge(o)||this.editData||null===g||(E=[v[g]]),E&&Fc(t,r,"0",E,{color:m});const C="".concat(r,"-rect");Gc(t,r,"0",v[0],v[3],{color:m,lineDash:f,lineWidth:p},C),i=!0;const _=this.getLinkedTextBoxStyle(d,o);if(!_.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}const b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;if(!h.handles.textBox.hasMoved){const e=hd(v);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const D=a.worldToCanvas(h.handles.textBox.worldPosition),T=ld(t,r,"1",b,D,v,{},_),{x:S,y,width:M,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([S,y]),topRight:a.canvasToWorld([S+M,y]),bottomLeft:a.canvasToWorld([S,y+x]),bottomRight:a.canvasToWorld([S+M,y+x])}}return i})),re(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),re(this,"_calculateCachedStats",((e,t,n,o,i)=>{const{data:a}=e,{viewport:r}=i,{element:s}=r,l=a.handles.points[0],c=a.handles.points[3],{cachedStats:d}=a,h=Object.keys(d);for(let i=0;i<h.length;i++){const a=h[i],s=this.getTargetIdImage(a,o);if(!s)continue;const{dimensions:m,imageData:p,metadata:f}=s,I=("getScalarData"in s?s.getScalarData():s.scalarData,Ed(p,l));I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]);const w=Ed(p,c);if(w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]),this._isInsideVolume(I,w,m)){var u,g,v;this.isHandleOutsideImage=!1;const o=[[Math.min(I[0],w[0]),Math.max(I[0],w[0])],[Math.min(I[1],w[1]),Math.max(I[1],w[1])],[Math.min(I[2],w[2]),Math.max(I[2],w[2])]],{worldWidth:i,worldHeight:h}=ud(t,n,l,c),m=gr(s),E=Math.abs(i*h)/(m*m),C={isPreScaled:vd(r,a),isSuvScaled:this.isSuvScaled(r,a,e.metadata.referencedImageId)},_=gd(f.Modality,e.metadata.referencedImageId,C),b=yr(p,(()=>!0),this.configuration.statsCalculator.statsCallback,o),D=this.configuration.statsCalculator.getStatistics();d[a]={Modality:f.Modality,area:E,mean:null===(u=D.mean)||void 0===u?void 0:u.value,stdDev:null===(g=D.stdDev)||void 0===g?void 0:g.value,max:null===(v=D.max)||void 0===v?void 0:v.value,statsArray:D.array,pointsInShape:b,areaUnit:ur(null,s),modalityUnit:_}}else this.isHandleOutsideImage=!0,d[a]={Modality:f.Modality}}return e.invalidated=!1,Qe(e,s),d})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}}function _d(e,t){const n=e.cachedStats[t],{area:o,mean:i,max:a,stdDev:r,areaUnit:s,modalityUnit:l}=n;if(void 0===i)return;const c=[];return c.push("Area: ".concat(zu(o)," ").concat(s)),c.push("Mean: ".concat(zu(i)," ").concat(l)),c.push("Max: ".concat(zu(a)," ").concat(l)),c.push("Std Dev: ".concat(zu(r)," ").concat(l)),c}re(Cd,"toolName",void 0),Cd.toolName="RectangleROI";const bd=Cd;class Dd extends bd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getTargetId(r);let u,g;if(r instanceof ne.StackViewport)u=h.split("imageId:")[1];else{g=ne.utilities.getVolumeId(h);const e=ne.cache.getVolume(g);u=ne.utilities.getClosestImageId(e,i,c)}const v=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],enabledElement:a,viewUp:[...d],FrameOfReferenceUID:v,referencedImageId:u,toolName:this.getToolName(),volumeId:g},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},segmentationId:null}};gt(m,o);const p=Qs(o,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,p),m})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o,data:c}=n,{points:d,activeHandleIndex:h}=c.handles,u=d.map((e=>a.worldToCanvas(e)));l.annotationUID=o;const g=this.getStyle("lineWidth",l,n),v=this.getStyle("lineDash",l,n),m=this.getStyle("color",l,n);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let p;(Qe(n,r),Ne(o))&&(ge(n)||this.editData||null===h||(p=[u[h]]),p&&Fc(t,o,"0",p,{color:m}),Gc(t,o,"0",u[0],u[3],{color:m,lineDash:v,lineWidth:g}),i=!0)}return i}))}}re(Dd,"toolName",void 0),Dd.toolName="RectangleROIThreshold";const Td=Dd,{transformWorldToIndex:Sd}=ne.utilities;class yd extends bd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{numSlicesToPropagate:10,computePointsInsideVolume:!1}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l;let h,u,g;if(r instanceof ne.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ne.utilities.getVolumeId(e),u=ne.cache.getVolume(g),h=ne.utilities.getClosestImageId(u,i,c)}if(!h)throw new Error("This tool does not work on non-acquisition planes");const v=r.getCurrentImageIdIndex(),m=ne.utilities.getSpacingInNormalDirection(u,c),p=this._getEndSliceIndex(u,i,m,c),f=r.getFrameOfReferenceUID(),I={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],enabledElement:a,viewUp:[...d],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:g,spacingInNormal:m},data:{label:"",startSlice:v,endSlice:p,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[h]},handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(I,u),gt(I,o);const w=Qs(o,this.getToolName());return this.editData={annotation:I,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,w),I})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const c=this.getTargetId(l.viewport),d=ne.cache.getVolume(c.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(o,d,l),Ua(l.renderingEngine,i),a&&et(o)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e,i=st(this.getToolName(),o.element);if(null==i||!i.length)return n;const a=o.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<i.length;s++){const l=i[s],{annotationUID:c,data:d}=l,{startSlice:h,endSlice:u}=d,{points:g,activeHandleIndex:v}=d.handles,m=g.map((e=>o.worldToCanvas(e)));r.annotationUID=c;const p=this.getStyle("lineWidth",r,l),f=this.getStyle("lineDash",r,l),I=this.getStyle("color",r,l);if(a<Math.min(h,u)||a>Math.max(h,u))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let w,E=!1;if(a!==h&&a!==u||(E=!0),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Ne(c))continue;ge(l)||this.editData||null===v||!E||(w=[m[v]]),w&&Fc(t,c,"0",w,{color:I});let C=f;E||(C=2),Gc(t,c,"0",m[0],m[3],{color:I,lineDash:C,lineWidth:p}),n=!0}return n})),this._throttledCalculateCachedStats=Er(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:o}=e,{viewPlaneNormal:i,spacingInNormal:a}=o,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:c}=n.handles,d=Sd(r,c[0]);if(d[2]!==s)throw new Error("Start slice does not match");const h=aa.vec3.fromValues(d[0],d[1],l),u=aa.vec3.create();r.indexToWorldVec3(d,u);const g=aa.vec3.create();r.indexToWorldVec3(h,g);const v=aa.vec3.distance(u,g),m=[];for(let e=0;e<v;e+=a)m.push(c.map((t=>{const n=aa.vec3.create();return aa.vec3.scaleAndAdd(n,t,i,e),Array.from(n)})));n.cachedStats.projectionPoints=m;const p=[];for(const e of m){const n=ne.utilities.getClosestImageId(t,e[0],i);p.push(n)}n.cachedStats.projectionPointsImageIds=p}_computePointsInsideVolume(e,t,n){const{data:o}=e,i=o.cachedStats.projectionPoints,a=[[]];for(let e=0;e<i.length;e++){if(!t)continue;const n=i[e][0],r=o.handles.points[0],s=o.handles.points[3],{dimensions:l,imageData:c}=t,d=Sd(c,r),h=Sd(c,n);d[0]=Math.floor(d[0]),d[1]=Math.floor(d[1]),d[2]=Math.floor(h[2]);const u=Sd(c,s);if(u[0]=Math.floor(u[0]),u[1]=Math.floor(u[1]),u[2]=Math.floor(h[2]),this._isInsideVolume(d,u,l)){this.isHandleOutsideImage=!1;const e=yr(c,(()=>!0),null,[[Math.min(d[0],u[0]),Math.max(d[0],u[0])],[Math.min(d[1],u[1]),Math.max(d[1],u[1])],[Math.min(d[2],u[2]),Math.max(d[2],u[2])]]);a.push(e)}}o.cachedStats.pointsInVolume=a}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:o}=t,{cachedStats:i}=n,a=this.getTargetId(o),r=ne.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Qe(e,o.element),i}_getEndSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=aa.vec3.create();aa.vec3.scaleAndAdd(a,t,o,i*n);const r=n/2,{imageIds:s}=e;let l;for(let e=0;e<s.length;e++){const t=s[e],{imagePositionPatient:n}=ne.metaData.get("imagePlaneModule",t),i=aa.vec3.create();aa.vec3.sub(i,a,n);const c=aa.vec3.dot(i,o);Math.abs(c)<r&&(l=e)}return l}}re(yd,"toolName",void 0),yd.toolName="RectangleROIStartEndThreshold";const Md=yd,xd=function(e,t){const n=e.findIndex((e=>{let[t,n]=e;return t===n}));if(-1===n)throw new Error("3D bounding boxes not supported in an oblique plane");return e[n][0]-=t,e[n][1]+=t,e},Od=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=[];return e.forEach((e=>{var i,a;const{data:r}=e,{points:s}=r.handles,{imageData:l,dimensions:c}=t;let d=s;if(null!==(i=r.cachedStats)&&void 0!==i&&i.projectionPoints){const{projectionPoints:e}=r.cachedStats;d=[].concat(...e)}let h=Or(d.map((e=>ne.utilities.transformWorldToIndex(l,e))),c);!n.numSlicesToProject||null!==(a=r.cachedStats)&&void 0!==a&&a.projectionPoints||(h=xd(h,n.numSlicesToProject)),o.push(h)})),1===o.length?o[0]:o.reduce(((e,t)=>({iMin:Math.min(e.iMin,t.iMin),jMin:Math.min(e.jMin,t.jMin),kMin:Math.min(e.kMin,t.kMin),iMax:Math.max(e.iMax,t.iMax),jMax:Math.max(e.jMax,t.jMax),kMax:Math.max(e.kMax,t.kMax)})),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})},Pd=function(e,t,n,o){const i=e.map((e=>pt(e)));let a;!function(e){const t=[Td.toolName,Md.toolName];for(const n of e){const e=n.metadata.toolName;if(!t.includes(e))throw new Error("rectangleROIThresholdVolumeByRange only supports RectangleROIThreshold and RectangleROIStartEndThreshold annotations")}}(i);for(let e=0;e<n.length;e++)n[e].volume.getScalarData().length!==t.getScalarData().length&&0!==e||(a=Od(i,n[e].volume,o));const r=Hc(t,n,{...o,boundsIJK:a});return r.modified(),r},Ad=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mergedLabelmap";e.forEach((t=>{let{direction:n,dimensions:o,origin:i,spacing:a}=t;if(!(ne.utilities.isEqual(o,e[0].dimensions)&&ne.utilities.isEqual(n,e[0].direction)&&ne.utilities.isEqual(a,e[0].spacing)&&ne.utilities.isEqual(i,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const o=e[0],i=new(0,o.getScalarData().constructor)(o.getScalarData().length);e.forEach((e=>{const n=e.getScalarData();for(let e=0;e<n.length;e++)n[e]===t&&(i[e]=t)}));const a={scalarData:i,metadata:o.metadata,spacing:o.spacing,origin:o.origin,direction:o.direction,dimensions:o.dimensions};return ne.volumeLoader.createLocalVolume(a,n,!0)};function Rd(e,t){if(e===Et.Labelmap)return function(e){return e&&"boolean"==typeof e.renderOutline&&"number"==typeof e.outlineWidthActive&&"number"==typeof e.outlineWidthInactive&&"number"==typeof e.activeSegmentOutlineWidthDelta&&"boolean"==typeof e.renderFill&&"boolean"==typeof e.renderFillInactive&&"number"==typeof e.fillAlpha&&"number"==typeof e.fillAlphaInactive&&"number"==typeof e.outlineOpacity&&"number"==typeof e.outlineOpacityInactive}(t);throw new Error("Unknown representation type: ".concat(e))}function Nd(e){const{type:t}=e;if(t===Et.Labelmap)return bt();throw new Error("Unknown representation type: ".concat(t))}async function Ld(e){const{viewportId:t,renderingEngineId:n,options:o}=e;let{segmentationId:i}=e;const a=(0,ne.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof ne.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();var l;if(void 0===i&&(i="".concat(s,"-based-segmentation-").concat(null!==(l=null==o?void 0:o.volumeId)&&void 0!==l?l:ne.utilities.uuidv4().slice(0,8))),o){const e=le()(o);await ne.volumeLoader.createLocalVolume(e,i)}else{const{uid:e}=r.getDefaultActor();await ne.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:i})}return i}function kd(e,t,n){const o=ei(e);if(void 0===o)return;Uc(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const i=o.getViewportsInfo(),a=Object.keys(i).map((e=>i[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=o.getViewportIds(),l=(0,ne.getRenderingEngine)(r);Ua(l,s)}function Ud(e,t){const n=ei(e);if(void 0===n)return;const o=n._toolInstances;if(!Object.keys(o).length)return;const i=Uc(e,t)[0];return i?i.configuration.brushSize:void 0}function Vd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const o=ei(e);if(void 0===o)return;const i=Uc(e),a={...n,...void 0!==t&&{threshold:t}};i.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=o.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=o.getViewportIds(),c=(0,ne.getRenderingEngine)(s);Ua(c,l)}function Wd(e){const t=ei(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const o=Uc(e)[0];return o?o.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const Hd=function(e,t,n,o){const i=e.getScalarData(),{baseVolumeIdx:a,volumeInfoList:r}=Wc(e,n);return r.forEach((e=>{const{volumeSize:n}=e;n===i.length?function(e,t,n){const{referenceValues:o,lower:i,upper:a}=n;for(let n=0;n<e.length;n++)if(e[n]===t){const r=o[n];e[n]=r>=i&&r<=a?t:0}}(i,t,e):function(e,t,n,o,i,a){const{imageData:r,lower:s,upper:l,dimensions:c}=n;let d,h,u;for(let n=0;n<e.length;n++)if(e[n]===t){const g=Vc(r,c,o[i].spacing,o[i].imageData.getPoint(n)),v=e=>{let{value:t}=e;d+=1,t>=u.lower&&t<=u.upper&&(h+=1)};d=0,h=0,u={lower:s,upper:l};let m=!1;yr(r,(()=>!0),v,g),m=0===a?h>0:h===d,e[n]=m?t:0}}(i,t,e,r,a,o)})),Vt(e.volumeId),e};function Bd(e,t,n){const o=n.toIJK(e),i=n.toIJK(t),a=aa.vec3.create(),{testIJK:r}=n,s=aa.vec3.sub(aa.vec3.create(),o,i),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const c=aa.vec3.scale(aa.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(aa.vec3.scaleAndAdd(a,i,c,e),!r(a))return!1;return!0}const Fd=.01;function Gd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:o}=e.polyData,{maxMinor:i,maxMajor:a}=n;let r,s=a*a,l=i*i;for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){const i=o[e],a=o[n],c=aa.vec3.sqrDist(i,a);c<s||c-Fd<s+Fd&&r||t.testCenter(i,a)&&Bd(i,a,t)&&(s=c-Fd,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+Fd);const c=o[r[0]],d=o[r[1]],h=aa.vec3.sub(aa.vec3.create(),c,d);let u;aa.vec3.scale(h,h,1/s);for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){const i=o[e],a=o[n],r=aa.vec3.sqrDist(i,a);if(r<=l)continue;const s=aa.vec3.sub(aa.vec3.create(),i,a);Math.abs(aa.vec3.dot(s,h))/Math.sqrt(r)>Fd||t.testCenter(i,a)&&Bd(i,a,t)&&(l=r,u=[e,n])}return u?(l=Math.sqrt(l),{majorAxis:[c,d],minorAxis:[o[u[0]],o[u[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:qd}=Et;function jd(e){const t=Zr({segmentations:e});if(null==t||!t.length||!t[0].sliceContours.length)return;const{representationData:n,segments:o=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:i}=n[qd],a=o.findIndex((e=>!!e));return-1!==a?(o[a].segmentIndex=a,function(e,t,n){const{sliceContours:o}=e,{segmentIndex:i,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const o=ne.cache.getVolume(e);if(!o)return void console.warn("No volume found for ".concat(e));const i=o.imageData.getPointData().getScalars().getData(),a=o.dimensions[0],r=a*o.dimensions[1];return{testCenter:(e,s)=>{const l=aa.vec3.add(aa.vec3.create(),e,s).map((e=>e/2)),c=o.imageData.worldToIndex(l).map(Math.round),[d,h,u]=c,g=i[d+h*a+u*r];return g===t||(null==n?void 0:n.has(g))},toIJK:e=>o.imageData.worldToIndex(e),testIJK:e=>{const[o,s,l]=e,c=Math.round(o)+Math.round(s)*a+Math.round(l)*r,d=i[c];return d===t||(null==n?void 0:n.has(d))}}}(t,i,a);for(const e of o){const t=Gd(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],i,o[a])):void 0}function zd(e,t){const{majorAxis:n,minorAxis:o,label:i="",sliceIndex:a}=e,[r,s]=n,[l,c]=o,d=[r,s,l,c];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...t.getViewReference({sliceIndex:a})},data:{handles:{points:d,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}}function Kd(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function Yd(e,t,n,o){const[i,a]=e,[r,s]=t,[l,c]=n,[d,h]=o,u=s-a,g=i-r,v=r*a-i*s,m=u*l+g*c+v,p=u*d+g*h+v;if(0!==m&&0!==p&&Kd(m)===Kd(p))return;const f=h-c,I=l-d,w=d*c-l*h,E=f*i+I*a+w,C=f*r+I*s+w;if(0!==E&&0!==C&&Kd(E)===Kd(C))return;const _=u*I-f*g;let b;b=g*w-I*v;const D=b/_;return b=f*v-u*w,[D,b/_]}const{transformWorldToIndex:Xd}=ne.utilities;class Jd extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Zd}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preventHandleOutsideImage",void 0),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[1]),d={start:{x:l[0],y:l[1]},end:{x:c[0],y:c[1]}},h=cd([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]);return h<=o||(l=a.worldToCanvas(s[2]),c=a.worldToCanvas(s[3]),d={start:{x:l[0],y:l[1]},end:{x:c[0],y:c[1]}},h=cd([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]),h<=o)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),Dc(o),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());Dc(i),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=aa.vec3.distance(e[0],e[1]);if(aa.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],o=[...e[1]],i=aa.vec2.create();aa.vec2.set(i,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=aa.vec2.create();aa.vec2.set(a,-i[1],i[0]);const r=aa.vec2.create();let l;aa.vec2.set(r,o[0]-n[0],o[1]-n[0]),l=aa.vec2.dot(r,a)>0?[n,o]:[o,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{renderingEngine:a,viewport:r}=i,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:c,handleIndex:d}=this.editData,{data:h}=l,u=n.world;h.handles.points[d]=[...u];const g=h.handles.points.map(s),v={x:g[0][0],y:g[0][1]},m={x:g[1][0],y:g[1][1]},p=(g[2][0],g[2][1],g[3][0],g[3][1],aa.vec2.distance(g[0],g[1])/3),f=v.x-m.x,I=v.y-m.y,w=Math.sqrt(f*f+I*I),E=f/w,C=I/w,_=(v.x+m.x)/2,b=(v.y+m.y)/2,D=_+p*C,T=b-p*E,S=_-p*C,y=b+p*E;h.handles.points[2]=r.canvasToWorld([D,T]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,Ua(a,c),this.editData.hasMoved=!0})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:c}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;c.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),a.invalidated=!0}else this._dragModifyHandle(e),a.invalidated=!0;Ua(i,r)})),re(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{viewport:a}=i,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,c=n.world,d=[a.worldToCanvas(l.handles.points[0]),a.worldToCanvas(l.handles.points[1]),a.worldToCanvas(l.handles.points[2]),a.worldToCanvas(l.handles.points[3])],h={start:{x:d[0][0],y:d[0][1]},end:{x:d[1][0],y:d[1][1]}},u={start:{x:d[2][0],y:d[2][1]},end:{x:d[3][0],y:d[3][1]}},g=[...c],v=a.worldToCanvas(g);if(0===s||1===s){const e=d[0===s?1:0],t=aa.vec2.set(aa.vec2.create(),v[0]-e[0],v[1]-e[1]),n=aa.vec2.set(aa.vec2.create(),d[s][0]-e[0],d[s][1]-e[1]);aa.vec2.normalize(t,t),aa.vec2.normalize(n,n);const o={start:{x:e[0],y:e[1]},end:{x:v[0],y:v[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(o,u))return;const i=e,r=this._getSignedAngle(n,t);let c=d[2][0],h=d[2][1],m=d[3][0],p=d[3][1];c-=i[0],h-=i[1],m-=i[0],p-=i[1];const f=c*Math.cos(r)-h*Math.sin(r),I=c*Math.sin(r)+h*Math.cos(r),w=m*Math.cos(r)-p*Math.sin(r),E=m*Math.sin(r)+p*Math.cos(r);c=f+i[0],h=I+i[1],m=w+i[0],p=E+i[1];const C=a.canvasToWorld([c,h]),_=a.canvasToWorld([m,p]);l.handles.points[s]=g,l.handles.points[2]=C,l.handles.points[3]=_}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:u.start,end:u.end}},n=aa.vec2.subtract(aa.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),o=aa.vec2.normalize(aa.vec2.create(),n),i=aa.vec2.subtract(aa.vec2.create(),[v[0],v[1]],[d[s][0],d[s][1]]),r=aa.vec2.length(i),c=this._getSignedAngle(o,i),m=Math.cos(c)*r,p=aa.vec2.scaleAndAdd(aa.vec2.create(),[d[e][0],d[e][1]],o,m);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:v[0],y:v[1]},end:{x:p[0],y:p[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}}))return;if(!Yd([v[0],v[1]],[p[0],p[1]],[h.start.x,h.start.y],[h.end.x,h.end.y]))return;l.handles.points[e]=a.canvasToWorld(p),l.handles.points[s]=g}})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!0;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles,v=u.map((e=>a.worldToCanvas(e)));d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f,shadow:I}=this.getAnnotationStyle({annotation:o,styleSpecifier:d});if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(o,c,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let w;if(!Ne(r))continue;ge(o)||this.editData||null===g||(w=[v[g]]),w&&Fc(t,r,"0",w,{color:m});const E="".concat(r,"-line-1"),C="".concat(r,"-line-2");rd(t,r,"0",v[0],v[1],{color:m,lineDash:f,lineWidth:p,shadow:I},E),rd(t,r,"1",v[2],v[3],{color:m,lineDash:f,lineWidth:p,shadow:I},C),i=!0;const _=this.getLinkedTextBoxStyle(d,o);if(!_.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}const b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;let D;h.handles.textBox.hasMoved||(D=hd(v),h.handles.textBox.worldPosition=a.canvasToWorld(D));const T=a.worldToCanvas(h.handles.textBox.worldPosition),S=ld(t,r,"1",b,T,v,{},_),{x:y,y:M,width:x,height:O}=S;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([y,M]),topRight:a.canvasToWorld([y+x,M]),bottomLeft:a.canvasToWorld([y,M+O]),bottomRight:a.canvasToWorld([y+x,M+O])}}return i})),re(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=aa.vec2.create();aa.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),aa.vec2.normalize(n,n);const o={start:{x:t.start.x-10*n[0],y:t.start.y-10*n[1]},end:{x:t.end.x+10*n[0],y:t.end.y+10*n[1]}};return!Yd([o.start.x,o.start.y],[o.end.x,o.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),re(this,"_calculateCachedStats",((e,t,n)=>{const{data:o}=e,{element:i}=n.viewport,a=o.handles.points[0],r=o.handles.points[1],s=o.handles.points[2],l=o.handles.points[3],{cachedStats:c}=o,d=Object.keys(c);for(let e=0;e<d.length;e++){const n=d[e],o=this.getTargetIdImage(n,t);if(!o)continue;const{imageData:i,dimensions:h}=o,u=gr(o),g=this._calculateLength(a,r)/u,v=this._calculateLength(s,l)/u,m=g>v?g:v,p=g>v?v:g,f=Xd(i,a),I=Xd(i,r),w=Xd(i,s),E=Xd(i,l);this._isInsideVolume(f,I,w,E,h)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,c[n]={length:m,width:p,unit:dr(null,o)}}return e.invalidated=!1,Qe(e,i),c})),re(this,"_isInsideVolume",((e,t,n,o,i)=>ne.utilities.indexWithinDimensions(e,i)&&ne.utilities.indexWithinDimensions(t,i)&&ne.utilities.indexWithinDimensions(n,i)&&ne.utilities.indexWithinDimensions(o,i))),re(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g}_calculateLength(e,t){const n=e[0]-t[0],o=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+o*o+i*i)}}function Zd(e,t){const{cachedStats:n,label:o}=e,{length:i,width:a,unit:r}=n[t],s=[];return o&&s.push(o),void 0===i||s.push("L: ".concat(zu(i)," ").concat(r),"W: ".concat(zu(a)," ").concat(r)),s}re(Jd,"toolName",void 0),Jd.toolName="Bidirectional";const $d=Jd;function Qd(e,t){const{data:n}=t,o=(0,ne.getEnabledElement)(e),i=(n.getSegment||eh)(o,n);if(!i)return;const a=o.viewport.getFrameOfReferenceUID(),r=Ft(),{segmentIndex:s,segmentationId:l}=i,c=st(this.toolName||$d.toolName,a);let d=!1;const h=c.filter((e=>{const{segment:t}=e.data;if(t)return t.segmentationId===l&&t.segmentIndex===s&&(d=!0,e.data.segment=t),!!t}));let u;if(d||h.push({data:{segment:i}}),h.forEach((e=>{const t=[],{segment:n}=e.data,{segmentIndex:s,segmentationId:l}=n;t[s]=n,mt(e.annotationUID);const c=jd({...r.find((e=>e.segmentationId===l)),segments:t});if(!c)return;const d=zd(c,o.viewport);d.annotationUID=e.annotationUID,d.data.segment=n;const h=gt(d,a);if(n.segmentIndex===i.segmentIndex&&n.segmentationId===i.segmentationId){u=c;const{style:e}=i;e&&Yc.setAnnotationStyles(h,e)}})),u){const{sliceIndex:t}=u,n=o.viewport.getImageIds();Sr(e,{imageIndex:n.length-1-t}),o.viewport.render()}else console.warn("No bidirectional found");return u}function eh(e,t){var n,o;const i=Ft();if(!i.length)return;const a=t.segmentationId||i[0].segmentationId,r=null!==(n=t.segmentIndex)&&void 0!==n?n:Nc(a);if(!r)return;const s=null===(o=t.segmentData)||void 0===o?void 0:o.get(r);return{label:"Segment ".concat(r),segmentIndex:r,segmentationId:a,...s}}const th=1e-6;function nh(e){let t;const n=ne.utilities.getRandomSampleFromArray(e,50);for(let e=0;e<3;e++)if(n.every(((t,n,o)=>Math.abs(t[e]-o[0][e])<th))){t=e;break}if(void 0===t)throw new Error("Cannot find a shared dimension index for polyline, probably oblique plane");const o=[],i=(t+1)%3,a=(t+2)%3;for(let t=0;t<e.length;t++)o.push([e[t][i],e[t][a]]);return{sharedDimensionIndex:t,projectedPolyline:o}}function oh(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{sharedDimensionIndex:o,projectedPolyline:i}=nh(t),{holes:a}=n,r=[];if(a)for(let e=0;e<a.length;e++){const t=a[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(o+1)%3],t[e][(o+2)%3]]);r.push(n)}return Os(i,[e[(o+1)%3],e[(o+2)%3]],{holes:r})}function ih(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=Bt(e),a=i.representationData,r=null!==(n=null==o?void 0:o.representationType)&&void 0!==n?n:Object.keys(a)[0];if(!r)throw new Error("Segmentation ".concat(e," does not have any representations"));switch(r){case Et.Labelmap:return function(e,t,n){let{viewport:o}=n;const i=e.representationData.LABELMAP;if(Ot(i)){const{volumeId:e}=i,n=ne.cache.getVolume(e);if(!n)return;return n.imageData.getScalarValueFromWorld(t)}const{imageIdReferenceMap:a}=i,r=o.getCurrentImageId(),s=a.get(r);if(!ne.cache.getImage(s))return;const l=zt(e.segmentationId),{segmentationRepresentationUID:c}=l[0],d=o.getActor(c),h=null==d?void 0:d.actor.getMapper().getInputData(),u=ne.utilities.transformWorldToIndex(h,t),g=h.getDimensions();return(h.voxelManager||ne.utilities.VoxelManager.createVolumeVoxelManager(g,h.getPointData().getScalars().getData())).getAtIJKPoint(u)}(i,t,o);case Et.Contour:return function(e,t,n){let{viewport:o}=n;const i=e.representationData.CONTOUR,a=Array.from(i.annotationUIDsMap.keys()),{viewPlaneNormal:r}=o.getCamera();for(const e of a){const n=i.annotationUIDsMap.get(e);if(n)for(const o of n){const n=pt(o);if(!n)continue;const{polyline:i}=n.data.contour;if(ne.utilities.isEqual(r,n.metadata.viewPlaneNormal)&&oh(t,i))return Number(e)}}}(i,t,o);default:return}}function ah(e,t,n){let{viewport:o,searchRadius:i}=n;const a=Bt(e),r=a.representationData.LABELMAP;if(Ot(r)){const{volumeId:e}=r,n=ne.cache.getVolume(e);if(!n)return;const a=n.imageData,s=a.getScalarValueFromWorld(t),l=function(e,t,n,o,i){return rh(((t,i)=>{const a=[e[0]+t,e[1]+i],r=n.canvasToWorld(a);return o.getScalarValueFromWorld(r)}),t,i)}(o.worldToCanvas(t),s,o,a,i);return l?s:void 0}const{imageIdReferenceMap:s}=r,l=o.getCurrentImageId(),c=s.get(l);if(!ne.cache.getImage(c))return;const d=zt(a.segmentationId),{segmentationRepresentationUID:h}=d[0],u=o.getActor(h),g=null==u?void 0:u.actor.getMapper().getInputData(),v=ne.utilities.transformWorldToIndex(g,t),m=g.getDimensions(),p=g.voxelManager||ne.utilities.VoxelManager.createVolumeVoxelManager(m,g.getPointData().getScalars().getData()),f=p.getAtIJKPoint(v),I=function(e,t,n,o,i){return rh(((t,o,i)=>{const a=[e[0]+t,e[1]+o,e[2]+i];return n.getAtIJK(...a)}),o,void 0)}(v,0,p,f);return I?f:void 0}function rh(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const o=Array.from({length:2*n+1},((e,t)=>t-n));for(const n of o)for(const i of o)for(const a of o){if(0===n&&0===i&&0===a)continue;const o=e(n,i,a);if(void 0!==o&&t!==o)return!0}return!1}function sh(e){const t=Bt(e),{annotationUIDsMap:n}=t.representationData.CONTOUR;for(const[e,t]of n.entries())if(Array.from(t).find((e=>pt(e).highlighted)))return e}function lh(e,t){const n=e.maxX-e.minX,o=e.maxY-e.minY,i=[n,o],a=[e.minX+n/2,e.minY+o/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*i[0],l=r[1]-.5*i[1];if(s>0&&l>0)return s*s+l*l;const c=Math.max(s,0)+Math.max(l,0);return c*c}function ch(e,t){return Math.sqrt(lh(e,t))}function dh(e,t){return Math.sqrt(as(e,t))}function hh(e,t){const[n,o]=e,[i,a]=t;return[2*i-n,2*a-o]}function uh(e){const t=e.length;let n=0,o=t-1;for(let i=0;i<t;i++)n+=(e[o][0]+e[i][0])*(e[o][1]-e[i][1]),o=i;return Math.abs(n/2)}function gh(e){const t=function(e){const t=aa.vec3.create(),n=e[0];for(let o=0,i=e.length;o<i;o++){const a=e[o],r=e[o===i-1?0:o+1],s=a[0]-n[0],l=a[1]-n[1],c=a[2]-n[2],d=r[0]-n[0],h=r[1]-n[1],u=r[2]-n[2];t[0]+=l*u-c*h,t[1]+=c*d-s*u,t[2]+=s*h-l*d}return aa.vec3.scale(t,t,.5),t}(e);return aa.vec3.normalize(t,t)}function vh(e,t,n){const o=[],i=As(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<i.length;a++){const r=Us(t,n,e[i[a][0]],e[i[a][1]]);o.push(r)}return o}function mh(e,t,n){let o,i;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(i=0,o=1):(i=e.length-1,o=0);const a=[];for(let r=o;r<e.length;r++){const o=e[i],s=e[r];Ds(t,n,o,s)&&a.push([i,r]),i=r}if(0===a.length)return;const r=[];a.forEach((n=>{const o=[e[n[0]],e[n[1]]],i=[(o[0][0]+o[1][0])/2,(o[0][1]+o[1][1])/2];r.push(aa.vec2.distance(i,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}const ph=.001,fh=(e,t)=>{let n,o,i;if(e instanceof ne.StackViewport){const t=e.getImageData();o=t.direction.slice(0,3),i=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),c=a.slice(0,3),d=a.slice(3,6),h=a.slice(6,9),u=aa.vec3.create();aa.vec3.cross(u,l,s);const g=Math.abs(aa.vec3.dot(u,c)),v=Math.abs(aa.vec3.dot(u,d)),m=Math.abs(aa.vec3.dot(u,h));let p;if(Math.abs(1-g)<ph)p=r[0],o=c;else if(Math.abs(1-v)<ph)p=r[1],o=d;else{if(!(Math.abs(1-m)<ph))throw new Error("No support yet for oblique plane planar contours");p=r[2],o=h}const f=Math.abs(aa.vec3.dot(l,c)),I=Math.abs(aa.vec3.dot(l,d)),w=Math.abs(aa.vec3.dot(l,h));let E;if(Math.abs(1-f)<ph)E=r[0],i=c;else if(Math.abs(1-I)<ph)E=r[1],i=d;else{if(!(Math.abs(1-w)<ph))throw new Error("No support yet for oblique plane planar contours");E=r[2],i=h}n=[p,E]}return{spacing:[n[0]/t,n[1]/t],xDir:o,yDir:i}},Ih=(e,t,n)=>aa.vec2.dist(e,t)<n,wh=(e,t,n,o)=>{const{xDir:i,yDir:a,spacing:r}=o,s=(0,ne.getEnabledElement)(e),{viewport:l}=s;if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const c=l.canvasToWorld(t[t.length-1]),d=l.canvasToWorld(n),h=aa.vec3.create();aa.vec3.subtract(h,d,c);const u=Math.abs(aa.vec3.dot(h,i)),g=Math.abs(aa.vec3.dot(h,a)),v=Math.max(Math.floor(u/r[0]),Math.floor(g/r[0]));if(v>1){const e=t[t.length-1],o=aa.vec2.dist(e,n),i=aa.vec2.create();aa.vec2.subtract(i,n,e),aa.vec2.set(i,i[0]/o,i[1]/o);const a=o/v;for(let n=1;n<=v;n++)t.push([e[0]+a*i[0]*n,e[1]+a*i[1]*n])}else t.push(n);return v},Eh=(e,t,n,o)=>{const i=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=i[0]*a[0]+i[1]*a[1];if(r<0)return!1;const s=Math.sqrt(a[0]*a[0]+a[1]*a[1]);if(0===s)return!1;const l=r/s,c=[a[0]/s,a[1]/s],d=[c[0]*l,c[1]*l],h=[t[0]+d[0],t[1]+d[1]];return!(aa.vec2.distance(e,h)>o||aa.vec2.distance(t,h)>aa.vec2.distance(t,n))},Ch=1e-6,_h=1,bh=0;function Dh(e,t,n){const[o,i]=n;if(Math.abs(t)<Ch)return e<0;const a=e/t;if(t>0){if(a>i)return 0;a>o&&(n[0]=a)}else{if(a<o)return 0;a<i&&(n[1]=a)}return 1}function Th(e,t,n,o,i){const[a,r]=e,[s,l]=t,c=s-a,d=l-r;if(void 0===o||void 0===i?(o=e,i=t):(o[0]=e[0],o[1]=e[1],i[0]=t[0],i[1]=t[1]),Math.abs(c)<Ch&&Math.abs(d)<Ch&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return _h;const h=[0,1];if(Dh(n[0]-a,c,h)&&Dh(a-n[2],-c,h)&&Dh(n[1]-r,d,h)&&Dh(r-n[3],-d,h)){const[e,t]=h;return t<1&&(i[0]=a+t*c,i[1]=r+t*d),e>0&&(o[0]+=e*c,o[1]+=e*d),_h}return bh}var Sh=C(807),yh=C.n(Sh);function Mh(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*i,c=e.getBounds(),d=c[0],h=c[1],u=[0,0,0];let g,v=[0,0,0];yh().subtract(t,r,u);for(let t=d;t<=h;t+=l){v=[t,0,0];const n=(t-r[0])/u[0];if(v[1]=n*u[1]+r[1],v[2]=n*u[2]+r[2],xh(v,c)){const t=o(e.getIntensityFromWorld(v),v);t&&(g=t)}}return g}const xh=function(e,t){const[n,o,i,a,r,s]=t;return e[0]>n&&e[0]<o&&e[1]>i&&e[1]<a&&e[2]>r&&e[2]<s},Oh=(e,t,n,o,i,a,r,s)=>{const l=[aa.vec3.fromValues(n,o,i),aa.vec3.fromValues(a,o,i),aa.vec3.fromValues(n,r,i),aa.vec3.fromValues(a,r,i),aa.vec3.fromValues(n,o,s),aa.vec3.fromValues(a,o,s),aa.vec3.fromValues(n,r,s),aa.vec3.fromValues(a,r,s)],c=aa.vec3.fromValues(t[0],t[1],t[2]),d=aa.vec3.fromValues(e[0],e[1],e[2]),h=-aa.vec3.dot(c,d);let u=null;for(const e of l){const t=aa.vec3.dot(c,e)+h;if(null===u)u=Math.sign(t);else if(Math.sign(t)!==u)return!0}return!1},Ph={filterAnnotationsWithinSlice:zc,getWorldWidthAndHeightFromCorners:ud,filterAnnotationsForDisplay:Kc,getPointInLineOfSightWithCriteria:Mh,isPlaneIntersectingAABB:Oh};function Ah(e){let t="";const n=e[0]<0?"R":"L",o=e[1]<0?"A":"P",i=e[2]<0?"F":"H",a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=1e-4;for(let e=0;e<3;e++)if(a[0]>r&&a[0]>a[1]&&a[0]>a[2])t+=n,a[0]=0;else if(a[1]>r&&a[1]>a[0]&&a[1]>a[2])t+=o,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=i,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+o,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+i,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=o+i,a[1]=0,a[2]=0}return t}function Rh(e){let t=e.replace("H","f");return t=t.replace("F","h"),t=t.replace("R","l"),t=t.replace("L","r"),t=t.replace("A","p"),t=t.replace("P","a"),t=t.toUpperCase(),t}var Nh=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}(Nh||{});const Lh=Nh,kh={};function Uh(e,t){const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;kh[o]=t}function Vh(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n}=t;return kh[n]}const{ViewportStatus:Wh}=ne.Enums,{triggerEvent:Hh}=ne.utilities,Bh=!0,Fh=new Map;function Gh(e,t){var n;let o,i;if(void 0===e)throw new Error("playClip: element must not be undefined");const a=(0,ne.getEnabledElement)(e);if(!a)throw new Error("playClip: element must be a valid Cornerstone enabled element");t||(t={}),t.dynamicCineEnabled=null===(n=t.dynamicCineEnabled)||void 0===n||n;const{viewport:r}=a,s=Kh(r),l=function(e,t){var n;if(e instanceof ne.StackViewport)return function(e,t){const n=e.getImageIds();return{get numScrollSteps(){return n.length},get currentStepIndex(){return e.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Wh.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,Tr(e,{delta:n,debounceLoading:Bh}))}}}(e,null!==(n=t.waitForRendered)&&void 0!==n?n:30);if(e instanceof ne.VolumeViewport){const n=Kh(e);return t.dynamicCineEnabled&&null!=n&&n.isDynamicVolume()?function(e){return{get numScrollSteps(){return e.numTimePoints},get currentStepIndex(){return e.timePointIndex},get frameTimeVectorEnabled(){return!1},scroll(t){e.timePointIndex+=t}}}(n):function(e,t){const{volumeId:n}=t,o={viewPlaneNormal:aa.vec3.create(),scrollInfo:null},i=()=>{const t=e.getCamera();if(!o.scrollInfo||!aa.vec3.equals(t.viewPlaneNormal,o.viewPlaneNormal)){const i=ne.utilities.getVolumeViewportScrollInfo(e,n);o.viewPlaneNormal=t.viewPlaneNormal,o.scrollInfo=i}return o.scrollInfo};return{get numScrollSteps(){return i().numScrollSteps},get currentStepIndex(){return i().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),o=t.direction.slice(6,9).map((e=>-e)),i=aa.vec3.dot(o,n.viewPlaneNormal);return aa.glMatrix.equals(i,1)},scroll(t){i().currentStepIndex+=t,Tr(e,{delta:t})}}}(e,n)}throw new Error("Unknown viewport type")}(r,t);let c=Vh(e);const d=t.dynamicCineEnabled&&(null==s?void 0:s.isDynamicVolume());var h,u,g,v;if(d&&zh(e),c?jh(e,{stopDynamicCine:!d,viewportId:r.id}):(c={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:null!==(h=t.frameTimeVector)&&void 0!==h?h:void 0,speed:null!==(u=t.frameTimeVectorSpeedMultiplier)&&void 0!==u?u:1,reverse:null!==(g=t.reverse)&&void 0!==g&&g,loop:null===(v=t.loop)||void 0===v||v},Uh(e,c)),c.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(c.framesPerSecond=Number(t.framesPerSecond),c.reverse=c.framesPerSecond<0,c.ignoreFrameTimeVector=!0),!0!==c.ignoreFrameTimeVector&&c.frameTimeVector&&c.frameTimeVector.length===l.numScrollSteps&&l.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,o,i,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)i=Number(e[n])/t|0,s.push(i),1===n?o=i:i!==o&&(l=!0),a+=i;return s.length>0&&(i=l?a/s.length|0:s[0],s.push(i)),{timeouts:s,isTimeVarying:l}}(c.frameTimeVector,c.speed);o=e,i=t}const m=()=>{const{numScrollSteps:t,currentStepIndex:n}=l;let o=n+(c.reverse?-1:1);const i=o<0||o>=t;if(!c.loop&&i){jh(e,{stopDynamicCine:!d,viewportId:r.id});const t={element:e};return void Hh(e,Lh.CLIP_STOPPED,t)}o>=t?o=0:o<0&&(o=t-1);const a=o-n;a&&l.scroll(a)};d&&Fh.set(s.volumeId,e),o&&o.length>0&&i?(c.usingFrameTimeVector=!0,c.intervalId=window.setTimeout((function e(){c.intervalId=window.setTimeout(e,o[l.currentStepIndex]),m()}),0)):(c.usingFrameTimeVector=!1,c.intervalId=window.setInterval(m,1e3/Math.abs(c.framesPerSecond)));const p={element:e};Hh(e,Lh.CLIP_STARTED,p)}function qh(e,t){jh(e,{stopDynamicCine:!0,viewportId:t})}function jh(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{stopDynamicCine:!0,viewportId:void 0};const{stopDynamicCine:n,viewportId:o}=t,i=(0,ne.getEnabledElement)(e);let a;if(i){const{viewport:e}=i;a=Vh(e.element)}else{if(!o)return;a=function(e){return kh[e]}(o)}a&&function(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}(a),n&&(null==i?void 0:i.viewport)instanceof ne.BaseVolumeViewport&&zh(e)}function zh(e){const{viewport:t}=(0,ne.getEnabledElement)(e),n=Kh(t);if(null!=n&&n.isDynamicVolume()){const t=Fh.get(n.volumeId);Fh.delete(n.volumeId),t&&t!==e&&qh(t)}}function Kh(e){const t=function(e){return e.getActors().map((e=>ne.cache.getVolume(e.uid))).filter((e=>!!e))}(e),n=t.find((e=>e.isDynamicVolume()));return null!=n?n:t[0]}function Yh(e){var t=e.length-1;return function(n){var o=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),i=e[o],a=e[o+1],r=o>0?e[o-1]:2*i-a,s=o<t-1?e[o+2]:2*a-i;return function(e,t,n,o,i){var a=e*e,r=a*e;return((1-3*e+3*a-r)*t+(4-6*a+3*r)*n+(1+3*e+3*a-3*r)*o+r*i)/6}((n-o/t)*t,r,i,a,s)}}function Xh(e,t){for(var n=new Array(t),o=0;o<t;++o)n[o]=e(o/(t-1));return n}function Jh(e){return e.length}function Zh(){return function(e){if(!(i=e.length))return[];for(var t=-1,n=function(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let o=-1;for(let i of e)null!=(i=t(i,++o,e))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}(e,Jh),o=new Array(n);++t<n;)for(var i,a=-1,r=o[t]=new Array(i);++a<i;)r[a]=e[a][t];return o}(arguments)}function $h(e,t,n,o){var i,a;const r=n-t+1,s=null!==(i=Math.floor(o/100*r))&&void 0!==i?i:1,l=null!==(a=Math.floor(r/s))&&void 0!==a?a:1;if(isNaN(r)||!r||!l)return e;if(r/l<2)return e;const c=Math.max(0,t),d=Math.min(e.length-1,n),h=e.slice(0,c),u=e.slice(d+1,e.length);return[...h,...function(e,t){if(!t||0===t.length||t.length===e.length)return e;const n=t[t.length-1]-t[0]+1,o=Yh(t.map((t=>e[t][0]))),i=Yh(t.map((t=>e[t][1])));if(3===(null===(a=e[0])||void 0===a?void 0:a.length)){const a=Yh(t.map((t=>e[t][2])));return Zh(Xh(o,n),Xh(i,n),Xh(a,n))}return Zh(Xh(o,n),Xh(i,n));var a}(e,function(e,t){const n=[],[o,i]=t,a=i-o+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+o;for(;l<=i;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+o;return n}(l,[c,d])),...u]}function Qh(e,t,n){if(function(e,t,n){var o;if(null==t||null===(o=t.data)||void 0===o||!o.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:i,viewportId:a,FrameOfReferenceUID:r}=e,s=Qo(a,i);if(t.metadata.FrameOfReferenceUID!==r)return!0;if(!s)return!0;const l=s.getToolInstance(t.metadata.toolName);return!(l instanceof Ev)||l.isDrawing||l.isEditingOpen||l.isEditingClosed}(e,t,n))return!1;const{viewport:o}=e,i=t.data.contour.polyline.map(o.worldToCanvas),a=$h(i,0,i.length,n);return a!==i&&(t.data.contour.polyline=a.map(o.canvasToWorld),!0)}const eu={smoothAnnotation:Qh},{isEqual:tu}=ne.utilities,nu=[aa.vec3.fromValues(1,0,0),aa.vec3.fromValues(0,1,0),aa.vec3.fromValues(0,0,1)];function ou(e){const t=aa.vec3.subtract(aa.vec3.create(),e[0],e[1]),n=aa.vec3.subtract(aa.vec3.create(),e[0],e[2]);return[...iu(t,nu),...iu(n,nu)].every((e=>tu(e,0)||tu(e,90)||tu(e,180)||tu(e,270)))}function iu(e,t){return t.map((t=>180*aa.vec3.angle(e,t)/Math.PI))}const au={};function ru(e,t){const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;au[o]=t}function su(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n}=t;return au[n]}const lu=ne.Enums.RequestType.Prefetch,cu=0;function du(e,t){e=Math.round(e)||0;const n=[];let o=(t=Math.round(t)||0)-e+1;if(o<=0)return n;for(;o--;)n[o]=t--;return n}function hu(e){const t=(0,ne.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof ne.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:(console.warn("stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented"),null)}function uu(e){return function(t){const n=t.detail;let o;try{o=hu(e)}catch(e){return}if(!o||!o.imageIds||0===o.imageIds.length)return;const i=o.imageIds.indexOf(n.imageId);if(i<0)return;const a=su(e);a&&a.data&&a.data.length&&a.indicesToRequest.push(i)}}const gu=e=>{const t=new Set(e.imageIds);return e=>e.type!==lu||!t.has(e.additionalDetails.imageId)};let vu,mu={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function pu(e){var t,n;const o=su(e);if(!o)return;const i=o||{},a=hu(e);if(null==a||null===(t=a.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:r}=a;if(i.enabled&&(i.enabled=null===(n=i.indicesToRequest)||void 0===n?void 0:n.length),!1===i.enabled)return;if(o.indicesToRequest.sort(((e,t)=>e-t)),i.indicesToRequest.slice().forEach((function(e){const t=a.imageIds[e];t&&(Math.abs(r-e)<6?ne.cache.getImageLoadObject(t):ne.cache.isLoaded(t))&&function(e){const t=i.indicesToRequest.indexOf(e);t>-1&&i.indicesToRequest.splice(t,1)}(e)})),!i.indicesToRequest.length)return;mu.preserveExistingPool||ne.imageLoadPoolManager.clearRequestStack(lu);const s=function(e,t){let n=0,o=e.length-1;return e.forEach(((e,i)=>{e<t?n=Math.max(i,n):e>t&&(o=Math.min(i,o))})),{low:n,high:o}}(i.indicesToRequest,a.currentImageIdIndex);let l,c,d=s.low,h=s.high;const u=[];for(;d>=0||h<i.indicesToRequest.length;){const e=a.currentImageIdIndex,t=!(e-i.indicesToRequest[d]>mu.maxImagesToPrefetch)&&d>=0,n=!(i.indicesToRequest[h]-e>mu.maxImagesToPrefetch)&&h<i.indicesToRequest.length;if(!n&&!t)break;t&&(c=i.indicesToRequest[d--],l=a.imageIds[c],u.push(l)),n&&(c=i.indicesToRequest[h++],l=a.imageIds[c],u.push(l))}const g=(e,t)=>ne.imageLoader.loadAndCacheImage(e,t),{useNorm16Texture:v}=(0,ne.getConfiguration)().rendering;u.forEach((e=>{const t={targetBuffer:{type:v?void 0:"Float32Array"},preScale:{enabled:!0},requestType:lu};ne.imageLoadPoolManager.addRequest(g.bind(null,e,t),lu,{imageId:e},cu)}))}function fu(e){clearTimeout(vu),vu=setTimeout((function(){const t=e.target;try{pu(t)}catch(e){return}}),10)}const Iu={enable:function(e){const t=hu(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:du(0,t.imageIds.length-1),enabled:!0,direction:1},o=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(o,1),ru(e,n),pu(e),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu),e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu);const i=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,i),ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,i)},disable:function(e){clearTimeout(vu),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu);const t=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=su(e);n&&n.indicesToRequest.length&&(n.enabled=!1,ne.imageLoadPoolManager.clearRequestStack(lu))},getConfiguration:function(){return mu},setConfiguration:function(e){mu=e}};let wu,Eu={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function Cu(e){var t,n;const o=hu(e);if(null==o||null===(t=o.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const i=su(e);if(!i)return;const a=i||{};if(a.enabled&&(a.enabled=null===(n=a.indicesToRequest)||void 0===n?void 0:n.length),!1===a.enabled)return;function r(e){const t=a.indicesToRequest.indexOf(e);t>-1&&a.indicesToRequest.splice(t,1)}const s=a.indicesToRequest.slice(),{currentImageIdIndex:l}=o;if(s.forEach((e=>{const t=o.imageIds[e];t&&(Math.abs(l-e)<6?ne.cache.getImageLoadObject(t):ne.cache.isLoaded(t))&&r(e)})),!a.indicesToRequest.length)return;Eu.preserveExistingPool||ne.imageLoadPoolManager.filterRequests(gu(o));const c=(t,n)=>ne.imageLoader.loadAndCacheImage(t,n).then((()=>function(t){var n;r(o.imageIds.indexOf(t));const i=ne.cache.getCachedImageBasedOnImageURI(t),{stats:s}=a,l=(null==i||null===(n=i.image)||void 0===n?void 0:n.decodeTimeInMS)||0;if(l){var c;s.imageIds.set(t,l),s.decodeTimeInMS+=l;const e=(null==i||null===(c=i.image)||void 0===c?void 0:c.loadTimeInMS)||0;s.loadTimeInMS+=e}if(!a.indicesToRequest.length&&null!=i&&i.sizeInBytes){const{sizeInBytes:t}=i,n=ne.cache.getMaxCacheSize()/4/t;if(a.cacheFill){if(s.imageIds.size){s.fillTime=Date.now()-s.start;const{size:e}=s.imageIds;s.fillSize=e,console.log("Done cache fill",s.fillTime,"ms",e,"items","average total time",zu(s.fillTime/e),"ms","average load",zu(s.loadTimeInMS/e),"ms","average decode",zu(s.decodeTimeInMS/e),"ms")}}else s.initialTime=Date.now()-s.start,s.initialSize=s.imageIds.size,bu(e,n),Cu(e)}}(t))),{useNorm16Texture:d}=(0,ne.getConfiguration)().rendering;s.forEach((e=>{const t=o.imageIds[e],n={targetBuffer:{type:d?void 0:"Float32Array"},preScale:{enabled:!0},requestType:lu};ne.imageLoadPoolManager.addRequest(c.bind(null,t,n),lu,{imageId:t},cu)}))}function _u(e){clearTimeout(wu),wu=setTimeout((function(){const t=e.target;try{bu(t),Cu(t)}catch(e){return}}),5)}const bu=(e,t)=>{const n=hu(e);if(!n||!n.imageIds||0===n.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:o}=n;let{maxAfter:i=2,minBefore:a=2}=Eu;const{directionExtraImages:r=10}=Eu,s=su(e)||{indicesToRequest:[],currentImageIdIndex:o,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=o-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=o,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>i||!l)if(s.stackCount=0,t){const e=o/n.imageIds.length;a=Math.ceil(t*e),i=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,i=0):(i+=s.stackCount,a=0);const c=Math.max(0,o-a),d=Math.min(n.imageIds.length-1,o+i),h=[];for(let e=o+1;e<=d;e++)h.push(e);for(let e=o-1;e>=c;e--)h.push(e);s.indicesToRequest=h,ru(e,s)},Du={enable:e=>{const t=hu(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");bu(e),Cu(e),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u),e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u);const n=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(wu),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u);const t=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=su(e);n&&n.data.length&&(n.enabled=!1)},getConfiguration:function(){return Eu},setConfiguration:function(e){Eu=e}};function Tu(e,t){if(!(e instanceof ne.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),o=[0,0,0];return aa.vec3.sub(o,t,n),function(e,t){const n=e.getCamera(),o=n.viewPlaneNormal,i=aa.vec3.dot(t,o),a=aa.vec3.fromValues(o[0],o[1],o[2]);if(aa.vec3.scale(a,a,i),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],o=[0,0,0];aa.vec3.add(t,n.focalPoint,a),aa.vec3.add(o,n.position,a),e.setCamera({focalPoint:t,position:o}),e.render()}}(e,o),!0}const Su=function(e,t){const n=t.frameNumbers||[...Array(e.numTimePoints).keys()];if(!t.maskVolumeId&&!t.imageCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(t.maskVolumeId&&t.imageCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(t.maskVolumeId){const o=ne.cache.getVolume(t.maskVolumeId),[i,a]=function(e,t,n){const{imageData:o}=n,i=n.getScalarData(),a=i.length,r=[];r.length=a;const s=[],l=n.dimensions;let c=0;for(let e=0,t=i.length;e<t;e++)0!==i[e]&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[c++]=e);r.length=c;const d=t.getScalarDataArrays(),h=[];if(d[0].length===a&&JSON.stringify(t.spacing)===JSON.stringify(n.spacing)){for(let t=0;t<r.length;t++){const n=[];e.forEach((e=>{const o=d[e];n.push(o[r[t]])})),h.push(n)}return[h,s]}return yr(o,(()=>!0),(n=>{let{pointLPS:o,value:i,pointIJK:a}=n;if(0===i)return;const r=Vc(t.imageData,t.dimensions,t.spacing,o);let l=0;const c=new Map;e.forEach((e=>c.set(e,0)));yr(t.imageData,(()=>!0),(t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const o=d[t][n],i=e[t];c.set(i,c.get(i)+o)}l++}),r);const u=[];c.forEach((e=>{u.push(e/l)})),s.push(a),h.push(u)})),[h,s]}(n,e,o);return[i,a]}if(t.imageCoordinate){const o=function(e,t,n){const{dimensions:o,imageData:i}=n,a=i.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!ne.utilities.indexWithinDimensions(a,o))throw new Error("outside bounds");const r=o[0],s=o[0]*o[1],l=n.getScalarDataArrays(),c=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];c.push(t[n])})),c}(n,t.imageCoordinate,e);return o}},yu=function(e,t,n){const o=n||[...Array(e.numTimePoints).keys()],i=o.length;if(o.length<=1)throw new Error("Please provide two or more time points");const a=e.getScalarDataArrays(),r=a[0].length,s=new Float32Array(r);if(t===ne.Enums.DynamicOperatorType.SUM){for(let e=0;e<i;e++){const t=a[o[e]];for(let e=0;e<r;e++)s[e]+=t[e]}return s}if(t===ne.Enums.DynamicOperatorType.SUBTRACT){if(o.length>2)throw new Error("Please provide only 2 time points for subtraction.");for(let e=0;e<r;e++)s[e]+=a[o[0]][e]-a[o[1]][e];return s}if(t===ne.Enums.DynamicOperatorType.AVERAGE){for(let e=0;e<i;e++){const t=a[o[e]];for(let e=0;e<r;e++)s[e]+=t[e]}for(let e=0;e<r;e++)s[e]=s[e]/i;return s}};function Mu(e,t){const n=3*t;if(n<e.length)return aa.vec3.fromValues(e[n],e[n+1],e[n+2])}function xu(e){const t=e.getLines().getData();let n=0;const o=new Map;for(;n<t.length;){const e=t[n++],i=[];for(let o=0;o<e;o++)i.push(t[n+o]);o.set(i[0],i),n+=e}const i=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(o);for(;-1!==r;){const e=[r];for(;o.has(r);){const t=o.get(r)[1];o.has(t)&&e.push(t),o.delete(r),r=t}i.push(e),r=a(o)}return i.length?i:void 0}function Ou(e){const t=xu(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Mu(n,e)))))}let Pu=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const Au=e=>e&&e.upper>e.lower,Ru=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,Nu=e=>!!e&&e.width>0&&e.height>0,Lu=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:ku}=ne.utilities;class Uu{constructor(e){re(this,"_canvas",void 0),re(this,"_imageRange",void 0),re(this,"_voiRange",void 0),re(this,"_colormap",void 0),re(this,"_showFullImageRange",void 0),Uu.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:i={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=o,this._voiRange=i,this._showFullImageRange=r,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:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Nu(e)&&!Lu(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Au(e)&&!Ru(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Au(e)&&!Ru(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:t}=e;null==t||t.removeChild(e)}static validateProps(e){const{size:t,imageRange:n,voiRange:o}=e;if(t&&!Nu(t))throw new Error('Invalid "size"');if(n&&!Au(n))throw new Error('Invalid "imageRange"');if(o&&!Au(o))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:o}=t;e.width=n,e.height=o,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(o,"px")})}_createRootElement(e){const t=document.createElement("canvas");return Object.assign(t.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(t,e),t}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:t}=e,n=t.length/4,o=e=>{const o=4*e;if(!(e<0||e>=n))return{index:e,position:t[o],color:[t[o+1],t[o+2],t[o+3]]}},{width:i,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=i>a,l=s?i:a,{_voiRange:c}=this,d=this._showFullImageRange?this._imageRange:{...c},{windowWidth:h}=ne.utilities.windowLevel.toWindowLevel(c.lower,c.upper);let u,g=o(0);const v=(d.upper-d.lower)/(l-1);let m=d.lower;for(let e=0;e<l;e++){const t=(m-c.lower)/h;if(g)for(let e=g.index;e<n&&!(t<=g.position);e++)u=g,g=o(e+1);let l;if(u)if(g){const e=(t-u.position)/(g.position-u.position);p=u.color,f=g.color,I=e,l=[p[0]*(1-I)+f[0]*I,p[1]*(1-I)+f[1]*I,p[2]*(1-I)+f[2]*I]}else l=[...u.color];else l=[...g.color];const d=l.map((e=>ku(Math.round(255*e),0,255)));r.fillStyle="rgb(".concat(d[0],", ").concat(d[1],", ").concat(d[2],")"),s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,i,1),m+=v}var p,f,I}}const Vu={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 Wu{constructor(e){var t,n,o,i,a,r;re(this,"_canvas",void 0),re(this,"_imageRange",void 0),re(this,"_voiRange",void 0),re(this,"_color",void 0),re(this,"_tickSize",void 0),re(this,"_tickWidth",void 0),re(this,"_labelMargin",void 0),re(this,"_maxNumTicks",void 0),re(this,"_rangeTextPosition",void 0),re(this,"_showFullPixelValueRange",void 0),re(this,"_font",void 0),Wu.validateProps(e);const{top:s=0,left:l=0,size:c={width:20,height:100},imageRange:d={lower:0,upper:1},voiRange:h={lower:0,upper:1},ticks:u,container:g,showFullPixelValueRange:v=!1}=e,{style:m,position:p}=null!=u?u:{};this._imageRange=d,this._voiRange=h,this._font=null!==(t=null==m?void 0:m.font)&&void 0!==t?t:Vu.FONT,this._color=null!==(n=null==m?void 0:m.color)&&void 0!==n?n:Vu.COLOR,this._tickSize=null!==(o=null==m?void 0:m.tickSize)&&void 0!==o?o:Vu.TICK_SIZE,this._tickWidth=null!==(i=null==m?void 0:m.tickWidth)&&void 0!==i?i:Vu.TICK_WIDTH,this._labelMargin=null!==(a=null==m?void 0:m.labelMargin)&&void 0!==a?a:Vu.TICK_LABEL_MARGIN,this._maxNumTicks=null!==(r=null==m?void 0:m.maxNumTicks)&&void 0!==r?r:Vu.MAX_NUM_TICKS,this._rangeTextPosition=null!=p?p:Pu.Right,this._showFullPixelValueRange=v,this._canvas=this._createCanvasElement(c,s,l),g&&this.appendTo(g)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Nu(e)&&!Lu(t,e)&&(this._setCanvasSize(t,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:t}=this;e!==this.top&&(t.style.top="".concat(e,"px"),this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:t}=this;e!==this.left&&(t.style.left="".concat(e,"px"),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Au(e)&&!Ru(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Au(e)&&!Ru(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"block"===this._canvas.style.display}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:t,imageRange:n,voiRange:o}=e;if(t&&!Nu(t))throw new Error('Invalid "size"');if(n&&!Au(n))throw new Error('Invalid "imageRange"');if(o&&!Au(o))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:o}=t;e.width=n,e.height=o,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(o,"px")})}_createCanvasElement(e,t,n){const o=document.createElement("canvas");return Object.assign(o.style,{display:"none",position:"absolute",boxSizing:"border-box",top:"".concat(t,"px"),left:"".concat(n,"px")}),this._setCanvasSize(o,e),o}_getTicks(e){const{lower:t,upper:n}=e,o=(n-t)/(this._maxNumTicks-1),i=Math.pow(10,-Math.floor(Math.log10(Math.abs(o)))),a=o*i,r=Vu.TICKS_STEPS.find((e=>e>=a))/i,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,c=Math.round((s-l)/r)+1,d=[];for(let e=0;e<c;e++)d.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:d}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:o}=this._canvas;return{labelPoint:[o-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[o-this._tickSize,t],end:[o,t]}}}_getRightTickInfo(e){let{position:t}=e;return{labelPoint:[this._tickSize+this._labelMargin,t],tickPoints:{start:[0,t],end:[this._tickSize,t]}}}_getTopTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}_getBottomTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}render(){const{_canvas:e}=this;if(!e.isConnected||!this.visible)return;const{width:t,height:n}=e,o=t>=n,i=o?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:c}=this._getTicks(s);a.clearRect(0,0,t,n),a.font=this._font,a.textBaseline="middle",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,c.forEach((e=>{let t=Math.round(i*((e-s.lower)/l));if(o||(t=n-t),t<0||t>i)return;const r=e.toString(),c=a.measureText(r);let d;d=o?this._rangeTextPosition===Pu.Top?this._getTopTickInfo({position:t,labelMeasure:c}):this._getBottomTickInfo({position:t,labelMeasure:c}):this._rangeTextPosition===Pu.Left?this._getLeftTickInfo({position:t,labelMeasure:c}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:u}=d,{start:g,end:v}=u;return a.beginPath(),a.moveTo(g[0],g[1]),a.lineTo(v[0],v[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class Hu{constructor(e){let{id:t,container:n}=e;re(this,"_id",void 0),re(this,"_rootElement",void 0),re(this,"_containerSize",void 0),re(this,"_containerResizeObserver",void 0),re(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:o,contentBoxSize:i}=e[0];o?(t=o.width,n=o.height):null!=i&&i.length&&(t=i[0].inlineSize,n=i[0].blockSize),this._containerSize={width:t,height:n},this.onContainerResize()})),this._id=t,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(t),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),n&&this.appendTo(n)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:t,_containerResizeObserver:n}=this,{parentElement:o}=t;e&&e!==o&&(o&&n.unobserve(o),e.appendChild(t),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:t}=this,{parentElement:n}=e;null==n||n.removeChild(e),t.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const t=document.createElement("div");return t.id=e,t.classList.add("widget"),Object.assign(t.style,{width:"100%",height:"100%"}),t}onContainerResize(){}}const Bu={MULTIPLIER:1,RANGE_TEXT_POSITION:Pu.Right,TICKS_BAR_SIZE:50};class Fu extends Hu{constructor(e){var t,n;super(e),re(this,"_colormaps",void 0),re(this,"_activeColormapName",void 0),re(this,"_eventListenersManager",void 0),re(this,"_canvas",void 0),re(this,"_ticksBar",void 0),re(this,"_rangeTextPosition",void 0),re(this,"_isMouseOver",!1),re(this,"_isInteracting",!1),re(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),re(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),re(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),re(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),o=this._getPointsFromMouseEvent(e),{points:i,voiRange:a}=t,r=aa.vec2.sub(aa.vec2.create(),o.local,i.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:c,upper:d}=a;let{windowWidth:h,windowCenter:u}=ne.utilities.windowLevel.toWindowLevel(c,d);h=Math.max(h+s,1),u+=l;const g=ne.utilities.windowLevel.toLowHighRange(h,u);this.voiRange=g,e.stopPropagation(),e.preventDefault()})),re(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new ne.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=Fu.getColormapsMap(e),this._activeColormapName=Fu.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=null!==(t=null===(n=e.ticks)||void 0===n?void 0:n.position)&&void 0!==t?t:Bu.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 t=this._colormaps.get(e);t?(this._activeColormapName=e,this._canvas.colormap=t):console.warn("Invalid colormap name (".concat(e,")"))}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:t}=this._canvas;Au(e)&&!Ru(e,t)&&(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[Bu.MULTIPLIER,Bu.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:t}=e;return t.reduce(((e,t)=>e.set(t.Name,t)),new Map)}static getInitialColormapName(e){const{activeColormapName:t,colormaps:n}=e;return t&&n.some((e=>e.Name===t))?t:n[0].Name}_createCanvas(e){const{imageRange:t,voiRange:n,showFullPixelValueRange:o}=e,i=this._colormaps.get(this._activeColormapName);return new Uu({colormap:i,imageRange:t,voiRange:n,showFullPixelValueRange:o})}_createTicksBar(e){const t=e.ticks;return new Wu({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],o=[e.pageX,e.pageY],i=t.getBoundingClientRect();return{client:n,page:o,local:[o[0]-i.left-window.pageXOffset,o[1]-i.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:o}=this,i=e>=t,a=i?e:Bu.TICKS_BAR_SIZE,r=i?Bu.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[Pu.Top,Pu.Bottom]:[Pu.Left,Pu.Right]).includes(n)}(e,t,o))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},i?(l=0,s=o===Pu.Top?-r:t):(s=0,l=o===Pu.Left?-a:e),n.top=s,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:t}=this;e.addEventListener(t,"mouseover",this._mouseOverCallback),e.addEventListener(t,"mouseout",this._mouseOutCallback),e.addEventListener(t,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:t}=this,n={points:this._getPointsFromMouseEvent(e),voiRange:{...this._canvas.voiRange}};this._removeVOIEventListeners(),t.addEventListener(document,"voi.mouseup",this._mouseUpCallback),t.addEventListener(document,"voi.mousemove",(e=>this._mouseDragCallback(e,n)))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const{Events:Gu}=ne.Enums,qu={lower:-1e3,upper:1e3};class ju extends Fu{constructor(e){const{element:t,volumeId:n}=e,o=ju._getImageRange(t,n),i=ju._getVOIRange(t,n);super({...e,imageRange:o,voiRange:i}),re(this,"_element",void 0),re(this,"_volumeId",void 0),re(this,"_hideTicksTime",void 0),re(this,"_hideTicksTimeoutId",void 0),re(this,"autoHideTicks",(()=>{if(this._hideTicksTimeoutId)return;const e=this._hideTicksTime-Date.now();e<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout((()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()}),e)})),re(this,"_stackNewImageCallback",(()=>{this.imageRange=ju._getImageRange(this._element)})),re(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail.imageVolume;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=ju._getImageRange(n,t)})),re(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:o}=e.detail,{viewport:i}=this.enabledElement;t===i.id&&n===this._volumeId&&(this.voiRange=o,this.showAndAutoHideTicks())})),re(this,"_viewportColormapModifiedCallback",(e=>{const{viewportId:t,colormap:n,volumeId:o}=e.detail,{viewport:i}=this.enabledElement;t===i.id&&o===this._volumeId&&(this.activeColormapName=n.name)})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,ne.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t,n){if("PT"===ne.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:o}=e.element,i=5/Math.max(n,o),a=vd(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:i;return a?[s,i]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof ne.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof ne.VolumeViewport){const{_volumeId:n}=this,o=ne.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),o.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=t?o.getActor(t):o.getDefaultActor();if(!i)return qu;const a=i.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?qu:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=t?o.getActor(t):o.getDefaultActor();if(!i||!ne.utilities.isImageActor(i))return qu;const a=i.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?qu:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;ne.eventTarget.addEventListener(Gu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(Gu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(Gu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(Gu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}const zu=ne.utilities.roundNumber;function Ku(e,t){var n,o;return(null==t||!t.autoGenerated)&&(!0===(null==e||null===(n=e.smoothing)||void 0===n?void 0:n.smoothOnAdd)||!0===(null==e||null===(o=e.smoothing)||void 0===o?void 0:o.smoothOnEdit))}function Yu(e,t,n){return(e+t+n)%t}function Xu(e,t,n,o){const[,i,a]=e,[,r,s]=t,l=a.length,c=s.length;let d=e[0],h=t[0];if(!(a[d]&&s[h]&&a[i]&&s[r]))return[void 0,void 0];for(;d!==i&&h!==r;){if(n(s[h],a[d]))return[d,h];d=Yu(d,l,o),h=Yu(h,c,o)}return[void 0,void 0]}function Ju(e,t,n){const{interpolation:o,smoothing:i}=e,a=t;if(o){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:o,smoothOnAdd:a=!1,smoothOnEdit:r=!1}=i,s=n?o:e;if(n?r:a){const[e,o]=n?function(e,t){const[n,o]=function(e,t){for(let n=0;n<e.length;n++)for(let o=0;o<t.length;o++)if(0===dh(e[n],t[o]))return[n,o]}(e,t)||[],i=(e,t)=>!1===function(e,t){return dh(e,t)<.001}(e,t),[a,r]=Xu([Yu(n,e.length,1),n,e],[Yu(o,t.length,1),o,t],i,1),[s]=Xu([Yu(a,e.length,-1),a,e],[Yu(r,t.length,-1),r,t],i,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[o]?$h(t,e,o,s):t}}return a}var Zu=function(e){return e[e.Primary=1]="Primary",e[e.Secondary=2]="Secondary",e[e.Primary_And_Secondary=3]="Primary_And_Secondary",e[e.Auxiliary=4]="Auxiliary",e[e.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",e[e.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",e[e.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",e[e.Fourth_Button=8]="Fourth_Button",e[e.Fifth_Button=16]="Fifth_Button",e}(Zu||{}),$u=function(e){return e[e.Shift=16]="Shift",e[e.Ctrl=17]="Ctrl",e[e.Alt=18]="Alt",e[e.Meta=91]="Meta",e[e.ShiftCtrl=1617]="ShiftCtrl",e[e.ShiftAlt=1618]="ShiftAlt",e[e.ShiftMeta=1691]="ShiftMeta",e[e.CtrlAlt=1718]="CtrlAlt",e[e.CtrlMeta=1791]="CtrlMeta",e[e.AltMeta=1891]="AltMeta",e}($u||{});const Qu=e=>e.shiftKey?e.ctrlKey?$u.ShiftCtrl:e.altKey?$u.ShiftAlt:e.metaKey?$u.ShiftMeta:$u.Shift:e.ctrlKey?e.altKey?$u.CtrlAlt:e.metaKey?$u.CtrlMeta:$u.Ctrl:e.altKey?e.metaKey&&$u.AltMeta||$u.Alt:e.metaKey?$u.Meta:void 0;function eg(e,t){const n=e[0],o=e[e.length-1],i=aa.vec2.create();aa.vec2.set(i,o[0]-n[0],o[1]-n[1]),aa.vec2.normalize(i,i);const a=aa.vec2.create(),r=aa.vec2.create();aa.vec2.set(a,-i[1],i[0]),aa.vec2.set(r,i[1],-i[0]);const s=[(n[0]+o[0])/2,(n[1]+o[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],o=aa.vec2.dist(n,s);o>l.dist&&(l.dist=o,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}const{addCanvasPointsToArray:tg,pointsAreWithinCloseContourProximity:ng,getFirstLineSegmentIntersectionIndexes:og,getSubPixelSpacingAndXYDirections:ig}=D;function ag(e,t,n){this.isDrawing=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a),{viewport:l}=s,c=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:d,xDir:h,yDir:u}=ig(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0,contourHoleProcessingEnabled:c},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),Dc(a)}function rg(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),bc(e)}function sg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{annotation:c,viewportIdsToRender:d,xDir:h,yDir:u,spacing:g,movingTextBox:v}=this.commonData,{polylineIndex:m,canvasPoints:p}=this.drawData,f=p[p.length-1],I=l.canvasToWorld(f),w=aa.vec3.create();aa.vec3.subtract(w,i,I);const E=Math.abs(aa.vec3.dot(w,h)),C=Math.abs(aa.vec3.dot(w,u));if(!(E<=g[0]&&C<=g[1])){if(v){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.data.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=tg(o,p,a,this.commonData);this.drawData.polylineIndex=m+e}}Ua(s,d)}}function lg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,i=n[0],a=n[n.length-1],r=e.detail,{element:s}=r;t&&!ng(i,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:o})}function cg(e,t){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:o,minPointsToSave:i}=null!=t?t:{};if(i&&n.length<i)return!1;if(this.haltDrawing(e,n))return!1;const{annotation:a,viewportIdsToRender:r}=this.commonData,s=(0,ne.getEnabledElement)(e),{viewport:l,renderingEngine:c}=s;tg(e,n,n[0],this.commonData),n.pop();const d=Ku(this.configuration,a)?Ju(this.configuration,n):n;this.updateContourPolyline(a,{points:d,closed:!0,targetWindingDirection:rl.Clockwise},l);const{textBox:h}=a.data.handles;return null!=h&&h.hasMoved||tt(a,o),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(c,r),this.deactivateDraw(e),!0}function dg(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],o=e.slice(0,-1).slice(1),i=og(o,n[0],n[1],!1);if(i){const t=i[1];this.drawData.canvasPoints=1===t?e.splice(1):e.splice(0,t)}}function hg(e,t){const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:o}=null!=t?t:{};if(this.haltDrawing(e,n))return!1;const{annotation:i,viewportIdsToRender:a}=this.commonData,r=(0,ne.getEnabledElement)(e),{viewport:s,renderingEngine:l}=r,c=Ku(this.configuration,i)?Ju(this.configuration,n):n;this.updateContourPolyline(i,{points:c,closed:!1},s);const{textBox:d}=i.data.handles,h=i.data.contour.polyline;return i.data.handles.points=[h[0],h[h.length-1]],i.data.isOpenUShapeContour&&(i.data.openUShapeContourVectorToPeak=eg(n,s)),d.hasMoved||tt(i,o),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(l,a),this.deactivateDraw(e),!0}function ug(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=og(s,i,a,!1);if(void 0!==l)return l[0]}function gg(e,t){const n=e.detail,{element:o}=n,{canvasPoints:i,contourHoleProcessingEnabled:a}=this.drawData,{annotation:r,viewportIdsToRender:s}=this.commonData;tg(o,i,i[t],this.commonData),i.pop();const l=uh(i.slice(t));if(ne.utilities.isEqual(l,0))return void i.splice(t+1);i.splice(0,t);const c={contourHoleProcessingEnabled:a,minPointsToSave:3};this.completeDrawClosedContour(o,c)&&this.activateClosedContourEdit(e,r,s)}function vg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,i=n[0],a=n[n.length-1];t&&!ng(i,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(e,{contourHoleProcessingEnabled:o})}function mg(e,t){const{subPixelResolution:n}=this.configuration;if(function(e,t){const n=Math.max(3*t,3);return e.length<n}(t,n)){const{annotation:t,viewportIdsToRender:n}=this.commonData,o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o;return mt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(i,n),this.deactivateDraw(e),!0}return!1}const pg=function(e){e.activateDraw=ag.bind(e),e.deactivateDraw=rg.bind(e),e.applyCreateOnCross=gg.bind(e),e.findCrossingIndexDuringCreate=ug.bind(e),e.completeDrawOpenContour=hg.bind(e),e.removeCrossedLinesOnCompleteDraw=dg.bind(e),e.mouseDragDrawCallback=sg.bind(e),e.mouseUpDrawCallback=lg.bind(e),e.completeDrawClosedContour=cg.bind(e),e.cancelDrawing=vg.bind(e),e.haltDrawing=mg.bind(e)},{addCanvasPointsToArray:fg,getFirstLineSegmentIntersectionIndexes:Ig}=D;function wg(e,t){const n=e.detail,{element:o,currentPoints:i,lastPoints:a}=n,r=i.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:c}=this.editData,d=Ig(c,r,s,t);if(d)this.editData.startCrossingIndex=d[0],this.removePointsUpUntilFirstCrossing(t);else if(c.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<c.length;n++){const o=c[n],i=aa.vec2.distance(o,e);t.push({distance:i,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],o=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=o}else{const e=aa.vec2.create();aa.vec2.subtract(e,l[1],l[0]),aa.vec2.normalize(e,e);const n=6,i=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=Ig(c,i,l[0],t);if(a){const e=[i];fg(o,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Eg(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let o=0;for(let i=0;i<t.length-1;i++){const a=[t[i],t[i+1]];if(o++,Ig(n,a[0],a[1],e))break}t.splice(0,o),this.editData.editIndex=t.length-1}function Cg(e,t){const n=e.detail,{currentPoints:o,lastPoints:i}=n,a=o.canvas,r=i.canvas,{prevCanvasPoints:s}=this.editData;return!!Ig(s,a,r,t)}function _g(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let o=n.length-1;o>0;o--){const i=[n[o],n[o-1]],a=!!Ig(t,i[0],i[1],e);if(n.pop(),a)break}}function bg(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const o=e[e.length-1],i=[];for(let e=0;e<t.length;e++){const n=t[e],a=aa.vec2.distance(n,o);i.push({distance:a,index:e})}i.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<i.length;n++){const{index:o}=i[n],r=t[o],s=e[e.length-1];if(!Ig(a,r,s,!1))return o}return-1}function Dg(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=Ig(s,i,a,!1);if(!l)return;const c=l[0],d=r.length-c;for(let e=0;e<d;e++)r.pop()}const Tg=function(e){e.checkForFirstCrossing=wg.bind(e),e.removePointsUpUntilFirstCrossing=Eg.bind(e),e.checkForSecondCrossing=Cg.bind(e),e.findSnapIndex=bg.bind(e),e.removePointsAfterSecondCrossing=_g.bind(e),e.checkAndRemoveCrossesOnEditLine=Dg.bind(e)},{getSubPixelSpacingAndXYDirections:Sg,addCanvasPointsToArray:yg,getArea:Mg}=D;function xg(e,t,n){this.isEditingClosed=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a);if(!s)return;const{viewport:l}=s,c=t.data.contour.polyline.map(l.worldToCanvas),{spacing:d,xDir:h,yDir:u}=Sg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:c,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpClosedContourEditCallback),Dc(a)}function Og(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpClosedContourEditCallback),bc(e)}function Pg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:c,xDir:d,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),I=aa.vec3.create();aa.vec3.subtract(I,i,f);const w=Math.abs(aa.vec3.dot(I,d)),E=Math.abs(aa.vec3.dot(I,h));if(w<=u[0]&&E<=u[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+yg(o,v,a,this.commonData);this.editData.editIndex=C,void 0===m&&v.length>1&&this.checkForFirstCrossing(e,!0),this.editData.snapIndex=this.findSnapIndex(),-1!==this.editData.snapIndex?(this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(e),void 0!==m&&this.checkForSecondCrossing(e,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(e)),Ua(s,c)):this.finishEditAndStartNewEdit(e)}function Ag(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i,renderingEngine:a}=o,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:c}=this.editData;us(r,{points:l,closed:!0,targetWindingDirection:rl.Clockwise},i),r.autoGenerated&&(r.autoGenerated=!1),Qe(r,n);const d=c.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[d],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},Ua(a,s)}function Rg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o,snapIndex:i}=this.editData;if(void 0===o||void 0===i)return;const a=e.detail,{element:r}=a,s=[...n];let l,c;yg(r,s,t[i],this.commonData),s.length>n.length&&s.pop(),o>i?(l=i,c=o):(l=o,c=i);const d=aa.vec2.distance(t[l],s[0]),h=aa.vec2.distance(t[l],s[s.length-1]),u=aa.vec2.distance(t[c],s[0]),g=aa.vec2.distance(t[c],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}let m=d+g,p=h+u;if(m<p)for(let e=0;e<s.length;e++){const t=s[e];v.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];v.push([t[0],t[1]])}for(let e=c;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}const f=[];for(let e=l;e<c;e++){const n=t[e];f.push([n[0],n[1]])}if(m=u+h,p=g+d,m<p)for(let e=0;e<s.length;e++){const t=s[e];f.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];f.push([t[0],t[1]])}return Mg(v)>Mg(f)?v:f}function Ng(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function Lg(e){const t=(0,ne.getEnabledElement)(e),{viewport:n,renderingEngine:o}=t,{annotation:i,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;r&&(us(i,{points:Ku(this.configuration,i)?Ju(this.configuration,r,s):r,closed:!0,targetWindingDirection:rl.Clockwise},n),i.autoGenerated&&(i.autoGenerated=!1),Qe(i,e)),this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,Ua(o,a),this.deactivateClosedContourEdit(e)}function kg(e){this.completeClosedContourEdit(e)}const Ug=function(e){e.activateClosedContourEdit=xg.bind(e),e.deactivateClosedContourEdit=Og.bind(e),e.mouseDragClosedContourEditCallback=Pg.bind(e),e.mouseUpClosedContourEditCallback=Ng.bind(e),e.finishEditAndStartNewEdit=Ag.bind(e),e.fuseEditPointsWithClosedContour=Rg.bind(e),e.cancelClosedContourEdit=kg.bind(e),e.completeClosedContourEdit=Lg.bind(e)},{addCanvasPointsToArray:Vg,getSubPixelSpacingAndXYDirections:Wg}=D;function Hg(e,t,n){this.isEditingOpen=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a),{viewport:l}=s,c=t.data.contour.polyline.map(l.worldToCanvas),{spacing:d,xDir:h,yDir:u}=Wg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:c,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Dc(a)}function Bg(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpOpenContourEditCallback),bc(e)}function Fg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:c,xDir:d,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),I=aa.vec3.create();aa.vec3.subtract(I,i,f);const w=Math.abs(aa.vec3.dot(I,d)),E=Math.abs(aa.vec3.dot(I,h));if(w<=u[0]&&E<=u[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+Vg(o,v,a,this.commonData);this.editData.editIndex=C,void 0===m&&v.length>1&&this.checkForFirstCrossing(e,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(e),void 0!==m&&this.checkForSecondCrossing(e,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(e)):this.checkIfShouldOverwriteAnEnd(e)&&this.openContourEditOverwriteEnd(e),Ua(s,c)}function Gg(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,{annotation:a,viewportIdsToRender:r}=this.commonData;us(a,{points:this.fuseEditPointsForOpenContourEndEdit(),closed:!1},i);const s=a.data.contour.polyline;a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,Qe(a,n),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function qg(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{snapIndex:r,prevCanvasPoints:s,startCrossingIndex:l}=this.editData;if(void 0===l||void 0===r)return!1;if(-1===r)return!0;if(0!==r&&r!==s.length-1)return!1;const c=i,d=a,h=s[r],u=aa.vec2.create(),g=aa.vec2.create();aa.vec2.set(u,c[0]-d[0],c[1]-d[1]),aa.vec2.set(g,c[0]-h[0],c[1]-h[1]);const v=aa.vec2.dot(u,g),m=Math.sqrt(u[0]*u[0]+u[1]*u[1]),p=Math.sqrt(g[0]*g[0]+g[1]*g[1]);return Math.acos(v/(m*p))<Math.PI/2}function jg(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o}=this.editData,i=[];if(0===e)for(let e=t.length-1;e>=o;e--){const n=t[e];i.push([n[0],n[1]])}else for(let e=0;e<o;e++){const n=t[e];i.push([n[0],n[1]])}if(aa.vec2.distance(t[o],n[0])<aa.vec2.distance(t[o],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];i.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];i.push([t[0],t[1]])}return i}function zg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o,snapIndex:i}=this.editData;if(void 0===o||void 0===i)return;const a=e.detail,{element:r}=a,s=[...n];let l,c;Vg(r,s,t[i],this.commonData),s.length>n.length&&s.pop(),o>i?(l=i,c=o):(l=o,c=i);const d=aa.vec2.distance(t[l],s[0]),h=aa.vec2.distance(t[l],s[s.length-1]),u=aa.vec2.distance(t[c],s[0]),g=aa.vec2.distance(t[c],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}if(d+g<h+u)for(let e=0;e<s.length;e++){const t=s[e];v.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];v.push([t[0],t[1]])}for(let e=c;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}return v}function Kg(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i,renderingEngine:a}=o,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:c}=this.editData;us(r,{points:l,closed:!1},i);const d=r.data.contour.polyline;r.data.handles.points=[d[0],d[d.length-1]],Qe(r,n);const h=c.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},Ua(a,s)}function Yg(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function Xg(e){const t=(0,ne.getEnabledElement)(e),{viewport:n,renderingEngine:o}=t,{annotation:i,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){us(i,{points:Ku(this.configuration)?Ju(this.configuration,r,s):r,closed:!1},n);const t=i.data.contour.polyline;i.data.handles.points=[t[0],t[t.length-1]],i.data.isOpenUShapeContour&&(i.data.openUShapeContourVectorToPeak=eg(r,n)),Qe(i,e)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,Ua(o,a),this.deactivateOpenContourEdit(e)}function Jg(e){this.completeOpenContourEdit(e)}const Zg=function(e){e.activateOpenContourEdit=Hg.bind(e),e.deactivateOpenContourEdit=Bg.bind(e),e.mouseDragOpenContourEditCallback=Fg.bind(e),e.mouseUpOpenContourEditCallback=Yg.bind(e),e.fuseEditPointsWithOpenContour=zg.bind(e),e.finishEditOpenOnSecondCrossing=Kg.bind(e),e.checkIfShouldOverwriteAnEnd=qg.bind(e),e.fuseEditPointsForOpenContourEndEdit=jg.bind(e),e.openContourEditOverwriteEnd=Gg.bind(e),e.cancelOpenContourEdit=Jg.bind(e),e.completeOpenContourEdit=Xg.bind(e)},{getSubPixelSpacingAndXYDirections:$g}=D;function Qg(e,t,n,o){this.isDrawing=!0;const i=e.detail,{element:a}=i,r=(0,ne.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:c,yDir:d}=$g(s,this.configuration.subPixelResolution),h=t.data.contour.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let u=!1;null!=o&&o.worldPosition&&(u=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:c,yDir:d,movingTextBox:u},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),Dc(a)}const ev=function(e){e.activateOpenContourEndEdit=Qg.bind(e)};function tv(e,t,n,o,i){const a=o.length&&o[0].length&&Array.isArray(o[0][0])?o:[o],{color:r="rgb(0, 255, 0)",width:s=10,fillColor:l="none",fillOpacity:c=0,lineWidth:d,lineDash:h,closePath:u=!1}=i,g=d||s,v=hc(t,"path",n),m=e.getSvgNode(v);let p="";for(let e=0,t=a.length;e<t;e++){const t=a[e],n=t.length;if(!(n<2)){for(let e=0;e<n;e++){const n=t[e];p+="".concat(e?"L":"M"," ").concat(n[0].toFixed(1),", ").concat(n[1].toFixed(1)," ")}u&&(p+="Z ")}}if(!p)return;const f={d:p,stroke:r,fill:l,"fill-opacity":c,"stroke-width":g,"stroke-dasharray":h};if(m)uc(f,m),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg","path");gc(f,t),e.appendNode(t,v)}}function nv(e,t,n,o,i){if(o.length<2)return;const{color:a="rgb(0, 255, 0)",width:r=10,fillColor:s="none",fillOpacity:l=0,lineWidth:c,lineDash:d,closePath:h=!1}=i,u=c||r,g=hc(t,"polyline",n),v=e.getSvgNode(g);let m="";for(const e of o)m+="".concat(e[0].toFixed(1),", ").concat(e[1].toFixed(1)," ");if(h){const e=o[0];m+="".concat(e[0],", ").concat(e[1])}const p={points:m,stroke:a,fill:s,"fill-opacity":l,"stroke-width":u,"stroke-dasharray":d};if(v)uc(p,v),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");gc(p,t),e.appendNode(t,g)}}const{pointsAreWithinCloseContourProximity:ov}=D;function iv(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},{lineWidth:o,lineDash:i,color:a,fillColor:r,fillOpacity:s}=this.getAnnotationStyle({annotation:t,styleSpecifier:n}),{closed:l}=t.data.contour;return{color:a,width:o,lineDash:i,fillColor:r,fillOpacity:s,closePath:l}}function av(e,t,n){var o;null!=e&&null!==(o=e.viewport)&&void 0!==o&&o.getImageData()&&(n.data.contour.closed?this.renderClosedContour(e,t,n):n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return eg(t.data.contour.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n))}function rv(e,t,n){if(n.parentAnnotationUID)return;const{viewport:o}=e,i=this._getRenderingOptions(e,n),a=[n.data.contour.polyline.map((e=>o.worldToCanvas(e))),...is(n,o)];tv(t,n.annotationUID,"1",a,i)}function sv(e,t,n){var o;const{viewport:i}=e,a=this._getRenderingOptions(e,n),r=n.data.contour.polyline.map((e=>i.worldToCanvas(e)));nv(t,n.annotationUID,"1",r,a);const s=n.data.handles.activeHandleIndex;if(!0===(null===(o=this.configuration.alwaysRenderOpenContourHandles)||void 0===o?void 0:o.enabled)){const e=this.configuration.alwaysRenderOpenContourHandles.radius,o="0",i=[r[0],r[r.length-1]];0===s?i.shift():1===s&&i.pop(),Fc(t,n.annotationUID,o,i,{color:a.color,handleRadius:e})}if(null!==s){const e="1",o=r[0===s?0:r.length-1];Fc(t,n.annotationUID,e,[o],{color:a.color})}}function lv(e,t,n){const{viewport:o}=e,{openUShapeContourVectorToPeak:i}=n.data,{polyline:a}=n.data.contour;if(this.renderOpenContour(e,t,n),!i)return;const r=o.worldToCanvas(a[0]),s=o.worldToCanvas(a[a.length-1]),l=[o.worldToCanvas(i[0]),o.worldToCanvas(i[1])],c=this._getRenderingOptions(e,n);nv(t,n.annotationUID,"first-to-last",[r,s],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"}),nv(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"})}function cv(e,t,n){const o=this._getRenderingOptions(e,n),{allowOpenContours:i}=this.configuration,{canvasPoints:a}=this.drawData;if(o.closePath=!1,nv(t,n.annotationUID,"1",a,o),i){const e=a[0],i=a[a.length-1];if(ov(e,i,this.configuration.closeContourProximity))nv(t,n.annotationUID,"2",[i,e],o);else{const i="0";Fc(t,n.annotationUID,i,[e],{color:o.color,handleRadius:2})}}}function dv(e,t,n){const{viewport:o}=e,{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderClosedContour(e,t,n);const a=[i,...is(n,o)],r=this._getRenderingOptions(e,n);n.parentAnnotationUID&&r.fillOpacity&&(r.fillOpacity=0),tv(t,n.annotationUID,"preview-1",a,r)}function hv(e,t,n){const{fusedCanvasPoints:o}=this.editData;if(void 0===o)return void this.renderOpenContour(e,t,n);const i=this._getRenderingOptions(e,n);nv(t,n.annotationUID,"preview-1",o,i)}const uv=function(e){e.renderContour=av.bind(e),e.renderClosedContour=rv.bind(e),e.renderOpenContour=sv.bind(e),e.renderOpenUShapedContour=lv.bind(e),e.renderContourBeingDrawn=cv.bind(e),e.renderClosedContourBeingEdited=dv.bind(e),e.renderOpenContourBeingEdited=hv.bind(e),e._getRenderingOptions=iv.bind(e)};class gv extends nd{constructor(e,t){super(e,t)}renderAnnotation(e,t){var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n];c.annotationUID=o.annotationUID;const a=this.getAnnotationStyle({annotation:o,styleSpecifier:c});if(!a.visibility)continue;const r=this.renderAnnotationInstance({enabledElement:e,targetId:l,annotation:o,annotationStyle:a,svgDrawingHelper:t});i||(i=r),o.invalidated=!1}return i}createAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{world:i}=n,a=(0,ne.getEnabledElement)(o),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l,viewUp:c,position:d}=s,h=this.getReferencedImageId(r,i,l,c),u=r.getViewReference({points:[i]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...u,referencedImageId:h,viewUp:c,cameraPosition:d},data:{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]}}},contour:{polyline:[],closed:!1}},interpolationUID:"",autoGenerated:!1}}addAnnotation(e,t){return gt(e,t)}cancelAnnotation(e){}moveAnnotation(e,t){const{points:n}=e.data.handles;for(let e=0,o=n.length;e<o;e++){const o=n[e];o[0]+=t[0],o[1]+=t[1],o[2]+=t[2]}e.invalidated=!0,ut(e).forEach((e=>this.moveAnnotation(e,t)))}updateContourPolyline(e,t,n){var o;const i=(null===(o=this.configuration)||void 0===o?void 0:o.decimate)||{};us(e,t,n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}})}getPolylinePoints(e){var t,n;return null!==(t=null===(n=e.data.contour)||void 0===n?void 0:n.polyline)&&void 0!==t?t:e.data.polyline}renderAnnotationInstance(e){const{enabledElement:t,annotationStyle:n,svgDrawingHelper:o}=e,i=e.annotation;if(i.parentAnnotationUID)return;const{annotationUID:a}=i,{viewport:r}=t,{worldToCanvas:s}=r,l=this.getPolylinePoints(i).map((e=>s(e))),{lineWidth:c,lineDash:d,color:h,fillColor:u,fillOpacity:g}=n;return tv(o,a,"contourPolyline",[l,...is(i,r)],{color:h,lineDash:d,lineWidth:Math.max(.1,c),fillColor:u,fillOpacity:g}),!0}}class vv extends gv{constructor(e,t){var n;super(e,t),null!==(n=this.configuration.interpolation)&&void 0!==n&&n.enabled&&yl.addTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(e){const{toolGroupId:t}=this,n=super.createAnnotation(e);if(!this.isContourSegmentationTool())return n;const o=Sc(t);if(!o)throw new Error("No active segmentation detected, create one before using scissors tool");const{type:i}=o;if(i!==Et.Contour)throw new Error("A contour segmentation must be active");const{segmentationId:a}=o,r=Nc(a);return ne.utilities.deepMerge(n,{data:{segmentation:{segmentationId:a,segmentIndex:r}}})}addAnnotation(e,t){const n=super.addAnnotation(e,t);return this.isContourSegmentationTool()&&ol(e),n}cancelAnnotation(e){this.isContourSegmentationTool()&&nl(e),super.cancelAnnotation(e)}getAnnotationStyle(e){const t=super.getAnnotationStyle(e);if(!this.isContourSegmentationTool())return t;const n=this._getContourSegmentationStyle(e);return ne.utilities.deepMerge(t,n)}renderAnnotationInstance(e){const{annotation:t}=e,{invalidated:n}=t,o=super.renderAnnotationInstance(e);if(n&&this.isContourSegmentationTool()){const{segmentationId:e}=t.data.segmentation;Vt(e);const n=Yt(e);Dr(n)}return o}_getContourSegmentationStyle(e){var t,n,o,i,a,r;const{toolGroupId:s}=this,l=e.annotation,{segmentationId:c,segmentIndex:d}=l.data.segmentation,h=Bt(c),u=this._getSegmentationRepresentation(c);if(!u)return{};const{segmentationRepresentationUID:g}=u,{active:v}=u,{autoGenerated:m}=l,p=Pc(c).includes(d),f=Zi(s,g,d),I=ui(s,g),w=ti(),E=ai(s),C=si(s,g),_=ci(s,g,d),b=mi(s,g,d),D=Object.assign({},null!==(t=null==w||null===(n=w.representations)||void 0===n?void 0:n.CONTOUR)&&void 0!==t?t:{},null!==(o=null==E||null===(i=E.representations)||void 0===i?void 0:i.CONTOUR)&&void 0!==o?o:{},null!==(a=null==C?void 0:C.CONTOUR)&&void 0!==a?a:{},null!==(r=null==_?void 0:_.CONTOUR)&&void 0!==r?r:{});let T,S=1,y=1,M=0;var x,O,P,A;if(m)S=null!==(x=D.outlineWidthAutoGenerated)&&void 0!==x?x:S,T=null!==(O=D.outlineDashAutoGenerated)&&void 0!==O?O:T,y=null!==(P=D.outlineOpacity)&&void 0!==P?P:y,M=null!==(A=D.fillAlphaAutoGenerated)&&void 0!==A?A:M;else if(v){var R,N,L,k;S=null!==(R=D.outlineWidthActive)&&void 0!==R?R:S,T=null!==(N=D.outlineDashActive)&&void 0!==N?N:T,y=null!==(L=D.outlineOpacity)&&void 0!==L?L:y,M=null!==(k=D.fillAlpha)&&void 0!==k?k:M}else{var U,V,W,H;S=null!==(U=D.outlineWidthInactive)&&void 0!==U?U:S,T=null!==(V=D.outlineDashInactive)&&void 0!==V?V:T,y=null!==(W=D.outlineOpacityInactive)&&void 0!==W?W:y,M=null!==(H=D.fillAlphaInactive)&&void 0!==H?H:M}h.activeSegmentIndex===d&&(S+=D.activeSegmentOutlineWidthDelta),S=D.renderOutline?S:0,M=D.renderFill?M:0;const B="rgba(".concat(f[0],", ").concat(f[1],", ").concat(f[2],", ").concat(y,")");return{color:B,fillColor:"rgb(".concat(f[0],", ").concat(f[1],", ").concat(f[2],")"),lineWidth:S,fillOpacity:M,lineDash:T,textbox:{color:B},visibility:I&&b,locked:p}}_getSegmentationRepresentation(e){const t=qt(this.toolGroupId).filter((t=>t.segmentationId===e));if(t)return qt(this.toolGroupId).length>1&&console.warn("Multiple segmentation representations detected for this tool group. The first one will be used."),t[0];console.warn("No segmentation representation found for toolGroupId: ".concat(this.toolGroupId))}}const{pointCanProjectOnLine:mv}=D,{EPSILON:pv}=ne.CONSTANTS,fv=1-pv;class Iv extends vv{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:$u.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},calculateStats:!0,getTextLines:wv,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"commonData",void 0),re(this,"isDrawing",!1),re(this,"isEditingClosed",!1),re(this,"isEditingOpen",!1),re(this,"activateDraw",void 0),re(this,"activateClosedContourEdit",void 0),re(this,"activateOpenContourEdit",void 0),re(this,"activateOpenContourEndEdit",void 0),re(this,"cancelDrawing",void 0),re(this,"cancelClosedContourEdit",void 0),re(this,"cancelOpenContourEdit",void 0),re(this,"renderContour",void 0),re(this,"renderContourBeingDrawn",void 0),re(this,"renderClosedContourBeingEdited",void 0),re(this,"renderOpenContourBeingEdited",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,a=this.createAnnotation(e);this.addAnnotation(a,n);const r=Qs(n,this.getToolName());return this.activateDraw(e,a,r),e.preventDefault(),Ua(i,r),a})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,a=Qs(i,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n,i=Qs(o,this.getToolName());t.data.contour.closed?this.activateClosedContourEdit(e,t,i):this.activateOpenContourEdit(e,t,i),e.preventDefault()})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{polyline:r}=t.data.contour;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,i=a.worldToCanvas(r[e]);if(mv(n,t,i,o))return!0;s=i}if(!t.data.contour.closed)return!1;const l=a.worldToCanvas(r[0]),c=a.worldToCanvas(r[r.length-1]);return mv(n,l,c,o)})),re(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,o=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):o&&this.cancelClosedContourEdit(e)})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const{data:i}=e,{cachedStats:a}=i,{polyline:r,closed:s}=i.contour,l=Object.keys(a);for(let o=0;o<l.length;o++){var c,d,h;const i=l[o],u=this.getTargetIdImage(i,n);if(!u)continue;const{imageData:g,metadata:v}=u,m=r.map((e=>t.worldToCanvas(e))),p=m[0],f=t.canvasToWorld(p),I=t.canvasToWorld([p[0]+1,p[1]]),w=t.canvasToWorld([p[0],p[1]+1]),E=aa.vec3.distance(f,I),C=aa.vec3.distance(f,w),_=gr(u);let b=uh(m)/_/_;b*=E*C;const D=ne.utilities.transformWorldToIndex(g,r[0]);D[0]=Math.floor(D[0]),D[1]=Math.floor(D[1]),D[2]=Math.floor(D[2]);let T=D[0],S=D[0],y=D[1],M=D[1],x=D[2],O=D[2];for(let e=1;e<r.length;e++){const t=ne.utilities.transformWorldToIndex(g,r[e]);t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),T=Math.min(T,t[0]),S=Math.max(S,t[0]),y=Math.min(y,t[1]),M=Math.max(M,t[1]),x=Math.min(x,t[2]),O=Math.max(O,t[2])}const P=.01*(S-T),A=.01*(M-y),R=.01*(O-x);T=Math.floor(T-P),S=Math.ceil(S+P),y=Math.floor(y-A),M=Math.ceil(M+A),x=Math.floor(x-R),O=Math.ceil(O+R);const N=[[T,S],[y,M],[x,O]],L=g.indexToWorld([S,M,O]),k=t.worldToCanvas(L);let U=0,V=[],W=0;const H=yr(g,((e,n)=>{let o=!0;const i=t.worldToCanvas(e);return i[1]!=U&&(W=0,U=i[1],V=vh(m,i,[k[0],i[1]]),V.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),V.length&&i[0]>V[0][0]&&(V.shift(),W++),W%2==0&&(o=!1),o}),this.configuration.statsCalculator.statsCallback,N),B={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},F=gd(v.Modality,e.metadata.referencedImageId,B),G=this.configuration.statsCalculator.getStatistics();a[i]={Modality:v.Modality,area:b,perimeter:Al(m,s),mean:null===(c=G.mean)||void 0===c?void 0:c.value,max:null===(d=G.max)||void 0===d?void 0:d.value,stdDev:null===(h=G.stdDev)||void 0===h?void 0:h.value,statsArray:G.array,pointsInShape:H,areaUnit:ur(null,u),modalityUnit:F}}return Qe(e,o.viewport.element,je.StatsUpdated),e.invalidated=!1,a})),re(this,"_renderStats",((e,t,n,o)=>{var i;const{data:a}=e,r=this.getTargetId(t),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},l=this.getLinkedTextBoxStyle(s,e);if(!l.visibility)return;const c=this.configuration.getTextLines(a,r);if(!c||0===c.length)return;const d=a.contour.polyline.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=hd(d);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),u=ld(o,null!==(i=e.annotationUID)&&void 0!==i?i:"","1",c,h,d,{},l),{x:g,y:v,width:m,height:p}=u;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([g,v]),topRight:t.canvasToWorld([g+m,v]),bottomLeft:t.canvasToWorld([g,v+p]),bottomRight:t.canvasToWorld([g+m,v+p])}})),pg(this),Tg(this),Ug(this),Zg(this),ev(this),uv(this),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;let i;if(o instanceof ne.VolumeViewport){const e=o.getCamera(),{spacingInNormalDirection:n}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(o,e);i=this.filterAnnotationsWithinSlice(t,e,n)}else i=Kc(o,t);return i}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:o}=t,i=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(aa.vec3.dot(o,t))>fv;return t&&n}));if(!i.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of i){const t=e.data.contour.polyline[0];if(!e.isVisible)continue;const n=aa.vec3.create();aa.vec3.sub(n,r,t);const i=aa.vec3.dot(n,o);Math.abs(i)<a&&s.push(e)}return s}isContourSegmentationTool(){return!1}createAnnotation(e){const t=e.detail.currentPoints.world,n=super.createAnnotation(e);return ne.utilities.deepMerge(n,{data:{contour:{polyline:[[...t]]},label:"",cachedStats:{}},onInterpolationComplete:e=>{e.data.handles.points.length=0}})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:o}=e,i=e.annotation;let a=!1;const{viewport:r,renderingEngine:s}=t,l=this.isDrawing,c=this.isEditingOpen,d=this.isEditingClosed;if(l||c||d){const e=this.commonData.annotation.annotationUID;if(i.annotationUID===e)if(l)this.renderContourBeingDrawn(t,o,i);else if(d)this.renderClosedContourBeingEdited(t,o,i);else{if(!c)throw new Error("Unknown ".concat(this.getToolName()," annotation rendering state"));this.renderOpenContourBeingEdited(t,o,i)}else this.renderContour(t,o,i);a=!0}else this.renderContour(t,o,i);if(this.configuration.calculateStats)return this._calculateStatsIfActive(i,n,r,s,t),this._renderStats(i,r,t,o),a}_calculateStatsIfActive(e,t,n,o,i){var a,r,s;const l=null===(a=this.commonData)||void 0===a?void 0:a.annotation.annotationUID;if((e.annotationUID!==l||null!==(r=this.commonData)&&void 0!==r&&r.movingTextBox)&&(null===(s=this.commonData)||void 0===s||!s.movingTextBox)){const{data:a}=e;a.cachedStats[t]&&null!=a.cachedStats[t].areaUnit?e.invalidated&&this._throttledCalculateCachedStats(e,n,o,i):(a.cachedStats[t]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(e,n,o,i))}}}function wv(e,t){const n=e.cachedStats[t],{area:o,mean:i,stdDev:a,perimeter:r,max:s,isEmptyArea:l,areaUnit:c,modalityUnit:d}=n||{},h=[];if(o){const e=l?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(c);h.push(e)}return i&&h.push("Mean: ".concat(zu(i)," ").concat(d)),s&&h.push("Max: ".concat(zu(s)," ").concat(d)),a&&h.push("Std Dev: ".concat(zu(a)," ").concat(d)),r&&h.push("Perimeter: ".concat(zu(r)," ").concat(d)),h}re(Iv,"toolName",void 0),Iv.toolName="PlanarFreehandROI";const Ev=Iv;class Cv extends Ev{constructor(e){super(ne.utilities.deepMerge({configuration:{calculateStats:!1,allowOpenContours:!1}},e))}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const t=e.annotation,{invalidated:n}=t,o=super.renderAnnotationInstance(e);if(n){const{segmentationId:e}=t.data.segmentation;Vt(e)}return o}}re(Cv,"toolName",void 0),Cv.toolName="PlanarFreehandContourSegmentationTool";const _v=Cv,bv=e=>{const{numberOfCells:t,lines:n}=e,o=[],i=[];for(let e=0;e<n.length;){const a=n[e];if(i.push(a),o.push(n.slice(e+1,e+a+1)),e+=a+1,o.length===t)break}return{lineSegments:o,linesNumberOfPoints:i}};function Dv(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Contour,(()=>async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null!==(t=o.segmentIndices)&&void 0!==t&&t.length?o.segmentIndices:Rt(e);let a;const r=Bt(e).representationData;try{r.SURFACE?a=await async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!n.viewport)throw new Error("Viewport is required to compute contour from surface");const{viewport:o,segmentationRepresentationUID:i}=n,a=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e),r=new Map,s=new Map,l=Bt(e).representationData.SURFACE,c=[];return l.geometryIds.forEach(((e,t)=>{if(a.includes(t)){var n;r.set(t,e);const o=null===(n=ne.cache.getGeometry(e))||void 0===n?void 0:n.data;o&&c.push({id:e,points:o.getPoints(),polys:o.getPolys()})}})),r.forEach(((e,t)=>{s.set(e,t)})),or(await ki(c,o,i),s)}(e,{segmentIndices:i,...o}):r.LABELMAP&&(a=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from labelmap");const n=await Ga(e,t);if(null==n||!n.length)return void console.error("Failed to convert labelmap to surface or labelmap is empty");const{viewport:o,segmentationRepresentationUID:i}=t,a=n.map((e=>({id:e.segmentIndex.toString(),points:e.data.points,polys:e.data.polys,segmentIndex:e.segmentIndex})));return or(await ki(a,o,i))}(e,{segmentIndices:i,...o}))}catch(e){throw console.error(e),e}if(!a)throw new Error("Not enough data to convert to contour, currently only support converting volume labelmap to contour if available");const{viewport:s,segmentationRepresentationUID:l}=o,c=function(e,t,n){const o=new Map;for(const[i,a]of e)for(const e of a){const{points:a}=e,{lineSegments:r,linesNumberOfPoints:s}=bv(e);for(let e=0;e<r.length;e++){const l=r[e],c=[];for(let t=0;t<s[e];t++){const e=l[t];c.push([a[3*e],a[3*e+1],a[3*e+2]])}if(c.length<3)continue;const d={annotationUID:ne.utilities.uuidv4(),data:{contour:{closed:!0,polyline:c},segmentation:{segmentationId:n,segmentIndex:i},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:_v.toolName,...t.getViewReference()}};gt(d,t.element);const h=o.get(i)||new Set;h.add(d.annotationUID),o.set(i,h)}}return o}(a,s,e);return Zt(null===(n=Qo(s.id))||void 0===n?void 0:n.id,l,{CONTOUR:{fillAlpha:0}}),{annotationUIDsMap:c}}(e,t)),(()=>{}))}let Tv=!1;const Sv={render:async function(e,t,n){const{segmentationId:o}=t,i=Bt(o);if(!i)return;let a=i.representationData[Et.Contour];a||!Hi(t.segmentationRepresentationUID)||Tv||(Tv=!0,a=await Dv(o,{segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:e}));const{geometryIds:r}=a;null!=r&&r.length&&e instanceof ne.BaseVolumeViewport&&function(e,t,n,o){const{segmentationRepresentationUID:i}=n,a="CONTOUR_".concat(i);(e.getActor(a)?tr:er)(e,t,n,o,a)}(e,r,t,n)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);nr(i.viewport.element,t)}})(e,t),ln(e,t),function(e){Za.delete(e)}(t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}},yv=_v.toolName;class Mv extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{}}),re(this,"renderSegmentation",(e=>{const t=ei(e);if(!t)return;const n=qt(e);if(!n||0===n.length)return;const o=t.viewportsInfo.map((e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t);if(o)return o.viewport})),i=n.map((t=>{const n=this._getMergedRepresentationsConfig(e),i=[],a={[Et.Labelmap]:ba,[Et.Contour]:Sv,[Et.Surface]:ja};t.type===Et.Contour&&this.addPlanarFreeHandToolIfAbsent(e);const r=a[t.type];for(const e of o){const o=r.render(e,t,n);i.push(o)}return i}));Promise.allSettled(i).then((()=>{o.forEach((e=>{e.render()}))}))}))}onSetToolEnabled(){const e=this.toolGroupId,t=qt(e);t&&0!==t.length&&t.forEach((t=>{hi(e,t.segmentationRepresentationUID,!0)}))}onSetToolDisabled(){const e=this.toolGroupId,t=qt(e);t&&0!==t.length&&t.forEach((t=>{hi(e,t.segmentationRepresentationUID,!1)}))}addPlanarFreeHandToolIfAbsent(e){yv in Ye.tools||il(_v);const t=ei(e);t.hasTool(yv)||(t.addTool(yv),t.setToolPassive(yv))}_getMergedRepresentationsConfig(e){const t=ai(e),n=ti();return ne.utilities.deepMerge(n,t)}}re(Mv,"toolName",void 0),Mv.toolName="SegmentationDisplay";const xv=Mv,Ov=new class{constructor(){re(this,"_needsRender",new Set),re(this,"_animationFrameSet",!1),re(this,"_animationFrameHandle",null),re(this,"hasBeenDestroyed",void 0),re(this,"_renderFlaggedToolGroups",(()=>{this._throwIfDestroyed();const e=Array.from(this._needsRender.values());for(const t of e)if(this._triggerRender(t),this._needsRender.delete(t),0===this._needsRender.size)return this._animationFrameSet=!1,void(this._animationFrameHandle=null)}))}removeToolGroup(e){this._needsRender.delete(e),0===this._needsRender.size&&this._reset()}renderToolGroupSegmentations(e){this._setToolGroupSegmentationToBeRenderedNextFrame([e])}_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.")}_setToolGroupSegmentationToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedToolGroups),this._animationFrameSet=!0)}_triggerRender(e){const t=ei(e);if(!t)return void console.warn("No tool group found with toolGroupId: ".concat(e));const{viewportsInfo:n}=t,o=n.map((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getRenderingEngine)(n);if(!o)return void console.warn("rendering Engine has been destroyed");return o.getViewport(t)||void 0})).filter(Boolean),i=t.getToolInstance(xv.toolName);function a(e){const{element:t,viewportId:n,renderingEngineId:o}=e.detail;t.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,a);const i=Qo(n,o);if(!i)return void console.warn("toolGroup has been destroyed");const r={toolGroupId:i.id,viewportId:n};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_RENDERED,{...r})}i?(o.forEach((e=>{let{element:t}=e;t.addEventListener(ne.Enums.Events.IMAGE_RENDERED,a)})),i.renderSegmentation(e)):console.warn("No segmentation tool found inside",e)}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}};function Pv(e){Ov.renderToolGroupSegmentations(e)}const Av=Pv,Rv=new Map;function Nv(e){var t;const n=e.detail,{viewportId:o,renderingEngineId:i}=n,{viewport:a}=(0,ne.getEnabledElementByIds)(o,i),r=Qo(o,i);if(!r)return;let s=qt(r.id)||[];if(s=s.filter((e=>e.type===Et.Labelmap)),null===(t=s)||void 0===t||!t.length)return;const l={};s.forEach((e=>{var t;const n=Bt(e.segmentationId);if(!n||null===(t=n.representationData)||void 0===t||!t.LABELMAP)return;const o=n.representationData.LABELMAP;if(Ot(o,a))return;const{imageIdReferenceMap:i}=o;l[e.segmentationRepresentationUID]={imageIdReferenceMap:i}}));const c=Object.keys(l),d=a.getCurrentImageId(),h=a.getActors();h.find((e=>!!c.includes(e.uid)))?h.forEach((t=>{if(!c.includes(t.uid))return;const n=t.actor,{imageIdReferenceMap:o}=l[t.uid],i=o.get(d),s=n.getMapper().getInputData();if(!i){if(s.setDerivedImage)return void s.setDerivedImage(null);const e=Jo().newInstance({name:"Pixels",numberOfComponents:1,values:new Uint8Array(s.getNumberOfPoints())}),t=$o().newInstance();return t.getPointData().setScalars(e),void n.getMapper().setInputData(t)}const h=ne.cache.getImage(i),{dimensions:u,spacing:g,direction:v}=a.getImageDataMetadata(h),m=ne.cache.getImage(d)||{imageId:d},{origin:p}=a.getImageDataMetadata(m),f=p;if(s.setOrigin(f),s.modified(),s.getDimensions()[0]!==u[0]||s.getDimensions()[1]!==u[1])return a.removeActors([t.uid]),a.addImages([{imageId:i,actorUID:t.uid,callback:e=>{let{imageActor:t}=e;const n=Jo().newInstance({name:"Pixels",numberOfComponents:1,values:[...h.getPixelData()]}),o=$o().newInstance();o.setDimensions(u[0],u[1],1),o.setSpacing(g),o.setDirection(v),o.setOrigin(f),o.getPointData().setScalars(n),t.getMapper().setInputData(o)}}],!0,!1),void Av(r.id);s.setDerivedImage?s.setDerivedImage(h):ne.utilities.updateVTKImageDataWithCornerstoneImage(s,h),a.render(),e.type===ne.Enums.Events.IMAGE_RENDERED&&a.element.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv)})):Rv.has(r.id)||(Rv.set(r.id,!0),Av(r.id))}const Lv={enable:function(e){const{viewport:t}=(0,ne.getEnabledElement)(e);t instanceof ne.BaseVolumeViewport||(e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,Nv),e.addEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv))},disable:function(e){e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,Nv),e.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv)}},kv=function(e){ka(e.detail.element)},Uv={enable:function(e){e.addEventListener(ne.Enums.Events.IMAGE_RENDERED,kv)},disable:function(e){e.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,kv)}};function Vv(e,t,n){const{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const o=s[e],i=a.toolOptions[o],l=null!=n&&i.bindings.length&&i.bindings.some((e=>e.mouseButton===n));if(t.includes(i.mode)&&(!n||l)){const e=a.getToolInstance(o);r.push(e)}}return r}const{Active:Wv,Passive:Hv,Enabled:Bv}=Je,Fv=function(e){Vv(e,[Wv,Hv,Bv]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},Gv={enable:function(e){e.addEventListener(ne.Enums.Events.CAMERA_MODIFIED,Fv)},disable:function(e){e.removeEventListener(ne.Enums.Events.CAMERA_MODIFIED,Fv)}},{Active:qv,Passive:jv,Enabled:zv}=Je,Kv=function(e){Vv(e,[qv,jv,zv]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},Yv={enable:function(e){e.addEventListener(ne.Enums.Events.IMAGE_SPACING_CALIBRATED,Kv)},disable:function(e){e.removeEventListener(ne.Enums.Events.IMAGE_SPACING_CALIBRATED,Kv)}},{Active:Xv}=Je;function Jv(e,t,n){if(Ye.isInteractingWithTool)return!1;const{renderingEngineId:o,viewportId:i}=n.detail,a=Qo(i,o);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],o=a.toolOptions[n],i=a.getToolInstance(n);if(o.mode===Xv&&"function"==typeof i[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const Zv=Jv.bind(null,"Mouse","mouseClickCallback");function $v(e,t,n){const o="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,i=[];return t.forEach((t=>{let{tool:a,annotations:r}=t;for(const t of r){if(t.isLocked||!t.isVisible)continue;const r=a.getHandleNearImagePoint(e,t,n,o);if(r){i.push({tool:a,annotation:t,handle:r});break}}})),i}function Qv(e,t){const n=[];for(let i=0;i<t.length;i++){var o;const a=t[i];if(!a){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let r=st(a.constructor.toolName,e);null!==(o=r)&&void 0!==o&&o.length&&("function"==typeof a.filterInteractableAnnotationsForElement&&(r=a.filterInteractableAnnotationsForElement(e,r)),r.length>0&&n.push({tool:a,annotations:r}))}return n}function em(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const i="touch"===o?36:6,a=[];return t.forEach((t=>{let{tool:r,annotations:s}=t;for(const t of s)if(!t.isLocked&&t.isVisible&&r.isPointNearTool(e,t,n,i,o)){a.push({tool:r,annotation:t});break}})),a}const{Active:tm}=Je;function nm(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=e.detail.event,i=Qu(o)||Yo.getModifierKey(),a=Qo(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t],l=n.bindings.length&&n.bindings.some((e=>e.mouseButton===(o?o.buttons:s)&&e.modifierKey===i));if(n.mode===tm&&l)return a.getToolInstance(t)}}const{Active:om,Passive:im}=Je;const{Active:am,Passive:rm}=Je;function sm(e){if(Ye.isInteractingWithTool)return;const t=nm(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,o=[...Vv(e,[am],e.detail.event.buttons)||[],...(n?Vv(e,[rm]):void 0)||[]];if(function(e){if(Ye.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{canvas:i}=t.currentPoints;if(!o)return!1;const a=function(e,t){var n;const o=new Map,{renderingEngineId:i,viewportId:a}=e.detail,r=Qo(a,i);if(!r)return o;const s=Object.keys(r.toolOptions),l=r.getDefaultMousePrimary(),c=e.detail.event,d=null!==(n=null==c?void 0:c.buttons)&&void 0!==n?n:l,h=Qu(c)||Yo.getModifierKey();for(let e=0;e<s.length;e++){var u,g;const n=s[e],i=r.getToolInstance(n),a=null!==(u=null===(g=i.configuration)||void 0===g?void 0:g.actions)&&void 0!==u?u:{},l=Object.values(a);if(null==l||!l.length||!t.includes(i.mode))continue;const c=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===d&&e.modifierKey===h))));c&&o.set(i,c)}return o}(e,[om,im]),r=em(n,Qv(n,Array.from(a.keys())),i);if(r.length>0){const{tool:t,annotation:n}=r[0],o=a.get(t);return("string"==typeof o.method?t[o.method]:o.method).call(t,e,n),!0}return!1}(e))return;const i=e.detail,{element:a}=i,r=Qv(a,o),s=i.currentPoints.canvas,l=$v(a,r,s,"mouse"),c=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:o}=lm(l);return cm(n.annotationUID,c),void t.handleSelectedCallback(e,n,o,"Mouse")}const d=em(a,r,s,"mouse");if(d.length>0){const{tool:t,annotation:n}=lm(d);return cm(n.annotationUID,c),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function lm(e){return e.length>1&&e.find((e=>!ge(e.annotation)&&Ne(e.annotation.annotationUID)))||e[0]}function cm(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Se(e)?_e(e,!1):_e(e,!0,!0):_e(e,!0,!1)}function dm(e){if(Ye.isInteractingWithTool)return;const t=nm(e);t&&!Ye.isMultiPartToolActive&&t.addNewAnnotation&&_e(t.addNewAnnotation(e,"mouse").annotationUID)}const hm=Jv.bind(null,"Mouse","doubleClickCallback");function um(e){if(Ye.isInteractingWithTool)return;const t=nm(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:gm,Passive:vm}=Je;function mm(e){if(Ye.isInteractingWithTool||Ye.isMultiPartToolActive)return;const t=Vv(e,[gm,vm]),n=e.detail,{element:o}=n,i=Qv(o,t),a=t.filter((e=>!i.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of i)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&ka(o)}const pm=Jv.bind(null,"Mouse","mouseUpCallback"),fm=Jv.bind(null,"MouseWheel","mouseWheelCallback"),Im={enable:function(e){e.addEventListener(ie.MOUSE_CLICK,Zv),e.addEventListener(ie.MOUSE_DOWN,sm),e.addEventListener(ie.MOUSE_DOWN_ACTIVATE,dm),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,hm),e.addEventListener(ie.MOUSE_DRAG,um),e.addEventListener(ie.MOUSE_MOVE,mm),e.addEventListener(ie.MOUSE_UP,pm),e.addEventListener(ie.MOUSE_WHEEL,fm)},disable:function(e){e.removeEventListener(ie.MOUSE_CLICK,Zv),e.removeEventListener(ie.MOUSE_DOWN,sm),e.removeEventListener(ie.MOUSE_DOWN_ACTIVATE,dm),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,hm),e.removeEventListener(ie.MOUSE_DRAG,um),e.removeEventListener(ie.MOUSE_MOVE,mm),e.removeEventListener(ie.MOUSE_UP,pm),e.removeEventListener(ie.MOUSE_WHEEL,fm)}},{Active:wm}=Je;function Em(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=Tn.mouseButton,i=Yo.getModifierKey(),a=Qo(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t];if(n.mode===wm&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(null!=o?o:s)&&e.modifierKey===i))))return a.getToolInstance(t)}}function Cm(e){const t=Em(e);if(t){const{renderingEngineId:n,viewportId:o}=e.detail,i=Qo(o,n),a=t.getToolName();Object.keys(i.toolOptions).includes(a)&&i.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return n;const r=Object.keys(a.toolOptions),s=e.detail.key;for(let e=0;e<r.length;e++){var l;const o=r[e],i=a.getToolInstance(o),c=null===(l=i.configuration)||void 0===l?void 0:l.actions;if(!c)continue;const d=Object.values(c);if(null==d||!d.length||!t.includes(i.mode))continue;const h=d.find((e=>e.bindings.some((e=>e.key===s))));h&&n.set(i,h)}return n}(e,[Je.Active]);if(null!=n&&n.size){const{element:t}=e.detail;for(const[o,i]of[...n.entries()])("function"==typeof i.method?i.method:o[i.method]).call(o,t,i,e)}}function _m(e){const t=Em(e);if(!t)return;const{renderingEngineId:n,viewportId:o}=e.detail,i=Qo(o,n);jo();const a=t.getToolName();Object.keys(i.toolOptions).includes(a)&&i.setViewportsCursorByToolName(a)}const bm={enable:function(e){e.addEventListener(ie.KEY_DOWN,Cm),e.addEventListener(ie.KEY_UP,_m)},disable:function(e){e.removeEventListener(ie.KEY_DOWN,Cm),e.removeEventListener(ie.KEY_UP,_m)}},{Active:Dm}=Je;function Tm(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=e.detail.event,i=Qo(n,t);if(!i)return null;const a=Object.keys(i.toolOptions),r=Object.keys(o.touches).length,s=Qu(o)||Yo.getModifierKey(),l=i.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=i.toolOptions[t],o=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Dm&&o)return i.getToolInstance(t)}}function Sm(e,t,n){const{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const o=s[e],i=a.toolOptions[o],l=null!=n&&i.bindings.length&&i.bindings.some((e=>e.numTouchPoints===n));if(t.includes(i.mode)&&(!n||l)){const e=a.getToolInstance(o);r.push(e)}}return r}const{Active:ym,Passive:Mm}=Je;function xm(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,o=[...Sm(e,[ym],Object.keys(e.detail.event.touches).length)||[],...(n?Sm(e,[Mm]):void 0)||[],t],i=e.detail,{element:a}=i,r=Qv(a,o),s=i.currentPoints.canvas,l=$v(a,r,s,"touch");if(l.length>0){const{tool:t,annotation:n,handle:o}=Om(l);return Pm(n.annotationUID,!1),void t.handleSelectedCallback(e,n,o,"Touch")}const c=em(a,r,s,"touch");if(c.length>0){const{tool:t,annotation:n}=Om(c);return Pm(n.annotationUID,!1),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Om(e){return e.length>1&&e.find((e=>!ge(e.annotation)&&Ne(e.annotation.annotationUID)))||e[0]}function Pm(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Se(e)?_e(e,!1):_e(e,!0,!0):_e(e,!0,!1)}function Am(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);t&&!Ye.isMultiPartToolActive&&t.addNewAnnotation&&_e(t.addNewAnnotation(e,"touch").annotationUID)}function Rm(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const Nm=Jv.bind(null,"Touch","touchEndCallback"),Lm=Jv.bind(null,"Touch","touchTapCallback"),km=Jv.bind(null,"Touch","touchPressCallback"),Um={enable:function(e){e.addEventListener(ie.TOUCH_START,xm),e.addEventListener(ie.TOUCH_START_ACTIVATE,Am),e.addEventListener(ie.TOUCH_DRAG,Rm),e.addEventListener(ie.TOUCH_END,Nm),e.addEventListener(ie.TOUCH_TAP,Lm),e.addEventListener(ie.TOUCH_PRESS,km)},disable:function(e){e.removeEventListener(ie.TOUCH_START,xm),e.removeEventListener(ie.TOUCH_START_ACTIVATE,Am),e.removeEventListener(ie.TOUCH_DRAG,Rm),e.removeEventListener(ie.TOUCH_END,Nm),e.removeEventListener(ie.TOUCH_PRESS,km)}};function Vm(e){const{element:t,viewportId:n}=e.detail,o=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),o="svg-layer-".concat(e);n.classList.add("svg-layer"),n.setAttribute("id",o),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.style.position="absolute";const i=document.createElementNS(t,"defs"),a=document.createElementNS(t,"filter"),r=document.createElementNS(t,"feOffset"),s=document.createElementNS(t,"feColorMatrix"),l=document.createElementNS(t,"feBlend");return a.setAttribute("id","shadow-".concat(o)),a.setAttribute("filterUnits","userSpaceOnUse"),r.setAttribute("result","offOut"),r.setAttribute("in","SourceGraphic"),r.setAttribute("dx","0.5"),r.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"),l.setAttribute("in","SourceGraphic"),l.setAttribute("in2","matrixOut"),l.setAttribute("mode","normal"),a.appendChild(r),a.appendChild(s),a.appendChild(l),i.appendChild(a),n.appendChild(i),n}(n);var i;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,o="".concat(t,":").concat(n);Ye.svgNodeCache[o]={}}(t),i=o,t.querySelector("div.viewport-element").appendChild(i),La.addViewportElement(n,t),Fn.enable(t),jn.enable(t),Wo.enable(t),Yo.enable(t),Lv.enable(t),Uv.enable(t),Gv.enable(t),Yv.enable(t),Im.enable(t),bm.enable(t),Um.enable(t),Ye.enabledElements.push(t)}const Wm=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let o=0;o<Ye.synchronizers.length;o++){const i=Ye.synchronizers[o],a=!i.isDisabled(),r=i.hasSourceViewport(t,e),s=i.hasTargetViewport(t,e);a&&(r||s)&&n.push(i)}return n},Hm=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,o="".concat(t,":").concat(n);delete Ye.svgNodeCache[o]}(t),function(e){const t=e.querySelector("div.".concat("viewport-element")),n=t.querySelector("svg");n&&t.removeChild(n)}(t),La.removeViewportElement(n,t),Fn.disable(t),jn.disable(t),Wo.disable(t),Yo.disable(t),Lv.disable(t),Uv.disable(t),Gv.disable(t),Yv.disable(t),Im.disable(t),bm.disable(t),Um.disable(t),(e=>{const t=(0,ne.getEnabledElement)(e);Wm(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,ne.getEnabledElement)(e),o=Qo(n,t);o&&o.removeViewports(t,n)})(t),function(e){const t=Ye.enabledElements.findIndex((t=>t===e));t>-1&&Ye.enabledElements.splice(t,1)}(t)};function Bm(e){el(e.detail.annotation)&&async function(e){const t=e.detail.annotation;if(!el(t))return;const n=function(e){const t=Wr(e),n=t.find((e=>ll(e,!0)));return null!=n?n:t[0]}(t),o=function(e,t){const{annotationUID:n}=t;return lt().filter((o=>o.annotationUID&&o.annotationUID!==n&&el(o)&&tl(o,t)&&e.isReferenceViewable(o.metadata)))}(n,t);if(!o.length)return;const i=cl(t.data.contour.polyline,n),a=function(e,t,n){const o=_s(t);for(let i=0;i<n.length;i++){const a=n[i],r=cl(a.data.contour.polyline,e),s=bs(o,_s(r)),l=s&&Ms(t,r),c=s&&!l&&Ps(r,t);if(l||c)return{targetAnnotation:a,targetPolyline:r,isContourHole:c}}}(n,i,o);if(!a)return;const{targetAnnotation:r,targetPolyline:s,isContourHole:l}=a;if(l){const{contourHoleProcessingEnabled:o=!1}=e.detail;if(!o)return;dl(n,r,t)}else!function(e,t,n,o,i){if(!function(e){const t=e.toolName;return!(!t||!Ye.tools[t])}(_v))return void console.warn("".concat(_v.toolName," is not registered in cornerstone"));if(!ll(e))return;const a=Os(n,i[0]),r=function(e,t){return ut(t).map((t=>({annotation:t,polyline:cl(t.data.contour.polyline,e)})))}(e,t),s=new Set(r),l=new Map,c=(e,t)=>{let n=l.get(e);n||(n=[],l.set(e,n)),n.push(t),s.delete(t)},d=[];if(a){const e=qs(n,i);d.push(e),Array.from(s.keys()).forEach((t=>c(e,t)))}else js(n,i).forEach((e=>{d.push(e),Array.from(s.keys()).forEach((t=>{Ps(e,t.polyline)&&(c(e,t),s.delete(t))}))}));Array.from(l.values()).forEach((e=>e.forEach((e=>ct(e.annotation)))));const{element:h}=e,u=(0,ne.getEnabledElement)(h),{metadata:g,data:v}=t,{handles:m,segmentation:p}=v,{textBox:f}=m;mt(o.annotationUID),mt(t.annotationUID);for(let n=0;n<d.length;n++){var I;const o=d[n],i=e.canvasToWorld(o[0]),a=e.canvasToWorld(o[o.length-1]),r={metadata:{...g,toolName:sl,originalToolName:g.originalToolName||g.toolName},data:{cachedStats:{},handles:{points:[i,a],textBox:f?{...f}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...p}},annotationUID:ne.utilities.uuidv4(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};us(r,{points:o,closed:!0,targetWindingDirection:rl.Clockwise},e),gt(r,h),ol(r),Qe(r,e.element),null===(I=l.get(o))||void 0===I||I.forEach((e=>dt(r,e.annotation)))}!function(e,t,n){const{viewport:o}=e,{element:i}=o,{renderingEngine:a}=e,r=new Set([sl,t.metadata.toolName,n.metadata.toolName]);for(const e of r.values()){const t=Qs(i,e);Ua(a,t)}new Promise((e=>window.requestAnimationFrame(e)))}(u,t,o)}(n,r,s,t,i)}(e)}const Fm=function(e){const{viewportId:t,renderingEngineId:n}=e.detail,o=(0,ne.getRenderingEngine)(n);Ua(o,[t])},Gm=function(e){e.detail.removed.length&&(0,ne.getRenderingEngines)().forEach((e=>{const t=e.getViewports().map((e=>e.id));Ua(e,t)}))};function qm(e){el(e.detail.annotation)&&function(e){nl(e.detail.annotation)}(e)}const jm=function(e){const{segmentationId:t}=e.detail;Yt(t).forEach((e=>{qt(e).forEach((n=>{n.segmentationId===t&&kt(e,n.segmentationRepresentationUID)}))}))},zm=function(e){const{segmentationId:t}=e.detail,{type:n}=Bt(t),o=Yt(t);n===Et.Labelmap&&function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail,{representationData:o,type:i}=Bt(t),a=Yt(t),r=o[i];"volumeId"in r&&function(e){let{modifiedSlicesToUse:t,representationData:n,type:o}=e;const i=ne.cache.getVolume(n[o].volumeId);if(!i)return void console.warn("segmentation not found in cache");const{imageData:a,vtkOpenGLTexture:r}=i;let s;if(t&&Array.isArray(t))s=t;else{const e=a.getDimensions()[2];s=[...Array(e).keys()]}s.forEach((e=>{r.setUpdatedFrame(e)})),a.modified()}({modifiedSlicesToUse:n,representationData:o,type:i}),"imageIdReferenceMap"in r&&function(e){let{toolGroupIds:t,segmentationId:n,representationData:o,type:i}=e;t.forEach((e=>{const t=qt(e),a=ei(e).getViewportsInfo();t.forEach((e=>{e.segmentationId===n&&a.forEach((t=>{let{viewportId:n,renderingEngineId:a}=t;const r=(0,ne.getEnabledElementByIds)(n,a).viewport;if(r instanceof ne.VolumeViewport)return;const s=r.getActor(e.segmentationRepresentationUID);if(!s)return;const l=r.getCurrentImageId(),c=s.actor.getMapper().getInputData(),{imageIdReferenceMap:d}=o[i],h=d.get(l),u=ne.cache.getImage(h);c.modified(),ne.utilities.updateVTKImageDataWithCornerstoneImage(c,u)}))}))}))}({toolGroupIds:a,segmentationId:t,representationData:o,type:i})}(e),o.forEach((e=>{Av(e)}))},Km=function(e){const{toolGroupId:t}=e.detail;Av(t)},Ym=function(e){const{toolGroupId:t,segmentationRepresentationUID:n}=e.detail;Av(t)},Xm={enable:function(){ne.eventTarget.addEventListener(ie.ANNOTATION_COMPLETED,yl.handleAnnotationCompleted),ne.eventTarget.addEventListener(ie.ANNOTATION_MODIFIED,yl.handleAnnotationUpdate),ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,yl.handleAnnotationDelete)},disable:function(){ne.eventTarget.removeEventListener(ie.ANNOTATION_COMPLETED,yl.handleAnnotationCompleted),ne.eventTarget.removeEventListener(ie.ANNOTATION_MODIFIED,yl.handleAnnotationUpdate),ne.eventTarget.removeEventListener(ie.ANNOTATION_REMOVED,yl.handleAnnotationDelete)}},Jm=function(e,t,n){const o=qt(e);if(!o||0===o.length)return;const i=o.map((e=>e.segmentationRepresentationUID));let a=t;if(a){const e=t.filter((e=>!i.includes(e)));if(e.length>0)throw new Error("The following segmentationRepresentationUIDs are not part of the toolGroup: ".concat(JSON.stringify(e)))}else a=i;a.forEach((t=>{!function(e,t,n){const o=rn(e,t),{type:i}=o;if(i===Et.Labelmap)ba.removeSegmentationRepresentation(e,t,n);else{if(i!==Et.Contour)throw new Error("The representation ".concat(i," is not supported yet"));Sv.removeSegmentationRepresentation(e,t,n)}}(e,t,n)}))},Zm=function(e){const t=Ye.toolGroups.findIndex((t=>t.id===e));t>-1&&(Ov.removeToolGroup(e),Jm(e),Ye.toolGroups.splice(t,1))},$m=function(){const e=[...Ye.toolGroups];for(const t of e)Zm(t.id);Ye.toolGroups=[]};let Qm=!1;function ep(){Qm||(function(){np();const e=ne.Enums.Events.ELEMENT_ENABLED,t=ne.Enums.Events.ELEMENT_DISABLED;ne.eventTarget.addEventListener(e,Vm),ne.eventTarget.addEventListener(t,Hm),Xm.enable()}(),op(),ne.eventTarget.addEventListener(ie.ANNOTATION_COMPLETED,Bm),ne.eventTarget.addEventListener(ie.ANNOTATION_MODIFIED,Fm),ne.eventTarget.addEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.addEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,qm),ne.eventTarget.addEventListener(ie.SEGMENTATION_MODIFIED,jm),ne.eventTarget.addEventListener(ie.SEGMENTATION_DATA_MODIFIED,zm),ne.eventTarget.addEventListener(ie.SEGMENTATION_REPRESENTATION_MODIFIED,Km),ne.eventTarget.addEventListener(ie.SEGMENTATION_REPRESENTATION_REMOVED,Ym),Qm=!0)}function tp(){np(),op(),$m(),ze={},Ye={...le()({...Ke,svgNodeCache:{}}),svgNodeCache:{...Ke.svgNodeCache}};const e=it(),t=Ht();e.restoreAnnotations({}),t.resetState(),Qm=!1}function np(){const e=ne.Enums.Events.ELEMENT_ENABLED,t=ne.Enums.Events.ELEMENT_DISABLED;ne.eventTarget.removeEventListener(e,Vm),ne.eventTarget.removeEventListener(t,Hm),Xm.disable()}function op(){ne.eventTarget.removeEventListener(ie.ANNOTATION_COMPLETED,Bm),ne.eventTarget.removeEventListener(ie.ANNOTATION_MODIFIED,Fm),ne.eventTarget.removeEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.removeEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_MODIFIED,jm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_DATA_MODIFIED,zm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_REPRESENTATION_MODIFIED,Km),ne.eventTarget.removeEventListener(ie.SEGMENTATION_REPRESENTATION_REMOVED,Ym)}function ip(e){const t=Qv(e,Pa(e,[Je.Active,Je.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function ap(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function rp(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const sp=class{constructor(e,t,n,o){re(this,"_enabled",void 0),re(this,"_eventName",void 0),re(this,"_auxiliaryEventNames",void 0),re(this,"_eventHandler",void 0),re(this,"_ignoreFiredEvents",void 0),re(this,"_sourceViewports",void 0),re(this,"_targetViewports",void 0),re(this,"_viewportOptions",{}),re(this,"_options",void 0),re(this,"id",void 0),re(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=(0,ne.getEnabledElement)(e.currentTarget);if(!t)return;const{renderingEngineId:n,viewportId:o}=t;this._sourceViewports.find((e=>e.viewportId===o))&&this.fireEvent({renderingEngineId:n,viewportId:o},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=o||{},this._auxiliaryEventNames=this._options.auxiliaryEventNames||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._viewportOptions[e]=t}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(rp(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,o=(0,ne.getRenderingEngine)(t).getViewport(n);if(!o)return void console.warn("Synchronizer.addSource: No viewport for ".concat(t," ").concat(n));const i=o.element;i.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{i.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){rp(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 t=ap(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,ne.getRenderingEngine)(e.renderingEngineId);if(!t)throw new Error("No RenderingEngine for Id: ".concat(e.renderingEngineId));return t.getViewport(e.viewportId).element}(e);this._sourceViewports.splice(t,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEventNames&&this._auxiliaryEventNames.forEach((e=>{n.removeEventListener(e,this._eventHandler)})),this._updateDisableHandlers()}removeTarget(e){const t=ap(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return rp(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return rp(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let o=0;o<this._targetViewports.length;o++){const i=this._targetViewports[o];if(e.viewportId===i.viewportId)continue;const a=this._eventHandler(this,e,i,t,this._options);a instanceof Promise&&n.push(a)}}catch(e){console.warn("Synchronizer, for: ".concat(this._eventName),e)}finally{n.length?Promise.allSettled(n).then((()=>{this._ignoreFiredEvents=!1})):this._ignoreFiredEvents=!1}}_hasSourceElements(){return 0!==this._sourceViewports.length}_updateDisableHandlers(){const e=function(e,t){const n=[],o=e.concat(t);for(let e=0;e<o.length;e++){const t=o[e];n.some((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))||n.push(t)}return n}(this._sourceViewports,this._targetViewports),t=this.remove,n=e=>{t(e.detail.element)};e.forEach((function(e){const t=(0,ne.getRenderingEngine)(e.renderingEngineId);if(!t)return;const o=t.getViewport(e.viewportId),{element:i}=o;i.removeEventListener(ne.Enums.Events.ELEMENT_DISABLED,n),i.addEventListener(ne.Enums.Events.ELEMENT_DISABLED,n)}))}},lp=function(e,t,n,o){if(Ye.synchronizers.some((t=>t.id===e)))throw new Error("Synchronizer with id '".concat(e,"' already exists."));const i=new sp(e,t,n,o);return Ye.synchronizers.push(i),i},cp=function(){for(;Ye.synchronizers.length>0;)Ye.synchronizers.pop().destroy()},dp=function(e){return Ye.synchronizers.find((t=>t.id===e))},hp=function(){return Ye.synchronizers},up=function(e){const t=Ye.synchronizers.findIndex((t=>t.id===e));t>-1&&(Ye.synchronizers[t].destroy(),Ye.synchronizers.splice(t,1))};var gp=C(485),vp=C.n(gp);class mp extends fc{constructor(e,t,n,o,i){super(o||mp.getUniqueInstanceName("image-cursor"),i),re(this,"url",void 0),re(this,"x",void 0),re(this,"y",void 0),this.url=e,this.x=Number(t)||0,this.y=Number(n)||0}getStyleProperty(){const{url:e,x:t,y:n}=this;let o="url('".concat(e,"')");return t>=0&&n>=0&&(t>0||n>0)&&(o+=" ".concat(t," ").concat(n)),this.addFallbackStyleProperty(o)}static getUniqueInstanceName(e){return"".concat(e,"-").concat(ne.utilities.getRuntimeId(mp))}}const pp={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:'\n <path stroke="{{color}}" d="M8 16L8 0"></path>\n <path stroke="{{color}}" d="M16 8L0 8"></path>\n '},fp={x:127,y:60},Ip='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',wp='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n<rect fill="{{color}}" x="95.84" y="9.38" width="15.85" height="47.14"/>\n',Ep='<path fill="{{color}}" d="M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z" transform="translate(-1.17 -0.96)"/>',Cp='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',_p='<path fill="{{color}}" d="M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z" transform="translate(-8.86 -2.25)"/>',bp={Angle:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50\n 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23\n 10l50 50q10 10 10 23z" />',viewBox:{x:1792,y:1792}}),ArrowAnnotate:Dp(pp,{iconContent:'<g id="arrowAnnotate-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="arrowAnnotate-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />\n </g>',viewBox:{x:24,y:24}}),Bidirectional:Dp(pp,{iconContent:'<g fill="{{color}}" stroke-width="3" stroke="{{color}}">\n <path d="M27.63 3.21L3.12 28.81"></path>\n <path d="M27.63 15.75L15.27 4.43"></path>\n <path d="M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z" ></path>\n <path d="M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z"></path>\n <path d="M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z"></path>\n <path d="M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z"></path>\n </g>',viewBox:{x:48,y:48}}),CobbAngle:Dp(pp,{iconContent:'<g stroke="{{color}}" stroke-width="3">\n <path d="M28.59 2.34L3.82 12.32"></path>\n <path d="M28.59 29.66L3.82 19.68"></path>\n <path stroke-dasharray="2" fill-opacity="0" d="M12.37\n 23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15\n 9.33C13.11 9.24 13.02 9 12.88 8.63">\n </path>\n </g>',viewBox:{x:32,y:32}}),CircleROI:Dp(pp,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Dp(pp,{iconContent:'<path stroke="{{color}}" fill="none" stroke-width="3" d="M30.74 15.76C30.74 20.99 24.14 25.23 16\n 25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14\n 6.3 30.74 10.54 30.74 15.76Z" />',viewBox:{x:32,y:32}}),FreehandROI:Dp(pp,{iconContent:'<g fill="{{color}}" stroke="{{color}}" stroke-width="2">\n <ellipse ry="1" rx="1" id="svg_3" cy="4.240343" cx="14.306499"/>\n <line id="svg_4" y2="3.58462" x2="12.242186" y1="3.997482" x1="13.432202"/>\n <line id="svg_5" y2="3.268901" x2="10.857882" y1="3.608906" x1="12.387902"/>\n <line id="svg_6" y2="3.147471" x2="9.740724" y1="3.293187" x1="10.955026"/>\n <line id="svg_7" y2="3.147471" x2="8.089274" y1="3.196043" x1="9.983585"/>\n <line id="svg_8" y2="3.268901" x2="6.874972" y1="3.123185" x1="8.307848"/>\n <line id="svg_9" y2="3.657478" x2="5.587812" y1="3.220329" x1="7.020688"/>\n <line id="svg_10" y2="4.046054" x2="4.737801" y1="3.560334" x1="5.854959"/>\n <line id="svg_11" y2="4.337487" x2="4.300652" y1="3.997482" x1="4.834945"/>\n <line id="svg_12" y2="4.726063" x2="3.88779" y1="4.191771" x1="4.470655"/>\n <line id="svg_15" y2="5.3575" x2="3.377783" y1="4.604633" x1="3.960648"/>\n <line id="svg_16" y2="6.183226" x2="2.916348" y1="5.138926" x1="3.547785"/>\n <line id="svg_17" y2="6.960379" x2="2.770632" y1="5.867507" x1="3.037779"/>\n <line id="svg_18" y2="7.713246" x2="2.673488" y1="6.741804" x1="2.819204"/>\n <line id="svg_19" y2="8.684687" x2="2.697774" y1="7.616102" x1="2.673488"/>\n <line id="svg_20" y2="9.753273" x2="2.892062" y1="8.611829" x1="2.697774"/>\n <line id="svg_21" y2="10.724714" x2="3.134923" y1="9.534698" x1="2.84349"/>\n <line id="svg_23" y2="11.647583" x2="3.596357" y1="10.578998" x1="3.086351"/>\n <line id="svg_25" y2="12.521881" x2="4.276366" y1="11.501867" x1="3.499213"/>\n <line id="svg_26" y2="13.930471" x2="5.830673" y1="12.376165" x1="4.13065"/>\n <line id="svg_28" y2="14.707624" x2="7.263549" y1="13.881899" x1="5.733528"/>\n <line id="svg_29" y2="15.339061" x2="8.963571" y1="14.61048" x1="7.06926"/>\n <line id="svg_30" y2="15.581921" x2="10.882168" y1="15.314775" x1="8.817855"/>\n <line id="svg_31" y2="15.460491" x2="12.023612" y1="15.581921" x1="10.785024"/>\n <line id="svg_33" y2="15.120487" x2="13.092197" y1="15.484777" x1="11.877895"/>\n <line id="svg_34" y2="14.586194" x2="13.86935" y1="15.217631" x1="12.897909"/>\n <line id="svg_35" y2="13.833327" x2="14.597931" y1="14.756196" x1="13.699348"/>\n <line id="svg_37" y2="12.716169" x2="15.180796" y1="13.881899" x1="14.549359"/>\n <line id="svg_39" y2="11.429009" x2="15.520801" y1="12.813313" x1="15.15651"/>\n <ellipse ry="1" rx="1" id="svg_40" cy="10.967574" cx="15.520801"/>\n </g>',viewBox:{x:18,y:18}}),FreehandROISculptor:Dp(pp,{iconContent:'<g id="icon-freehand-sculpt" fill="none" stroke-width="1.5" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <line id="svg_1" y2="2.559367" x2="10.184807" y1="4.467781" x1="8.81711"/>\n <line id="svg_4" y2="1.493836" x2="11.727442" y1="2.766112" x1="10.089386"/>\n <line id="svg_7" y2="1.080346" x2="13.047428" y1="1.748291" x1="11.345759"/>\n <line id="svg_8" y2="1.000829" x2="14.351511" y1="1.112153" x1="12.77707"/>\n <line id="svg_9" y2="1.350705" x2="15.242104" y1="0.905408" x1="13.969828"/>\n <line id="svg_10" y2="2.098167" x2="15.862339" y1="1.14396" x1="14.955842"/>\n <line id="svg_11" y2="3.195505" x2="16.41896" y1="1.939133" x1="15.766918"/>\n <line id="svg_12" y2="4.292843" x2="16.530284" y1="2.925147" x1="16.387153"/>\n <line id="svg_16" y2="5.644637" x2="16.196311" y1="3.831643" x1="16.593898"/>\n <line id="svg_18" y2="7.266789" x2="15.623787" y1="5.19934" x1="16.275829"/>\n <line id="svg_19" y2="10.813258" x2="14.526449" y1="6.726071" x1="15.766918"/>\n <line id="svg_20" y2="5.056209" x2="8.085552" y1="4.181519" x1="8.976145"/>\n <line id="svg_23" y2="5.326568" x2="7.481221" y1="4.78585" x1="8.403621"/>\n <line id="svg_24" y2="5.565119" x2="6.749662" y1="5.294761" x1="7.624352"/>\n <line id="svg_25" y2="5.994512" x2="5.429675" y1="5.533312" x1="6.956407"/>\n <line id="svg_27" y2="6.551133" x2="4.284627" y1="5.962706" x1="5.572807"/>\n <line id="svg_28" y2="7.584858" x2="3.044158" y1="6.392099" x1="4.427758"/>\n <line id="svg_29" y2="8.84123" x2="2.185372" y1="7.489437" x1="3.219096"/>\n <line id="svg_31" y2="10.606513" x2="1.644654" y1="8.602678" x1="2.280792"/>\n <line id="svg_32" y2="13.214679" x2="1.48562" y1="10.352058" x1="1.724171"/>\n <line id="svg_33" y2="14.375631" x2="1.676461" y1="12.992031" x1="1.453813"/>\n <line id="svg_34" y2="15.298031" x2="2.264889" y1="14.152983" x1="1.517427"/>\n <line id="svg_35" y2="16.172721" x2="3.521261" y1="14.948155" x1="1.915013"/>\n <line id="svg_36" y2="16.824762" x2="5.207027" y1="15.997783" x1="3.28271"/>\n <line id="svg_38" y2="17.063314" x2="7.035924" y1="16.745245" x1="4.968475"/>\n <line id="svg_39" y2="16.888376" x2="9.278311" y1="17.047411" x1="6.733758"/>\n <line id="svg_40" y2="16.284045" x2="10.661911" y1="16.983797" x1="8.992048"/>\n <line id="svg_41" y2="15.313934" x2="11.647925" y1="16.395369" x1="10.455166"/>\n <line id="svg_44" y2="13.898527" x2="12.82478" y1="15.425259" x1="11.504794"/>\n <line id="svg_45" y2="12.037824" x2="14.144766" y1="14.312017" x1="12.522614"/>\n <line id="svg_47" y2="10.59061" x2="14.605966" y1="12.228665" x1="13.953925"/>\n <ellipse ry="1" rx="1" id="svg_48" cy="3.982726" cx="13.460918"/>\n </g>',viewBox:{x:18,y:18}}),Length:Dp(pp,{iconContent:'<g id="length-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="length-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />\n </g>',viewBox:{x:24,y:24}}),Probe:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75\n 75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73\n 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5\n 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5\n 385.5-103 385.5 103 279.5 279.5 103 385.5z" />',viewBox:{x:1792,y:1792}}),RectangleROI:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47\n 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0\n 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119\n 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),TextMarker:Dp(pp,{iconContent:'<path fill="{{color}}" d="M789 559l-170 450q33 0 136.5 2t160.5 2q19 0\n 57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29\n 31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15\n 34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5\n 13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0\n 12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11\n 2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0\n 22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58\n 0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z" />',viewBox:{x:1792,y:1792}}),Crosshairs:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26\n 19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45\n 19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26\n 0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5\n 112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32\n 188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5\n 278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26\n 0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26\n 0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161\n 154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161\n 37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z" />',viewBox:{x:1792,y:1792}}),Eraser:Dp(pp,{iconContent:'<path transform="translate(0,1792) scale(1,-1)" fill="{{color}}" d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15\n 34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38\n 0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38\n 0 69.5 20.5t47.5 54.5z" />',viewBox:{x:2048,y:1792}}),Magnify:Dp(pp,{iconContent:'<path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />',viewBox:{x:512,y:512}}),Pan:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17\n 39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355\n 355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59\n 39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12\n 0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144\n 144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19\n 45v448q0 42-39 59-13 5-25 5-26 0-45-19z" />',viewBox:{x:1792,y:1792}}),Rotate:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39\n 14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5\n 163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0\n 225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109\n 132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298\n 164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14\n 39 17 39 59z" />',viewBox:{x:1792,y:1792}}),StackScroll:Dp(pp,{iconContent:'<path fill="{{color}}" d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0\n 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547\n 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z" />',viewBox:{x:24,y:28}}),WindowLevelRegion:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119\n 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5\n 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),WindowLevel:Dp(pp,{iconContent:'\n <path fill="{{color}}" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />\n <circle cx="9" cy="9" r="8" fill="none" stroke-width="2" stroke="{{color}}" />',viewBox:{x:18,y:18}}),Zoom:Dp(pp,{iconContent:'\n <path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />\n <path fill="{{color}}" transform="scale(0.22,0.22) translate(1400,0)" d="M1216\n 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19\n 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26\n 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" />',viewBox:{x:640,y:512}}),SegmentationFreeHandEraseInside:Dp(pp,{iconContent:"".concat(Ep," ").concat(Ip),viewBox:fp}),SegmentationFreeHandFillInside:Dp(pp,{iconContent:"".concat(Ep," ").concat(wp),viewBox:fp}),SegmentationFreeHandEraseOutside:Dp(pp,{iconContent:"".concat(Ep," ").concat(Ip),viewBox:fp}),SegmentationFreeHandFillOutside:Dp(pp,{iconContent:"".concat(Ep," ").concat(wp),viewBox:fp}),SegmentationRectangleEraseInside:Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),RectangleScissor:Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.FILL_INSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.FILL_OUTSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.ERASE_OUTSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),"RectangleScissor.ERASE_INSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),CircleScissor:Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp}),"CircleScissor.FILL_INSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp}),"CircleScissor.ERASE_OUTSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(Ip),viewBox:fp}),"CircleScissor.FILL_OUTSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp})};function Dp(e,t){return Object.assign(Object.create(e),t)}function Tp(e,t,n){bp[e]=Dp(pp,{iconContent:t,viewBox:n})}const Sp=Object.keys(bp),yp=Zc.Highlighted,Mp=Je.Active;class xp extends mp{constructor(e,t,n,o,i){super(e,t,n,o,i)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=Xc("color",{},yp,Mp));const o=function(e,t,n){return"".concat(t?"pointer":"cursor",":").concat(e,"/").concat(n)}(e,t,n);let i=super.getDefinedCursor(o);if(!i){const a=function(e){return bp[e]}(e);a&&(i=function(e,t,n,o,i){const{x:a,y:r}=e.mousePoint;return new xp(function(e,t,n){return URL.createObjectURL(function(e,t,n){const o=(t?Ap:Pp)(e,n);return new Blob([o],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:o}),a,r,t,i)}(a,o,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(o,i))}return i}}function Op(e,t){const n=Object(t),o=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>o(t)?n[t]+"":""))}function Pp(e,t){const{iconContent:n,iconSize:o,viewBox:i}=e;return Op('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(o,'" height="').concat(o,'" viewBox="0 0\n ').concat(i.x," ").concat(i.y,'">\n ').concat(n,"\n </svg>"),t)}function Ap(e,t){const{iconContent:n,iconSize:o,viewBox:i,mousePointerGroupString:a}=e,r=o/Math.max(i.x,i.y,1),s=16+o;return Op('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(s,'" height="').concat(s,'" viewBox="0 0 ').concat(s," ").concat(s,'">\n <g>').concat(a,'</g>\n <g transform="translate(16, 16) scale(').concat(r,')">').concat(n,"</g>\n </svg>"),t)}const{Active:Rp,Passive:Np,Enabled:Lp,Disabled:kp}=Je,Up=[{mouseButton:Zu.Primary}];class Vp{constructor(e){re(this,"id",void 0),re(this,"viewportsInfo",[]),re(this,"toolOptions",{}),re(this,"currentActivePrimaryToolName",null),re(this,"prevActivePrimaryToolName",null),re(this,"restoreToolOptions",{}),re(this,"_toolInstances",{}),this.id=e}getViewportIds(){return this.viewportsInfo.map((e=>{let{viewportId:t}=e;return t}))}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const t=this._toolInstances[e];if(t)return t;console.warn("'".concat(e,"' is not registered with this toolGroup (").concat(this.id,")."))}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ye.tools[e],o=void 0!==e&&""!==e,i=this.toolOptions[e];if(!o)return void console.warn("Tool with configuration did not produce a toolName: ",t);if(!n)return void console.warn("'".concat(e,"' is not registered with the library. You need to use cornerstoneTools.addTool to register it."));if(i)return void console.warn("'".concat(e,"' is already registered for ToolGroup ").concat(this.id,"."));const{toolClass:a}=n,r=new a({name:e,toolGroupId:this.id,configuration:t});this._toolInstances[e]=r}addToolInstance(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=null===(n=Ye.tools[e])||void 0===n?void 0:n.toolClass;if(!i){const n=Ye.tools[t].toolClass;class o extends n{}o.toolName=e,i=o,Ye.tools[e]={toolClass:o}}this.addTool(i.toolName,o)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,ne.getRenderingEngines)();if(!t&&n.length>1)throw new Error("You must specify a renderingEngineId when there are multiple rendering engines.");const o=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:o});const i=this.getActivePrimaryMouseButtonTool();ne.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(i)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((o,i)=>{let a=!1;o.renderingEngineId===e&&(a=!0,t&&o.viewportId!==t&&(a=!1)),a&&n.push(i)})),n.length)for(let e=n.length-1;e>=0;e--)this.viewportsInfo.splice(n[e],1)}setActiveStrategy(e,t){const n=this._toolInstances[e];void 0!==n?n.setActiveStrategy(t):console.warn("Tool ".concat(e," not added to toolGroup, can't set tool configuration."))}setToolMode(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e?t!==Je.Active?t!==Je.Passive?t!==Je.Enabled?t!==Je.Disabled?console.warn("setToolMode: mode must be defined"):this.setToolDisabled(e):this.setToolEnabled(e):this.setToolPassive(e):this.setToolActive(e,n||this.restoreToolOptions[e]):console.warn("setToolMode: toolName must be defined")}setToolActive(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=this._toolInstances[e];if(void 0===n)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));if(!n)return void console.warn("'".concat(e,"' instance ").concat(n," is not registered with this toolGroup, can't set tool mode."));const o={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,o=void 0!==t.mouseButton;return e.some((e=>Wp(e,t)))||!n&&!o||e.push(t),e}),[]),mode:Rp};this.toolOptions[e]=o,this._toolInstances[e].mode=Rp;const i=ne.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&i)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&i){const e=fc.getDefinedCursor("default");this._setCursorForViewports(e)}this._hasMousePrimaryButtonBinding(t)&&(null===this.prevActivePrimaryToolName?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,ne.triggerEvent)(ne.eventTarget,ie.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,Rp,t)}setToolPassive(e,t){const n=this._toolInstances[e];if(void 0===n)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const o=this.getToolOptions(e),i=Object.assign({bindings:o?o.bindings:[]},o,{mode:Np}),a=Array.isArray(null==t?void 0:t.removeAllBindings)?t.removeAllBindings:this.getDefaultPrimaryBindings();i.bindings=i.bindings.filter((e=>!0!==(null==t?void 0:t.removeAllBindings)&&!a.some((t=>Wp(e,t)))));let r=Np;0!==i.bindings.length&&(r=Rp,i.mode=r),this.toolOptions[e]=i,n.mode=r,"function"==typeof n.onSetToolPassive&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Np)}setToolEnabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const n={bindings:[],mode:Lp};this.toolOptions[e]=n,t.mode=Lp,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Lp)}setToolDisabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const n={bindings:[],mode:kp};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=kp,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,kp)}getToolOptions(e){const t=this.toolOptions[e];if(void 0!==t)return t}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find((e=>{const t=this.toolOptions[e];return t.mode===Rp&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,o;return t&&(n="".concat(e,".").concat(t),o=xp.getDefinedCursor(n,!0),o)?o:(n="".concat(e),o=xp.getDefinedCursor(n,!0),o||(n=e,o=xp.getDefinedCursor(n,!0),o||fc.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:o}=t;const i=(0,ne.getEnabledElementByIds)(o,n);if(!i)return;const{viewport:a}=i;Cc(a.element,e)}))}setToolConfiguration(e,t,n){const o=this._toolInstances[e];if(void 0===o)return console.warn("Tool ".concat(e," not present, can't set tool configuration.")),!1;let i;return i=n?t:Object.assign(o.configuration,t),o.configuration=i,"function"==typeof o.onSetToolConfiguration&&o.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return Zu.Primary}getDefaultPrimaryBindings(){return Up}getToolConfiguration(e,t){if(void 0===this._toolInstances[e])return void console.warn("Tool ".concat(e," not present, can't set tool configuration."));const n=vp()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return le()(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}clone(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=ei(e);return o?(console.warn("ToolGroup ".concat(e," already exists")),o):(o=Hp(e),n=null!==(t=n)&&void 0!==t?t:()=>!0,Object.keys(this._toolInstances).filter(n).forEach((e=>{var t;const n=this._toolInstances[e],i=this.toolOptions[e],a=n.mode;o.addTool(e),o.setToolMode(e,a,{bindings:null!==(t=i.bindings)&&void 0!==t?t:[]})})),o)}_hasMousePrimaryButtonBinding(e){var t;const n=this.getDefaultPrimaryBindings();return null==e||null===(t=e.bindings)||void 0===t?void 0:t.some((e=>n.some((t=>Wp(e,t)))))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,ne.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const o={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,ne.triggerEvent)(ne.eventTarget,ie.TOOL_MODE_CHANGED,o)}}function Wp(e,t){return e.mouseButton===t.mouseButton&&e.numTouchPoints===t.numTouchPoints&&e.modifierKey===t.modifierKey}const Hp=function(e){if(Ye.toolGroups.some((t=>t.id===e)))return void console.warn("'".concat(e,"' already exists."));const t=new Vp(e);return Ye.toolGroups.push(t),t},Bp=function(){return Ye.toolGroups};function Fp(e,t,n,o){const{camera:i}=o.detail,a=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId);r.setCamera(i),r.render()}const{CAMERA_MODIFIED:Gp}=ne.Enums.Events;function qp(e){return lp(e,Gp,Fp)}function jp(e,t,n,o,i){const a=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId),s=a.getViewport(t.viewportId).getViewPresentation(i);r.setView(null,s),r.render()}const{CAMERA_MODIFIED:zp}=ne.Enums.Events;function Kp(e,t){return lp(e,zp,jp,t)}function Yp(e,t,n,o,i){const a=o.detail,{volumeId:r,range:s,invertStateChanged:l,invert:c,colormap:d}=a,h=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!h)throw new Error("Rendering Engine does not exist: ".concat(n.renderingEngineId));const u=h.getViewport(n.viewportId),g={voiRange:s};if(null!=i&&i.syncInvertState&&l&&(g.invert=c),null!=i&&i.syncColormap&&d&&(g.colormap=d),u instanceof ne.BaseVolumeViewport)u._actors&&u._actors.size>1?u.setProperties(g,r):u.setProperties(g);else{if(!(u instanceof ne.StackViewport))throw new Error("Viewport type not supported.");u.setProperties(g)}u.render()}function Xp(e,t){return t=Object.assign({syncInvertState:!0,syncColormap:!0},t),lp(e,ne.Enums.Events.VOI_MODIFIED,Yp,{auxiliaryEventNames:[ne.Enums.Events.COLORMAP_MODIFIED],...t})}function Jp(e,t,n){const o=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!o)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const i=e.getOptions(n.viewportId),a=o.getViewport(n.viewportId),r=o.getViewport(t.viewportId);if(!1!==(null==i?void 0:i.syncZoom)){const e=r.getZoom();a.setZoom(e)}if(!1!==(null==i?void 0:i.syncPan)){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:Zp}=ne.Enums.Events;function $p(e){return lp(e,Zp,Jp)}const Qp=(e,t)=>ne.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function ef(e,t,n){const o=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!o)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const i=o.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(null!=a&&a.disabled)return;const r=o.getViewport(n.viewportId),s=i.getCurrentImageId(),l=ne.metaData.get("imagePlaneModule",s).imagePositionPatient,c=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:o}=t.getCamera(),i=aa.vec3.dot(n,o);return Math.abs(i)>.9}(i,r))return;let d=Qp(n.viewportId,t.viewportId);if(!d&&(i.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==(null==a?void 0:a.useInitialPosition)?d=aa.mat4.identity(aa.mat4.create()):(ne.utilities.calculateViewportsSpatialRegistration(i,r),d=Qp(n.viewportId,t.viewportId)),!d))return;const h=aa.vec3.transformMat4(aa.vec3.create(),l,d),u=(g=h,c.reduce(((e,t,n)=>{const{imagePositionPatient:o}=ne.metaData.get("imagePlaneModule",t),i=aa.vec3.distance(o,g);return i<e.distance?{distance:i,index:n}:e}),{distance:1/0,index:-1}));var g;let v=u.index;r instanceof ne.VolumeViewport&&(v=c.length-u.index-1),-1!==u.index&&r.getCurrentImageIdIndex()!==u.index&&await Sr(r.element,{imageIndex:v})}const{STACK_NEW_IMAGE:tf,VOLUME_NEW_IMAGE:nf}=ne.Enums.Events;function of(e){return lp(e,tf,ef,{auxiliaryEventNames:[nf]})}function af(e,t,n){var o,i,a,r;const s=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!s)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const l=s.getViewport(n.viewportId),c=null===(o=(i=s.getViewport(t.viewportId)).getSlabThickness)||void 0===o?void 0:o.call(i);c&&(null===(a=(r=l).setSlabThickness)||void 0===a||a.call(r,c),l.render())}const{CAMERA_MODIFIED:rf}=ne.Enums.Events;function sf(e){return lp(e,rf,af)}const lf=of,cf=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),d=l||s,h=hc(t,"ellipse",n),u=e.getSvgNode(h),[g,v,m,p]=o,f=Math.hypot(m[0]-p[0],m[1]-p[1]),I=Math.hypot(v[0]-g[0],v[1]-g[1]),w=180*Math.atan2(m[1]-p[1],m[0]-p[0])/Math.PI,E=[(m[0]+p[0])/2,(v[1]+g[1])/2],C=f/2,_=I/2,b={cx:"".concat(E[0]),cy:"".concat(E[1]),rx:"".concat(C),ry:"".concat(_),stroke:r,fill:"transparent",transform:"rotate(".concat(w," ").concat(E[0]," ").concat(E[1],")"),"stroke-width":d,"stroke-dasharray":c};if(u)uc(b,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),gc(b,t),e.appendNode(t,h)}},df=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(o[0]+i[0])/2,o[1]],l=[(o[0]+i[0])/2,i[1]],c=[o[0],(o[1]+i[1])/2],d=[i[0],(o[1]+i[1])/2];cf(e,t,n,[l,s,c,d],a={},r="")};function hf(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(o[0])||isNaN(o[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a);rd(e,t,n,o,i,{color:r,width:s,lineWidth:l,lineDash:c});const d=Math.atan2(i[1]-o[1],i[0]-o[0]),h={start:[i[0]-10*Math.cos(d-Math.PI/7),i[1]-10*Math.sin(d-Math.PI/7)],end:i},u={start:[i[0]-10*Math.cos(d+Math.PI/7),i[1]-10*Math.sin(d+Math.PI/7)],end:i};rd(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),rd(e,t,"3",u.start,u.end,{color:r,width:s,lineWidth:l})}function uf(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),d=l||s,h=hc(t,"rect",n),u=e.getSvgNode(h),g=[Math.min(o[0],i[0]),Math.min(o[1],i[1])],v=Math.abs(o[0]-i[0]),m=Math.abs(o[1]-i[1]),p={x:"".concat(g[0]),y:"".concat(g[1]),width:"".concat(v),height:"".concat(m),stroke:r,fill:"black","stroke-width":d,"stroke-dasharray":c};if(u)uc(p,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");gc(p,t),e.appendNode(t,h)}}const gf=function(e,t){let n=xp.getDefinedCursor(t,!0);n||(n=fc.getDefinedCursor(t)),n||(console.log("Cursor ".concat(t," is not defined either as SVG or as a standard cursor.")),n=fc.getDefinedCursor(t)),_c(e,n)},vf=[...Sp,...wc],mf=function(e,t,n){const o=Xc("textBoxFontSize",e,t,n),i=Xc("textBoxFontFamily",e,t,n);return"".concat(o,"px ").concat(i)};class pf{constructor(){re(this,"annotationUIDs",new Set),re(this,"_isVisible",!0),re(this,"visibleFilter",void 0),this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach((o=>{const i=pt(o);if(!i)return void this.annotationUIDs.delete(o);if(i.isVisible===e)return;if(!e&&!1===(null==n?void 0:n(o)))return;i.isVisible=e;const a={...t,annotation:i};(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_MODIFIED,a)})))}get isVisible(){return this._isVisible}findNearby(e,t){const n=[...this.annotationUIDs];if(0===n.length)return null;if(!e)return n[1===t?0:n.length-1];const o=n.indexOf(e);return-1===o||o+t<0||o+t>=n.length?null:n[o+t]}add(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.add(e)))}remove(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.delete(e)))}clear(){this.annotationUIDs.clear()}}const ff=function(e){(function(e){if(!e||0===e.length)throw new Error("The segmentationInputArray is undefined or an empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("Undefined segmentationInput.segmentationId. Please provide a valid segmentationId");if(void 0===e.representation)throw new Error("Undefined segmentationInput.representation. Please provide a valid representation");e.representation.type===Et.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");Ui(e.representation.data)}(e)}))})(e),e.map((e=>{Gt(le()(e))}))};class If extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]})}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),i=n.world,a=o.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-i[0],s[1]-i[1],s[2]-i[2]],c=[r[0]-i[0],r[1]-i[1],r[2]-i[2]];o.viewport.setCamera({focalPoint:c,position:l}),o.viewport.render()}}re(If,"toolName",void 0),If.toolName="Pan";const wf=If;class Ef extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"cleanUp",void 0),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,a=i.getDefaultActor().actor.getMapper(),r=a.getSampleDistance();return a.setSampleDistance(2*r),null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{a.setSampleDistance(r),i.render()},document.addEventListener("mouseup",this.cleanUp,{once:!0}),!0})),re(this,"rotateCamera",((e,t,n,o)=>{const i=e.getVtkActiveCamera(),a=i.getViewUp(),r=i.getFocalPoint(),s=i.getPosition(),l=[0,0,0],c=[0,0,0],d=[0,0,0],h=aa.mat4.identity(new Float32Array(16));aa.mat4.translate(h,h,t),aa.mat4.rotate(h,h,o,n),aa.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),aa.vec3.transformMat4(l,s,h),aa.vec3.transformMat4(c,r,h),aa.mat4.identity(h),aa.mat4.rotate(h,h,o,n),aa.vec3.transformMat4(d,a,h),e.setCamera({position:l,viewUp:d,focalPoint:c})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:o}=e.detail,i=n.canvas,a=o.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,ne.getEnabledElement)(t),{viewport:l}=s,c=l.getCamera(),d=t.clientWidth,h=t.clientHeight,u=[i[0]/d,i[1]/h],g=[a[0]/d,a[1]/h],v=[.5*d,.5*h],m=l.canvasToWorld(v),p=(1+Math.abs(.5))**2,f=[g[0],0,0],I=[u[0],0,0],w=f[0]**2,E=I[0]**2,C=w>p?0:Math.sqrt(p-w),_=E>p?0:Math.sqrt(p-E),b=[f[0],0,C];yh().normalize(b);const D=[I[0],0,_];yh().normalize(D);const T=yh().dot(b,D);if(Math.abs(T)>1e-4){const e=-2*Math.acos(yh().clampValue(T,-1,1))*Math.sign(u[0]-g[0])*r,t=c.viewUp,n=c.viewPlaneNormal,o=[0,0,0],i=[0,0,0];yh().cross(t,n,o),yh().normalize(o),yh().cross(n,o,i),yh().normalize(i),yh().normalize(t),this.rotateCamera(l,m,i,e);const a=(g[1]-u[1])*r;this.rotateCamera(l,m,o,a),l.render()}}}re(Ef,"toolName",void 0),Ef.toolName="TrackballRotate";const Cf=Ef,{transformWorldToIndex:_f}=ne.utilities;class bf extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:Df}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"eventDispatchDetail",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{label:"",handles:{points:[[...i]]},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a}=this.editData,{viewportId:r,renderingEngine:s}=(0,ne.getEnabledElement)(n);this.eventDispatchDetail={viewportId:r,renderingEngineId:s.id},this._deactivateModify(n),bc(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(s,i),a&&et(o)})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...i],a.invalidated=!0;const l=(0,ne.getEnabledElement)(o),{renderingEngine:c}=l;Ua(c,r)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],r=o.annotationUID,h=o.data,u=h.handles.points[0],g=a.worldToCanvas(u);d.annotationUID=r;const{color:v}=this.getAnnotationStyle({annotation:o,styleSpecifier:d});if(h.cachedStats||(h.cachedStats={}),h.cachedStats[l]&&null!=h.cachedStats[l].value){if(o.invalidated&&(this._calculateCachedStats(o,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,index:null,value:null},this._calculateCachedStats(o,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;Fc(t,r,"0",[g],{color:v}),i=!0;const m=this.getLinkedTextBoxStyle(d,o);if(!m.visibility)continue;const p=this.configuration.getTextLines(h,l);if(p){const e=[g[0]+6,g[1]-6];ad(t,r,"0",p,[e[0],e[1]],m)}}return i}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==aa.vec2.distance(n,l)<o)return s}handleSelectedCallback(e,t){const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{renderingEngineId:i,viewport:a}=n,{element:r}=a,s=o.handles.points[0],{cachedStats:l}=o,c=Object.keys(l);for(let n=0;n<c.length;n++){const o=c[n],d={isPreScaled:vd(a,o),isSuvScaled:this.isSuvScaled(a,o,e.metadata.referencedImageId)},h=this.getTargetIdImage(o,t);if(!h)continue;const{dimensions:u,imageData:g,metadata:v}=h,m="getScalarData"in h?h.getScalarData():h.scalarData,p=v.Modality,f=_f(g,s);f[0]=Math.round(f[0]),f[1]=Math.round(f[1]),f[2]=Math.round(f[2]);const I=m.length/u[2]/u[1]/u[0];if(ne.utilities.indexWithinDimensions(f,u)){this.isHandleOutsideImage=!1;const t=u[0]*I,n=u[0]*u[1]*I,a=f[2]*n+f[1]*t+f[0]*I;let r,s=I>2?[m[a],m[a+1],m[a+2]]:m[a];if(o.startsWith("imageId:")){const e=o.split("imageId:")[1],t=ne.utilities.imageIdToURI(e),n=ne.utilities.getViewportsWithImageURI(t,i)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=mr(h,[f]),t=e.values.every((e=>null!==e));s=t?e.values:s,r=t?e.units:"raw"}else r=gd(p,e.metadata.referencedImageId,d);l[o]={index:f,value:s,Modality:p,modalityUnit:r}}else this.isHandleOutsideImage=!0,l[o]={index:f,Modality:p};e.invalidated=!1,Qe(e,r)}return l}}function Df(e,t){const n=e.cachedStats[t],{index:o,value:i,modalityUnit:a}=n;if(void 0===i)return;const r=[];if(r.push("(".concat(o[0],", ").concat(o[1],", ").concat(o[2],")")),i instanceof Array&&a instanceof Array)for(let e=0;e<i.length;e++)r.push("".concat(zu(i[e])," ").concat(a[e]));else r.push("".concat(zu(i)," ").concat(a));return r}re(bf,"toolName",void 0),bf.toolName="Probe";const Tf=bf;class Sf extends Tf{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:yf}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"eventDispatchDetail",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...i]]},cachedStats:{}}},g=Qs(o,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(o),Dc(o),e.preventDefault(),Ua(s,g),u})),re(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e;if(!this.editData)return n;const i=this.filterInteractableAnnotationsForElement(o.element,[this.editData.annotation]);if(null==i||!i.length)return n;const a=this.getTargetId(o),r=o.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,c=l.annotationUID,d=l.data,h=d.handles.points[0],u=o.worldToCanvas(h);s.annotationUID=c;const{color:g}=this.getAnnotationStyle({annotation:l,styleSpecifier:s});if(vd(o,a),this.isSuvScaled(o,a,l.metadata.referencedImageId),d.cachedStats[a]&&null!=d.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(d.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;Fc(t,c,"0",[u],{color:g}),n=!0;const v=this.configuration.getTextLines(d,a);if(v){const e=[u[0]+6,u[1]-6];ad(t,c,"0",v,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function yf(e,t){const n=e.cachedStats[t],{index:o,value:i,modalityUnit:a}=n;if(void 0===i)return;const r=[];return r.push("(".concat(o[0],", ").concat(o[1],", ").concat(o[2],")")),r.push("".concat(i.toFixed(2)," ").concat(a)),r}re(Sf,"toolName",void 0),Sf.toolName="DragProbe";const Mf=Sf;class xf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),o=t[0]*t[1];let i,a;e instanceof Float32Array?(i=4,a=Float32Array):e instanceof Uint8Array?(i=1,a=Uint8Array):e instanceof Uint16Array?(i=2,a=Uint16Array):e instanceof Int16Array&&(i=2,a=Int16Array);const r=new a(e.buffer,n*o*i,o),{max:s,min:l}=this._getMinMax(r,o);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{renderingEngine:i,viewport:a}=o;let r,s,l,c,d,h,u=!1;const g=a.getProperties();if(a instanceof ne.VolumeViewport){const e=this.getTargetId(a);r=ne.utilities.getVolumeId(e),h=ne.utilities.getViewportsWithVolumeId(r,i.id),({lower:s,upper:l}=g.voiRange);const t=ne.cache.getVolume(r);if(!t)throw new Error("Volume not found "+r);c=t.metadata.Modality,u=t.scaling&&Object.keys(t.scaling).length>0}else{if(!g.voiRange)throw new Error("Viewport is not a valid type");{var v,m;c=a.modality,({lower:s,upper:l}=g.voiRange);const{preScale:e={scaled:!1}}=(null===(v=a.getImageData)||void 0===v?void 0:v.call(a))||{};u=e.scaled&&void 0!==(null===(m=e.scalingParameters)||void 0===m?void 0:m.suvbw)}}d="PT"===c&&u?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:u,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),d.lower>=d.upper||(a.setProperties({voiRange:d}),a.render(),a instanceof ne.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()})))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:o,clientHeight:i,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/i:this._getMultiplierFromDynamicRange(a,r)||4,o-=t[1]*l,o=s?Math.max(o,.1):o,{lower:n,upper:o}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:o,lower:i,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,o)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:c,windowCenter:d}=ne.utilities.windowLevel.toWindowLevel(i,a);return c+=s,d+=l,c=Math.max(c,1),ne.utilities.windowLevel.toLowHighRange(c,d)}_getMultiplierFromDynamicRange(e,t){let n;if(t){var o;const e=ne.cache.getVolume(t),{dimensions:i}=e,a=e.getScalarData(),r=this._getImageDynamicRangeFromMiddleSlice(a,i),s=null==e||null===(o=e.metadata)||void 0===o?void 0:o.BitsStored,l=s?2**s:1/0;n=Math.min(r,l)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/1024;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:t}=e.getImageData(),n=t.getDimensions();if(t.getRange){const e=t.getRange();return e[1]-e[0]}let o,i;if(o=t.getScalarData?t.getScalarData():t.getPointData().getScalars(),1!==n[2])return this._getImageDynamicRangeFromMiddleSlice(o,n);if(o.getRange)i=o.getRange();else{const{min:e,max:t}=this._getMinMax(o,o.length);i=[e,t]}return i[1]-i[0]}_getMinMax(e,t){let n=1/0,o=-1/0;for(let i=0;i<t;i++){const t=e[i];t<n&&(n=t),t>o&&(o=t)}return{max:o,min:n}}}re(xf,"toolName",void 0),xf.toolName="WindowLevel";const Of=xf;class Pf extends fi{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.1,maxZoomScale:30,pinchToZoom:!0,pan:!0,invert:!1}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"initialMousePosWorld",void 0),re(this,"dirVec",void 0),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=o.world,a=(0,ne.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=i;let s=aa.vec3.fromValues(r[0]-i[0],r[1]-i[1],r[2]-i[2]);return s=aa.vec3.normalize(aa.vec3.create(),s),this.dirVec=s,!1})),re(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),re(this,"_dragParallelProjection",(function(t,n,o){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=i?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:c,focalPoint:d,position:h}=o,u=s*(5/l[1])*(e.configuration.invert?-1:1),g=(1-u)*c;let v=d,m=h;if(!e.configuration.zoomToCenter){const t=aa.vec3.distance(d,e.initialMousePosWorld);m=aa.vec3.scaleAndAdd(aa.vec3.create(),h,e.dirVec,-t*u),v=aa.vec3.scaleAndAdd(aa.vec3.create(),d,e.dirVec,-t*u)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:I,maxZoomScale:w}=e.configuration,E=a.clientHeight*f[1]*.5,C=E/g;let _=g,b=!1;p&&(C<I?(_=E/I,b=!0):C>=w&&(_=E/w,b=!0)),n.setCamera({parallelScale:_,focalPoint:b?d:v,position:b?h:m})})),re(this,"_dragPerspectiveProjection",(function(t,n,o){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=i?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:c,focalPoint:d,viewPlaneNormal:h}=o,u=yh().distance2BetweenPoints(c,d),g=Math.sqrt(u)/l[1],v=[-h[0],-h[1],-h[2]],m=e.configuration.invert?s/g:s*g;let p=m*v[0];c[0]+=p,d[0]+=p,p=m*v[1],c[1]+=p,d[1]+=p,p=m*v[2],c[2]+=p,d[2]+=p,n.setCamera({position:c,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)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:t,currentPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i}=o,a=i.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=aa.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=aa.vec3.normalize(aa.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,i,a,!0):this._dragPerspectiveProjection(e,i,a,!0),i.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,ne.getEnabledElement)(t),{viewport:o}=n,i=o.getCamera();i.parallelProjection?this._dragParallelProjection(e,o,i):this._dragPerspectiveProjection(e,o,i),o.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),i=n.world,a=o.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-i[0],s[1]-i[1],s[2]-i[2]],c=[r[0]-i[0],r[1]-i[1],r[2]-i[2]];o.viewport.setCamera({focalPoint:c,position:l}),o.viewport.render()}}re(Pf,"toolName",void 0),Pf.toolName="Zoom";const Af=Pf;class Rf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}),re(this,"deltaY",void 0),this.deltaY=1}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{deltaPoints:t,viewportId:n,renderingEngineId:o}=e.detail,{viewport:i}=(0,ne.getEnabledElementByIds)(n,o),a=this.getTargetId(i),{debounceIfNotLoaded:r,invert:s,loop:l}=this.configuration,c=t.canvas[1];let d;i instanceof ne.VolumeViewport&&(d=a.split(/volumeId:|\?/)[1]);const h=this._getPixelPerImage(i),u=c+this.deltaY;if(h)if(Math.abs(u)>=h){const e=Math.round(u/h);Tr(i,{delta:s?-e:e,volumeId:d,debounceLoading:r,loop:l}),this.deltaY=u%h}else this.deltaY=u}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}re(Rf,"toolName",void 0),Rf.toolName="StackScroll";const Nf=Rf;function Lf(e,t){return 3===e[0].length?function(e,t){const[n,o]=e,[i,a]=t,r=aa.vec3.sub(aa.vec3.create(),o,n),s=aa.vec3.sub(aa.vec3.create(),i,a),l=aa.vec3.dot(r,s)/(aa.vec3.length(r)*aa.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,o]=e,[i,a]=t,r=aa.vec2.sub(aa.vec2.create(),o,n),s=aa.vec2.sub(aa.vec2.create(),i,a),l=aa.vec2.dot(r,s)/(aa.vec2.length(r)*aa.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class kf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:o}=e.detail,i=n.world,a=o.world,r=(0,ne.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),c=[.5*t.clientWidth,.5*t.clientHeight],d=s.canvasToWorld(c);let h=Lf([a,d],[d,i]);const{viewPlaneNormal:u,viewUp:g}=l,v=aa.vec3.sub(aa.vec3.create(),d,a),m=aa.vec3.sub(aa.vec3.create(),d,i),p=aa.vec3.cross(aa.vec3.create(),v,m);if(aa.vec3.dot(u,p)>0&&(h=-h),!Number.isNaN(h)){if(s instanceof ne.BaseVolumeViewport){const e=h*Math.PI/180,t=aa.mat4.identity(new Float32Array(16));aa.mat4.rotate(t,t,e,u);const n=aa.vec3.transformMat4(aa.vec3.create(),g,t);s.setCamera({viewUp:n})}else{const{rotation:e}=s.getProperties();s.setProperties({rotation:e+h})}s.render()}}}re(kf,"toolName",void 0),kf.toolName="PlanarRotate";const Uf=kf;class Vf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1,scrollSlabs:!1}}),re(this,"_configuration",void 0)}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:o}=t,{invert:i}=this.configuration,{viewport:a}=(0,ne.getEnabledElement)(n),r=o*(i?-1:1),s=this.getTargetId(a),l=ne.utilities.getVolumeId(s);Tr(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:l,scrollSlabs:this.configuration.scrollSlabs})}}re(Vf,"toolName",void 0),Vf.toolName="StackScrollMouseWheel";const Wf=Vf,Hf={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class Bf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:Hf.Z,rotateIncrementDegrees:30}}),re(this,"_configuration",void 0)}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i}=o,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=i.getCamera(),{viewUp:l,position:c,focalPoint:d}=s,{direction:h}=n,[u,g,v]=d,[m,p,f]=a,I=h*(r*Math.PI)/180,w=[0,0,0],E=[0,0,0],C=[0,0,0],_=aa.mat4.identity(new Float32Array(16));aa.mat4.translate(_,_,[u,g,v]),aa.mat4.rotate(_,_,I,[m,p,f]),aa.mat4.translate(_,_,[-u,-g,-v]),aa.vec3.transformMat4(w,c,_),aa.vec3.transformMat4(E,d,_),aa.mat4.identity(_),aa.mat4.rotate(_,_,I,[m,p,f]),aa.vec3.transformMat4(C,l,_),i.setCamera({position:w,viewUp:C,focalPoint:E}),i.render()}}re(Bf,"toolName",void 0),Bf.toolName="VolumeRotateMouseWheel";const Ff=Bf;class Gf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}}),re(this,"_bounds",void 0)}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i,renderingEngine:a}=o,r=this.getTargetId(i);if(!r.startsWith("volumeId"))throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");const s=ne.utilities.getVolumeId(r);let l=-1/0;const c=Mh(i,n.world,s,((e,t)=>{if(e>l)return l=e,t}));if(!c||!c.length)return;const{targetViewportIds:d,toolGroupId:h}=this.configuration;a.getViewports().filter((e=>{if((null==d?void 0:d.indexOf(e.id))>=0)return!0;const t=Qo(e.id,a.id);return!(!h||h!==(null==t?void 0:t.id))})).forEach((e=>{e instanceof ne.VolumeViewport?Tu(e,c):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}re(Gf,"toolName",void 0),Gf.toolName="MIPJumpToClickTool";const qf=Gf,{transformWorldToIndex:jf}=ne.utilities;class zf extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Kf}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:c,position:d}=r.getCamera(),h=this.getReferencedImageId(r,i,l,c),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[i]}),toolName:this.getToolName(),referencedImageId:h,viewUp:c,cameraPosition:d},data:{handles:{points:[[...i],[...i]],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:{}}};gt(u,o);const g=Qs(o,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,g),u})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l]=r.handles.points,c=a.worldToCanvas(s),d=a.worldToCanvas(l),h={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}};return cd([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles;d.annotationUID=r;const{color:v,lineWidth:m,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=u.map((e=>a.worldToCanvas(e)));let w;if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(o,c,e)),!Ne(r))continue;ge(o)||this.editData||null===g||(w=[I[g]]),w&&Fc(t,r,"0",I,{color:v,lineDash:p,lineWidth:m});const E="".concat(r,"-line");if(rd(t,r,"1",I[0],I[1],{color:v,width:m,lineDash:p,shadow:f},E),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;const C=this.getLinkedTextBoxStyle(d,o);if(!C.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}const _=this.configuration.getTextLines(h,l);if(!h.handles.textBox.hasMoved){const e=hd(I);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),D=ld(t,r,"1",_,b,I,{},C),{x:T,y:S,width:y,height:M}=D;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([T,S]),topRight:a.canvasToWorld([T+y,S]),bottomLeft:a.canvasToWorld([T,S+M]),bottomRight:a.canvasToWorld([T+y,S+M])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],o=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+o*o+i*i)}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport,a=o.handles.points[0],r=o.handles.points[1],{cachedStats:s}=o,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],o=this.getTargetIdImage(n,t);if(!o)continue;const{imageData:i,dimensions:c}=o,d=jf(i,a),h=jf(i,r),u=[d,h],{scale:g,units:v}=vr(o,u),m=this._calculateLength(a,r)/g;this._isInsideVolume(d,h,c)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,s[n]={length:m,unit:v}}return e.invalidated=!1,Qe(e,i),s}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function Kf(e,t){const n=e.cachedStats[t],{length:o,unit:i}=n;if(null!=o&&!isNaN(o))return["".concat(zu(o)," ").concat(i)]}re(zf,"toolName",void 0),zf.toolName="Length";const Yf=zf;var Xf=C(847),Jf=C.n(Xf);const{RENDERING_DEFAULTS:Zf}=ne.CONSTANTS;function $f(){return"rgb(0, 200, 0)"}function Qf(){return!0}function eI(){return!0}function tI(){return!0}class nI extends nd{constructor(){var e,t,n,o;let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(i,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!0,autoPan:{enabled:!1,panSize:10},referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:ne.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),re(this,"toolCenter",[0,0,0]),re(this,"_getReferenceLineColor",void 0),re(this,"_getReferenceLineControllable",void 0),re(this,"_getReferenceLineDraggableRotatable",void 0),re(this,"_getReferenceLineSlabThicknessControlsOn",void 0),re(this,"editData",void 0),re(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:i,viewport:a}=o,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:c}=a.getCamera();let d=this._getAnnotations(o);return d=this.filterInteractableAnnotationsForElement(r,d),d.length&&mt(d[0].annotationUID),gt({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:i,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:c,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),re(this,"_getViewportsInfo",(()=>ei(this.toolGroupId).viewportsInfo)),re(this,"resetCrosshairs",(()=>{const e=this._getViewportsInfo();e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getEnabledElementByIds)(t,n),{viewport:i}=o,{element:a}=i;let r=this._getAnnotations(o);r=this.filterInteractableAnnotationsForElement(a,r),r.length&&mt(r[0].annotationUID)})),this.computeToolCenter(e)})),re(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)return void console.warn("For crosshairs to operate, at least two viewports must be given.");const[t,n,o]=e,{normal:i,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],c=aa.vec3.create();o?({normal:l,point:c}=this.initializeViewport(o)):(aa.vec3.add(c,a,s),aa.vec3.scale(c,c,.5),aa.vec3.cross(l,i,r));const d=ne.utilities.planar.planeEquation(i,a),h=ne.utilities.planar.planeEquation(r,s),u=ne.utilities.planar.planeEquation(l,c);this.toolCenter=ne.utilities.planar.threePlaneIntersection(d,h,u);const{renderingEngine:g}=(0,ne.getEnabledElementByIds)(e[0].viewportId,e[0].renderingEngineId);Ua(g,e.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.world,a=(0,ne.getEnabledElement)(n),{viewport:r}=a;this._jump(a,i);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:c}=l[0],{rotationPoints:d}=c.handles,h=[];for(let e=0;e<d.length-1;++e){const t=d[e][1],n=this._getReferenceLineControllable(t.id),o=this._getReferenceLineDraggableRotatable(t.id);n&&o&&(h.push(t.id),e++)}return c.activeViewportIds=[...h],c.handles.activeOperation=1,e.preventDefault(),Dc(n),this._activateModify(n),l[0]})),re(this,"cancel",(()=>{console.log("Not implemented yet")})),re(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0,this._activateModify(o),Dc(o),e.preventDefault()})),re(this,"isPointNearTool",((e,t,n,o)=>!!this._pointNearTool(e,t,n,6))),re(this,"toolSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o;t.highlighted=!0,this._activateModify(i),Dc(i),e.preventDefault()})),re(this,"onCameraModified",(e=>{var t;const n=e.detail,{element:o}=n,i=(0,ne.getEnabledElement)(o),{renderingEngine:a}=i,r=i.viewport,s=this._getAnnotations(i),l=this.filterInteractableAnnotationsForElement(o,s)[0];if(!l)return;const c=r.getCamera(),d=l.metadata.cameraPosition,h=[0,0,0];yh().subtract(c.position,d,h);const u=l.metadata.cameraFocalPoint,g=[0,0,0];yh().subtract(c.focalPoint,u,g),l.metadata.cameraPosition=[...c.position],l.metadata.cameraFocalPoint=[...c.focalPoint];const v=this._getReferenceLineControllable(r.id),m=this._getReferenceLineDraggableRotatable(r.id);if(!ne.utilities.isEqual(c.position,d,.001)&&v&&m){let e=!1;ne.utilities.isEqual(h,g,.001)||(e=!0);const t=Math.abs(yh().dot(h,c.viewPlaneNormal))<.01;e||t||(this.toolCenter[0]+=h[0],this.toolCenter[1]+=h[1],this.toolCenter[2]+=h[2])}null!==(t=this.configuration.autoPan)&&void 0!==t&&t.enabled&&Qo(r.id,a.id).getViewportIds().filter((e=>e!==r.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,a)}));const p=Qs(o,this.getToolName(),!1);Ua(a,p)})),re(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:o}=e.detail,i=o.canvas;let a=!1;for(let e=0;e<t.length;e++){const o=t[e];if(ge(o))continue;const{data:r,highlighted:s}=o;if(!r.handles)continue;const l=r.handles.activeOperation,c=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let d=!1;d=!!this.getHandleNearImagePoint(n,o,i,6)||this._pointNearTool(n,o,i,6),d&&!s||!d&&s?(o.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,c)||(a=!0)}return a})),re(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;return t.filter((e=>e.data.viewportId===o))})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o,renderingEngine:i}=e,{element:a}=o,r=this._getAnnotations(e),s=o.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(null==r||!r.length||null==l||!l.data)return n;const c=l.annotationUID,{clientWidth:d,clientHeight:h}=o.canvas,u=Math.sqrt(d*d+h*h),g=Math.min(d,h),v=l.data,m=o.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],I=[0,0,d,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=i.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),c=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:d,clientHeight:h}=n.canvas,v=Math.sqrt(d*d+h*h),w=[.5*d,.5*h],E=n.canvasToWorld(w),C=[0,0,0];yh().cross(s.viewPlaneNormal,a.viewPlaneNormal,C),yh().normalize(C),yh().multiplyScalar(C,v);const _=[0,0,0];yh().add(E,C,_);const b=[0,0,0];yh().subtract(E,C,b);const D=o.worldToCanvas(_),T=o.worldToCanvas(E),S=aa.vec2.create();aa.vec2.subtract(S,D,T),aa.vec2.normalize(S,S);const y=aa.vec2.create();aa.vec2.scale(y,S,100*u);const M=aa.vec2.create();aa.vec2.scale(M,S,.4*g);const x=aa.vec2.create();aa.vec2.scale(x,S,.2*g);const O=aa.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;aa.vec2.scale(O,S,2===p.length?P:0);const A=aa.vec2.create(),R=aa.vec2.create(),N=aa.vec2.create(),L=aa.vec2.create();let k=aa.vec2.clone(m);l&&r||(k=aa.vec2.clone(T)),aa.vec2.add(A,k,O),aa.vec2.add(R,k,y),aa.vec2.subtract(N,k,O),aa.vec2.subtract(L,k,y),Th(A,R,I),Th(N,L,I);const U=aa.vec2.create();aa.vec2.subtract(U,m,M);const V=aa.vec2.create();aa.vec2.add(V,m,M);let W=aa.vec2.clone(m);!l&&c&&(W=aa.vec2.clone(T));let H=[...this.toolCenter];!l&&c&&(H=[...E]);const B=[0,0,0];yh().subtract(_,b,B),yh().normalize(B);const{viewPlaneNormal:F}=s,{matrix:G}=Jf().buildFromDegree().rotate(90,F),q=[0,0,0];aa.vec3.transformMat4(q,B,G);const j=n.getSlabThickness(),z=[...q];yh().multiplyScalar(z,j);const K=[0,0,0];yh().add(H,z,K);const Y=o.worldToCanvas(K),X=aa.vec2.create();aa.vec2.subtract(X,W,Y);const J=aa.vec2.create();aa.vec2.subtract(J,W,y),aa.vec2.add(J,J,X);const Z=aa.vec2.create();aa.vec2.add(Z,W,y),aa.vec2.add(Z,Z,X),Th(J,Z,I);const $=aa.vec2.create();aa.vec2.add($,W,y),aa.vec2.subtract($,$,X);const Q=aa.vec2.create();aa.vec2.subtract(Q,W,y),aa.vec2.subtract(Q,Q,X),Th($,Q,I);const ee=aa.vec2.create(),te=aa.vec2.create(),ne=aa.vec2.create(),oe=aa.vec2.create();aa.vec2.subtract(ee,W,x),aa.vec2.add(ee,ee,X),aa.vec2.add(te,W,x),aa.vec2.add(te,te,X),aa.vec2.subtract(ne,W,x),aa.vec2.subtract(ne,ne,X),aa.vec2.add(oe,W,x),aa.vec2.subtract(oe,oe,X),f.push([n,A,R,N,L,J,Z,$,Q,U,V,ee,te,ne,oe])}));const w=[],E=[],C=this._getReferenceLineColor(o.id),_=void 0!==C?C:"rgb(200, 200, 200)";return f.forEach(((e,n)=>{var i,a;const r=e[0],s=this._getReferenceLineColor(r.id),l=this._getReferenceLineControllable(r.id),d=this._getReferenceLineDraggableRotatable(r.id)||(null===(i=this.configuration.mobile)||void 0===i?void 0:i.enabled),h=this._getReferenceLineSlabThicknessControlsOn(r.id)||(null===(a=this.configuration.mobile)||void 0===a?void 0:a.enabled),u=v.activeViewportIds.find((e=>e===r.id));let g=void 0!==s?s:"rgb(200, 200, 200)",m=1;const p=null!==v.handles.activeOperation&&1===v.handles.activeOperation&&u;p&&(m=2.5);let f="".concat(n);if(l&&d?(f="".concat(n,"One"),rd(t,c,f,e[1],e[2],{color:g,lineWidth:m}),f="".concat(n,"Two"),rd(t,c,f,e[3],e[4],{color:g,lineWidth:m})):rd(t,c,f,e[2],e[4],{color:g,lineWidth:m}),l){var I;g=void 0!==s?s:"rgb(200, 200, 200)";const i=2===v.handles.activeOperation,a=[e[9],e[10]],l=[o.canvasToWorld(e[9]),r,e[1],e[2]],m=[o.canvasToWorld(e[10]),r,e[3],e[4]];w.push(l,m);const U=3===v.handles.activeOperation,V=[e[11],e[12],e[13],e[14]],W=[o.canvasToWorld(e[11]),r,e[5],e[6]],H=[o.canvasToWorld(e[12]),r,e[5],e[6]],B=[o.canvasToWorld(e[13]),r,e[7],e[8]],F=[o.canvasToWorld(e[14]),r,e[7],e[8]];if(E.push(W,H,B,F),(p||null!==(I=this.configuration.mobile)&&void 0!==I&&I.enabled)&&!i&&!U&&d&&h){var C,_,b,D,T,S,y,M;let e="".concat(n,"One");Fc(t,c,e,a,{color:g,handleRadius:null!==(C=this.configuration.mobile)&&void 0!==C&&C.enabled?null===(_=this.configuration.mobile)||void 0===_?void 0:_.handleRadius:3,opacity:null!==(b=this.configuration.mobile)&&void 0!==b&&b.enabled?null===(D=this.configuration.mobile)||void 0===D?void 0:D.opacity:1,type:"circle"}),e="".concat(n,"Two"),Fc(t,c,e,V,{color:g,handleRadius:null!==(T=this.configuration.mobile)&&void 0!==T&&T.enabled?null===(S=this.configuration.mobile)||void 0===S?void 0:S.handleRadius:3,opacity:null!==(y=this.configuration.mobile)&&void 0!==y&&y.enabled?null===(M=this.configuration.mobile)||void 0===M?void 0:M.opacity:1,type:"rect"})}else if(p&&!i&&!U&&d){var x,O,P,A;const e="".concat(n);Fc(t,c,e,a,{color:g,handleRadius:null!==(x=this.configuration.mobile)&&void 0!==x&&x.enabled?null===(O=this.configuration.mobile)||void 0===O?void 0:O.handleRadius:3,opacity:null!==(P=this.configuration.mobile)&&void 0!==P&&P.enabled?null===(A=this.configuration.mobile)||void 0===A?void 0:A.opacity:1,type:"circle"})}else if(u&&!i&&!U&&h){var R,N,L,k;const e="".concat(n);Fc(t,c,e,V,{color:g,handleRadius:null!==(R=this.configuration.mobile)&&void 0!==R&&R.enabled?null===(N=this.configuration.mobile)||void 0===N?void 0:N.handleRadius:3,opacity:null!==(L=this.configuration.mobile)&&void 0!==L&&L.enabled?null===(k=this.configuration.mobile)||void 0===k?void 0:k.opacity:1,type:"rect"})}else if(i&&d){const e="".concat(n);Fc(t,c,e,a,{color:g,handleRadius:2,fill:g,type:"circle"})}else U&&u&&h&&Fc(t,c,f,V,{color:g,handleRadius:2,fill:g,type:"rect"});r.getSlabThickness()>.5&&h&&(f="".concat(n,"STOne"),rd(t,c,f,e[5],e[6],{color:g,width:1,lineDash:[2,3]}),f="".concat(n,"STTwo"),rd(t,c,f,e[7],e[8],{color:g,width:e,lineDash:[2,3]}))}})),n=!0,v.handles.rotationPoints=w,v.handles.slabThicknessPoints=E,this.configuration.viewportIndicators&&vc(t,c,"0",[.95*d,.05*h],.01*u,{color:_,fill:_}),n})),re(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=st(this.getToolName(),t.element)||[],o=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return o.includes(t.viewportId)}))})),re(this,"_onNewVolume",(e=>{const t=this._getViewportsInfo();this.computeToolCenter(t)})),re(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let o=0;o<t.length;++o)if(e===t[o]){n=!0;break}if(!1===n)return!1})),!0))),re(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:o,viewport:i}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=i.getCamera(),{viewPlaneNormal:s,position:l}=r,c=a.filter((e=>{const{viewportId:t}=e.data,n=o.getViewport(t).getCamera();return!(ne.utilities.isEqual(n.viewPlaneNormal,s,.01)&&ne.utilities.isEqual(n.position,l,1))}));return c})),re(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:o}=e,{data:i}=t,a=o.getViewport(i.viewportId),r=n.filter((e=>{const{data:t}=e,n=o.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return yh().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=o.getViewport(t).getCamera(),i=n.viewPlaneNormal;return yh().normalize(i),ne.utilities.isEqual(l,i,.01)&&ne.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),re(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:o}=e,i=o.getCamera().viewPlaneNormal;yh().normalize(i);const a=t.filter((e=>{const{data:t}=e,i=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(i.id);return o!==i&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:o}=t.data,s=n.getViewport(o).getCamera(),l=s.viewPlaneNormal;if(yh().normalize(l),ne.utilities.isEqual(i,l,.01)||ne.utilities.isOpposite(i,l,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,s.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,s.position,1)&&(c=!0)}c||r.push(t)}const s=t.filter((e=>{const{data:t}=e,i=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(i.id);return o!==i&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:o}=t.data,a=n.getViewport(o).getCamera(),l=a.viewPlaneNormal;if(yh().normalize(l),ne.utilities.isEqual(i,l,.01)||ne.utilities.isOpposite(i,l,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,a.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,a.position,1)&&(c=!0)}c||r.push(t)}const l=this._getAnnotationsForViewportsWithDifferentCameras(e,t);for(let e=0;e<l.length;++e){const t=l[e];if(r.some((e=>e===t)))continue;const{viewportId:o}=t.data,a=n.getViewport(o).getCamera(),s=a.viewPlaneNormal;if(yh().normalize(s),ne.utilities.isEqual(i,s,.01)||ne.utilities.isOpposite(i,s,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,a.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,a.position,1)&&(c=!0)}c||r.push(t)}return r})),re(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),o=t.getActors();let i=!0;return n.forEach((e=>{n.length===o.length&&void 0!==o.find((t=>{let{uid:n}=t;return n===e.uid}))||(i=!1)})),i})),re(this,"_jump",((e,t)=>{Ye.isInteractingWithTool=!0;const{viewport:n,renderingEngine:o}=e,i=this._getAnnotations(e),a=[0,0,0];yh().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,i).filter((e=>{const{data:t}=e,i=o.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,i);return this._getReferenceLineControllable(i.id)&&this._getReferenceLineDraggableRotatable(i.id)&&a}));return 0===r.length?(Ye.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(o,r,a),Ye.isInteractingWithTool=!1,!0)})),re(this,"_activateModify",(e=>{var t;Ye.isInteractingWithTool=!(null!==(t=this.configuration.mobile)&&void 0!==t&&t.enabled),e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(n),bc(n),this.editData=null;const o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,a=Qs(n,this.getToolName(),!1);Ua(i,a)})),re(this,"_dragCallback",(e=>{const t=e.detail,n=t.deltaPoints.world;if(Math.abs(n[0])<.001&&Math.abs(n[1])<.001&&Math.abs(n[2])<.001)return;const{element:o}=t,i=(0,ne.getEnabledElement)(o),{renderingEngine:a,viewport:r}=i,s=this._getAnnotations(i),l=this.filterInteractableAnnotationsForElement(o,s)[0];if(!l)return;const{handles:c}=l.data,{currentPoints:d}=e.detail,h=d.canvas;if(1===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineDraggableRotatable(n.id);return!0===o&&!0===i&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineDraggableRotatable(n.id);return!0===o&&!0===i})),n=aa.vec2.create(),o=aa.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],c=r.worldToCanvas(l),d=t.currentPoints.canvas,h=aa.vec2.create();aa.vec2.sub(h,d,t.deltaPoints.canvas),aa.vec2.sub(n,h,c),aa.vec2.sub(o,d,c);let u=aa.vec2.angle(n,o);this._isClockWise(c,h,d)&&(u*=-1),u=Math.round(100*u)/100;const g=r.getCamera().viewPlaneNormal,{matrix:v}=Jf().buildFromRadian().translate(l[0],l[1],l[2]).rotate(u,g).translate(-l[0],-l[1],-l[2]),m=[];e.forEach((e=>{const{data:t}=e;t.handles.toolCenter=l;const n=a.getViewport(t.viewportId),o=n.getCamera(),{viewUp:i,position:r,focalPoint:s}=o;i[0]+=r[0],i[1]+=r[1],i[2]+=r[2],aa.vec3.transformMat4(s,s,v),aa.vec3.transformMat4(r,r,v),aa.vec3.transformMat4(i,i,v),i[0]-=r[0],i[1]-=r[1],i[2]-=r[2],n.setCamera({position:r,viewUp:i,focalPoint:s}),m.push(n.id)})),a.renderViewports(m)}else if(3===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===o&&!0===i&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const o=this._filterViewportWithSameOrientation(i,e[0],s),c=[];c.push(r.id),o.forEach((e=>{const{data:o}=e,i=a.getViewport(o.viewportId),s=i.getCamera().viewPlaneNormal,d=yh().dot(n,s),u=[...s];if(yh().multiplyScalar(u,d),Math.abs(u[0])>.001||Math.abs(u[1])>.001||Math.abs(u[2])>.001){const e=Math.sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]),n=t.lastPoints.world,o=[0,0,0],d=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(i.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===i.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);yh().add(e,n,d),yh().multiplyScalar(d,.5)}}yh().subtract(n,d,o);const g=yh().dot(o,s),v=[...s];yh().multiplyScalar(v,g);const m=[v[0],v[1],v[2]];aa.vec3.normalize(m,m);const p=[u[0],u[1],u[2]];aa.vec3.normalize(p,p);let f=i.getSlabThickness();ne.utilities.isOpposite(m,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(Zf.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,i)&&(f=Zf.MINIMUM_SLAB_THICKNESS),Qo(i.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(i,f),c.push(i.id)}})),a.renderViewports(c)}})),re(this,"_pointNearReferenceLine",((e,t,n,o)=>{const{data:i}=e,{rotationPoints:a}=i.handles;for(let e=0;e<a.length-1;++e){const i=a[e][1];if(i.id!==o.id)continue;if(!this._getReferenceLineControllable(i.id))continue;const r={start:{x:a[e][2][0],y:a[e][2][1]},end:{x:a[e][3][0],y:a[e][3][1]}},s=cd([r.start.x,r.start.y],[r.end.x,r.end.y],[t[0],t[1]]),l={start:{x:a[e+1][2][0],y:a[e+1][2][1]},end:{x:a[e+1][3][0],y:a[e+1][3][1]}},c=cd([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||c<=n)return!0;e++}return!1})),this._getReferenceLineColor=(null===(e=i.configuration)||void 0===e?void 0:e.getReferenceLineColor)||$f,this._getReferenceLineControllable=(null===(t=i.configuration)||void 0===t?void 0:t.getReferenceLineControllable)||Qf,this._getReferenceLineDraggableRotatable=(null===(n=i.configuration)||void 0===n?void 0:n.getReferenceLineDraggableRotatable)||eI,this._getReferenceLineSlabThicknessControlsOn=(null===(o=i.configuration)||void 0===o?void 0:o.getReferenceLineSlabThicknessControlsOn)||tI}onSetToolActive(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this.computeToolCenter(e)}onSetToolPassive(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolEnabled(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolDisabled(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t);if(!o)return;const i=this._getAnnotations(o);null!=i&&i.length&&i.forEach((e=>{mt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i;let r=this._getRotationHandleNearImagePoint(a,t,n,o);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,o),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:o}=(0,ne.getEnabledElementByIds)(t,n),{element:i}=o;i.removeEventListener(ne.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:o}=(0,ne.getEnabledElementByIds)(t,n),{element:i}=o;i.addEventListener(ne.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:o,clientHeight:i}=n.canvas,a=n.worldToCanvas(this.toolCenter),r=this.configuration.autoPan.panSize,s=[a[0],a[1]];if(a[0]<0?s[0]=r:a[0]>o&&(s[0]=o-r),a[1]<0?s[1]=r:a[1]>i&&(s[1]=i-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),c=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],d=n.getCamera(),{focalPoint:h,position:u}=d,g=[u[0]-c[0],u[1]-c[1],u[2]-c[2]],v=[h[0]-c[0],h[1]-c[1],h[2]-c[2]];n.setCamera({focalPoint:v,position:g}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:o}=this.configuration;o&&o.length>0&&(n=o);let i=this.configuration.slabThicknessBlendMode;t===Zf.MINIMUM_SLAB_THICKNESS&&(i=ne.Enums.BlendModes.COMPOSITE),e.setBlendMode(i,n,!1),e.setSlabThickness(t,n)}_isClockWise(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach((t=>{this._applyDeltaShiftToViewportCamera(e,t,n)}))}_applyDeltaShiftToViewportCamera(e,t,n){const{data:o}=t,i=e.getViewport(o.viewportId),a=i.getCamera(),r=a.viewPlaneNormal,s=yh().dot(n,r),l=[...r];if(yh().multiplyScalar(l,s),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const e=[0,0,0],t=[0,0,0];yh().add(a.focalPoint,l,e),yh().add(a.position,l,t),i.setCamera({focalPoint:e,position:t}),i.render()}}_getRotationHandleNearImagePoint(e,t,n,o){const{data:i}=t,{rotationPoints:a}=i.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineDraggableRotatable(l.id))continue;const c=e.worldToCanvas(s);if(aa.vec2.distance(n,c)<o)return i.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,o){const{data:i}=t,{slabThicknessPoints:a}=i.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineSlabThicknessControlsOn(l.id))continue;const c=e.worldToCanvas(s);if(aa.vec2.distance(n,c)<o)return i.handles.activeOperation=3,i.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:c}=t,{rotationPoints:d}=c.handles,{slabThicknessPoints:h}=c.handles,u=[];for(let e=0;e<d.length-1;++e){const t=d[e][1],i=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!i||!a)continue;const r={start:{x:d[e][2][0],y:d[e][2][1]},end:{x:d[e][3][0],y:d[e][3][1]}},s=cd([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:d[e+1][2][0],y:d[e+1][2][1]},end:{x:d[e+1][3][0],y:d[e+1][3][1]}},h=cd([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=o||h<=o)&&(u.push(t.id),c.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(u.find((e=>e===t.id)))continue;const i=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!i||!a)continue;const r=h[e][2],s=h[e][3],d=aa.vec2.create();aa.vec2.add(d,r,s),aa.vec2.scale(d,d,.5);const g=aa.vec2.create();aa.vec2.subtract(g,r,d),aa.vec2.normalize(g,g);const v=aa.vec2.create();aa.vec2.scale(v,g,.05*l);const m=aa.vec2.create(),p=aa.vec2.create();aa.vec2.add(m,d,v),aa.vec2.subtract(p,d,v);const f={start:{x:m[0],y:m[1]},end:{x:r[0],y:r[1]}},I=cd([f.start.x,f.start.y],[f.end.x,f.end.y],[n[0],n[1]]),w={start:{x:p[0],y:p[1]},end:{x:s[0],y:s[1]}},E=cd([w.start.x,w.start.y],[w.end.x,w.end.y],[n[0],n[1]]);(I<=o||E<=o)&&(u.push(t.id),c.handles.activeOperation=null),e++}return c.activeViewportIds=[...u],this.editData={annotation:t},1===c.handles.activeOperation}}re(nI,"toolName",void 0),nI.toolName="Crosshairs";const oI=nI,{EPSILON:iI}=ne.CONSTANTS;class aI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",showFullDimension:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",{}),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"_init",(()=>{const e=(0,ne.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Js(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(null==n||!n.getImageData())return;const{element:o}=n,{viewUp:i,viewPlaneNormal:a}=n.getCamera(),r=ne.utilities.getViewportImageCornersInWorld(n);let s=this.editData.annotation;const l=n.getFrameOfReferenceUID();if(s)this.editData.annotation.data.handles.points=r;else{const e={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...a],viewUp:[...i],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};gt(e,o),s=e}this.editData={sourceViewportId:n.id,renderingEngine:e,annotation:s},Ua(e,t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onSetToolConfiguration",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this._init()})),re(this,"renderAnnotation",((e,t)=>{var n;const{viewport:o}=e,{annotation:i,sourceViewportId:a}=this.editData;let r=!1;const{viewport:s}=(0,ne.getEnabledElementByViewportId)(a)||{};if(!s)return r;if(s.id===o.id)return r;if(!i||null==i||null===(n=i.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return r;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},c=i.data.handles.points[0],d=i.data.handles.points[1],h=i.data.handles.points[2],u=i.data.handles.points[3],{focalPoint:g,viewPlaneNormal:v,viewUp:m}=o.getCamera(),{viewPlaneNormal:p}=s.getCamera();if(this.isParallel(v,p))return r;const f=ne.utilities.planar.planeEquation(v,g),I=[c,h,d,u],w=[c,d,h,u];let E=I,C=aa.vec3.subtract(aa.vec3.create(),I[0],I[1]);C=aa.vec3.normalize(aa.vec3.create(),C);let _=aa.vec3.subtract(aa.vec3.create(),I[2],I[0]);_=aa.vec3.normalize(aa.vec3.create(),_);const b=aa.vec3.cross(aa.vec3.create(),C,_);if(this.isParallel(b,v))return r;this.isPerpendicular(C,v)&&(E=w);const D=ne.utilities.planar.linePlaneIntersection(E[0],E[1],f),T=ne.utilities.planar.linePlaneIntersection(E[2],E[3],f),{annotationUID:S}=i;l.annotationUID=S;const y=this.getStyle("lineWidth",l,i),M=this.getStyle("lineDash",l,i),x=this.getStyle("color",l,i),O=this.getStyle("shadow",l,i);let P=[D,T].map((e=>o.worldToCanvas(e)));if(this.configuration.showFullDimension&&(P=this.handleFullDimension(o,D,v,m,T,P)),P.length<2)return r;const A="".concat(S,"-line");return rd(t,S,"1",P[0],P[1],{color:x,width:y,lineDash:M,shadow:O},A),r=!0,r})),re(this,"isPerpendicular",((e,t)=>{const n=aa.vec3.dot(e,t);return Math.abs(n)<iI}))}handleFullDimension(e,t,n,o,i,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),c=this.getReferencedImageId(e,t,n,o);if(c&&l)try{const{imageData:n,dimensions:o}=l,[r,s,d,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([o[0]-1,0,0]),n.indexToWorld([o[0]-1,o[1]-1,0]),n.indexToWorld([0,o[1]-1,0])].map((e=>ne.utilities.worldToImageCoords(c,e))),[u,g]=[t,i].map((e=>ne.utilities.worldToImageCoords(c,e)));a=[[r,s],[s,d],[h,d],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,u,g)})).filter((e=>e&&this.isInBound(e,o))).map((t=>{const n=ne.utilities.imageToWorldCoords(c,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,o){const[i,a]=e,[r,s]=t,[l,c]=n,[d,h]=o,u=s-a,g=i-r,v=r*a-i*s,m=h-c,p=l-d,f=d*c-l*h;if(!(Math.abs(u*p-m*g)<iI))return[(g*f-p*v)/(u*p-m*g),(m*v-u*f)/(u*p-m*g)]}isParallel(e,t){return Math.abs(aa.vec3.dot(e,t))>1-iI}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}re(aI,"toolName",void 0),aI.toolName="ReferenceLines";const rI=aI,{EPSILON:sI}=ne.CONSTANTS;class lI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onSetToolActive",(()=>{this._init()})),re(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(null==e||!e.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=ne.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,o=ei(this.toolGroupId).viewportsInfo;if(null==o||!o.length)return void console.warn("OverlayGridTool: No viewports found");const i=st(this.getToolName(),n);if(null==i||!i.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}Ua((0,ne.getRenderingEngine)(o[0].renderingEngineId),o.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:o,rowCosines:i,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=ne.metaData.get("imagePlaneModule",e),l=[...t],c=[...t],d=[...t],h=[...t];return aa.vec3.scaleAndAdd(c,t,a,o*s),aa.vec3.scaleAndAdd(d,t,i,n*r),aa.vec3.scaleAndAdd(h,d,a,o*s),{pointSet1:[l,d,c,h],pointSet2:[l,c,d,h]}})),re(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let o=!1;if(null==n||!n.length)return o;const{viewport:i,FrameOfReferenceUID:a}=e;if(i.getImageIds().length<2)return o;const r=st(this.getToolName(),a);if(null==r||!r.length)return o;const s=r[0],{annotationUID:l}=s,{focalPoint:c,viewPlaneNormal:d}=i.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},u=this.getImageIdNormal(n[0]);if(this.isParallel(d,u))return o;const g=ne.utilities.planar.planeEquation(d,c),v=s.data.pointSets,m=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:o}=v[e],a=m.get(i.id)||this.initializeViewportData(m,i.id);if(!a.pointSetsToUse[e]){let t=n,i=aa.vec3.subtract(aa.vec3.create(),n[0],n[1]);i=aa.vec3.normalize(aa.vec3.create(),i),this.isPerpendicular(i,d)&&(t=o),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=ne.utilities.planar.linePlaneIntersection(t[0],t[1],g),a.lineEndsWorld[e]=ne.utilities.planar.linePlaneIntersection(t[2],t[3],g)}const r=a.lineStartsWorld[e],c=a.lineEndsWorld[e];h.annotationUID=l;const u=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),I=this.getStyle("shadow",h,s),w=[r,c].map((e=>i.worldToCanvas(e))),E="".concat(l,"-line");rd(t,l,"".concat(e),w[0],w[1],{color:f,width:u,lineDash:p,shadow:I},E)}return o=!0,o})),re(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),re(this,"isPerpendicular",((e,t)=>{const n=aa.vec3.dot(e,t);return Math.abs(n)<sI}))}isParallel(e,t){return Math.abs(aa.vec3.dot(e,t))>1-sI}getImageIdNormal(e){const{imageOrientationPatient:t}=ne.metaData.get("imagePlaneModule",e),n=aa.vec3.fromValues(t[0],t[1],t[2]),o=aa.vec3.fromValues(t[3],t[4],t[5]);return aa.vec3.cross(aa.vec3.create(),n,o)}}re(lI,"toolName",void 0),lI.toolName="OverlayGrid";const cI=lI;class dI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),re(this,"_init",(()=>{var e;const t=ei(this.toolGroupId).viewportsInfo;if(null==t||!t.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const n=null===(e=(0,ne.getRenderingEngine)(t[0].renderingEngineId))||void 0===e?void 0:e.getViewport(t[0].viewportId);if(!n)return;const o=n.getFrameOfReferenceUID(),i=st(this.getToolName(),o);if(null==i||!i.length){const e=new Map;!function(e,t){t.forEach((t=>{var n;let{viewportId:o,renderingEngineId:i}=t;const a=null===(n=(0,ne.getRenderingEngine)(i))||void 0===n?void 0:n.getViewport(o);hI(e,a)}))}(e,t),gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{actorsWorldPointsMap:e}},o)}Ua((0,ne.getRenderingEngine)(t[0].renderingEngineId),t.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this._init()})),re(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:o}=e;let i=!1;const a=st(this.getToolName(),o);if(null==a||!a.length)return i;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;hI(l,n);const c=n.getActors(),d=uI(n);return c.forEach((e=>{if(null==e||!e.clippingFilter)return;const o=l.get(e.uid);if(!o)return;if(!o.get(d))return;let i=1;const{worldPointsSet:a,color:r}=o.get(d);for(let o=0;o<a.length;o++){const l=a[o].map((e=>n.worldToCanvas(e))),c={color:r,fillColor:r,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},d=e.uid+"#"+i;tv(t,s,d,l,c),i++}})),i=!0,i}))}}function hI(e,t){const n=t.getActors(),o=uI(t);n.forEach((t=>{if(null==t||!t.clippingFilter)return;let n=e.get(t.uid);if(n||(n=new Map,e.set(t.uid,n)),!n.get(o)){const e=Ou(t.clippingFilter.getOutputData());if(!e)return;const i=function(e){function t(e){let t=Math.floor(255*e).toString(16);return 1===t.length&&(t="0"+t),t}return"#"+t(e[0])+t(e[1])+t(e[2])}(t.actor.getProperty().getColor());n.set(o,{worldPointsSet:e,color:i})}}))}function uI(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return"".concat(e.id,"-").concat(xi(t),"-").concat(n)}re(dI,"toolName",void 0),dI.toolName="SegmentationIntersection";const gI=dI;function vI(e,t,n,o){const i=aa.vec3.create();aa.vec3.cross(i,t,e);const a=aa.vec3.fromValues(...n),r=aa.vec3.fromValues(...o),s=aa.vec3.create();aa.vec3.subtract(s,a,r);const l=aa.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const c=aa.vec3.dot(s,i)/(l*aa.vec3.length(i));return{worldWidth:Math.sqrt(1-c*c)*l,worldHeight:c*l}}const{transformWorldToIndex:mI}=ne.utilities;class pI extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,centerPointRadius:0,getTextLines:fI,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(n.canvas,(0,ne.getEnabledElement)(o)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},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:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,centerWorld:i,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=Kl(s.map((e=>a.worldToCanvas(e)))),[c,d]=l,h={left:Math.min(c[0],d[0])+o/2,top:Math.min(c[1],d[1])+o/2,width:Math.abs(c[0]-d[0])-o,height:Math.abs(c[1]-d[1])-o},u={left:Math.min(c[0],d[0])-o/2,top:Math.min(c[1],d[1])-o/2,width:Math.abs(c[0]-d[0])+o,height:Math.abs(c[1]-d[1])+o},g=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(u,n)||g)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s,l,c,d,h,u=!1;if(n.worldPosition)u=!0;else{const{points:e}=a.handles,{viewport:t}=(0,ne.getEnabledElement)(i),{worldToCanvas:o,canvasToWorld:u}=t;r=e.findIndex((e=>e===n));const g=e.map(o);h=g[r],c=Math.abs(g[2][0]-g[3][0]),d=Math.abs(g[0][1]-g[1][1]),s=[(g[2][0]+g[3][0])/2,(g[0][1]+g[1][1])/2],l=u(s)}const g=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:g,handleIndex:r,canvasWidth:c,canvasHeight:d,centerWorld:l,originalHandleCanvas:h,movingTextBox:u},this._activateModify(i),Dc(i);const v=(0,ne.getEnabledElement)(i),{renderingEngine:m}=v;Ua(m,g),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerWorld:h}=this.editData,u=s.worldToCanvas(h),{data:g}=c,v=Math.abs(i[0]-u[0]),m=Math.abs(i[1]-u[1]),p=[u[0],u[1]-m],f=[u[0],u[1]+m],I=[u[0]-v,u[1]],w=[u[0]+v,u[1]];g.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:o}=(0,ne.getEnabledElement)(n),{canvasToWorld:i,worldToCanvas:a}=o,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:c,centerWorld:d,originalHandleCanvas:h}=this.editData,u=o.worldToCanvas(d),{data:g}=r,{points:v}=g.handles,{currentPoints:m}=t,p=m.canvas;if(0===c||1===c){const e=Math.abs(p[1]-u[1]),t=[u[0],u[1]-e],n=[u[0],u[1]+e];v[0]=i(t),v[1]=i(n);const o=s/2+(p[0]-h[0]),a=[u[0]-o,u[1]],r=[u[0]+o,u[1]];v[2]=i(a),v[3]=i(r)}else{const e=Math.abs(p[0]-u[0]),t=[u[0]-e,u[1]],n=[u[0]+e,u[1]];v[2]=i(t),v[3]=i(n);const o=l/2+(p[1]-h[1]),a=[u[0],u[1]-o],r=[u[0],u[1]+o];v[0]=i(a),v[1]=i(r)}})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{handles:u}=h,{points:g,activeHandleIndex:v}=u;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e))),w=(Math.abs(a.getRotation()-(h.initialRotation||0)),Kl(I)),{centerPointRadius:E}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,a,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(o,a,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let C;if(!Ne(r))continue;ge(o)||this.editData||null===v||(C=[I[v]]),C&&Fc(t,r,"0",C,{color:m});const _="".concat(r,"-ellipse"),b="0";if(cf(t,r,b,I,{color:m,lineDash:f,lineWidth:p},_),E>0&&Math.min(Math.abs(w[0][0]-w[1][0])/2,Math.abs(w[0][1]-w[1][1])/2)>3*E){const e=this._getCanvasEllipseCenter(I);vc(t,r,"".concat(b,"-center"),e,E,{color:m,lineDash:f,lineWidth:p})}i=!0;const D=this.getLinkedTextBoxStyle(d,o);if(!D.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}const T=this.configuration.getTextLines(h,l);if(!T||0===T.length)continue;let S;h.handles.textBox.hasMoved||(S=hd(w),h.handles.textBox.worldPosition=a.canvasToWorld(S));const y=a.worldToCanvas(h.handles.textBox.worldPosition),M=ld(t,r,"1",T,y,I,{},D),{x,y:O,width:P,height:A}=M;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([x,O]),topRight:a.canvasToWorld([x+P,O]),bottomLeft:a.canvasToWorld([x,O+A]),bottomRight:a.canvasToWorld([x+P,O+A])}}return i})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const i=e.data,{element:a}=t,{points:r}=i.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:c}=t.getCamera(),[d,h]=Kl(s),u=t.canvasToWorld(d),g=t.canvasToWorld(h),{cachedStats:v}=i,m=Object.keys(v),p=u,f=g;for(let o=0;o<m.length;o++){const i=m[o],a=this.getTargetIdImage(i,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:d,hasPixelSpacing:h}=a,C=mI(s,p);C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]);const _=mI(s,f);if(_[0]=Math.floor(_[0]),_[1]=Math.floor(_[1]),_[2]=Math.floor(_[2]),this._isInsideVolume(C,_,r)){var I,w,E;this.isHandleOutsideImage=!1;const n=[[Math.min(C[0],_[0]),Math.max(C[0],_[0])],[Math.min(C[1],_[1]),Math.max(C[1],_[1])],[Math.min(C[2],_[2]),Math.max(C[2],_[2])]],o={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:h}=vI(l,c,p,f),m=0===r&&0===h,b=gr(a),D=Math.abs(Math.PI*(r/2)*(h/2))/b/b,T={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},S=gd(d.Modality,e.metadata.referencedImageId,T),y=yr(s,(e=>Yl(o,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),M=this.configuration.statsCalculator.getStatistics();v[i]={Modality:d.Modality,area:D,mean:null===(I=M.mean)||void 0===I?void 0:I.value,max:null===(w=M.max)||void 0===w?void 0:w.value,stdDev:null===(E=M.stdDev)||void 0===E?void 0:E.value,statsArray:M.array,pointsInShape:y,isEmptyArea:m,areaUnit:ur(null,a),modalityUnit:S}}else this.isHandleOutsideImage=!0,v[i]={Modality:d.Modality}}return e.invalidated=!1,Qe(e,a),v})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,o=e.height/2;if(n<=0||o<=0)return!1;const i=[e.left+n,e.top+o],a=[t[0]-i[0],t[1]-i[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(o*o)<=1}_getCanvasEllipseCenter(e){const[t,n,o,i]=e,a=[o[0],n[1]],r=[i[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function fI(e,t){const n=e.cachedStats[t],{area:o,mean:i,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:c}=n,d=[];if(o){const e=s?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(l);d.push(e)}return i&&d.push("Mean: ".concat(zu(i)," ").concat(c)),r&&d.push("Max: ".concat(zu(r)," ").concat(c)),a&&d.push("Std Dev: ".concat(zu(a)," ").concat(c)),d}re(pI,"toolName",void 0),pI.toolName="EllipticalROI";const II=pI;function wI(e){const[t,n]=e;return dh(t,n)}function EI(e){const[t,n]=e,o=dh(t,n);return[[t[0]-o,t[1]-o],[t[0]+o,t[1]+o]]}const{transformWorldToIndex:CI}=ne.utilities;class _I extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,centerPointRadius:0,getTextLines:bI,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},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:[[...i],[...i]],activeHandleIndex:null},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),c=wI(l),d=wI([l[0],n]);return Math.abs(d-c)<o/2})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d}=this.editData,{data:h}=c;h.handles.points=[h.handles.points[0],l(i)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{canvasToWorld:i,worldToCanvas:a}=o.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:c}=l.handles,d=c.map((e=>a(e))),{currentPoints:h}=t,u=h.canvas;if(0===s){const e=u[0]-d[0][0],t=u[1]-d[0][1],n=u,o=[d[1][0]+e,d[1][1]+t];c[0]=i(n),c[1]=i(o)}else c[1]=i(u)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{handles:u}=h,{points:g,activeHandleIndex:v}=u;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e))),w=I[0],E=wI(I),C=EI(I),{centerPointRadius:_}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,a,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(o,a,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let b;if(!Ne(r))continue;ge(o)||this.editData||null===v||(b=[I[v]]),b&&Fc(t,r,"0",b,{color:m});const D="".concat(r,"-circle"),T="0";vc(t,r,T,w,E,{color:m,lineDash:f,lineWidth:p},D),_>0&&E>3*_&&vc(t,r,"".concat(T,"-center"),w,_,{color:m,lineDash:f,lineWidth:p}),i=!0;const S=this.getLinkedTextBoxStyle(d,o);if(!S.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}const y=this.configuration.getTextLines(h,l);if(!y||0===y.length)continue;let M;h.handles.textBox.hasMoved||(M=hd(C),h.handles.textBox.worldPosition=a.canvasToWorld(M));const x=a.worldToCanvas(h.handles.textBox.worldPosition),O=ld(t,r,"1",y,x,I,{},S),{x:P,y:A,width:R,height:N}=O;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,A]),topRight:a.canvasToWorld([P+R,A]),bottomLeft:a.canvasToWorld([P,A+N]),bottomRight:a.canvasToWorld([P+R,A+N])}}return i})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const i=e.data,{element:a}=t,{points:r}=i.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:c}=t.getCamera(),[d,h]=EI(s),u=t.canvasToWorld(d),g=t.canvasToWorld(h),{cachedStats:v}=i,m=Object.keys(v),p=u,f=g;for(let o=0;o<m.length;o++){const i=m[o],a=this.getTargetIdImage(i,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:d,hasPixelSpacing:h}=a,C=CI(s,p);C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]);const _=CI(s,f);if(_[0]=Math.floor(_[0]),_[1]=Math.floor(_[1]),_[2]=Math.floor(_[2]),this._isInsideVolume(C,_,r)){var I,w,E;const n=[[Math.min(C[0],_[0]),Math.max(C[0],_[0])],[Math.min(C[1],_[1]),Math.max(C[1],_[1])],[Math.min(C[2],_[2]),Math.max(C[2],_[2])]],o={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:h}=vI(l,c,p,f),m=0===r&&0===h,b=gr(a),D=pr(a),T=Math.abs(Math.PI*(r/b/2)*(h/D/b/2)),S={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},y=gd(d.Modality,e.metadata.referencedImageId,S),M=yr(s,(e=>Yl(o,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),x=this.configuration.statsCalculator.getStatistics();v[i]={Modality:d.Modality,area:T,mean:null===(I=x.mean)||void 0===I?void 0:I.value,max:null===(w=x.max)||void 0===w?void 0:w.value,stdDev:null===(E=x.stdDev)||void 0===E?void 0:E.value,statsArray:x.array,pointsInShape:M,isEmptyArea:m,areaUnit:ur(null,a),radius:r/2/b,radiusUnit:dr(null,a),perimeter:2*Math.PI*(r/2)/b,modalityUnit:y}}else this.isHandleOutsideImage=!0,v[i]={Modality:d.Modality}}return e.invalidated=!1,Qe(e,a),v})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}}function bI(e,t){const n=e.cachedStats[t],{radius:o,radiusUnit:i,area:a,mean:r,stdDev:s,max:l,isEmptyArea:c,areaUnit:d,modalityUnit:h}=n,u=[];if(o){const e=c?"Radius: Oblique not supported":"Radius: ".concat(zu(o)," ").concat(i);u.push(e)}if(a){const e=c?"Area: Oblique not supported":"Area: ".concat(zu(a)," ").concat(d);u.push(e)}return r&&u.push("Mean: ".concat(zu(r)," ").concat(h)),l&&u.push("Max: ".concat(zu(l)," ").concat(h)),s&&u.push("Std Dev: ".concat(zu(s)," ").concat(h)),u}re(_I,"toolName",void 0),_I.toolName="CircleROI";const DI=_I;class TI{constructor(e){var t,n,o;re(this,"_controlPoints",[]),re(this,"_resolution",void 0),re(this,"_fixedResolution",void 0),re(this,"_closed",void 0),re(this,"_invalidated",!1),re(this,"_curveSegments",void 0),re(this,"_aabb",void 0),re(this,"_length",0),this._controlPoints=[],this._resolution=null!==(t=null==e?void 0:e.resolution)&&void 0!==t?t:20,this._fixedResolution=null!==(n=null==e?void 0:e.fixedResolution)&&void 0!==n&&n,this._closed=null!==(o=null==e?void 0:e.closed)&&void 0!==o&&o,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((e=>this.addControlPoint(e)))}addControlPointAtU(e){const t=this._getLineSegmentAt(e),{start:n,end:o}=t.points,i=Math.floor(e),a=this._curveSegments[i],r=e-Math.floor(i),s=[n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,s),this.invalidated=!0,{index:l,point:s}}deleteControlPointByIndex(e){const t=this._closed?3:1;return e>=0&&e<this._controlPoints.length&&this._controlPoints.length>t&&(this._controlPoints.splice(e,1),this.invalidated=!0,!0)}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,t){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...t],this.invalidated=!0}getControlPoints(){return this._controlPoints.map((e=>[e[0],e[1]]))}getClosestControlPoint(e){const t=this._controlPoints;let n=1/0,o=-1;for(let i=0,a=t.length;i<a;i++){const a=t[i],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,o=i)}return{index:o,point:-1===o?void 0:[...t[o]],distance:Math.sqrt(n)}}getClosestControlPointWithinDistance(e,t){const n=this.getClosestControlPoint(e);return n.distance<=t?n:void 0}getClosestPoint(e){this._update();const t=this._getCurveSegmmentsDistanceSquaredInfo(e);if(!t.length)return;let n;t.sort(((e,t)=>e.distanceSquared-t.distanceSquared));let o,i,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:c,curveSegment:d}=l,{lineSegments:h}=d;for(let t=0;t<h.length;t++){const s=h[t],{point:d,distanceSquared:u}=rs(s.points.start,s.points.end,e);u<r&&(i=s,a=c,o=l.curveSegment,n=d,r=u)}}return{point:n,uValue:a+(i.previousLineSegmentsLength+dh(i.points.start,n))/o.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,o=1/0,i=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=rs(i,r,e);l<o&&(n=s,o=l),i=r}return{point:n,distance:Math.sqrt(o)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),o=0===(null==n?void 0:n.index),i=this.getPreviewCurveSegments(e,o);return null!=i&&i.length?this._convertCurveSegmentsToPolyline(i):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),o=t*t;for(let t=0;t<n.length;t++){const{lineSegments:i}=n[t];for(let t=0;t<i.length;t++){const n=i[t];if(ss(n.points.start,n.points.end,e)<=o)return!0}}return!1}containsPoint(e){if(this._update(),this._controlPoints.length<3)return!1;const t=[...this._curveSegments],n=this._getClosingCurveSegmentWithStraightLineSegment();n&&t.push(n);let o=0;for(let n=0;n<t.length;n++){const i=t[n],{aabb:a}=i;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=i;for(let t=0;t<r.length;t++){const n=r[t],{aabb:i}=n;if(e[0]<=i.maxX&&e[1]>=i.minY&&e[1]<i.maxY){const{start:t,end:i}=n.points,a=t[0]===i[0],r=(e[1]-t[1])*(i[0]-t[0])/(i[1]-t[1])+t[0];o+=a||e[0]<=r?1:0}}}return o%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,o=1/0,i=-1/0,a=-1/0;for(let r=0,s=e.length;r<s;r++){const{aabb:s,length:l}=e[r];n=n<=s.minX?n:s.minX,o=o<=s.minY?o:s.minY,i=i>=s.maxX?i:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:o,maxX:i,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:o}=e;o.forEach(((e,o)=>{0===n&&0===o&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let o=0;o<n.length;o++){const i=n[o],a=lh(i.aabb,e);t.push({curveSegmentIndex:o,curveSegment:i,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(lh(this.aabb,e)>n)return[];const o=this._getCurveSegmmentsDistanceSquaredInfo(e),i=[];for(let e=0,t=o.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=o[e];a<=n&&i.push(t)}return i}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,o=this._curveSegments[t],{lineSegments:i}=o,a=o.length*n;for(let e=0;e<i.length;e++){const t=i[e],n=t.previousLineSegmentsLength+t.length;if(a>=t.previousLineSegmentsLength&&a<=n)return t}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,t=e[0],n=e[e.length-1],o={points:{start:[...t],end:[...n]},aabb:{minX:Math.min(t[0],n[0]),minY:Math.min(t[1],n[1]),maxX:Math.max(t[0],n[0]),maxY:Math.max(t[1],n[1])}};return{aabb:{minX:o.aabb.minX,minY:o.aabb.minY,maxX:o.aabb.maxX,maxY:o.aabb.maxY},lineSegments:[o]}}}class SI extends TI{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,o=Math.max(0,n-2),i=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=o;e<=i;e++){const n=this._getCurveSegment(e,a,r,t);s.push(n)}return s}getSplineCurves(){const e=this._getNumCurveSegments(),t=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let o=0;for(let i=0;i<e;i++){const e=this._getCurveSegment(i,n);e.previousCurveSegmentsLength=o,t[i]=e,o+=e.length}return t}_getNumCurveSegments(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.controlPoints;return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.closed)?e.length:Math.max(0,e.length-1)}_getPoint(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const i=this._getNumCurveSegments(n,o),a=Math.floor(e);let r=a%i;const s=e-a;if(r<0||r>=i){if(!this.closed)return;r=(i+r)%i}const{p0:l,p1:c,p2:d,p3:h}=this._getCurveSegmentPoints(r,n,o),u=s*s,g=u*s,v=aa.vec4.fromValues(1,s,u,g),m=aa.vec4.transformMat4(aa.vec4.create(),v,t);return[aa.vec4.dot(m,aa.vec4.fromValues(l[0],c[0],d[0],h[0])),aa.vec4.dot(m,aa.vec4.fromValues(l[1],c[1],d[1],h[1]))]}_getCurveSegmentPoints(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.controlPoints,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.closed;const o=this._getNumCurveSegments(t,n),i=e-1,a=n?(e+1)%o:e+1,r=a+1,s=t[e],l=t[a];let c,d;return c=i>=0?t[i]:n?t[t.length-1]:hh(l,s),d=r<t.length?t[r]:n?t[0]:hh(s,l),{p0:c,p1:s,p2:l,p3:d}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const i=this._getNumCurveSegments(n,o),a=this.resolution+1,r=1/a;let s=e+1;o||e!==i-1||(s-=1e-8);const l=[];let c,d,h=0;for(let i=0,u=e;i<=a;i++,u+=r){u=u>s?s:u;const e=this._getPoint(u,t,n,o);if(!i){c=e;continue}d=e;const a=d[0]-c[0],r=d[1]-c[1],g=Math.sqrt(a**2+r**2),v={minX:c[0]<=d[0]?c[0]:d[0],maxX:c[0]>=d[0]?c[0]:d[0],minY:c[1]<=d[1]?c[1]:d[1],maxY:c[1]>=d[1]?c[1]:d[1]};l.push({points:{start:c,end:d},aabb:v,length:g,previousLineSegmentsLength:h}),c=d,h+=g}return l}_getCurveSegment(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getTransformMatrix(),n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:i,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,o),l=this._getLineSegments(e,t,n,o);let c=0,d=1/0,h=1/0,u=-1/0,g=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;d=Math.min(d,t.minX),h=Math.min(h,t.minY),u=Math.max(u,t.maxX),g=Math.max(g,t.maxY),c+=n})),{controlPoints:{p0:i,p1:a,p2:r,p3:s},aabb:{minX:d,minY:h,maxX:u,maxY:g},length:c,previousCurveSegmentsLength:0,lineSegments:l}}}class yI extends SI{constructor(e){var t,n;super(e),re(this,"_scale",void 0),re(this,"_fixedScale",void 0),this._scale=null!==(t=null==e?void 0:e.scale)&&void 0!==t?t:.5,this._fixedScale=null!==(n=null==e?void 0:e.fixedScale)&&void 0!==n&&n}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,t=2*e;return[0,1,0,0,-e,0,e,0,t,e-3,3-t,-e,-e,2-e,e-2,e]}}class MI extends yI{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class xI extends yI{constructor(){super({scale:.5,fixedScale:!0})}}const OI=aa.mat4.multiplyScalar(aa.mat4.create(),aa.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class PI extends SI{getTransformMatrix(){return OI}}const AI={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var RI=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(RI||{}),NI=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(NI||{});class LI extends vv{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,calculateStats:!0,getTextLines:kI,contourHoleAdditionModifierKey:$u.Shift,decimate:{enabled:!1,epsilon:.1},spline:{configuration:{[RI.Cardinal]:{Class:yI,scale:.5},[RI.CatmullRom]:{Class:xI},[RI.Linear]:{Class:MI},[RI.BSpline]:{Class:PI,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:RI.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[NI.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:Zu.Primary,modifierKey:$u.Shift}]},[NI.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:Zu.Primary,modifierKey:$u.Ctrl}]}}}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"fireChangeOnUpdate",null),re(this,"isPointNearTool",((e,t,n,o)=>{const{instance:i}=t.data.spline;return i.isPointNearCurve(n,o)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1};const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;this._activateModify(o),Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,contourHoleProcessingEnabled:r}=this.editData,{data:s}=o;o.autoGenerated=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l,d=this.getTargetIdImage(this.getTargetId(l.viewport),l.renderingEngine),{imageData:h,dimensions:u}=d;this.isHandleOutsideImage=s.handles.points.map((e=>ne.utilities.transformWorldToIndex(h,e))).some((e=>!ne.utilities.indexWithinDimensions(e,u))),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const g=a?je.Completed:je.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=o.annotationUID,this.fireChangeOnUpdate.changeType=g):this.fireChangeOnUpdate={annotationUID:o.annotationUID,changeType:g,contourHoleProcessingEnabled:r},Ua(c,i),this.editData=null,this.isDrawing=!1})),re(this,"_keyDownCallback",(e=>{var t;const n=e.detail,{element:o}=n,i=null!==(t=n.key)&&void 0!==t?t:"",{lastControlPointDeletionKeys:a}=this.configuration.spline;if(!a.includes(i))return;const{annotation:r}=this.editData,{data:s}=r;if(3!==s.handles.points.length){{const e=s.handles.points.length-1;this._deleteControlPointByIndex(o,r,e)}e.preventDefault()}else this.cancel(o)})),re(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:o}=(0,ne.getEnabledElement)(n),i=Qs(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,Ua(o,i),e.preventDefault()})),re(this,"_mouseDownCallback",(e=>{const t=e.type===ie.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:o}=this.editData,{data:i}=n;if(i.contour.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:c}=s,d=(0,ne.getEnabledElement)(r),{renderingEngine:h}=d;let u=i.handles.points.length>=2&&t,g=!0;if(i.handles.points.length>=3){const{instance:e}=i.spline,t=e.getClosestControlPointWithinDistance(l,10);0===(null==t?void 0:t.index)&&(g=!1,u=!0)}g&&i.handles.points.push(c),i.contour.closed=i.contour.closed||u,n.invalidated=!0,Ua(h,o),i.contour.closed&&this._endCallback(e),e.preventDefault()})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;this.moveAnnotation(o,n)}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"triggerAnnotationCompleted",((e,t)=>{const n=ie.ANNOTATION_COMPLETED,o={annotation:e,changeType:je.Completed,contourHoleProcessingEnabled:t};(0,ne.triggerEvent)(ne.eventTarget,n,o)})),re(this,"triggerAnnotationModified",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated;const{viewportId:o,renderingEngineId:i}=t,a=ie.ANNOTATION_MODIFIED,r={annotation:e,viewportId:o,renderingEngineId:i,changeType:n};(0,ne.triggerEvent)(ne.eventTarget,a,r)})),re(this,"triggerChangeEvent",(function(t,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated,i=arguments.length>3?arguments[3]:void 0;o===je.Completed?e.triggerAnnotationCompleted(t,i):e.triggerAnnotationModified(t,n,o)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.KEY_DOWN,this._keyDownCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.KEY_DOWN,this._keyDownCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_renderStats",((e,t,n,o)=>{var i;const a=e.data,r=this.getTargetId(t);if(!a.spline.instance.closed||!o.visibility)return;const s=this.configuration.getTextLines(a,r);if(!s||0===s.length)return;const l=a.handles.points.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=hd(l);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const c=t.worldToCanvas(a.handles.textBox.worldPosition),d=ld(n,null!==(i=e.annotationUID)&&void 0!==i?i:"","textBox",s,c,l,{},o),{x:h,y:u,width:g,height:v}=d;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([h,u]),topRight:t.canvasToWorld([h+g,u]),bottomLeft:t.canvasToWorld([h,u+v]),bottomRight:t.canvasToWorld([h+g,u+v])}})),re(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,o=n.spline.type,i=this._getSplineConfig(o),a=i.controlPointAdditionDistance;if(!1===i.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,ne.getEnabledElement)(s),{renderingEngine:c,viewport:d}=l,{canvasToWorld:h}=d,{instance:u}=n.spline,g=e.detail.currentPoints.canvas,v=u.getClosestPoint(g);if(v.distance>a)return;const{index:m,point:p}=u.addControlPointAtU(v.uValue);n.handles.points.splice(m,0,h(p)),t.invalidated=!0;const f=Qs(s,this.getToolName());Ua(c,f)})),re(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,o=this._getSplineConfig(n),i=o.controlPointDeletionDistance;if(!1===o.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:c}=t.data.spline,d=c.getClosestControlPointWithinDistance(l,i);d&&this._deleteControlPointByIndex(r,t,d.index)})),re(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.contour.closed)return;const o=(0,ne.getEnabledElement)(t),{viewport:i,renderingEngine:a}=o,{cachedStats:r}=n,{polyline:s}=n.contour,l=Object.keys(r);for(let e=0;e<l.length;e++){const t=l[e],n=this.getTargetIdImage(t,a);if(!n)continue;const{metadata:o}=n,c=s.map((e=>i.worldToCanvas(e))),d=c[0],h=i.canvasToWorld(d),u=i.canvasToWorld([d[0]+1,d[1]]),g=i.canvasToWorld([d[0],d[1]+1]),v=aa.vec3.distance(h,u),m=aa.vec3.distance(h,g),p=gr(n);let f=uh(c)/p/p;f*=v*m,r[t]={Modality:o.Modality,area:f,areaUnit:ur(null,n)}}return this.triggerAnnotationModified(e,o,je.StatsUpdated),r})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{canvas:i}=n,a=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,r=(0,ne.getEnabledElement)(o),{renderingEngine:s}=r,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,o);const c=Qs(o,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:c,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:i,contourHoleProcessingEnabled:a},this._activateDraw(o),e.preventDefault(),Ua(s,c),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData;o&&mt(t.annotationUID),super.cancelAnnotation(t);const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,t.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){var t,n,o;const{enabledElement:i,targetId:a,svgDrawingHelper:r,annotationStyle:s}=e,{viewport:l}=i,{worldToCanvas:c}=l,{element:d}=l,h=e.annotation,{annotationUID:u,data:g,highlighted:v}=h,{handles:m}=g,{points:p,activeHandleIndex:f}=m,I=null===(t=this.editData)||void 0===t?void 0:t.newAnnotation,{lineWidth:w,lineDash:E,color:C,locked:_}=s,b=p.map((e=>c(e))),{drawPreviewEnabled:D}=this.configuration.spline,T=h.data.spline.type,S=this._getSplineConfig(T),y=h.data.spline.instance,M=ut(h);if(-1!==M.findIndex((e=>!e)))throw new Error("Can't find annotation for child ".concat(h.childAnnotationUIDs.join()));let x;if([h,...M].filter((e=>this._isSplineROIAnnotation(e))).forEach((e=>{const t=this._updateSplineInstance(d,e).getPolylinePoints();this.updateContourPolyline(e,{points:t,closed:g.contour.closed,targetWindingDirection:rl.Clockwise},l)})),super.renderAnnotationInstance(e),g.cachedStats[a]&&null!=g.cachedStats[a].areaUnit?h.invalidated&&this._throttledCalculateCachedStats(h,d):(g.cachedStats[a]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(h,d)),_||this.editData||null===f||(x=[b[f]]),(x||I||v)&&Fc(r,u,"0",b,{color:C,lineWidth:Math.max(1,w),handleRadius:"3"}),D&&y.numControlPoints>1&&null!==(n=this.editData)&&void 0!==n&&n.lastCanvasPoint&&!y.closed){const{lastCanvasPoint:e}=this.editData;nv(r,u,"previewSplineChange",y.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:E,lineWidth:1})}if(S.showControlPointsConnectors){const e=[...b];y.closed&&e.push(b[0]),nv(r,u,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(h,l,r,s.textbox),(null===(o=this.fireChangeOnUpdate)||void 0===o?void 0:o.annotationUID)===u&&(this.triggerChangeEvent(h,i,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),h.invalidated=!1,!0}createInterpolatedSplineControl(e){var t;if(null!==(t=e.data.handles.points)&&void 0!==t&&t.length)return;const{polyline:n}=e.data.contour;if(!n||!n.length)return;e.data.handles.points=[];const{points:o}=e.data.handles,i=Math.max(10,Math.floor(n.length/20));for(let e=0;e<n.length-i;e+=i)o.push(n[e]);o.push(n[n.length-1])}createAnnotation(e){var t;const n=super.createAnnotation(e),{world:o}=e.detail.currentPoints,{type:i}=this.configuration.spline,a=this._getSplineConfig(i),r=new a.Class,s=()=>({type:a.type,instance:r,resolution:a.resolution});let l;return null!==(t=this.configuration.interpolation)&&void 0!==t&&t.enabled&&(l=e=>{var t;(t=e.data).spline||(t.spline=s()),this.createInterpolatedSplineControl(e)}),ne.utilities.deepMerge(n,{data:{handles:{points:[[...o]]},spline:s(),cachedStats:{}},onInterpolationComplete:l})}_deleteControlPointByIndex(e,t,n){const o=(0,ne.getEnabledElement)(e),{points:i}=t.data.handles;3===i.length?mt(t.annotationUID):i.splice(n,1);const{renderingEngine:a}=o,r=Qs(e,this.getToolName());t.invalidated=!0,Ua(a,r)}_isSplineROIAnnotation(e){var t;return!(null===(t=e.data)||void 0===t||!t.spline)}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},AI,n[e])}_updateSplineInstance(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,{worldToCanvas:i}=o,{data:a}=t,{type:r,instance:s}=t.data.spline,l=this._getSplineConfig(r),c=a.handles.points.map(i),d=void 0!==l.resolution?parseInt(l.resolution):void 0,h=void 0!==l.scale?parseFloat(l.scale):void 0;return s.setControlPoints(c),s.closed=!!a.contour.closed,s.fixedResolution||void 0===d||s.resolution===d||(s.resolution=d,t.invalidated=!0),s instanceof yI&&!s.fixedScale&&void 0!==h&&s.scale!==h&&(s.scale=h,t.invalidated=!0),s}}function kI(e,t){const n=e.cachedStats[t],{area:o,isEmptyArea:i,areaUnit:a}=n,r=[];if(o){const e=i?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(a);r.push(e)}return r}re(LI,"toolName",void 0),re(LI,"SplineTypes",RI),re(LI,"Actions",NI),LI.toolName="SplineROI";const UI=LI;class VI extends UI{constructor(e){super(ne.utilities.deepMerge({configuration:{calculateStats:!1}},e))}isContourSegmentationTool(){return!0}}re(VI,"toolName",void 0),VI.toolName="SplineContourSegmentationTool";const WI=VI;class HI{constructor(e){let{numBits:t,getPriority:n,areEqual:o}=e;re(this,"_bucketCount",void 0),re(this,"_mask",void 0),re(this,"_size",void 0),re(this,"_currentBucketIndex",void 0),re(this,"_getPriority",void 0),re(this,"_areEqual",void 0),re(this,"_buckets",void 0),this._bucketCount=1<<t,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==n?n:e=>e,this._areEqual="function"==typeof o?o:(e,t)=>e===t}push(e){const t=this._getBucketIndex(e),n={value:e,next:this._buckets[t]};this._buckets[t]=n,this._size++}pop(){if(0===this._size)throw new Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)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 t=this._getBucketIndex(e),n=this._buckets[t];let o,i=n;for(;null!==i&&!this._areEqual(e,i.value);)o=i,i=i.next;return null!==i&&(i===n?this._buckets[t]=i.next:o.next=i.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const t=new Array(e);return t.fill(null),t}}const{isEqual:BI}=ne.utilities,FI=4294967295,GI=2/(3*Math.PI);class qI{constructor(e,t,n){re(this,"searchGranularityBits",void 0),re(this,"searchGranularity",void 0),re(this,"width",void 0),re(this,"height",void 0),re(this,"grayscalePixelData",void 0),re(this,"laplace",void 0),re(this,"gradMagnitude",void 0),re(this,"gradXNew",void 0),re(this,"gradYNew",void 0),re(this,"startPoint",void 0),re(this,"visited",void 0),re(this,"parents",void 0),re(this,"costs",void 0),re(this,"priorityQueueNew",void 0),re(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),re(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),re(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const o=e.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=t,this.height=n,this.grayscalePixelData=e,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=new Array(o),this.parents=new Uint32Array(o),this.costs=new Float32Array(o)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(FI),this.costs.fill(1/0),this.priorityQueueNew=new HI({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findMinNearby(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;const[n,o]=e,{costs:i}=this,a=[Math.max(0,n-t),Math.min(n+t+1,this.width)],r=[Math.max(0,o-t),Math.min(o+t+1,this.height)];let s=.8*i[this._getPointIndex(o,n)],l=e;for(let n=a[0];n<a[1];n++)for(let o=r[0];o<r[1];o++){const a=1-(Math.abs(n-e[0])+Math.abs(o-e[1]))/t/2,r=.8*i[this._getPointIndex(o,n)]+.2*a;r<s&&(l=[n,o],s=r)}return l}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:o}=this,i=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:c}=this;if(a===i)return[];for(;!c.isEmpty()&&s[a]===FI;){const e=c.pop();if(r[e])continue;const t=o(e),i=this._getNeighborPoints(t);r[e]=!0;for(let o=0,a=i.length;o<a;o++){const a=i[o],r=n(a[1],a[0]),d=this._getWeightedDistance(t,a),h=l[e]+d;h<l[r]&&(l[r]!==1/0&&c.remove(r),l[r]=h,s[r]=e,c.push(r))}}const d=[];let h=a;for(;h!==FI;)d.push(o(h)),h=s[h];return d.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:o}=this;let i=this._getPointIndex(t,e);return e+1===o&&i--,n[i+1]-n[i]}_getDeltaY(e,t){const{grayscalePixelData:n,width:o,height:i}=this;let a=this._getPointIndex(t,e);return t+1===i&&(a-=o),n[a]-n[a+o]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),o=this._getDeltaY(e,t);return Math.sqrt(n*n+o*o)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:o}=this;let i=n[o(t-2,e)];return i+=n[o(t-1,e-1)]+2*n[o(t-1,e)]+n[o(t-1,e+1)],i+=n[o(t,e-2)]+2*n[o(t,e-1)]-16*n[o(t,e)]+2*n[o(t,e+1)]+n[o(t,e+2)],i+=n[o(t+1,e-1)]+2*n[o(t+1,e)]+n[o(t+1,e+1)],i+=n[o(t+2,e)],i}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0,i=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[o]=this._getGradientMagnitude(a,r),i=Math.max(n[o],i),o++;n[o]=n[o-1],o++}for(let t=n.length;o<t;o++)n[o]=n[o-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/i;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,o=new Float32Array(e*t);o.fill(1,0,n(2,0));for(let i=2;i<t-2;i++){o[n(i,0)]=1,o[n(i,1)]=1;for(let t=2;t<e-2;t++)o[n(i,t)]=this._getLaplace(t,i)>.33?0:1;o[n(i,e-2)]=1,o[n(i,e-1)]=1}return o.fill(1,n(t-2,0)),o}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0;for(let i=0;i<t;i++)for(let t=0;t<e;t++)n[o++]=this._getDeltaX(t,i);return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0;for(let i=0;i<t;i++)for(let t=0;t<e;t++)n[o++]=this._getDeltaY(t,i);return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:o,_getPointIndex:i}=this,a=n[i(t,e)],r=o[i(t,e)];let s=Math.sqrt(a*a+r*r);return s=Math.max(s,1e-100),[a/s,r/s]}_getGradientDirection(e,t,n,o){const i=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,o);let r=i[1]*(n-e)-i[0]*(o-t),s=a[1]*(n-e)-a[0]*(o-t);r<0&&(r=-r,s=-s),e!==n&&t!==o&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),s=Math.min(Math.max(s,-1),1);const l=GI*(Math.acos(Math.min(r,1))+Math.acos(s));return isNaN(l)||!isFinite(l)?(console.warn("Found non-direction:",e,t,n,o,r,s,l),1):l}getCost(e,t){return this._getWeightedDistance(e,t)}_getWeightedDistance(e,t){const{_getPointIndex:n,width:o,height:i}=this,[a,r]=e,[s,l]=t;if(s<0||s>=o||l<0||l>=i)return 1;if(a<0||r<0||a>=o||r>=i)return 0;const c=n(l,s);let d=this.gradMagnitude[c];return a!==s&&r!==l||(d*=Math.SQRT1_2),.43*d+.43*this.laplace[c]+.11*this._getGradientDirection(a,r,s,l)}_getNeighborPoints(e){const{width:t,height:n}=this,o=[],i=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),r=Math.min(e[0]+1,t-1),s=Math.min(e[1]+1,n-1);for(let t=a;t<=s;t++)for(let n=i;n<=r;n++)n===e[0]&&t===e[1]||o.push([n,t]);return o}static createInstanceFromRawPixelData(e,t,n,o){const i=e.length,a=new Float32Array(i),{lower:r,upper:s}=o,l=s-r;for(let t=0,n=e.length;t<n;t++)a[t]=Math.max(0,Math.min(1,(e[t]-r)/l));return new qI(a,t,n)}}class jI{constructor(e,t){re(this,"pointArray",void 0),re(this,"_controlPointIndexes",void 0),this.pointArray=e?e.slice():[],this._controlPointIndexes=t?t.slice():[]}getPoint(e){return this.pointArray[e]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(e){const t=this.pointArray.indexOf(e);if(-1!==t)return-1!==this._controlPointIndexes.indexOf(t);throw new Error("Error: isControlPoint called with not in list point.")}addPoint(e){this.pointArray.push(e)}addControlPoint(e){const t=this.pointArray.indexOf(e);if(-1===t)throw new Error("Cannot mark a non registered point as control point.");this._controlPointIndexes.push(t)}getControlPoints(){return this._controlPointIndexes.map((e=>this.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 t=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let e=0;e<this._controlPointIndexes.length;++e)n[e]=this._controlPointIndexes[e]+t;this._controlPointIndexes=e._controlPointIndexes.concat(n)}appendPath(e){this.addPoints(e.pointArray),e._controlPointIndexes.forEach((e=>this._controlPointIndexes.push(e)))}}class zI extends vv{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:$u.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{undo:{method:"undo",bindings:[{key:"Escape"}]}}}}),e=this,re(this,"scissors",void 0),re(this,"scissorsRight",void 0),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,r=o*o,s=t.data.contour.polyline.map((e=>a.worldToCanvas(e)));let l=s[s.length-1];for(let e=0;e<s.length;e++){const t=s[e];if(ss(l,t,n)<=r)return!0;l=t}return!1})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i};const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;this._activateModify(o),Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(function(t){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=t.detail,{element:i}=o,{annotation:a,viewportIdsToRender:r,newAnnotation:s,contourHoleProcessingEnabled:l}=e.editData,{data:c}=a;c.handles.activeHandleIndex=null,e._deactivateModify(i),e._deactivateDraw(i),bc(i);const d=(0,ne.getEnabledElement)(i),{renderingEngine:h}=d;if(e.isHandleOutsideImage&&e.configuration.preventHandleOutsideImage||n)return mt(a.annotationUID),e.clearEditData(),void Ua(h,r);Ua(h,r);const u=s?je.Completed:je.HandlesUpdated;e.triggerChangeEvent(a,d,u,l),e.clearEditData()})),re(this,"triggerChangeEvent",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];n===je.Completed?tt(e,o):Qe(e,t.viewport.element,n)})),re(this,"_mouseDownCallback",(e=>{const t=e.type===ie.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:o,worldToSlice:i,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:c,world:d}=l;let h=d;const u=(0,ne.getEnabledElement)(s),{viewport:g,renderingEngine:v}=u,m=this.editData.currentPath.getControlPoints();let p=m.length>=2&&t;if(m.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=m.length;t<n;t++){const n=a(m[t]),o=as(c,g.worldToCanvas(n));o<=100&&o<e.distSquared&&(e.distSquared=o,e.index=t)}0===e.index&&(p=!0)}const{snapHandleNearby:f}=this.configuration;if(f&&!this.editData.closed){const e=new jI,t=this.scissors.findMinNearby(i(d),1),n=this.scissors.findPathToPoint(t);e.addPoints(n),e.prependPath(this.editData.confirmedPath),h=a(t),this.editData.currentPath=e}this.editData.closed=this.editData.closed||p,this.editData.confirmedPath=this.editData.currentPath;const I=this.editData.currentPath.getLastPoint();this.editData.confirmedPath.addControlPoint(I),n.data.handles.points.push(a(I)),this.scissors.startSearch(i(h)),n.invalidated=!0,Ua(v,o),this.editData.closed&&(this.updateAnnotation(this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),re(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:o,canvas:i}=n,{renderingEngine:a}=(0,ne.getEnabledElement)(t),r=Qs(t,this.getToolName());this.editData.lastCanvasPoint=i;const{width:s,height:l}=this.scissors,{worldToSlice:c}=this.editData,d=c(o);if(d[0]<0||d[1]<0||d[0]>=s||d[1]>=l)return;const h=this.scissors.findPathToPoint(d),u=new jI;u.addPoints(h),u.prependPath(this.editData.confirmedPath),this.editData.currentPath=u,Ua(a,r),e.preventDefault()})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData;if(void 0===a)console.warn("No drag implemented for livewire");else{const{currentPoints:e}=t,i=e.world;this.editHandle(i,n,o,a)}const r=(0,ne.getEnabledElement)(n),{renderingEngine:s}=r;Ua(s,i)})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData;o&&mt(t.annotationUID);const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,this.scissors=null,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(ie.TOUCH_TAP,this._mouseDownCallback)}))}setupBaseEditData(e,t,n,o,i){var a,r,s;const l=(0,ne.getEnabledElement)(t),{viewport:c}=l;this.isDrawing=!0;const d=c.getImageData(),{imageData:h}=d;let u,g,v,m,{scalarData:p}=d;if(c instanceof ne.VolumeViewport||!p){if(!(c instanceof ne.VolumeViewport))throw new Error("Viewport not supported");{const e=ne.utilities.getCurrentVolumeViewportSlice(c),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;u=e=>{const t=ne.utilities.transformWorldToIndex(h,e),o=aa.vec3.transformMat4([0,0,0],t,n);return[o[0],o[1]]},g=e=>{const n=aa.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return ne.utilities.transformIndexToWorld(h,n)},p=e.scalarData,v=e.width,m=e.height}}else v=d.dimensions[0],m=d.dimensions[1],u=e=>{const t=ne.utilities.transformWorldToIndex(h,e);return[t[0],t[1]]},g=e=>ne.utilities.transformIndexToWorld(h,[e[0],e[1],0]);p=ne.utilities.convertToGrayscale(p,v,m);const{voiRange:f}=c.getProperties(),I=u(e);this.scissors=qI.createInstanceFromRawPixelData(p,v,m,f),o&&(this.scissorsRight=qI.createInstanceFromRawPixelData(p,v,m,f),this.scissorsRight.startSearch(u(o))),this.scissors.startSearch(I);const w=!o,E=new jI,C=new jI,_=w?void 0:new jI;E.addPoint(I),E.addControlPoint(I);const b=Qs(t,this.getToolName()),D=c.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:b,newAnnotation:w,hasMoved:!1,lastCanvasPoint:D,confirmedPath:E,currentPath:C,confirmedPathRight:_,closed:!1,handleIndex:null!==(a=null===(r=this.editData)||void 0===r?void 0:r.handleIndex)&&void 0!==a?a:null===(s=n.handles)||void 0===s?void 0:s.activeHandleIndex,worldToSlice:u,sliceToWorld:g,contourHoleProcessingEnabled:i}}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{world:i}=n,{renderingEngine:a}=(0,ne.getEnabledElement)(o),r=this.createAnnotation(e),s=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(i,o,r,void 0,s),this.addAnnotation(r,o),this._activateDraw(o),e.preventDefault(),Ua(a,this.editData.viewportIdsToRender),r}clearEditData(){this.editData=null,this.scissors=null,this.scissorsRight=null,this.isDrawing=!1}editHandle(e,t,n,o){var i;const{data:a}=n,{points:r}=a.handles,{length:s}=r,l=r[(o-1+s)%s],c=r[(o+1)%s];if(null===(i=this.editData)||void 0===i||!i.confirmedPathRight){this.setupBaseEditData(l,t,n,c);const{polyline:e}=a.contour,i=new jI,r=new jI,{worldToSlice:s}=this.editData,d=Pl(n,o-1),h=Pl(n,o+1);if(-1===h||-1===d)throw new Error("Can't find handle index ".concat(-1===h&&c," ").concat(-1===d&&l));if(0===o)r.addPoints(e.slice(h+1,d).map(s));else{if(h<d)throw new Error("Expected right index after left index, but were: ".concat(d," ").concat(h));i.addPoints(e.slice(0,d+1).map(s)),r.addPoints(e.slice(h,e.length).map(s))}this.editData.confirmedPath=i,this.editData.confirmedPathRight=r}const{editData:d,scissors:h}=this,{worldToSlice:u,sliceToWorld:g}=d,{activeHandleIndex:v}=a.handles;if(null==v)a.handles.activeHandleIndex=o;else if(v!==o)throw new Error("Trying to edit a different handle than the one currently being edited ".concat(o,"!==").concat(a.handles.activeHandleIndex));const m=u(e);if(m[0]<0||m[0]>=h.width||m[1]<0||m[1]>=h.height)return;r[o]=g(m);const p=h.findPathToPoint(m),f=this.scissorsRight.findPathToPoint(m),I=new jI;I.prependPath(d.confirmedPath),0!==o&&I.addPoints(p),I.addPoints(f.reverse()),I.appendPath(d.confirmedPathRight),0===o&&I.addPoints(p),d.currentPath=I,n.invalidated=!0,d.hasMoved=!0}renderAnnotation(e,t){var n;return this.updateAnnotation(null===(n=this.editData)||void 0===n?void 0:n.currentPath),super.renderAnnotation(e,t)}isContourSegmentationTool(){return!1}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return ne.utilities.deepMerge(t,{data:{handles:{points:[[...n]]}}})}undo(e,t,n){this.editData&&this._endCallback(n,!0)}renderAnnotationInstance(e){var t,n;const{annotation:o,enabledElement:i,svgDrawingHelper:a,annotationStyle:r}=e,{viewport:s}=i,{worldToCanvas:l}=s,{annotationUID:c,data:d,highlighted:h}=o,{handles:u}=d,g=null===(t=this.editData)||void 0===t?void 0:t.newAnnotation,{lineWidth:v,lineDash:m,color:p}=r;if(h||g&&o.annotationUID===(null===(n=this.editData)||void 0===n||null===(n=n.annotation)||void 0===n?void 0:n.annotationUID)){const e="0",t=u.points.map(l);Fc(a,c,e,t,{color:p,lineDash:m,lineWidth:v})}return super.renderAnnotationInstance(e),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:t,sliceToWorld:n}=this.editData;let{pointArray:o}=e;o.length>1&&(o=[...o,o[0]]),this.updateContourPolyline(t,{points:o,closed:t.data.contour.closed,targetWindingDirection:rl.Clockwise},{canvasToWorld:n})}}re(zI,"toolName",void 0),zI.toolName="LivewireContour";const KI=zI;class YI extends KI{updateInterpolatedAnnotation(e,t){!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:o}=t.viewport;this.setupBaseEditData(n[0],o,e);const{length:i}=n,{scissors:a}=this,{nearestEdge:r,repeatInterpolation:s}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:c}=this.editData,d=[];if(r){let e=l(n[n.length-1]);n.forEach(((t,o)=>{const i=l(t);e=i,d.push(i),a.startSearch(e),a.findPathToPoint(i),a.findPathToPoint(l(n[(o+3)%n.length]));const s=a.findMinNearby(i,r);ne.utilities.isEqual(i,s)||(d[o]=s,e=s,n[o]=c(s))}))}const h=new jI;for(let e=0;e<i;e++){a.startSearch(l(n[e]));const t=a.findPathToPoint(l(n[(e+1)%i]));h.addPoints(t)}this.updateAnnotation(h),this.scissors=null,this.scissorsRight=null,this.editData=null,e.data.handles.interpolationSources=null,s&&Qe(e,t.viewport.element,je.InterpolationUpdated)})))}renderAnnotationInstance(e){var t;const{enabledElement:n,svgDrawingHelper:o}=e,i=e.annotation,{annotationUID:a}=i,{viewport:r}=n,{worldToCanvas:s}=r,{showInterpolationPolyline:l}=this.configuration.interpolation||{};null===(t=this.updateInterpolatedAnnotation)||void 0===t||t.call(this,i,n);const{originalPolyline:c}=i.data.contour,d=super.renderAnnotationInstance(e);if(l&&c&&i.autoGenerated){const e=c.map(s);e.push(e[0]),nv(o,a,"interpolationContour-0",e,{color:"#70ffff",lineWidth:1,fillOpacity:0})}return d}isContourSegmentationTool(){return!0}}re(YI,"toolName",void 0),YI.toolName="LivewireContourSegmentationTool";const XI=YI;class JI extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:ZI,changeTextCallback:$I,preventHandleOutsideImage:!1,arrowFirst:!0}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),{arrowFirst:u}=this.configuration,g=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h},data:{text:"",handles:{points:[[...i],[...i]],activeHandleIndex:null,arrowFirst:u,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:""}};gt(v,o);const m=Qs(o,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,m),v})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l]=r.handles.points,c=a.worldToCanvas(s),d=a.worldToCanvas(l),h={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}};return cd([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),a?this.configuration.getTextCallback((e=>{if(!e)return mt(o.annotationUID),Ua(l,i),this.editData=null,void(this.isDrawing=!1);o.data.text=e,et(o),Ua(l,i)})):Qe(o,n),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),re(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:o}=n;let i=st(this.getToolName(),o);if(i=this.filterInteractableAnnotationsForElement(o,i),null===(t=i)||void 0===t||!t.length)return;const a=i.find((e=>this.isPointNearTool(o,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,o,r)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o,data:r}=n,{handles:c,text:d}=r,{points:h,activeHandleIndex:u}=c;l.annotationUID=o;const{color:g,lineWidth:v,lineDash:m}=this.getAnnotationStyle({annotation:n,styleSpecifier:l}),p=h.map((e=>a.worldToCanvas(e)));let f;ge(n)||this.editData||null===u||(f=[p[u]]),f&&Fc(t,o,"0",p,{color:g,lineWidth:v});const I="1";if(this.configuration.arrowFirst?hf(t,o,I,p[1],p[0],{color:g,width:v,lineDash:m}):hf(t,o,I,p[0],p[1],{color:g,width:v,lineDash:m}),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;if(!d)continue;const w=this.getLinkedTextBoxStyle(l,n);if(!w.visibility){r.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(!r.handles.textBox.hasMoved){const e=p[1];r.handles.textBox.worldPosition=a.canvasToWorld(e)}const E=a.worldToCanvas(r.handles.textBox.worldPosition),C=ld(t,o,"1",[d],E,p,{},w),{x:_,y:b,width:D,height:T}=C;r.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([_,b]),topRight:a.canvasToWorld([_+D,b]),bottomLeft:a.canvasToWorld([_,b+T]),bottomRight:a.canvasToWorld([_+D,b+T])}}return i}))}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o,a=Qs(e,this.getToolName());Ua(i,a),Qe(t,e)}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function ZI(e){return e(prompt("Enter your annotation:"))}function $I(e,t,n){return n(prompt("Enter your annotation:"))}re(JI,"toolName",void 0),JI.toolName="ArrowAnnotate";const QI=JI;class ew extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:tw}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"angleStartedNotYetCompleted",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l,c]=r.handles.points,d=a.worldToCanvas(s),h=a.worldToCanvas(l),u={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};if(cd([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]])<=o)return!0;if(!c)return!1;const g=a.worldToCanvas(c),v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};return cd([v.start.x,v.start.y],[v.end.x,v.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&2===s.handles.points.length)return void(this.editData.handleIndex=2);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const o=s[n],{annotationUID:r,data:u}=o,{points:g,activeHandleIndex:v}=u.handles;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e)));let w;if(u.cachedStats[l]&&null!=u.cachedStats[l].angle?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(u.cachedStats[l]={angle:null},this._calculateCachedStats(o,c,e)),ge(o)||this.editData||null===v||(w=[I[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;w&&Fc(t,r,"0",I,{color:m,lineDash:f,lineWidth:p});let E="1";if(rd(t,r,E,I[0],I[1],{color:m,width:p,lineDash:f}),i=!0,3!==I.length)return i;if(E="2",rd(t,r,E,I[1],I[2],{color:m,width:p,lineDash:f}),null===(h=u.cachedStats[l])||void 0===h||!h.angle)continue;const C=this.getLinkedTextBoxStyle(d,o);if(!C.visibility){u.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 _=this.configuration.getTextLines(u,l);if(!u.handles.textBox.hasMoved){const e=I[1];u.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(u.handles.textBox.worldPosition),D=ld(t,r,"1",_,b,I,{},C),{x:T,y:S,width:y,height:M}=D;u.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([T,S]),topRight:a.canvasToWorld([T+y,S]),bottomLeft:a.canvasToWorld([T,S+M]),bottomRight:a.canvasToWorld([T+y,S+M])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport;if(3!==o.handles.points.length)return;const a=o.handles.points[0],r=o.handles.points[1],s=o.handles.points[2],{cachedStats:l}=o,c=Object.keys(l);for(let e=0;e<c.length;e++){const n=c[e],o=Lf([a,r],[r,s]),{dimensions:i,imageData:d}=this.getTargetIdImage(n,t);this.isHandleOutsideImage=[a,r,s].map((e=>ne.utilities.transformWorldToIndex(d,e))).some((e=>!ne.utilities.indexWithinDimensions(e,i))),l[n]={angle:isNaN(o)?"Incomplete Angle":o}}return e.invalidated=!1,Qe(e,i),l}}function tw(e,t){const n=e.cachedStats[t],{angle:o}=n;if(void 0!==o)return isNaN(o)?["".concat(o)]:["".concat(zu(o)," ").concat(String.fromCharCode(176))]}re(ew,"toolName",void 0),ew.toolName="Angle";const nw=ew,ow=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const o=2===t[0].length?[0,0]:[0,0,0],i=t.length;for(const e of t)o[0]+=e[0]/i,o[1]+=e[1]/i,3===o.length&&(o[2]+=e[2]/i);return o};class iw extends nd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:aw,showArcLines:!1}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"angleStartedNotYetCompleted",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:o});return s<=o||l<=o})),re(this,"toolSelectedCallback",(function(t,n,o,i){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Qs(s,e.getToolName()),c=(0,ne.getEnabledElement)(s),{renderingEngine:d,viewport:h}=c,{isNearFirstLine:u,isNearSecondLine:g}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:i,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:u,isNearSecondLine:g},e._activateModify(s),Dc(s),Ua(d,l),t.preventDefault()})),re(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return bc(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,o=e.detail,{element:i,currentPoints:a}=o,r=a.world,{data:s}=t;return 1===n?(s.handles.points[1]=r,void(this.editData.hasMoved=s.handles.points[1][0]!==s.handles.points[0][0]||s.handles.points[1][1]!==s.handles.points[0][0])):3===n?(s.handles.points[3]=r,this.editData.hasMoved=s.handles.points[3][0]!==s.handles.points[2][0]||s.handles.points[3][1]!==s.handles.points[2][0],void(this.angleStartedNotYetCompleted=!1)):(this.editData.hasMoved=!1,Dc(i),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),re(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:c}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,i=c.handles.points;s?[i[0],i[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[i[2],i[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;c.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const d=(0,ne.getEnabledElement)(n),{renderingEngine:h}=d;Ua(h,i)})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;i.handles.points.length<4&&mt(t.annotationUID),t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const o=s[n],{annotationUID:r,data:u}=o,{points:g,activeHandleIndex:v}=u.handles;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e)));let w;if(u.cachedStats[l]&&null!=u.cachedStats[l].angle?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(u.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(o,c,e)),ge(o)||this.editData||null===v||(w=[I[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;w&&Fc(t,r,"0",I,{color:m,lineDash:f,lineWidth:p});const E=[I[0],I[1]],C=[I[2],I[3]];let _="line1";if(rd(t,r,_,E[0],E[1],{color:m,width:p,lineDash:f}),i=!0,I.length<4)return i;_="line2",rd(t,r,_,C[0],C[1],{color:m,width:p,lineDash:f}),_="linkLine",rd(t,r,_,ow(E[0],E[1]),ow(C[0],C[1]),{color:m,lineWidth:"1",lineDash:"1,4"});const{arc1Start:b,arc1End:D,arc2End:T,arc2Start:S}=u.cachedStats[l].points.canvas,{arc1Angle:y,arc2Angle:M}=u.cachedStats[l];if(this.configuration.showArcLines&&(_="arc1",rd(t,r,_,b,D,{color:m,lineWidth:"1"}),_="arc2",rd(t,r,_,S,T,{color:m,lineWidth:"1"})),null===(h=u.cachedStats[l])||void 0===h||!h.angle)continue;const x=this.getLinkedTextBoxStyle(d,o);if(!x.visibility){u.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 O=this.configuration.getTextLines(u,l);if(!u.handles.textBox.hasMoved){const e=hd(I);u.handles.textBox.worldPosition=a.canvasToWorld(e)}const P=a.worldToCanvas(u.handles.textBox.worldPosition),A=ld(t,r,"cobbAngleText",O,P,I,{},x),{x:R,y:N,width:L,height:k}=A;if(u.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+L,N]),bottomLeft:a.canvasToWorld([R,N+k]),bottomRight:a.canvasToWorld([R+L,N+k])},this.configuration.showArcLines){const e="arcAngle1",n=["".concat(y.toFixed(2)," ").concat(String.fromCharCode(176))],o=ow(b,D);ad(t,r,e,n,o,{...x,padding:3});const i="arcAngle2",a=["".concat(M.toFixed(2)," ").concat(String.fromCharCode(176))],s=ow(S,T);ad(t,r,i,a,s,{...x,padding:3})}}return i})),re(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:o,proximity:i}=e;const[a,r,s,l]=n,c=t.worldToCanvas(a),d=t.worldToCanvas(r),h=t.worldToCanvas(s),u=t.worldToCanvas(l),g={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}},v={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}},m=cd([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]]),p=cd([v.start.x,v.start.y],[v.end.x,v.end.y],[o[0],o[1]]);let f=!1,I=!1;return m<=i?f=!0:p<=i&&(I=!0),{distanceToPoint:m,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:I}})),re(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:o,mid2:i}=e;const a=[o,i],r=Lf(t,a),s=Lf(n,a),l=r>90?1:0,c=s>90?0:1,d=ow(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),u=.1,g=ow(t[0],t[1]),v=ow(n[0],n[1]),m=[t[l][0]-g[0],t[l][1]-g[1]],p=Math.sqrt(m[0]**2+m[1]**2),f=[m[0]/p,m[1]/p],I=[g[0]+f[0]*h*u,g[1]+f[1]*h*u],w=[d[0]-o[0],d[1]-o[1]],E=Math.sqrt(w[0]**2+w[1]**2),C=[w[0]/E,w[1]/E],_=[o[0]+C[0]*h*u,o[1]+C[1]*h*u],b=[n[c][0]-v[0],n[c][1]-v[1]],D=Math.sqrt(b[0]**2+b[1]**2),T=[b[0]/D,b[1]/D],S=[v[0]+T[0]*h*u,v[1]+T[1]*h*u],y=[d[0]-i[0],d[1]-i[1]],M=Math.sqrt(y[0]**2+y[1]**2),x=[y[0]/M,y[1]/M];return{arc1Start:I,arc1End:_,arc2Start:S,arc2End:[i[0]+x[0]*h*u,i[1]+x[1]*h*u],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data;if(4!==o.handles.points.length)return;const i=[null,null],a=[null,null];let r=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=aa.vec3.distance(o.handles.points[e],o.handles.points[t]);n<r&&(r=n,i[1]=o.handles.points[e],i[0]=o.handles.points[(e+1)%2],a[0]=o.handles.points[t],a[1]=o.handles.points[2+(t-1)%2])}const{viewport:s}=n,{element:l}=s,c=o.handles.points.map((e=>s.worldToCanvas(e))),d=[c[0],c[1]],h=[c[2],c[3]],u=ow(d[0],d[1]),g=ow(h[0],h[1]),{arc1Start:v,arc1End:m,arc2End:p,arc2Start:f,arc1Angle:I,arc2Angle:w}=this.getArcsStartEndPoints({firstLine:d,secondLine:h,mid1:u,mid2:g}),{cachedStats:E}=o,C=Object.keys(E);for(let e=0;e<C.length;e++)E[C[e]]={angle:Lf(i,a),arc1Angle:I,arc2Angle:w,points:{canvas:{arc1Start:v,arc1End:m,arc2End:p,arc2Start:f},world:{arc1Start:s.canvasToWorld(v),arc1End:s.canvasToWorld(m),arc2End:s.canvasToWorld(p),arc2Start:s.canvasToWorld(f)}}};return e.invalidated=!1,Qe(e,l),E}}function aw(e,t){const n=e.cachedStats[t],{angle:o}=n;if(void 0!==o)return["".concat(o.toFixed(2)," ").concat(String.fromCharCode(176))]}re(iw,"toolName",void 0),iw.toolName="CobbAngle";const rw=iw,{transformWorldToIndex:sw}=ne.utilities;class lw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:cw,displayBothAxesDistances:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"startedDrawing",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;if(!(r instanceof ne.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>!1)),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.startedDrawing&&1===s.handles.points.length)return void(this.editData.handleIndex=1);this.startedDrawing=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.startedDrawing=!1,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u}=h.handles;d.annotationUID=r;const g=this.getStyle("color",d,o),v=u.map((e=>a.worldToCanvas(e)));if(h.cachedStats[l]&&null!=h.cachedStats[l].xValues?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(o,c,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let m="0";if(Bc(t,r,m,v[0],{color:g},0),i=!0,2!==v.length)return i;if(m="1",Bc(t,r,m,v[1],{color:g},1),h.cachedStats[l].isUnitless){const e="".concat(r,"-line-1");rd(t,r,"1",v[0],v[1],{color:g,width:1,shadow:this.configuration.shadow},e)}else{const e=v[0],n=v[1],o=n[1]-e[1],i=n[0]-e[0];let a=[0,0];a=h.cachedStats[l].isHorizontal?[e[0]+i,e[1]]:[e[0],e[1]+o];let s="".concat(r,"-line-1"),c="1";rd(t,r,c,v[0],a,{color:g,width:1,shadow:this.configuration.shadow},s),s="".concat(r,"-line-2"),c="2",rd(t,r,c,v[1],a,{color:g,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(d,o);if(!p.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}const f=this.configuration.getTextLines(h,l,this.configuration);if(!h.handles.textBox.hasMoved){const e=v[1];h.handles.textBox.worldPosition=a.canvasToWorld(e)}const I=a.worldToCanvas(h.handles.textBox.worldPosition),w=ld(t,r,"1",f,I,v,{},p),{x:E,y:C,width:_,height:b}=w;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([E,C]),topRight:a.canvasToWorld([E+_,C]),bottomLeft:a.canvasToWorld([E,C+b]),bottomRight:a.canvasToWorld([E+_,C+b])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,o){}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const r=Qs(i,this.getToolName());let s,l=!1;n.worldPosition||(s=a.handles.points.findIndex((e=>e===n))),this.editData={handleIndex:s,annotation:t,viewportIdsToRender:r},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,r),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport;if(2!==o.handles.points.length)return;const{cachedStats:a}=o,r=Object.keys(a);for(let e=0;e<r.length;e++){const i=r[e],s=this.getTargetIdImage(i,t);if(!s)continue;const{imageData:l}=s,c=o.handles.points[0],d=o.handles.points[1],h=sw(l,c),u=sw(l,d),{values:g,units:v}=mr(s,[h]),{values:m,units:p}=mr(s,[u]);let f,I,w,E,C=!1;if(v[0]!==p[0]||v[1]!==p[1]||"raw"===v[0]&&"raw"===p[0]){const e=dh(c,d);f=[e,0],I=[e,0],w=["px"],C=!0}else{const e=n.viewport.worldToCanvas(c),t=n.viewport.worldToCanvas(d),o=t[1]-e[1],i=t[0]-e[0];E=Math.abs(i)>Math.abs(o),f=[g[0],m[0]],I=[g[1],m[1]],w=[v[0],v[1]]}a[i]={xValues:f,yValues:I,isHorizontal:E,units:w,isUnitless:C}}return e.invalidated=!1,Qe(e,i),a}}function cw(e,t,n){const o=e.cachedStats[t],{xValues:i,yValues:a,units:r,isUnitless:s,isHorizontal:l}=o;if(s)return["".concat(zu(i[0])," px")];if(n.displayBothAxesDistances){const e=Math.abs(i[1]-i[0]),t=Math.abs(a[1]-a[0]);return["".concat(zu(e)," ").concat(r[0]),"".concat(zu(t)," ").concat(r[1])]}if(l){const e=Math.abs(i[1]-i[0]);return["".concat(zu(e)," ").concat(r[0])]}{const e=Math.abs(a[1]-a[0]);return["".concat(zu(e)," ").concat(r[1])]}}re(lw,"toolName",void 0),lw.toolName="UltrasoundDirectionalTool";const dw=lw;class hw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:uw,changeTextCallback:gw,canvasPosition:[10,10],canvasSize:10}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=hw.createAnnotation({metadata:{...r.getViewReference(),referencedImageId:h}});gt(u,o);const g=Qs(o,this.getToolName());return e.preventDefault(),Ua(s,g),this.configuration.getTextCallback((e=>{if(!e)return mt(u.annotationUID),Ua(s,g),void(this.isDrawing=!1);u.data.text=e,et(u),Ua(s,g)})),u})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{canvasPosition:s,canvasSize:l}=this.configuration;return!(null==s||!s.length)&&Math.abs(n[0]-s[0]+l/2)<=l/2&&Math.abs(n[1]-s[1]+l/2)<=l/2})),re(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),bc(n)})),re(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:o}=n;let i=st(this.getToolName(),o);if(i=this.filterInteractableAnnotationsForElement(o,i),null===(t=i)||void 0===t||!t.length)return;const a=i.find((e=>this.isPointNearTool(o,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,o,r)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o}=n;l.annotationUID=o;const{color:r}=this.getAnnotationStyle({annotation:n,styleSpecifier:l}),{canvasPosition:c,canvasSize:d}=this.configuration;if(null!=c&&c.length&&hf(t,o,"1",c.map((e=>e+d)),c,{color:r,width:1}),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i}return i}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o,a=Qs(e,this.getToolName());Ua(i,a),Qe(t,e)}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function uw(e){return e(prompt("Enter your annotation:"))}function gw(e,t,n){return n(prompt("Enter your annotation:"))}re(hw,"toolName",void 0),hw.toolName="KeyImage";const vw=hw,mw="magnify-viewport";class pw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}),re(this,"_bounds",void 0),re(this,"editData",void 0),re(this,"_hasBeenRemoved",!1),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=(0,ne.getEnabledElement)(n),{viewport:a,renderingEngine:r}=i;if(!(a instanceof ne.StackViewport))throw new Error("MagnifyTool only works on StackViewports");const s=this._getReferencedImageId(a);if(!s)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const l=Qs(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:i,renderingEngine:r,currentPoints:o},this._createMagnificationViewport(),this._activateDraw(n),Dc(n),e.preventDefault(),Ua(r,l),!0})),re(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),re(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:o,currentPoints:i}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:c}=i;let d;if(d=r.querySelector(".magnifyTool"),null===d){const e=document.createElement("div");e.classList.add("magnifyTool"),e.style.display="block",e.style.width="".concat(this.configuration.magnifyWidth,"px"),e.style.height="".concat(this.configuration.magnifyHeight,"px"),e.style.position="absolute",d=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:mw,type:ne.Enums.ViewportType.STACK,element:d};o.enableElement(t)}d.style.top="".concat(l[1]-this.configuration.magnifyHeight/2,"px"),d.style.left="".concat(l[0]-this.configuration.magnifyWidth/2,"px");const h=o.getViewport(mw);h.setStack([t]).then((()=>{if(this._hasBeenRemoved)return;h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:o}=h.getCamera(),i=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[c[0],c[1],c[2]],l=[r[0]+i*o[0],r[1]+i*o[1],r[2]+i*o[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),d.style.display="block",Ua(o,n)})),re(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:o,currentPoints:i}=t,a=n.world,r=i.canvas,s=(0,ne.getEnabledElement)(o),{renderingEngine:l}=s,c=l.getViewport(mw),d=o.querySelector(".magnifyTool");if(!d)return;d.style.top="".concat(r[1]-this.configuration.magnifyHeight/2,"px"),d.style.left="".concat(r[0]-this.configuration.magnifyWidth/2,"px");const{focalPoint:h,position:u}=c.getCamera(),g=[u[0]+a[0],u[1]+a[1],u[2]+a[2]],v=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];c.setCamera({focalPoint:v,position:g}),c.render()})),re(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,ne.getEnabledElement)(t),{renderingEngine:o}=n;o.disableElement(mw);const i=t.querySelector(".viewport-element"),a=i.querySelector(".magnifyTool");i.removeChild(a),this._deactivateDraw(t),bc(t),this._hasBeenRemoved=!0})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,this._hasBeenRemoved=!1,e.addEventListener(ie.MOUSE_UP,this._dragEndCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(ie.TOUCH_END,this._dragEndCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._dragEndCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(ie.TOUCH_END,this._dragEndCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof ne.StackViewport&&(n=t.split("imageId:")[1]),n}}re(pw,"toolName",void 0),pw.toolName="Magnify";const fw=pw,Iw=125,ww=e=>e.uid!==e.referenceId;class Ew{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:o=Iw,position:i=[0,0],zoomFactor:a,autoPan:r}=e;re(this,"_viewportId",void 0),re(this,"_sourceEnabledElement",void 0),re(this,"_enabledElement",null),re(this,"_sourceToolGroup",null),re(this,"_magnifyToolGroup",null),re(this,"_isViewportReady",!1),re(this,"_radius",0),re(this,"_resized",!1),re(this,"_resizeViewportAsync",void 0),re(this,"_canAutoPan",!1),re(this,"_autoPan",void 0),re(this,"position",void 0),re(this,"zoomFactor",void 0),re(this,"visible",void 0),this._viewportId=null!=t?t:ne.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=o,this.position=i,this.zoomFactor=a,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=Gi(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:t,visible:n}=this,{viewport:o}=this._enabledElement,{element:i}=o,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(i.style,{display:n?"block":"hidden",width:"".concat(a,"px"),height:"".concat(a,"px"),left:"".concat(-e,"px"),top:"".concat(-e,"px"),transform:"translate(".concat(r,"px, ").concat(s,"px)")}),this._isViewportReady&&(this._syncViewports(),o.render())}dispose(){const{viewport:e}=this._enabledElement,{element:t}=e,n=e.getRenderingEngine();this._removeEventListeners(t),n.disableElement(e.id),t.parentNode&&t.parentNode.removeChild(t)}_handleToolModeChanged(e){var t;const{_magnifyToolGroup:n}=this,{toolGroupId:o,toolName:i,mode:a,toolBindingsOptions:r}=e.detail;if((null===(t=this._sourceToolGroup)||void 0===t?void 0:t.id)===o)switch(a){case Je.Active:n.setToolActive(i,r);break;case Je.Passive:n.setToolPassive(i);break;case Je.Enabled:n.setToolEnabled(i);break;case Je.Disabled:n.setToolDisabled(i);break;default:throw new Error("Unknow tool mode (".concat(a,")"))}}_inheritBorderRadius(e){const t=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");t.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:t}=this,n=2*t;return e.classList.add("advancedMagnifyTool"),Object.assign(e.style,{display:"block",width:"".concat(n,"px"),height:"".concat(n,"px"),position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:"".concat(-t,"px"),top:"".concat(-t,"px"),transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParalellScale(e,t,n){const{parallelScale:o}=e.getCamera();return o*(1/n)*(t.canvas.offsetWidth/e.canvas.offsetWidth)}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,t){const n=e.getActors(),o="".concat(t.id,"-toolGroup"),i=Qo(e.id,e.renderingEngineId),a=i.clone(o,(e=>{const t=i.getToolInstance(e);return t instanceof nd&&!(t instanceof Tw)||e===xv.toolName}));return a.addViewport(t.id,t.renderingEngineId),n.filter(ww).forEach((e=>{Va(o,[{segmentationId:e.referenceId,type:Et.Labelmap}])})),{sourceToolGroup:i,magnifyToolGroup:a}}_cloneStack(e,t){const n=e.getImageIds();t.setStack(n).then((()=>{this._isViewportReady=!0,this.update()}))}_cloneVolumes(e,t){const n=e.getActors().filter((e=>!ww(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,o=e.getRenderingEngine(),{options:i}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...i}};o.enableElement(a);const r=o.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,r):this._isVolumeViewport(e)&&this._cloneVolumes(e,r),this._inheritBorderRadius(t);const s=this._cloneToolGroups(e,r);this._sourceToolGroup=s.sourceToolGroup,this._magnifyToolGroup=s.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:t}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),t.addEventListener("mouseup",this._cancelMouseEventCallback),t.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){var t;const{element:n}=this._enabledElement.viewport;this._canAutoPan=!(null===(t=e.target)||void 0===t||!t.closest(".advancedMagnifyTool")),document.addEventListener("mouseup",this._browserMouseUpCallback),n.removeEventListener("mouseup",this._cancelMouseEventCallback),n.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!Ye.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:o}=this._enabledElement,{canvasToWorld:i}=o,{canvas:a}=n,{radius:r}=this,s=[r,r],l=dh(s,a),c=r-t.padding;if(l<=c)return;const d=l-c,h=aa.vec2.sub(aa.vec2.create(),a,s);aa.vec2.normalize(h,h),aa.vec2.scale(h,h,d);const u=aa.vec2.add(aa.vec2.create(),this.position,h),g=i(this.position),v=i(u),m=aa.vec3.sub(aa.vec3.create(),v,g),p={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:u,world:v}},delta:{canvas:h,world:m}};t.callback(p)}_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){ne.eventTarget.addEventListener(ie.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){ne.eventTarget.removeEventListener(ie.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,o=this._createViewportNode();n.parentNode.appendChild(o),this._addEventListeners(o),this._cloneViewport(t,o),this._enabledElement=(0,ne.getEnabledElement)(o)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),o=this._convertZoomFactorToParalellScale(e,t,this.zoomFactor),{focalPoint:i,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)+Math.pow(i[2]-a[2],2)),l=[n[0],n[1],n[2]],c=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:o,focalPoint:l,position:c})}_syncStackViewports(e,t){t.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:t}=this._enabledElement,n=e.getProperties();t.setProperties(n),this._syncViewportsCameras(e,t),this._isStackViewport(e)&&this._syncStackViewports(e,t)}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}const Cw=1-ne.CONSTANTS.EPSILON,{Events:_w}=ne.Enums;class bw{constructor(){re(this,"_magnifyViewportsMap",void 0),re(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:o,position:i,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=o,{element:c}=l,d=new Ew({magnifyViewportId:n,sourceEnabledElement:o,radius:a,position:i,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(c),this._magnifyViewportsMap.set(d.viewportId,{annotation:e,magnifyViewport:d}),d})),re(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this._destroyViewport(t.data.magnifyViewportId)})),re(this,"_newStackImageCallback",(e=>{const{viewportId:t,imageId:n}=e.detail;this._getMagnifyViewportsMapEntriesBySourceViewportId(t).forEach((e=>{let{annotation:t}=e;t.metadata.referencedImageId=n,t.invalidated=!0}))})),re(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,o=(0,ne.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:i}=o.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(aa.vec3.dot(n,i))>Cw))return;const{handles:a}=t.data,r=o.canvasToWorld([0,0]),s=aa.vec3.sub(aa.vec3.create(),r,a.points[0]),l=aa.vec3.dot(s,i),c=aa.vec3.scale(aa.vec3.create(),i,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=c[0],t[1]+=c[1],t[2]+=c[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){var e;return bw._singleton=null!==(e=bw._singleton)&&void 0!==e?e:new bw,bw._singleton}getViewport(e){var t;return null===(t=this._magnifyViewportsMap.get(e))||void 0===t?void 0:t.magnifyViewport}dispose(){this._removeEventListeners(),this._destroyViewports()}_destroyViewport(e){const t=this._magnifyViewportsMap.get(e);if(t){const{magnifyViewport:n}=t,{viewport:o}=n.sourceEnabledElement,{element:i}=o;this._removeSourceElementEventListener(i),n.dispose(),this._magnifyViewportsMap.delete(e)}}_destroyViewports(){Array.from(this._magnifyViewportsMap.keys()).forEach((e=>this._destroyViewport(e)))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter((t=>{let{magnifyViewport:n}=t;const{viewport:o}=n.sourceEnabledElement;return o.id===e}))}_addEventListeners(){ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){ne.eventTarget.removeEventListener(ie.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(_w.STACK_NEW_IMAGE,this._newStackImageCallback),e.addEventListener(_w.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_removeSourceElementEventListener(e){e.removeEventListener(_w.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(_w.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_initialize(){this._addEventListeners()}}re(bw,"_singleton",void 0);var Dw=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(Dw||{});class Tw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:2.5,zoomFactorList:[2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:Zu.Secondary,modifierKey:$u.Shift}]}}}}),re(this,"magnifyViewportManager",void 0),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{viewport:a,renderingEngine:r}=i,s=n.world,l=n.canvas,{magnifyingGlass:c}=this.configuration,{radius:d,zoomFactor:h,autoPan:u}=c,g=this._getWorldHandlesPoints(a,l,d),v=a.getCamera(),{viewPlaneNormal:m,viewUp:p}=v,f=this.getReferencedImageId(a,s,m,p),I=ne.utilities.uuidv4(),w=ne.utilities.uuidv4(),E=a.getFrameOfReferenceUID(),C={annotationUID:I,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...p],FrameOfReferenceUID:E,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:w,zoomFactor:h,handles:{points:g,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(C,{magnifyViewportId:w,sourceEnabledElement:i,position:l,radius:d,zoomFactor:h,autoPan:{enabled:u.enabled,padding:u.padding,callback:e=>{const t=C.data.handles.points,{world:n}=e.delta;for(let e=0,o=t.length;e<o;e++)t[e][0]+=n[0],t[e][1]+=n[1],t[e][2]+=n[2]}}}),gt(C,o);const _=Qs(o,this.getToolName());return e.preventDefault(),Ua(r,_),C})),re(this,"onSetToolDisabled",(()=>{this.magnifyViewportManager.dispose(),lt().forEach((e=>{e.metadata.toolName===this.getToolName()&&mt(e.annotationUID)}))})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),c=l[0],d=l[2],h=l[3],u=.5*Math.abs(d[1]-c[1]),g=wI([[h[0]+u,c[1]+u],n]);return Math.abs(g-u)<1.5*o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a}=this.editData,{data:r}=o;r.handles.activeHandleIndex=null,this._deactivateModify(n),bc(n);const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;this.editData=null,this.isDrawing=!1,Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{var t;this.isDrawing=!0;const n=e.detail,{element:o,deltaPoints:i}=n,a=null!==(t=null==i?void 0:i.world)&&void 0!==t?t:[0,0,0],r=(0,ne.getEnabledElement)(o),{renderingEngine:s}=r,{annotation:l,viewportIdsToRender:c}=this.editData,{points:d}=l.data.handles;d.forEach((e=>{e[0]+=a[0],e[1]+=a[1],e[2]+=a[2]})),l.invalidated=!0,this.editData.hasMoved=!0,Ua(s,c)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData,{data:r}=o;if(void 0===a){const{deltaPoints:e}=t,n=e.world;r.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;Ua(l,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,{worldToCanvas:a}=i,{annotation:r}=this.editData,{data:s}=r,{points:l}=s.handles,c=l.map((e=>a(e))),d=c[0],h=c[2],u=c[3],g=.5*Math.abs(h[1]-d[1]),v=[u[0]+g,d[1]+g],{currentPoints:m}=t,p=wI([v,m.canvas]),f=this._getWorldHandlesPoints(i,v,p);l[0]=f[0],l[1]=f[1],l[2]=f[2],l[3]=f[3]})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o,i;let a=!1;const{viewport:r}=e,{element:s}=r;let l=st(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return a;if(l=this.filterInteractableAnnotationsForElement(s,l),l=null===(o=l)||void 0===o?void 0:o.filter((e=>e.data.sourceViewportId===r.id)),null===(i=l)||void 0===i||!i.length)return a;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:o,data:i}=n,{magnifyViewportId:s,zoomFactor:d,handles:h}=i,{points:u,activeHandleIndex:g}=h;c.annotationUID=o,this.getStyle("lineWidth",c,n),this.getStyle("lineDash",c,n);const v=this.getStyle("color",c,n),m=u.map((e=>r.worldToCanvas(e))),p=m[0],f=m[2],I=m[3],w=.5*Math.abs(f[1]-p[1]),E=[I[0]+w,p[1]+w];if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let C;if(!Ne(o))continue;ge(n)||this.editData||null===g||(C=[m[g]]),C&&Fc(t,o,"0",C,{color:v});const _="".concat(o,"-advancedMagnify");vc(t,o,"0",E,w,{color:v,lineWidth:5},_);const b=this.magnifyViewportManager.getViewport(s);b.position=E,b.radius=w,b.zoomFactor=d,b.update(),a=!0}return a})),re(this,"_getWorldHandlesPoints",((e,t,n)=>[[t[0],t[1]-n],[t[0]+n,t[1]],[t[0],t[1]+n],[t[0]-n,t[1]]].map((t=>e.canvasToWorld(t))))),this.magnifyViewportManager=bw.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:o}=e.detail,i=(0,ne.getEnabledElement)(n),{viewport:a}=i,{canvas:r}=o,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,c=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),c.parentElement.removeChild(c),a.render()}));Object.assign(c.style,{left:"".concat(r[0],"px"),top:"".concat(r[1],"px")}),s.appendChild(c),c.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,o=document.createElement("select");return o.size=5,Object.assign(o.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{o.addEventListener(e,(e=>e.stopPropagation()))})),o.addEventListener("change",(e=>{e.stopPropagation(),t(o.value)})),o.addEventListener("keydown",(e=>{var n,o;((null!==(n=e.keyCode)&&void 0!==n?n:27===e.which)||"escape"===(null===(o=e.key)||void 0===o?void 0:o.toLowerCase()))&&(e.stopPropagation(),t())})),n.forEach((t=>{const n=document.createElement("option");n.label=t,n.title="Zoom factor ".concat(t.toFixed(1)),n.value=t,n.defaultSelected=t===e,o.add(n)})),o}}re(Tw,"toolName",void 0),re(Tw,"Actions",Dw),Tw.toolName="AdvancedMagnify";class Sw extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"isDrawing",!1),re(this,"isHandleOutsideImage",!1),re(this,"_elementWithCursor",null),re(this,"_currentCursorWorldPosition",null),re(this,"_currentCanvasPosition",null),re(this,"_disableCursorEnabled",!1),re(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:o}=t;this._currentCursorWorldPosition=o.world,this._currentCanvasPosition=o.canvas,this._elementWithCursor=n;const i=this.getActiveAnnotation(n);return null===i?(this.createInitialAnnotation(o.world,n),!1):(this.updateAnnotationPosition(n,i),!1)})),re(this,"createInitialAnnotation",((e,t)=>{const n=(0,ne.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:o,renderingEngine:i}=n;this.isDrawing=!0;const a=o.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(o,e,r,s),c=o.getFrameOfReferenceUID(),d={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:c,referencedImageId:l},data:{label:"",handles:{points:[[...e]],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(st(this.getToolName(),t).length>0)return null;if(null===gt(d,t))return;const h=Qs(t,this.getToolName(),!1);Ua(i,h)})),re(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:o,camera:i}=t,a=(0,ne.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=o.focalPoint,s=i.viewPlaneNormal,l=i.focalPoint,c=[0,0,0];if(yh().subtract(l,r,c),0===c.reduce(((e,t)=>e+t),0))return;const d=yh().dot(c,s);if(Math.abs(d)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a,FrameOfReferenceUID:r}=e,s=this._elementWithCursor===a.element;this.configuration.positionSync&&!s&&this.updateViewportImage(a);const{element:l}=a;let c=st(this.getToolName(),l);if(null===(n=c)||void 0===n||!n.length)return i;if(c=this.filterInteractableAnnotationsForElement(l,c),null===(o=c)||void 0===o||!o.length)return i;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<c.length;e++){const n=c[e],{annotationUID:o,data:r}=n,{handles:l}=r,{points:h}=l;if(!o)return i;d.annotationUID=o;const u=parseFloat(this.getStyle("lineWidth",d,n)),g=this.getStyle("lineDash",d,n),v=this.getStyle("color",d,n);if(h[0].some((e=>isNaN(e))))return i;const m=h.map((e=>a.worldToCanvas(e)));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;if(!Ne(o))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,I]=m[0],w=s?20:7,E=s?5:7;rd(t,o,p.upper,[f,I-(w/2+E)],[f,I-w/2],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.lower,[f,I+(w/2+E)],[f,I+w/2],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.right,[f+(w/2+E),I],[f+w/2,I],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.left,[f-(w/2+E),I],[f-w/2,I],{color:v,lineDash:g,lineWidth:u}),i=!0}return i})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=ei(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&Dc(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=ei(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&bc(e.viewport.element)}))}getActiveAnnotation(e){const t=st(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){var n;const o=this._currentCursorWorldPosition;if(!o)return;if(null===(n=t.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return;t.data.handles.points=[[...o]],t.invalidated=!0;const i=Qs(e,this.getToolName(),!1),a=(0,ne.getEnabledElement)(e);if(!a)return;const{renderingEngine:r}=a;Ua(r,i)}filterInteractableAnnotationsForElement(e,t){var n,o;if(!(t instanceof Array)||0===t.length)return[];const i=t[0],a=null===(n=(0,ne.getEnabledElement)(e))||void 0===n?void 0:n.viewport;if(!a)return[];const r=a.getCamera(),{viewPlaneNormal:s,focalPoint:l}=r;if(!s||!l)return[];const c=null===(o=i.data)||void 0===o||null===(o=o.handles)||void 0===o?void 0:o.points;if(!(c instanceof Array)||1!==c.length)return[];const d=c[0],h=ne.utilities.planar.planeEquation(s,l);return ne.utilities.planar.planeDistanceToPoint(h,d)<this.configuration.displayThreshold?[i]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof ne.StackViewport){const n=ne.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ne.VolumeViewport){const{focalPoint:n,viewPlaneNormal:o}=e.getCamera();if(!n||!o)return;const i=ne.utilities.planar.planeEquation(o,n),a=ne.utilities.planar.planeDistanceToPoint(i,t,!0);if(Math.abs(a)<.5)return;const r=aa.vec3.normalize(aa.vec3.create(),aa.vec3.fromValues(...o)),s=aa.vec3.scale(aa.vec3.create(),r,a),l=aa.vec3.add(aa.vec3.create(),aa.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}re(Sw,"toolName",void 0),Sw.toolName="ReferenceCursors";const yw=Sw,Mw=[];class xw extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",{}),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"_init",(()=>{const e=(0,ne.getRenderingEngines)()[0];if(!e)return;const t=ei(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:o}=n[0];const{FrameOfReferenceUID:i}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(o=e.viewport)})),!o)return;const{viewUp:a,viewPlaneNormal:r}=o.getCamera(),s=ne.utilities.getViewportImageCornersInWorld(o);let l=this.editData.annotation;const c=st(this.getToolName(),o.element);if(c.length&&(l=c.filter((e=>e.data.viewportId==o.id))[0]),Mw.includes(o.id))this.editData.annotation&&this.editData.annotation.data.viewportId==o.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=o.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:i,referencedImageId:null},data:{handles:{points:s},viewportId:o.id}};Mw.push(o.id),gt(e,o.element),l=e}this.editData={viewport:o,renderingEngine:e,annotation:l}})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),re(this,"computeScaleSize",((e,t,n)=>{const o=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let i;return i="top"==n||"bottom"==n?o.filter((t=>t<.6*e&&t>.2*e)):o.filter((e=>e<.6*t&&e>.2*t)),i[0]})),re(this,"computeEndScaleTicks",((e,t)=>{const n={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]};return{endTick1:[[e[1][0]+n[t][0][0],e[1][1]+n[t][0][0]],[e[1][0]+n[t][1][0],e[1][1]+n[t][1][1]]],endTick2:[[e[0][0]+n[t][0][0],e[0][1]+n[t][0][0]],[e[0][0]+n[t][1][0],e[0][1]+n[t][1][1]]]}})),re(this,"computeInnerScaleTicks",((e,t,n,o,i)=>{let a;"bottom"==t||"top"==t?a=i[0][0]-o[0][0]:"left"!=t&&"right"!=t||(a=i[0][1]-o[0][1]);const r=[],s=[],l=[];let c=e;e>=50&&(c=e/10);const d=a/c;for(let e=0;e<c-1;e++){const i={bottom:[[d*(e+1),0],[d*(e+1),5]],top:[[d*(e+1),0],[d*(e+1),-5]],left:[[0,d*(e+1)],[-5,d*(e+1)]],right:[[0,d*(e+1)],[5,d*(e+1)]]};r.push("".concat(n,"-tick").concat(e)),s.push("tick".concat(e)),(e+1)%5==0?l.push([[o[0][0]+i[t][0][0],o[0][1]+i[t][0][1]],[o[1][0]+i[t][0][0],o[1][1]+i[t][0][1]]]):l.push([[o[0][0]+i[t][0][0],o[0][1]+i[t][0][1]],[o[1][0]+i[t][1][0],o[1][1]+i[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),re(this,"computeWorldScaleCoordinates",((e,t,n)=>{let o,i=aa.vec3.subtract(aa.vec3.create(),n[0],n[1]);i=aa.vec3.normalize(aa.vec3.create(),i);let a=aa.vec3.subtract(aa.vec3.create(),n[2],n[0]);a=aa.vec3.normalize(aa.vec3.create(),a);const r={bottom:[n[1],n[2]],top:[n[0],n[3]],right:[n[2],n[3]],left:[n[0],n[1]]},s=aa.vec3.add(aa.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(i[0],2)+Math.pow(i[1],2)+Math.pow(i[2],2));return"top"==t||"bottom"==t?o=[aa.vec3.subtract(aa.vec3.create(),s,a.map((e=>e*l))),aa.vec3.add(aa.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(o=[aa.vec3.add(aa.vec3.create(),s,i.map((e=>e*l))),aa.vec3.subtract(aa.vec3.create(),s,i.map((e=>e*l)))]),o})),re(this,"computeCanvasScaleCoordinates",((e,t,n,o,i)=>{let a;if("top"==i||"bottom"==i){const o=t[0][0]-t[1][0];a=[[e.width/2-o/2,n.height],[e.width/2+o/2,n.height]]}else if("left"==i||"right"==i){const n=t[0][1]-t[1][1];a=[[o.width,e.height/2-n/2],[o.width,e.height/2+n/2]]}return a})),re(this,"computeScaleBounds",((e,t,n,o)=>{const i=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-i],top:[a,i],left:[a,i],right:[-a,-i]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[o][0]+r[o][0],width:s[o][1]+r[o][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:o}=e,i=st(this.getToolName(),o.element).filter((e=>e.data.viewportId==o.id))[0],a=e.viewport.canvas;if(!o)return!1;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s={width:a.width,height:a.height},l=i.data.handles.points[0],c=i.data.handles.points[1],d=i.data.handles.points[2],h=i.data.handles.points[3],u=[l,d,c,h],g=aa.vec3.distance(d,h),v=aa.vec3.distance(l,d),m=this.computeScaleBounds(s,.05,.05,n),p=this.computeScaleBounds(s,.05,.05,n),f=this.computeScaleSize(g,v,n),I=this.computeWorldScaleCoordinates(f,n,u).map((e=>o.worldToCanvas(e))),w=this.computeCanvasScaleCoordinates(s,I,p,m,n),E=this.computeEndScaleTicks(w,n),{annotationUID:C}=i;r.annotationUID=C;const _=this.getStyle("lineWidth",r,i),b=this.getStyle("lineDash",r,i),D=this.getStyle("color",r,i),T=this.getStyle("shadow",r,i),S="".concat(C,"-scaleline");rd(t,C,"1",w[0],w[1],{color:D,width:_,lineDash:b,shadow:T},S);const y="".concat(C,"-left");rd(t,C,"2",E.endTick1[0],E.endTick1[1],{color:D,width:_,lineDash:b,shadow:T},y);const M="".concat(C,"-right");rd(t,C,"3",E.endTick2[0],E.endTick2[1],{color:D,width:_,lineDash:b,shadow:T},M);const x={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},O=[w[0][0]+x[n][0],w[0][1]+x[n][1]],P=this._getTextLines(f),{tickIds:A,tickUIDs:R,tickCoordinates:N}=this.computeInnerScaleTicks(f,n,C,E.endTick1,E.endTick2);for(let e=0;e<R.length;e++)rd(t,C,R[e],N[e][0],N[e][1],{color:D,width:_,lineDash:b,shadow:T},A[e]);return ad(t,C,"text0",P,[O[0],O[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:D}),!1}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}re(xw,"toolName",void 0),xw.toolName="ScaleOverlay";const Ow=xw;class Pw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"preMouseDownCallback",(e=>this._deleteNearbyAnnotations(e,"mouse"))),re(this,"preTouchStartCallback",(e=>this._deleteNearbyAnnotations(e,"touch")))}_deleteNearbyAnnotations(e,t){const{renderingEngineId:n,viewportId:o,element:i,currentPoints:a}=e.detail,r=Qo(o,n);if(!r)return!1;const s=r._toolInstances,l=[];for(const e in s){const n=s[e];if("function"!=typeof n.isPointNearTool||"function"!=typeof n.filterInteractableAnnotationsForElement)continue;const o=st(e,i);if(!o)continue;const r=n.filterInteractableAnnotationsForElement(i,o);for(const e of r)n.isPointNearTool(i,e,a.canvas,10,t)&&l.push(e.annotationUID)}for(const e of l)_e(e),mt(e);return e.preventDefault(),!0}}re(Pw,"toolName",void 0),Pw.toolName="Eraser";const Aw=Pw,{transformWorldToIndex:Rw}=ne.utilities;function Nw(e,t){!function(e,t){const{points:n,segmentsLocked:o,segmentIndex:i,segmentationId:a}=t,{viewport:r}=e,s=Fl({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationScalarData:c}=s;let d=n.map((e=>Rw(l,e)));d=d.map((e=>e.map((e=>Math.round(e)))));const h=Or(d,l.getDimensions()),u=r instanceof ne.StackViewport||ou(d),g=l.getDirection(),v=l.getSpacing(),{viewPlaneNormal:m}=r.getCamera(),p=ne.utilities.getSpacingInNormalDirection({direction:g,spacing:v},m),f=Pr(n);let[[I,w],[E,C],[_,b]]=f;I-=p,w+=p,E-=p,C+=p,_-=p,b+=p,yr(l,u?()=>!0:e=>{const[t,n,o]=e;return t>=I&&t<=w&&n>=E&&n<=C&&o>=_&&o<=b},(e=>{let{value:t,index:n}=e;o.includes(t)||(c[n]=i)}),h),Vt(a)}(e,t)}function Lw(e,t){!function(e,t){Nw(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class kw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Nw,ERASE_INSIDE:Lw},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.toolGroupId,u=Sc(h);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:g,segmentationId:v,type:m}=u,p=Nc(v),f=Pc(v),I=Zi(h,g,p),{representationData:w}=Bt(v),E=w[Et.Labelmap],C={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:I},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null}}},_=Qs(o,this.getToolName());if(this.editData={annotation:C,segmentIndex:p,segmentationId:v,segmentsLocked:f,segmentColor:I,viewportIdsToRender:_,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:g},Ot(E,r)){const{volumeId:e}=E,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=E;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,_),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData,{data:r}=o,{currentPoints:s}=t,l=(0,ne.getEnabledElement)(n),{worldToCanvas:c,canvasToWorld:d}=l.viewport,h=s.world,{points:u}=r.handles;let g,v,m,p,f,I,w,E;switch(u[a]=[...h],a){case 0:case 3:g=c(u[0]),p=c(u[3]),v=[p[0],g[1]],m=[g[0],p[1]],I=d(v),w=d(m),u[1]=I,u[2]=w;break;case 1:case 2:v=c(u[1]),m=c(u[2]),g=[m[0],v[1]],p=[v[0],m[1]],f=d(g),E=d(p),u[0]=f,u[3]=E}o.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:C}=l;Ua(C,i)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a}=this.editData,{data:r}=o;if(i&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const s=(0,ne.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{annotation:i}=this.editData,a=i.metadata,r=i.annotationUID,s=i.data,{points:l}=s.handles,c=l.map((e=>o.worldToCanvas(e))),d="rgb(".concat(a.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(Gc(t,r,"0",c[0],c[3],{color:d}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(kw,"toolName",void 0),kw.toolName="RectangleScissor";const Uw=kw;class Vw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:nc,ERASE_INSIDE:dc},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:d,viewUp:h}=c,u=this.toolGroupId,g=Sc(u);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m,type:p}=g,f=Nc(m),I=Pc(m),w=Zi(u,v,f),{representationData:E}=Bt(m),C=E[p];if(!C)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const _={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:w},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},b=[s.id];if(this.editData={annotation:_,centerCanvas:a,segmentIndex:f,segmentationId:m,segmentsLocked:I,segmentColor:w,viewportIdsToRender:b,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:v},Ot(C,s)){const{volumeId:e}=C,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=C;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(l,b),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:u}=c,g=Math.abs(i[0]-h[0]),v=Math.abs(i[1]-h[1]),m=Math.sqrt(g*g+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],I=[h[0]-m,h[1]],w=[h[0]+m,h[1]];u.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a}=this.editData,{data:r}=o,{viewPlaneNormal:s,viewUp:l}=o.metadata;if(i&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const c=(0,ne.getEnabledElement)(n),d={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(c,d)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{viewportIdsToRender:i}=this.editData;if(!i.includes(o.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:c}=l.handles,d=c.map((e=>o.worldToCanvas(e))),h=d[0],u=d[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(vc(t,s,"0",g,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(Vw,"toolName",void 0),Vw.toolName="CircleScissor";const Ww=Vw;class Hw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:sc,ERASE_INSIDE:cc},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:d,viewUp:h}=c,u=this.toolGroupId,g=Sc(u);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m}=g,p=Nc(m),f=Pc(m),I=Zi(u,v,p);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:I},data:{invalidated:!0,handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},E=[s.id];this.editData={annotation:w,centerCanvas:a,segmentationRepresentationUID:v,segmentIndex:p,segmentationId:m,segmentsLocked:f,segmentColor:I,toolGroupId:u,viewportIdsToRender:E,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1};const{representationData:C}=Bt(m),_=C[Et.Labelmap];if(Ot(_,s)){const{volumeId:e}=_,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=_;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(l,E),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:u}=c,g=Math.abs(i[0]-h[0]),v=Math.abs(i[1]-h[1]),m=Math.sqrt(g*g+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],I=[h[0]-m,h[1]],w=[h[0]+m,h[1]];u.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:c}=o,{viewPlaneNormal:d,viewUp:h}=o.metadata;if(i&&!a)return;o.highlighted=!1,c.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const u=(0,ne.getEnabledElement)(n),g={...this.editData,points:c.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:d,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(u,g)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{viewportIdsToRender:i}=this.editData;if(!i.includes(o.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:c}=l.handles,d=c.map((e=>o.worldToCanvas(e))),h=d[0],u=d[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(vc(t,s,"0",g,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(Hw,"toolName",void 0),Hw.toolName="SphereScissor";const Bw=Hw,{transformWorldToIndex:Fw}=ne.utilities;class Gw extends DI{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{numSlicesToPropagate:10,calculatePointsInsideVolume:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l;let h,u,g;if(r instanceof ne.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ne.utilities.getVolumeId(e),u=ne.cache.getVolume(g),h=ne.utilities.getClosestImageId(u,i,c)}const v=ne.utilities.getSpacingInNormalDirection(u,c),m=this._getStartSliceIndex(u,i,v,c),p=this._getEndSliceIndex(u,i,v,c),f=r.getFrameOfReferenceUID(),I={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:f,referencedImageId:h,volumeId:g,spacingInNormal:v,enabledElement:a},data:{label:"",startSlice:m,endSlice:p,handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[]},labelmapUID:null}};gt(I,o);const w=Qs(o,this.getToolName());return this.editData={annotation:I,viewportIdsToRender:w,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,w),I})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const c=this.getTargetId(l.viewport),d=ne.cache.getVolume(c.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(o,d,l),Ua(l.renderingEngine,i),a&&et(o)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e,i=st(this.getToolName(),o.element);if(null==i||!i.length)return n;const a=o.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<i.length;s++){const l=i[s],{annotationUID:c,data:d}=l,{startSlice:h,endSlice:u}=d,{points:g,activeHandleIndex:v}=d.handles;r.annotationUID=c;const m=this.getStyle("lineWidth",r,l),p=this.getStyle("lineDash",r,l),f=this.getStyle("color",r,l),I=g.map((e=>o.worldToCanvas(e))),w=I[0],E=wI(I),{centerPointRadius:C}=this.configuration;if(a<Math.min(h,u)||a>Math.max(h,u))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let _,b=!1;if(a===Math.round((h+u)/2)&&(b=!0),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Ne(c))continue;ge(l)||this.editData||null===v||!b||(_=[I[v]]),_&&Fc(t,c,"0",_,{color:f});let D=m;b&&(D=3);const T="0";vc(t,c,T,w,E,{color:f,lineDash:p,lineWidth:D}),C>0&&E>3*C&&vc(t,c,"".concat(T,"-center"),w,C,{color:f,lineDash:p,lineWidth:m}),n=!0}return n})),this._throttledCalculateCachedStats=Er(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:o}=e,{viewPlaneNormal:i,spacingInNormal:a}=o,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:c}=n.handles,d=Fw(r,c[0]);if(d[2]=s,d[2]!==s)throw new Error("Start slice does not match");const h=aa.vec3.fromValues(d[0],d[1],l),u=aa.vec3.create();r.indexToWorldVec3(d,u);const g=aa.vec3.create();r.indexToWorldVec3(h,g);const v=aa.vec3.distance(u,g),m=[];for(let e=0;e<v;e+=a)m.push(c.map((t=>{const n=aa.vec3.create();return aa.vec3.scaleAndAdd(n,t,i,e),Array.from(n)})));n.cachedStats.projectionPoints=m}_computePointsInsideVolume(e,t,n){const{data:o}=e,{viewport:i}=n,a=o.cachedStats.projectionPoints,r=[[]];for(let e=0;e<a.length;e++){if(!t)continue;const n=a[e][0],o=a[e].map((e=>i.worldToCanvas(e))),[s,l]=EI(o),c=i.canvasToWorld(s),d=i.canvasToWorld(l),h=c,u=d,{dimensions:g,imageData:v}=t,m=Fw(v,h),p=Fw(v,n);m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(p[2]);const f=Fw(v,u);if(f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(p[2]),this._isInsideVolume(m,f,g)){const e=[[Math.min(m[0],f[0]),Math.max(m[0],f[0])],[Math.min(m[1],f[1]),Math.max(m[1],f[1])],[Math.min(m[2],f[2]),Math.max(m[2],f[2])]],t={center:n,xRadius:Math.abs(c[0]-d[0])/2,yRadius:Math.abs(c[1]-d[1])/2,zRadius:Math.abs(c[2]-d[2])/2},o=yr(v,(e=>Yl(t,e)),null,e);r.push(o)}}o.cachedStats.pointsInVolume=r}_calculateCachedStatsTool(e,t){const n=e.data,{viewportId:o,renderingEngineId:i,viewport:a}=t,{cachedStats:r}=n,s=this.getTargetId(a),l=ne.cache.getVolume(s.split(/volumeId:|\?/)[1]);this._computeProjectionPoints(e,l),e.invalidated=!1;const c=ie.ANNOTATION_MODIFIED,d={annotation:e,viewportId:o,renderingEngineId:i};return(0,ne.triggerEvent)(ne.eventTarget,c,d),r}_getStartSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=Math.round(i/2),r=aa.vec3.create();return aa.vec3.scaleAndAdd(r,t,o,a*-n),this._getImageIdIndex(e,r,n,o)}_getEndSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=Math.round(i/2),r=aa.vec3.create();return aa.vec3.scaleAndAdd(r,t,o,a*n),this._getImageIdIndex(e,r,n,o)}_getImageIdIndex(e,t,n,o){const i=n/2,{imageIds:a}=e;let r;for(let e=0;e<a.length;e++){const n=a[e],{imagePositionPatient:s}=ne.metaData.get("imagePlaneModule",n),l=aa.vec3.create();aa.vec3.sub(l,t,s);const c=aa.vec3.dot(l,o);Math.abs(c)<i&&(r=e)}return r}}re(Gw,"toolName",void 0),Gw.toolName="CircleROIStartEndThreshold";const qw=Gw;var jw=C(518),zw=C.n(jw),Kw=C(744),Yw=C.n(Kw),Xw=C(424),Jw=C.n(Xw),Zw=C(614),$w=C.n(Zw);const Qw={ANNOTATED_CUBE:1,AXES:2,CUSTOM:3};class eE extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{orientationWidget:{enabled:!0,viewportCorner:zw().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:eE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[eE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"R",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"L",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:e=>e/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[eE.OVERLAY_MARKER_TYPES.AXES]:{},[eE.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),re(this,"orientationMarkers",void 0),re(this,"polyDataURL",void 0),re(this,"configuration_invalidated",!0),re(this,"onSetToolEnabled",(()=>{this.initViewports(),this.configuration_invalidated=!0})),re(this,"onSetToolActive",(()=>{this.initViewports()})),re(this,"onSetToolDisabled",(()=>{this.cleanUpData()})),this.orientationMarkers={},this.configuration_invalidated=!0}cleanUpData(){(0,ne.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:o}=t;null==o||o.setEnabled(!1),null==o||o.delete(),null==n||n.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,ne.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Js(t,this.getToolName()),t.forEach((e=>this.addAxisActorInViewport(e)))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,o=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:o}=this.orientationMarkers[t];e.getRenderer().removeActor(n),o.setEnabled(!1)}let i;1===n?i=this.createAnnotationCube(o):2===n?i=Jw().newInstance():3===n&&(i=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:c,minPixelSize:d,maxPixelSize:h}=this.configuration.orientationWidget,u=zw().newInstance({actor:i,interactor:r.getInteractor(),parentRenderer:a});u.setEnabled(s),u.setViewportCorner(l),u.setViewportSize(c),u.setMinPixelSize(d),u.setMaxPixelSize(h),u.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:u,actor:i},r.render(),e.getRenderingEngine().render(),this.configuration_invalidated=!1}async createCustomActor(){const e=this.configuration.overlayConfiguration[Qw.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),o=$w().newInstance();o.parseAsArrayBuffer(n),o.update();const i=Di().newInstance();i.shallowCopy(o.getOutputData()),i.getPointData().setActiveScalars("Color");const a=Ei().newInstance();a.setInputData(i),a.setColorModeToDirectScalars();const r=_i().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=Yw().newInstance();return t.setDefaultStyle({...e.defaultStyle}),t.setXPlusFaceProperty({...e.faceProperties.xPlus}),t.setXMinusFaceProperty({...e.faceProperties.xMinus}),t.setYPlusFaceProperty({...e.faceProperties.yPlus}),t.setYMinusFaceProperty({...e.faceProperties.yMinus}),t.setZPlusFaceProperty({...e.faceProperties.zPlus}),t.setZMinusFaceProperty({...e.faceProperties.zMinus}),t}async createAnnotatedCubeActor(){const e=Yw().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const o="set".concat(n.charAt(0).toUpperCase()+n.slice(1),"FaceProperty");e[o](t[n])})),e}}re(eE,"toolName",void 0),re(eE,"CUBE",1),re(eE,"AXIS",2),re(eE,"VTPFILE",3),re(eE,"OVERLAY_MARKER_TYPES",Qw),eE.toolName="OrientationMarker";const tE=eE;class nE extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:nE.SelectMode.Border,searchRadius:6}}),re(this,"hoverTimer",void 0),re(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),re(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),re(this,"onSetToolActive",(()=>{this.hoverTimer=null})),re(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Ye.isInteractingWithTool)return;const{element:t,currentPoints:n}=e.detail,o=n.world,i=(0,ne.getEnabledElement)(t);if(!i)return;const{viewport:a}=i,r=Sc(this.toolGroupId);r&&([Et.Labelmap,Et.Contour].includes(r.type)?this._setActiveSegmentForType(r,o,a):console.warn("SegmentSelectTool does not support the current segmentation type."))}_setActiveSegmentForType(e,t,n){if(!n.getImageData())return;const{segmentationId:o,type:i}=e;let a;if(this.configuration.mode===nE.SelectMode.Inside)a=ih(o,t,{viewport:n});else switch(i){case Et.Labelmap:a=ah(o,t,{viewport:n,searchRadius:this.configuration.searchRadius});break;case Et.Contour:a=sh(o)}if(!a||0===a)return;Rc(o,a);const r=n.getRenderingEngine(),s=r.getViewports().map((e=>e.id));Ut(o),Ua(r,s)}}re(nE,"toolName",void 0),re(nE,"SelectMode",{Inside:"Inside",Border:"Border"}),nE.toolName="SegmentSelectTool";const oE=nE,{transformWorldToIndex:iE,isEqual:aE}=ne.utilities;class rE extends fi{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),e=this,re(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,c=Sc(this.toolGroupId);if(!c)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:d,type:h}=c,u=Nc(d),g=Pc(d),{representationData:v}=Bt(d),m=v[Et.Labelmap];let p,f,I,w;if(Ot(m,r)){const{volumeId:e}=v[h],t=ne.cache.getVolume(e);({dimensions:p,direction:f}=t),I=t.getScalarData(),w=iE(t.imageData,i)}else{const{imageIdReferenceMap:e}=m,t=a.viewport.getCurrentImageId(),n=e.get(t);if(!n)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const o=ne.cache.getImage(n);I=o.getPixelData();const{imageData:s}=r.getImageData();p=s.getDimensions(),f=s.getDirection(),w=iE(s,i)}const E=this.getFixedDimension(l,f);if(void 0===E)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:C,getLabelValue:_,getScalarDataPositionFromPlane:b,inPlaneSeedPoint:D,fixedDimensionValue:T}=this.generateHelpers(I,p,w,E);if(w[0]<0||w[0]>=p[0]||w[1]<0||w[1]>=p[1]||w[2]<0||w[2]>=p[2])return;const S=_(w[0],w[1],w[2]);if(g.includes(S))return;const y=Wl(C,D),{flooded:M}=y;return M.forEach((e=>{const t=b(e[0],e[1]);I[t]=u})),Vt(d,this.getFramesModified(E,T,y)),!0})),re(this,"getFramesModified",((e,t,n)=>{const{boundaries:o}=n;if(2===e)return[t];let i=1/0,a=-1/0;for(let e=0;e<o.length;e++){const t=o[e][1];t<i&&(i=t),t>a&&(a=t)}const r=[];for(let e=i;e<=a;e++)r.push(e);return r})),re(this,"generateHelpers",(function(t,n,o){let i,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:i=o[0],a=[o[1],o[2]];break;case 1:i=o[1],a=[o[0],o[2]];break;case 2:i=o[2],a=[o[0],o[1]];break;default:throw new Error("Invalid fixedDimension: ".concat(r))}const s=(e,t,o)=>o*n[1]*n[0]+t*n[0]+e,l=(e,n,o)=>t[s(e,n,o)],c=e.generateFloodFillGetter(n,r,i,l);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(s,r,i),getLabelValue:l,floodFillGetter:c,inPlaneSeedPoint:a,fixedDimensionValue:i}})),re(this,"generateFloodFillGetter",((e,t,n,o)=>{let i;switch(t){case 0:i=(t,i)=>{if(!(t>=e[1]||t<0||i>=e[2]||i<0))return o(n,t,i)};break;case 1:i=(t,i)=>{if(!(t>=e[0]||t<0||i>=e[2]||i<0))return o(t,n,i)};break;case 2:i=(t,i)=>{if(!(t>=e[0]||t<0||i>=e[1]||i<0))return o(t,i,n)};break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return i})),re(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let o;switch(t){case 0:o=(t,o)=>e(n,t,o);break;case 1:o=(t,o)=>e(t,n,o);break;case 2:o=(t,o)=>e(t,o,n);break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return o}))}getFixedDimension(e,t){const n=t.slice(0,3),o=t.slice(3,6),i=t.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(aE(a,r))return 0;const s=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];if(aE(a,s))return 1;const l=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];return aE(a,l)?2:void 0}}re(rE,"toolName",void 0),rE.toolName="PaintFill";const sE=rE;class lE extends nd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"_configuration",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},active:!0}};gt(u,o);const g=Qs(o,this.getToolName(),!1);return this.editData={annotation:u,viewportUIDsToRender:g,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,g),u})),re(this,"getHandleNearImagePoint",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],i=a.worldToCanvas(t);if(!0==aa.vec2.distance(n,i)<o)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[3]),d=this._getRectangleImageCoordinates([l,c]),h=[n[0],n[1]],{left:u,top:g,width:v,height:m}=d;if(dd([u,g,v,m],h)<=o)return!0})),re(this,"toolSelectedCallback",(function(t,n){const o=t.detail,{element:i}=o,{data:a}=n;a.active=!0;const r=Qs(i,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(i),Dc(i);const s=(0,ne.getEnabledElement)(i),{renderingEngine:l}=s;Ua(l,r),t.preventDefault()})),re(this,"handleSelectedCallback",(function(t,n,o){const i=t.detail,{element:a}=i,{data:r}=n;r.active=!0;let s,l=!1;o.worldPosition||(s=r.handles.points.findIndex((e=>e===o)));const c=Qs(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:c,handleIndex:s},e._activateModify(a),Dc(a);const d=(0,ne.getEnabledElement)(a),{renderingEngine:h}=d;Ua(h,c),t.preventDefault()})),re(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportUIDsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i)})),re(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportUIDsToRender:i,handleIndex:a}=this.editData,{data:r}=o;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=r.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,o=(0,ne.getEnabledElement)(n),{worldToCanvas:i,canvasToWorld:s}=o.viewport,l=e.world,{points:c}=r.handles;let d,h,u,g,v,m,p,f;switch(c[a]=[...l],a){case 0:case 3:d=i(c[0]),g=i(c[3]),h=[g[0],d[1]],u=[d[0],g[1]],m=s(h),p=s(u),c[1]=m,c[2]=p;break;case 1:case 2:h=i(c[1]),u=i(c[2]),d=[u[0],h[1]],g=[h[0],u[1]],v=s(d),f=s(g),c[0]=v,c[3]=f}r.invalidated=!0}this.editData.hasMoved=!0;const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;Ua(l,i)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.TOUCH_END,this._mouseUpCallback),e.addEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_END,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.TOUCH_END,this._mouseUpCallback),e.addEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_END,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;const{viewport:i}=e,{element:a}=i;let r=st(this.getToolName(),a);if(null===(n=r)||void 0===n||!n.length)return!1;if(r=this.filterInteractableAnnotationsForElement(a,r),null===(o=r)||void 0===o||!o.length)return!1;this.getTargetId(i),i.getRenderingEngine();const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<r.length;e++){const n=r[e],{annotationUID:o}=n,a=(n.metadata,n.data),{points:l,activeHandleIndex:c}=a.handles,d=l.map((e=>i.worldToCanvas(e))),h=this.getStyle("lineWidth",s,n),u=this.getStyle("lineDash",s,n),g=this.getStyle("color",s,n);if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let v;this.editData||null===c||(v=[d[c]]),v&&Fc(t,o,"0",v,{color:g}),uf(t,o,"0",d[0],d[3],{color:"black",lineDash:u,lineWidth:h})}})),re(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),re(this,"_calculateCachedStats",((e,t,n,o,i)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=i,c=a.handles.points[0],d=a.handles.points[3],{cachedStats:h}=a,u=Object.keys(h);for(let e=0;e<u.length;e++){const i=u[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(i,o),{dimensions:r,scalarData:s,vtkImageData:l,metadata:g}=a,v=aa.vec3.fromValues(0,0,0),m=aa.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(c,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),l.worldToIndexVec3(d,m),m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),this._isInsideVolume(v,m,r)){this.isHandleOutsideImage=!1;const e=Math.min(v[0],m[0]),o=Math.max(v[0],m[0]),a=Math.min(v[1],m[1]),l=Math.max(v[1],m[1]),u=Math.min(v[2],m[2]),p=Math.max(v[2],m[2]),{worldWidth:f,worldHeight:I}=vI(t,n,c,d),w=f*I;let E=0,C=0,_=0;const b=r[0],D=r[0]*r[1];for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let i=e;i<=o;i++)E++,C+=s[t*D+n*b+i];C/=E;for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let i=e;i<=o;i++){const e=s[t*D+n*b+i]-C;_+=e*e}_/=E,_=Math.sqrt(_),h[i]={Modality:g.Modality,area:w,mean:C,stdDev:_}}else this.isHandleOutsideImage=!0,h[i]={Modality:g.Modality}}a.invalidated=!1;const g=ie.ANNOTATION_MODIFIED,v={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,ne.triggerEvent)(ne.eventTarget,g,v),h})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),re(this,"_getTargetVolumeUID",(e=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const t=e.getVolumeActors();return t||t.length?t[0].uid:void 0})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:o}=t;o.active=!1,o.handles.activeHandleIndex=null;const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const o=e.indexOf(":"),i=e.substring(o+1);n=t.getViewport(i).getImageData()}else n=ne.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return"stackTarget:".concat(e.uid)}}lE.toolName="VideoRedaction";const cE=lE})(),_})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Filters/General/AppendPolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):"function"==typeof define&&define.amd?define(["gl-matrix","@cornerstonejs/core","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/DataModel/PiecewiseFunction","@kitware/vtk.js/Rendering/Core/ColorTransferFunction","@kitware/vtk.js/Common/Core/CellArray","@kitware/vtk.js/Common/Core/Points","@kitware/vtk.js/Common/DataModel/PolyData","@kitware/vtk.js/Filters/General/AppendPolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Common/Core/MatrixBuilder","@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget","@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor","@kitware/vtk.js/Rendering/Core/AxesActor","@kitware/vtk.js/IO/XML/XMLPolyDataReader"],t):"object"==typeof exports?exports.cornerstoneTools3D=t(require("gl-matrix"),require("@cornerstonejs/core"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/DataModel/PiecewiseFunction"),require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"),require("@kitware/vtk.js/Common/Core/CellArray"),require("@kitware/vtk.js/Common/Core/Points"),require("@kitware/vtk.js/Common/DataModel/PolyData"),require("@kitware/vtk.js/Filters/General/AppendPolyData"),require("@kitware/vtk.js/Rendering/Core/Actor"),require("@kitware/vtk.js/Rendering/Core/Mapper"),require("@kitware/vtk.js/Common/Core/MatrixBuilder"),require("@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"),require("@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"),require("@kitware/vtk.js/Rendering/Core/AxesActor"),require("@kitware/vtk.js/IO/XML/XMLPolyDataReader")):e.cornerstoneTools3D=t(e.window,e.cornerstone3D,e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/DataModel/PiecewiseFunction"],e["@kitware/vtk.js/Rendering/Core/ColorTransferFunction"],e["@kitware/vtk.js/Common/Core/CellArray"],e["@kitware/vtk.js/Common/Core/Points"],e["@kitware/vtk.js/Common/DataModel/PolyData"],e["@kitware/vtk.js/Filters/General/AppendPolyData"],e["@kitware/vtk.js/Rendering/Core/Actor"],e["@kitware/vtk.js/Rendering/Core/Mapper"],e["@kitware/vtk.js/Common/Core/MatrixBuilder"],e["@kitware/vtk.js/Interaction/Widgets/OrientationMarkerWidget"],e["@kitware/vtk.js/Rendering/Core/AnnotatedCubeActor"],e["@kitware/vtk.js/Rendering/Core/AxesActor"],e["@kitware/vtk.js/IO/XML/XMLPolyDataReader"])}(self,((e,t,n,o,i,a,r,s,l,c,d,h,u,g,v,m,p,f,I)=>(()=>{var w={907:(e,t,n)=>{e=n.nmd(e);var o="__lodash_hash_undefined__",i=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",c="[object GeneratorFunction]",d="[object Map]",h="[object Number]",u="[object Object]",g="[object Promise]",v="[object RegExp]",m="[object Set]",p="[object String]",f="[object Symbol]",I="[object WeakMap]",w="[object ArrayBuffer]",E="[object DataView]",C="[object Float32Array]",_="[object Float64Array]",b="[object Int8Array]",D="[object Int16Array]",T="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",M="[object Uint16Array]",x="[object Uint32Array]",O=/\w*$/,P=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[w]=R[E]=R[r]=R[s]=R[C]=R[_]=R[b]=R[D]=R[T]=R[d]=R[h]=R[u]=R[v]=R[m]=R[p]=R[f]=R[S]=R[y]=R[M]=R[x]=!0,R["[object Error]"]=R[l]=R[I]=!1;var N="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,L="object"==typeof self&&self&&self.Object===Object&&self,k=N||L||Function("return this")(),U=t&&!t.nodeType&&t,V=U&&e&&!e.nodeType&&e,W=V&&V.exports===U;function H(e,t){return e.set(t[0],t[1]),e}function B(e,t){return e.add(t),e}function F(e,t,n,o){var i=-1,a=e?e.length:0;for(o&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function G(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function q(e){var t=-1,n=Array(e.size);return e.forEach((function(e,o){n[++t]=[o,e]})),n}function j(e,t){return function(n){return e(t(n))}}function z(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}var K,Y=Array.prototype,X=Function.prototype,J=Object.prototype,Z=k["__core-js_shared__"],$=(K=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+K:"",Q=X.toString,ee=J.hasOwnProperty,te=J.toString,ne=RegExp("^"+Q.call(ee).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),oe=W?k.Buffer:void 0,ie=k.Symbol,ae=k.Uint8Array,re=j(Object.getPrototypeOf,Object),se=Object.create,le=J.propertyIsEnumerable,ce=Y.splice,de=Object.getOwnPropertySymbols,he=oe?oe.isBuffer:void 0,ue=j(Object.keys,Object),ge=ke(k,"DataView"),ve=ke(k,"Map"),me=ke(k,"Promise"),pe=ke(k,"Set"),fe=ke(k,"WeakMap"),Ie=ke(Object,"create"),we=Be(ge),Ee=Be(ve),Ce=Be(me),_e=Be(pe),be=Be(fe),De=ie?ie.prototype:void 0,Te=De?De.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function Me(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function xe(e){this.__data__=new ye(e)}function Oe(e,t,n){var o=e[t];ee.call(e,t)&&Fe(o,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Fe(e[n][0],t))return n;return-1}function Ae(e,t,n,o,i,g,I){var P;if(o&&(P=g?o(e,i,g,I):o(e)),void 0!==P)return P;if(!Ke(e))return e;var A=Ge(e);if(A){if(P=function(e){var t=e.length,n=e.constructor(t);return t&&"string"==typeof e[0]&&ee.call(e,"index")&&(n.index=e.index,n.input=e.input),n}(e),!t)return function(e,t){var n=-1,o=e.length;for(t||(t=Array(o));++n<o;)t[n]=e[n];return t}(e,P)}else{var N=Ve(e),L=N==l||N==c;if(je(e))return function(e,t){if(t)return e.slice();var n=new e.constructor(e.length);return e.copy(n),n}(e,t);if(N==u||N==a||L&&!g){if(G(e))return g?e:{};if(P=function(e){return"function"!=typeof e.constructor||He(e)?{}:Ke(t=re(e))?se(t):{};var t}(L?{}:e),!t)return function(e,t){return Ne(e,Ue(e),t)}(e,function(e,t){return e&&Ne(t,Ye(t),e)}(P,e))}else{if(!R[N])return g?e:{};P=function(e,t,n,o){var i,a=e.constructor;switch(t){case w:return Re(e);case r:case s:return new a(+e);case E:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,o);case C:case _:case b:case D:case T:case S:case y:case M:case x:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,o);case d:return function(e,t,n){return F(t?n(q(e),!0):q(e),H,new e.constructor)}(e,o,n);case h:case p:return new a(e);case v:return function(e){var t=new e.constructor(e.source,O.exec(e));return t.lastIndex=e.lastIndex,t}(e);case m:return function(e,t,n){return F(t?n(z(e),!0):z(e),B,new e.constructor)}(e,o,n);case f:return i=e,Te?Object(Te.call(i)):{}}}(e,N,Ae,t)}}I||(I=new xe);var k=I.get(e);if(k)return k;if(I.set(e,P),!A)var U=n?function(e){return function(e,t,n){var o=t(e);return Ge(e)?o:function(e,t){for(var n=-1,o=t.length,i=e.length;++n<o;)e[i+n]=t[n];return e}(o,n(e))}(e,Ye,Ue)}(e):Ye(e);return function(e,t){for(var n=-1,o=e?e.length:0;++n<o&&!1!==t(e[n],n););}(U||e,(function(i,a){U&&(i=e[a=i]),Oe(P,a,Ae(i,t,n,o,a,e,I))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Ne(e,t,n,o){n||(n={});for(var i=-1,a=t.length;++i<a;){var r=t[i],s=o?o(n[r],e[r],r,n,e):void 0;Oe(n,r,void 0===s?e[r]:s)}return n}function Le(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function ke(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){return!(!Ke(e)||(t=e,$&&$ in t))&&(ze(e)||G(e)?ne:P).test(Be(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=Ie?Ie(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(Ie){var n=t[e];return n===o?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return Ie?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=Ie&&void 0===t?o:t,this},ye.prototype.clear=function(){this.__data__=[]},ye.prototype.delete=function(e){var t=this.__data__,n=Pe(t,e);return!(n<0||(n==t.length-1?t.pop():ce.call(t,n,1),0))},ye.prototype.get=function(e){var t=this.__data__,n=Pe(t,e);return n<0?void 0:t[n][1]},ye.prototype.has=function(e){return Pe(this.__data__,e)>-1},ye.prototype.set=function(e,t){var n=this.__data__,o=Pe(n,e);return o<0?n.push([e,t]):n[o][1]=t,this},Me.prototype.clear=function(){this.__data__={hash:new Se,map:new(ve||ye),string:new Se}},Me.prototype.delete=function(e){return Le(this,e).delete(e)},Me.prototype.get=function(e){return Le(this,e).get(e)},Me.prototype.has=function(e){return Le(this,e).has(e)},Me.prototype.set=function(e,t){return Le(this,e).set(e,t),this},xe.prototype.clear=function(){this.__data__=new ye},xe.prototype.delete=function(e){return this.__data__.delete(e)},xe.prototype.get=function(e){return this.__data__.get(e)},xe.prototype.has=function(e){return this.__data__.has(e)},xe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var o=n.__data__;if(!ve||o.length<199)return o.push([e,t]),this;n=this.__data__=new Me(o)}return n.set(e,t),this};var Ue=de?j(de,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?i:t)&&("number"==typeof e||A.test(e))&&e>-1&&e%1==0&&e<t}function He(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||J)}function Be(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Fe(e,t){return e===t||e!=e&&t!=t}(ge&&Ve(new ge(new ArrayBuffer(1)))!=E||ve&&Ve(new ve)!=d||me&&Ve(me.resolve())!=g||pe&&Ve(new pe)!=m||fe&&Ve(new fe)!=I)&&(Ve=function(e){var t=te.call(e),n=t==u?e.constructor:void 0,o=n?Be(n):void 0;if(o)switch(o){case we:return E;case Ee:return d;case Ce:return g;case _e:return m;case be:return I}return t});var Ge=Array.isArray;function qe(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=i}(e.length)&&!ze(e)}var je=he||function(){return!1};function ze(e){var t=Ke(e)?te.call(e):"";return t==l||t==c}function Ke(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ye(e){return qe(e)?function(e,t){var n=Ge(e)||function(e){return function(e){return function(e){return!!e&&"object"==typeof e}(e)&&qe(e)}(e)&&ee.call(e,"callee")&&(!le.call(e,"callee")||te.call(e)==a)}(e)?function(e,t){for(var n=-1,o=Array(e);++n<e;)o[n]=t(n);return o}(e.length,String):[],o=n.length,i=!!o;for(var r in e)!t&&!ee.call(e,r)||i&&("length"==r||We(r,o))||n.push(r);return n}(e):function(e){if(!He(e))return ue(e);var t=[];for(var n in Object(e))ee.call(e,n)&&"constructor"!=n&&t.push(n);return t}(e)}e.exports=function(e){return Ae(e,!0,!0)}},485:(e,t,n)=>{var o,i="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",c=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,d=/^\w*$/,h=/^\./,u=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,g=/\\(\\)?/g,v=/^\[object .+?Constructor\]$/,m="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p="object"==typeof self&&self&&self.Object===Object&&self,f=m||p||Function("return this")(),I=Array.prototype,w=Function.prototype,E=Object.prototype,C=f["__core-js_shared__"],_=(o=/[^.]+$/.exec(C&&C.keys&&C.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"",b=w.toString,D=E.hasOwnProperty,T=E.toString,S=RegExp("^"+b.call(D).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,M=I.splice,x=V(f,"Map"),O=V(Object,"create"),P=y?y.prototype:void 0,A=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function N(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function L(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var o=e[t];this.set(o[0],o[1])}}function k(e,t){for(var n,o,i=e.length;i--;)if((n=e[i][0])===(o=t)||n!=n&&o!=o)return i;return-1}function U(e,t){var n,o,i=e.__data__;return("string"==(o=typeof(n=t))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==n:null===n)?i["string"==typeof t?"string":"hash"]:i.map}function V(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!G(e)||_&&_ in e)return!1;var t=function(e){var t=G(e)?T.call(e):"";return t==r||t==s}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?S:v;return t.test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(n)?n:void 0}R.prototype.clear=function(){this.__data__=O?O(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(O){var n=t[e];return n===i?void 0:n}return D.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return O?void 0!==t[e]:D.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=O&&void 0===t?i:t,this},N.prototype.clear=function(){this.__data__=[]},N.prototype.delete=function(e){var t=this.__data__,n=k(t,e);return!(n<0||(n==t.length-1?t.pop():M.call(t,n,1),0))},N.prototype.get=function(e){var t=this.__data__,n=k(t,e);return n<0?void 0:t[n][1]},N.prototype.has=function(e){return k(this.__data__,e)>-1},N.prototype.set=function(e,t){var n=this.__data__,o=k(n,e);return o<0?n.push([e,t]):n[o][1]=t,this},L.prototype.clear=function(){this.__data__={hash:new R,map:new(x||N),string:new R}},L.prototype.delete=function(e){return U(this,e).delete(e)},L.prototype.get=function(e){return U(this,e).get(e)},L.prototype.has=function(e){return U(this,e).has(e)},L.prototype.set=function(e,t){return U(this,e).set(e,t),this};var W=B((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return A?A.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(u,(function(e,t,o,i){n.push(o?i.replace(g,"$1"):t||e)})),n}));function H(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function B(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var o=arguments,i=t?t.apply(this,o):o[0],a=n.cache;if(a.has(i))return a.get(i);var r=e.apply(this,o);return n.cache=a.set(i,r),r};return n.cache=new(B.Cache||L),n}B.Cache=L;var F=Array.isArray;function G(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function q(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&T.call(e)==l}e.exports=function(e,t,n){var o=null==e?void 0:function(e,t){var n;t=function(e,t){if(F(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!q(e))||d.test(e)||!c.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:F(n=t)?n:W(n);for(var o=0,i=t.length;null!=e&&o<i;)e=e[H(t[o++])];return o&&o==i?e:void 0}(e,t);return void 0===o?n:o}},396:e=>{"use strict";e.exports=l},785:e=>{"use strict";e.exports=i},807:e=>{"use strict";e.exports=n},847:e=>{"use strict";e.exports=v},348:e=>{"use strict";e.exports=c},283:e=>{"use strict";e.exports=a},441:e=>{"use strict";e.exports=r},70:e=>{"use strict";e.exports=d},127:e=>{"use strict";e.exports=h},543:e=>{"use strict";e.exports=o},614:e=>{"use strict";e.exports=I},518:e=>{"use strict";e.exports=m},474:e=>{"use strict";e.exports=u},744:e=>{"use strict";e.exports=p},424:e=>{"use strict";e.exports=f},795:e=>{"use strict";e.exports=s},610:e=>{"use strict";e.exports=g},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},E={};function C(e){var t=E[e];if(void 0!==t)return t.exports;var n=E[e]={id:e,loaded:!1,exports:{}};return w[e](n,n.exports,C),n.loaded=!0,n.exports}C.m=w,C.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return C.d(t,{a:t}),t},C.d=(e,t)=>{for(var n in t)C.o(t,n)&&!C.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},C.u=e=>e+".index.js",C.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),C.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),C.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},C.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;C.g.importScripts&&(e=C.g.location+"");var t=C.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&!e;)e=n[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),C.p=e})(),C.b=document.baseURI||self.location.href;var _={};return(()=>{"use strict";C.r(_),C.d(_,{AdvancedMagnifyTool:()=>Tw,AngleTool:()=>nw,AnnotationDisplayTool:()=>ed,AnnotationTool:()=>nd,ArrowAnnotateTool:()=>QI,BaseTool:()=>fi,BidirectionalTool:()=>$d,BrushTool:()=>kc,CONSTANTS:()=>j,CircleROIStartEndThresholdTool:()=>qw,CircleROITool:()=>DI,CircleScissorsTool:()=>Ww,CobbAngleTool:()=>rw,CrosshairsTool:()=>oI,DragProbeTool:()=>Mf,EllipticalROITool:()=>II,Enums:()=>te,EraserTool:()=>Aw,KeyImageTool:()=>vw,LengthTool:()=>Yf,LivewireContourSegmentationTool:()=>XI,LivewireContourTool:()=>KI,MIPJumpToClickTool:()=>qf,MagnifyTool:()=>fw,OrientationMarkerTool:()=>tE,OverlayGridTool:()=>cI,PaintFillTool:()=>sE,PanTool:()=>wf,PlanarFreehandContourSegmentationTool:()=>_v,PlanarFreehandROITool:()=>Ev,PlanarRotateTool:()=>Uf,ProbeTool:()=>Tf,RectangleROIStartEndThresholdTool:()=>Md,RectangleROIThresholdTool:()=>Td,RectangleROITool:()=>bd,RectangleScissorsTool:()=>Uw,ReferenceCursors:()=>yw,ReferenceLines:()=>rI,ReferenceLinesTool:()=>rI,ScaleOverlayTool:()=>Ow,SegmentSelectTool:()=>oE,SegmentationDisplayTool:()=>xv,SegmentationIntersectionTool:()=>gI,SphereScissorsTool:()=>Bw,SplineContourSegmentationTool:()=>WI,SplineROITool:()=>UI,StackScrollMouseWheelTool:()=>Wf,StackScrollTool:()=>Nf,Synchronizer:()=>sp,SynchronizerManager:()=>G,ToolGroupManager:()=>q,TrackballRotateTool:()=>Cf,Types:()=>X,UltrasoundDirectionalTool:()=>dw,VideoRedactionTool:()=>cE,VolumeRotateMouseWheelTool:()=>Ff,WindowLevelTool:()=>Of,ZoomTool:()=>Af,addTool:()=>il,annotation:()=>Z,cancelActiveManipulations:()=>ip,cursors:()=>Y,destroy:()=>tp,drawing:()=>K,init:()=>ep,removeTool:()=>al,segmentation:()=>ee,state:()=>Ye,synchronizers:()=>z,utilities:()=>F});var e={};C.r(e),C.d(e,{checkAndDefineIsLockedProperty:()=>me,getAnnotationsLocked:()=>ue,getAnnotationsLockedCount:()=>ve,isAnnotationLocked:()=>ge,setAnnotationLocked:()=>de,unlockAllAnnotations:()=>he});var t={};C.r(t),C.d(t,{deselectAnnotation:()=>be,getAnnotationsSelected:()=>De,getAnnotationsSelectedByToolName:()=>Te,getAnnotationsSelectedCount:()=>ye,isAnnotationSelected:()=>Se,setAnnotationSelected:()=>_e});var n={};C.r(n),C.d(n,{checkAndDefineIsVisibleProperty:()=>Le,isAnnotationVisible:()=>Ne,setAnnotationVisibility:()=>Ae,showAllAnnotations:()=>Re});var o={};C.r(o),C.d(o,{addAnnotation:()=>gt,addChildAnnotation:()=>dt,clearParentAnnotation:()=>ct,getAllAnnotations:()=>lt,getAnnotation:()=>pt,getAnnotationManager:()=>it,getAnnotations:()=>st,getChildAnnotations:()=>ut,getNumberOfAnnotations:()=>vt,getParentAnnotation:()=>ht,invalidateAnnotation:()=>It,removeAllAnnotations:()=>ft,removeAnnotation:()=>mt,resetAnnotationManager:()=>rt,setAnnotationManager:()=>at});var i={};C.r(i),C.d(i,{triggerSegmentationDataModified:()=>Vt,triggerSegmentationModified:()=>Ut,triggerSegmentationRemoved:()=>Nt,triggerSegmentationRepresentationModified:()=>kt,triggerSegmentationRepresentationRemoved:()=>Lt});var a={};C.r(a),C.d(a,{addColorLUT:()=>gn,addSegmentation:()=>Gt,addSegmentationRepresentation:()=>nn,findSegmentationRepresentationByUID:()=>Kt,getAllSegmentationRepresentations:()=>jt,getColorLUT:()=>hn,getDefaultSegmentationStateManager:()=>Ht,getGlobalConfig:()=>on,getNextColorLUTIndex:()=>un,getSegmentSpecificRepresentationConfig:()=>Qt,getSegmentation:()=>Bt,getSegmentationIdRepresentations:()=>zt,getSegmentationRepresentationByUID:()=>rn,getSegmentationRepresentationSpecificConfig:()=>$t,getSegmentationRepresentations:()=>qt,getSegmentations:()=>Ft,getToolGroupIdFromSegmentationRepresentationUID:()=>tn,getToolGroupIdsWithSegmentation:()=>Yt,getToolGroupSpecificConfig:()=>Xt,removeColorLUT:()=>dn,removeSegmentation:()=>sn,removeSegmentationRepresentation:()=>ln,removeSegmentationRepresentations:()=>cn,setGlobalConfig:()=>an,setSegmentSpecificRepresentationConfig:()=>en,setSegmentationRepresentationSpecificConfig:()=>Zt,setToolGroupSpecificConfig:()=>Jt});var r={};C.r(r),C.d(r,{copyPoints:()=>go,copyPointsList:()=>uo,getDeltaDistance:()=>lo,getDeltaDistanceBetweenIPoints:()=>ho,getDeltaPoints:()=>so,getDeltaRotation:()=>co,getMeanPoints:()=>vo,getMeanTouchPoints:()=>mo});var s={};C.r(s),C.d(s,{getSegmentVisibility:()=>mi,getSegmentationVisibility:()=>ui,setSegmentVisibility:()=>vi,setSegmentationVisibility:()=>hi,setSegmentsVisibility:()=>gi});var l={};C.r(l),C.d(l,{addColorLUT:()=>Xi,getColorForSegmentIndex:()=>Zi,setColorForSegmentIndex:()=>$i,setColorLUT:()=>Ji});var c={};C.r(c),C.d(c,{InterpolationManager:()=>yl});var d={};C.r(d),C.d(d,{AnnotationToPointData:()=>ns,acceptAutogeneratedInterpolations:()=>xl,areCoplanarContours:()=>Br,calculatePerimeter:()=>Al,contourFinder:()=>jr,detectContourHoles:()=>Kr,findHandlePolylineIndex:()=>Pl,generateContourSetsFromLabelmap:()=>Zr,getContourHolesDataCanvas:()=>is,getContourHolesDataWorld:()=>os,getDeduplicatedVTKPolyDataPoints:()=>zr,interpolation:()=>c,updateContourPolyline:()=>us});var h={};C.r(h),C.d(h,{hideElementCursor:()=>Dc,initElementCursor:()=>Cc,resetElementCursor:()=>bc,setElementCursor:()=>_c});var u={};C.r(u),C.d(u,{getActiveSegmentation:()=>yc,getActiveSegmentationRepresentation:()=>Sc,setActiveSegmentationRepresentation:()=>Mc});var g={};C.r(g),C.d(g,{getLockedSegments:()=>Pc,isSegmentIndexLocked:()=>xc,setSegmentIndexLocked:()=>Oc});var v={};C.r(v),C.d(v,{getActiveSegmentIndex:()=>Nc,setActiveSegmentIndex:()=>Rc});var m={};C.r(m),C.d(m,{contourAndFindLargestBidirectional:()=>jd,createBidirectionalToolData:()=>zd,createImageIdReferenceMap:()=>ga,createLabelmapVolumeForViewport:()=>Ld,createMergedLabelmapForIndex:()=>Ad,floodFill:()=>Wl,getBrushSizeForToolGroup:()=>Ud,getBrushThresholdForToolGroup:()=>Wd,getBrushToolInstances:()=>Uc,getDefaultRepresentationConfig:()=>Nd,getHoveredContourSegmentationAnnotation:()=>sh,getSegmentAtLabelmapBorder:()=>ah,getSegmentAtWorldPoint:()=>ih,getUniqueSegmentIndices:()=>Rt,invalidateBrushCursor:()=>Ac,isValidRepresentationConfig:()=>Rd,rectangleROIThresholdVolumeByRange:()=>Pd,segmentContourAction:()=>Qd,setBrushSizeForToolGroup:()=>kd,setBrushThresholdForToolGroup:()=>Vd,thresholdSegmentationByRange:()=>Hd,thresholdVolumeByRange:()=>Hc,triggerSegmentationRender:()=>Pv});var p={};C.r(p),C.d(p,{getTextBoxCoordsCanvas:()=>hd});var f={};C.r(f),C.d(f,{distanceToPoint:()=>ch,distanceToPointSquared:()=>lh,intersectAABB:()=>bs});var I={};C.r(I),C.d(I,{BasicStatsCalculator:()=>Id,Calculator:()=>pd});var w={};C.r(w),C.d(w,{getCanvasEllipseCorners:()=>Kl,pointInEllipse:()=>Yl,precalculatePointInEllipse:()=>Xl});var E={};C.r(E),C.d(E,{distanceToPoint:()=>cd,distanceToPointSquared:()=>ss,distanceToPointSquaredInfo:()=>rs,intersectLine:()=>Yd,isPointOnLineSegment:()=>Ls});var b={};C.r(b),C.d(b,{distanceToPoint:()=>dh,distanceToPointSquared:()=>as,mirror:()=>hh});var D={};C.r(D),C.d(D,{addCanvasPointsToArray:()=>wh,containsPoint:()=>Os,containsPoints:()=>Ps,decimate:()=>cs,getAABB:()=>_s,getArea:()=>uh,getClosestLineSegmentIntersection:()=>mh,getFirstLineSegmentIntersectionIndexes:()=>ys,getLineSegmentIntersectionsCoordinates:()=>vh,getLineSegmentIntersectionsIndexes:()=>As,getNormal2:()=>Rs,getNormal3:()=>gh,getSignedArea:()=>ds,getSubPixelSpacingAndXYDirections:()=>fh,getWindingDirection:()=>hs,intersectPolyline:()=>Ms,isClosed:()=>xs,isPointInsidePolyline3D:()=>oh,mergePolylines:()=>qs,pointCanProjectOnLine:()=>Eh,pointsAreWithinCloseContourProximity:()=>Ih,projectTo2D:()=>nh,subtractPolylines:()=>js});var T={};C.r(T),C.d(T,{distanceToPoint:()=>dd});var S={};C.r(S),C.d(S,{findClosestPoint:()=>sd,liangBarksyClip:()=>Th});var y={};C.r(y),C.d(y,{BasicStatsCalculator:()=>I,aabb:()=>f,ellipse:()=>w,lineSegment:()=>E,point:()=>b,polyline:()=>D,rectangle:()=>T,vec2:()=>S});var M={};C.r(M),C.d(M,{default:()=>Ph,filterAnnotationsForDisplay:()=>Kc,filterAnnotationsWithinSlice:()=>zc,getPointInLineOfSightWithCriteria:()=>Mh,getWorldWidthAndHeightFromCorners:()=>ud,isPlaneIntersectingAABB:()=>Oh});var x={};C.r(x),C.d(x,{filterViewportsWithFrameOfReferenceUID:()=>zs,filterViewportsWithParallelNormals:()=>$s,filterViewportsWithToolEnabled:()=>Js,getViewportIdsWithToolToRender:()=>Qs});var O={};C.r(O),C.d(O,{getOrientationStringLPS:()=>Ah,invertOrientationStringLPS:()=>Rh});var P={};C.r(P),C.d(P,{Events:()=>Lh,addToolState:()=>Uh,getToolState:()=>Vh,playClip:()=>Gh,stopClip:()=>qh});var A={};C.r(A),C.d(A,{extend2DBoundingBoxInViewAxis:()=>xd,getBoundingBoxAroundShape:()=>Or,getBoundingBoxAroundShapeIJK:()=>Or,getBoundingBoxAroundShapeWorld:()=>Pr});var R={};C.r(R),C.d(R,{default:()=>eu,smoothAnnotation:()=>Qh});var N={};C.r(N),C.d(N,{getBoundsIJKFromRectangleAnnotations:()=>Od,isAxisAlignedRectangle:()=>ou});var L={};C.r(L),C.d(L,{isViewportPreScaled:()=>vd,jumpToSlice:()=>Sr,jumpToWorld:()=>Tu});var k={};C.r(k),C.d(k,{generateImageFromTimeData:()=>yu,getDataInTime:()=>Su});var U={};C.r(U),C.d(U,{getPoint:()=>Mu,getPolyDataPointIndexes:()=>xu,getPolyDataPoints:()=>Ou});var V={};C.r(V),C.d(V,{ColorbarRangeTextPosition:()=>Pu});var W={};C.r(W),C.d(W,{Colorbar:()=>Fu,Enums:()=>V,ViewportColorbar:()=>ju});var H={};C.r(H),C.d(H,{colorbar:()=>W});var B={};C.r(B),C.d(B,{addContourSegmentationAnnotation:()=>ol,areSameSegment:()=>tl,isContourSegmentationAnnotation:()=>el,removeContourSegmentationAnnotation:()=>nl});var F={};C.r(F),C.d(F,{annotationFrameRange:()=>Nr,boundingBox:()=>A,calibrateImageSpacing:()=>br,cine:()=>P,clip:()=>Cr,contourSegmentation:()=>B,contours:()=>d,debounce:()=>Gi,drawing:()=>p,dynamicVolume:()=>k,getAnnotationNearPoint:()=>fr,getAnnotationNearPointOnEnabledElement:()=>Ir,getCalibratedAreaUnits:()=>ur,getCalibratedLengthUnits:()=>dr,getCalibratedScale:()=>gr,getSphereBoundsInfo:()=>Rr,getViewportForAnnotation:()=>Hr,isObject:()=>Fi,jumpToSlice:()=>Sr,math:()=>y,orientation:()=>O,planar:()=>M,planarFreehandROITool:()=>R,pointInShapeCallback:()=>yr,pointInSurroundingSphereCallback:()=>Ur,pointToString:()=>xi,polyDataUtils:()=>U,rectangleROITool:()=>N,roundNumber:()=>zu,scroll:()=>Tr,segmentation:()=>m,stackContextPrefetch:()=>Du,stackPrefetch:()=>Iu,throttle:()=>Er,touch:()=>r,triggerAnnotationRender:()=>ka,triggerAnnotationRenderForToolGroupIds:()=>Dr,triggerAnnotationRenderForViewportIds:()=>Ua,triggerEvent:()=>ne.triggerEvent,viewport:()=>L,viewportFilters:()=>x,voi:()=>H});var G={};C.r(G),C.d(G,{createSynchronizer:()=>lp,destroy:()=>cp,destroySynchronizer:()=>up,getAllSynchronizers:()=>hp,getSynchronizer:()=>dp,getSynchronizersForViewport:()=>Wm});var q={};C.r(q),C.d(q,{createToolGroup:()=>Hp,destroy:()=>$m,destroyToolGroup:()=>Zm,getAllToolGroups:()=>Bp,getToolGroup:()=>ei,getToolGroupForViewport:()=>Qo,getToolGroupsWithToolName:()=>$e});var j={};C.r(j),C.d(j,{COLOR_LUT:()=>Ta});var z={};C.r(z),C.d(z,{createCameraPositionSynchronizer:()=>qp,createImageSliceSynchronizer:()=>of,createPresentationViewSynchronizer:()=>Kp,createSlabThicknessSynchronizer:()=>sf,createStackImageSynchronizer:()=>lf,createVOISynchronizer:()=>Xp,createZoomPanSynchronizer:()=>$p});var K={};C.r(K),C.d(K,{draw:()=>Oa,drawArrow:()=>hf,drawCircle:()=>vc,drawEllipse:()=>df,drawEllipseByCoordinates:()=>cf,drawHandle:()=>Bc,drawHandles:()=>Fc,drawLine:()=>rd,drawLinkedTextBox:()=>ld,drawPath:()=>tv,drawPolyline:()=>nv,drawRect:()=>Gc,drawRedactionRect:()=>uf,drawTextBox:()=>ad,setAttributesIfNecessary:()=>uc,setNewAttributesIfValid:()=>gc});var Y={};C.r(Y),C.d(Y,{CursorNames:()=>vf,CursorSVG:()=>bp,ImageMouseCursor:()=>mp,MouseCursor:()=>fc,SVGMouseCursor:()=>xp,elementCursor:()=>h,registerCursor:()=>Tp,setCursorForElement:()=>gf});var X={};C.r(X);var J={};C.r(J),C.d(J,{getFont:()=>mf,getState:()=>$c,style:()=>Yc});var Z={};C.r(Z),C.d(Z,{AnnotationGroup:()=>pf,FrameOfReferenceSpecificAnnotationManager:()=>Ge,config:()=>J,locking:()=>e,selection:()=>t,state:()=>o,visibility:()=>n});var $={};C.r($),C.d($,{color:()=>l,getGlobalConfig:()=>ti,getGlobalRepresentationConfig:()=>oi,getSegmentSpecificConfig:()=>ci,getSegmentationRepresentationSpecificConfig:()=>si,getToolGroupSpecificConfig:()=>ai,setGlobalConfig:()=>ni,setGlobalRepresentationConfig:()=>ii,setSegmentSpecificConfig:()=>di,setSegmentationRepresentationSpecificConfig:()=>li,setToolGroupSpecificConfig:()=>ri,visibility:()=>s});var Q={};C.r(Q),C.d(Q,{canComputeRequestedRepresentation:()=>Hi,computeAndAddContourRepresentation:()=>Dv,computeAndAddLabelmapRepresentation:()=>pa,computeAndAddSurfaceRepresentation:()=>qa});var ee={};C.r(ee),C.d(ee,{activeSegmentation:()=>u,addRepresentationData:()=>Bi,addSegmentationRepresentations:()=>Va,addSegmentations:()=>ff,config:()=>$,convertStackToVolumeSegmentation:()=>Ha,convertVolumeToStackSegmentation:()=>ma,polySeg:()=>Q,removeSegmentationsFromToolGroup:()=>Jm,segmentIndex:()=>v,segmentLocking:()=>g,state:()=>a,triggerSegmentationEvents:()=>i});var te={};C.r(te),C.d(te,{AnnotationStyleStates:()=>Zc,ChangeTypes:()=>je,Events:()=>ie,KeyboardBindings:()=>$u,MouseBindings:()=>Zu,SegmentationRepresentations:()=>Et,StrategyCallbacks:()=>Nl,Swipe:()=>ao,ToolModes:()=>Je,WorkerTypes:()=>Mi});var ne=C(953),oe=function(e){return e.TOOL_ACTIVATED="CORNERSTONE_TOOLS_TOOL_ACTIVATED",e.TOOL_MODE_CHANGED="CORNERSTONE_TOOLS_TOOL_MODE_CHANGED",e.ANNOTATION_ADDED="CORNERSTONE_TOOLS_ANNOTATION_ADDED",e.ANNOTATION_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_COMPLETED",e.ANNOTATION_MODIFIED="CORNERSTONE_TOOLS_ANNOTATION_MODIFIED",e.ANNOTATION_REMOVED="CORNERSTONE_TOOLS_ANNOTATION_REMOVED",e.ANNOTATION_SELECTION_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_SELECTION_CHANGE",e.ANNOTATION_LOCK_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_LOCK_CHANGE",e.ANNOTATION_VISIBILITY_CHANGE="CORNERSTONE_TOOLS_ANNOTATION_VISIBILITY_CHANGE",e.ANNOTATION_RENDERED="CORNERSTONE_TOOLS_ANNOTATION_RENDERED",e.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED="CORNERSTONE_TOOLS_ANNOTATION_INTERPOLATION_PROCESS_COMPLETED",e.INTERPOLATED_ANNOTATIONS_REMOVED="CORNERSTONE_TOOLS_INTERPOLATED_ANNOTATIONS_REMOVED",e.SEGMENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_MODIFIED",e.SEGMENTATION_RENDERED="CORNERSTONE_TOOLS_SEGMENTATION_RENDERED",e.SEGMENTATION_REPRESENTATION_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_MODIFIED",e.SEGMENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REMOVED",e.SEGMENTATION_REPRESENTATION_REMOVED="CORNERSTONE_TOOLS_SEGMENTATION_REPRESENTATION_REMOVED",e.SEGMENTATION_DATA_MODIFIED="CORNERSTONE_TOOLS_SEGMENTATION_DATA_MODIFIED",e.KEY_DOWN="CORNERSTONE_TOOLS_KEY_DOWN",e.KEY_UP="CORNERSTONE_TOOLS_KEY_UP",e.MOUSE_DOWN="CORNERSTONE_TOOLS_MOUSE_DOWN",e.MOUSE_UP="CORNERSTONE_TOOLS_MOUSE_UP",e.MOUSE_DOWN_ACTIVATE="CORNERSTONE_TOOLS_MOUSE_DOWN_ACTIVATE",e.MOUSE_DRAG="CORNERSTONE_TOOLS_MOUSE_DRAG",e.MOUSE_MOVE="CORNERSTONE_TOOLS_MOUSE_MOVE",e.MOUSE_CLICK="CORNERSTONE_TOOLS_MOUSE_CLICK",e.MOUSE_DOUBLE_CLICK="CORNERSTONE_TOOLS_MOUSE_DOUBLE_CLICK",e.MOUSE_WHEEL="CORNERSTONE_TOOLS_MOUSE_WHEEL",e.TOUCH_START="CORNERSTONE_TOOLS_TOUCH_START",e.TOUCH_START_ACTIVATE="CORNERSTONE_TOOLS_TOUCH_START_ACTIVATE",e.TOUCH_PRESS="CORNERSTONE_TOOLS_TOUCH_PRESS",e.TOUCH_DRAG="CORNERSTONE_TOOLS_TOUCH_DRAG",e.TOUCH_END="CORNERSTONE_TOOLS_TOUCH_END",e.TOUCH_TAP="CORNERSTONE_TOOLS_TAP",e.TOUCH_SWIPE="CORNERSTONE_TOOLS_SWIPE",e}(oe||{});const ie=oe;function ae(e){return ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ae(e)}function re(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ae(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,"string");if("object"!==ae(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ae(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var se=C(907),le=C.n(se);const ce=new Set;function de(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=pe();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,ce,n):fe(e,ce,n)),Ie(n,ce)}function he(){const e=pe();!function(e,t){e.forEach((n=>{fe(n,e,t)}))}(ce,e),Ie(e,ce)}function ue(){return Array.from(ce)}function ge(e){return ce.has(e)}function ve(){return ce.size}function me(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==we||t.get!==Ee):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:we,get:Ee}),de(e,t)}}function pe(){return Object.freeze({added:[],removed:[],locked:[]})}function fe(e,t,n){t.delete(e)&&n.removed.push(e)}function Ie(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_LOCK_CHANGE,e))}function we(e){de(this,e)}function Ee(){return ge(this)}const Ce=new Set;function _e(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?be(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=Me();t||xe(Ce,n),e&&!Ce.has(e)&&(Ce.add(e),n.added.push(e)),Oe(n,Ce)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function be(e){const t=Me();e?Ce.delete(e)&&t.removed.push(e):xe(Ce,t),Oe(t,Ce)}function De(){return Array.from(Ce)}function Te(e){return De().filter((t=>{var n;const o=pt(t);return(null==o||null===(n=o.metadata)||void 0===n?void 0:n.toolName)===e}))}function Se(e){return Ce.has(e)}function ye(){return Ce.size}function Me(){return Object.freeze({added:[],removed:[],selection:[]})}function xe(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function Oe(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_SELECTION_CHANGE,e))}const Pe=new Set;function Ae(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ke();e&&(t?Ue(e,Pe,n):function(e,t,n){t.has(e)||(t.add(e),Se(e)&&be(e),n.lastHidden.push(e))}(e,Pe,n)),Ve(n)}function Re(){const e=ke();Pe.forEach((t=>{Ue(t,Pe,e)})),Ve(e)}function Ne(e){if(pt(e))return!Pe.has(e)}function Le(e){if(e){var t;const n=null===(t=e.isVisible)||void 0===t||t;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isVisible");return t?t.configurable&&(t.set!==We||t.get!==He):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:We,get:He}),Ae(e.annotationUID,n)}}function ke(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function Ue(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function Ve(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Pe.forEach((t=>{e.hidden.push(t)})),(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_VISIBILITY_CHANGE,e))}function We(e){Ae(this.annotationUID,e)}function He(){return Ne(this.annotationUID)}class Be{constructor(e){re(this,"annotations",void 0),re(this,"uid",void 0),re(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,ne.getEnabledElement)(t);if(!n)throw new Error("Element not enabled, you must have an enabled element if you are not providing a FrameOfReferenceUID");return n.FrameOfReferenceUID})),re(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,o=this.annotations[n];o&&Object.keys(o).forEach((e=>{o[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),re(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),re(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]?n[e][t]:[]:n[e]:[]})),re(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const o=t[n];for(const t in o){const n=o[t];for(const t of n)if(e===t.annotationUID)return t}}})),re(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let o=0;for(const e in n)o+=n[e].length;return o})),re(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:o,toolName:i}=n;t=t||o;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[i];s||(r[i]=[],s=r[i]),s.push(e),me(e),Le(e)})),re(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const o=t[n];for(const t in o){const n=o[t],i=n.findIndex((t=>t.annotationUID===e));-1!==i&&(n.splice(i,1),0===n.length&&delete o[t])}0===Object.keys(o).length&&delete t[n]}})),re(this,"removeAnnotations",((e,t)=>{const n=this.annotations;n[e]&&(t?delete n[e][t]:delete n[e])})),re(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const o=n[e];if(!o)return;const i=o[t];return le()(i)}if(e){const t=n[e];return le()(t)}return le()(n)})),re(this,"restoreAnnotations",((e,t,n)=>{const o=this.annotations;if(t&&n){let i=o[t];i||(o[t]={},i=o[t]),i[n]=e}else t?o[t]=e:this.annotations=le()(e)})),re(this,"getAllAnnotations",(()=>Object.values(this.annotations).map((e=>Object.values(e))).flat(2))),re(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const o=t[n];for(const t in o)e+=o[t].length}return e})),re(this,"removeAllAnnotations",(()=>{this.annotations={}})),e||(e=ne.utilities.uuidv4()),this.annotations={},this.uid=e,ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const Fe=new Be("DEFAULT"),Ge=Be;var qe=function(e){return e.Interaction="Interaction",e.HandlesUpdated="HandlesUpdated",e.StatsUpdated="StatsUpdated",e.InitialSetup="InitialSetup",e.Completed="Completed",e.InterpolationUpdated="InterpolationUpdated",e}(qe||{});const je=qe;let ze={};const Ke={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:ze,enabledElements:[],handleRadius:6};let Ye={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:ze,enabledElements:[],handleRadius:6};var Xe=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(Xe||{});const Je=Xe,Ze=[Je.Active,Je.Passive,Je.Enabled],$e=function(e){return Ye.toolGroups.filter((t=>{let{toolOptions:n}=t;const o=Object.keys(n);for(let t=0;t<o.length;t++)if(e===o[t]&&n[e]&&Ze.includes(n[e].mode))return!0;return!1}))};function Qe(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.HandlesUpdated;const o=(0,ne.getEnabledElement)(t),{viewportId:i,renderingEngineId:a}=o,r=ie.ANNOTATION_MODIFIED,s={annotation:e,viewportId:i,renderingEngineId:a,changeType:n};(0,ne.triggerEvent)(ne.eventTarget,r,s)}function et(e){nt({annotation:e})}function tt(e){nt({annotation:e,contourHoleProcessingEnabled:arguments.length>1&&void 0!==arguments[1]&&arguments[1]})}function nt(e){const t=ie.ANNOTATION_COMPLETED;(0,ne.triggerEvent)(ne.eventTarget,t,e)}let ot=Fe;function it(){return ot}function at(e){ot=e}function rt(){ot=Fe}function st(e,t){const n=it(),o=n.getGroupKey(t);return n.getAnnotations(o,e)}function lt(){return it().getAllAnnotations()}function ct(e){const{annotationUID:t,parentAnnotationUID:n}=e;if(!n)return;const o=pt(n),i=o.childAnnotationUIDs.indexOf(t);o.childAnnotationUIDs.splice(i,1),e.parentAnnotationUID=void 0}function dt(e,t){const{annotationUID:n}=e,{annotationUID:o}=t;ct(t),e.childAnnotationUIDs||(e.childAnnotationUIDs=[]),e.childAnnotationUIDs.includes(o)||(e.childAnnotationUIDs.push(o),t.parentAnnotationUID=n)}function ht(e){return e.parentAnnotationUID?pt(e.parentAnnotationUID):void 0}function ut(e){var t,n;return null!==(t=null===(n=e.childAnnotationUIDs)||void 0===n?void 0:n.map((e=>pt(e))))&&void 0!==t?t:[]}function gt(e,t){e.annotationUID||(e.annotationUID=ne.utilities.uuidv4());const n=it();if(t instanceof HTMLDivElement){const o=n.getGroupKey(t);n.addAnnotation(e,o),function(e,t){const n=(0,ne.getEnabledElement)(t),{renderingEngine:o,viewportId:i}=n,a=ie.ANNOTATION_ADDED,r={annotation:e,viewportId:i,renderingEngineId:o.id};(0,ne.triggerEvent)(ne.eventTarget,a,r)}(e,t)}else n.addAnnotation(e),function(e){const{toolName:t}=e.metadata,n=$e(t);if(!n.length)return;const o=[];n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:i}=t,{FrameOfReferenceUID:a}=(0,ne.getEnabledElementByIds)(i,n);e.metadata.FrameOfReferenceUID===a&&o.push(t)}))}));const i=ie.ANNOTATION_ADDED,a={annotation:e};o.length?o.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;a.viewportId=n,a.renderingEngineId=t,(0,ne.triggerEvent)(ne.eventTarget,i,a)})):(0,ne.triggerEvent)(ne.eventTarget,i,a)}(e);return e.annotationUID}function vt(e,t){const n=it(),o=n.getGroupKey(t);return n.getNumberOfAnnotations(o,e)}function mt(e){var t;if(!e)return;const n=it(),o=n.getAnnotation(e);if(!o)return;null===(t=o.childAnnotationUIDs)||void 0===t||t.forEach((e=>mt(e))),n.removeAnnotation(e);const i=ie.ANNOTATION_REMOVED,a={annotation:o,annotationManagerUID:n.uid};(0,ne.triggerEvent)(ne.eventTarget,i,a)}function pt(e){return it().getAnnotation(e)}function ft(){it().removeAllAnnotations()}function It(e){let t=e;for(;t;)t.invalidated=!0,t=t.parentAnnotationUID?pt(t.parentAnnotationUID):void 0}var wt=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(wt||{});const Et=wt,Ct={renderOutline:!0,outlineWidthAutoGenerated:3,outlineWidthActive:2,outlineWidthInactive:1,outlineOpacity:1,outlineOpacityInactive:.85,outlineDashActive:void 0,outlineDashInactive:void 0,outlineDashAutoGenerated:"5,3",activeSegmentOutlineWidthDelta:0,renderFill:!0,fillAlpha:.5,fillAlphaInactive:.3,fillAlphaAutoGenerated:.3},_t={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},bt=function(){return _t},Dt={renderFill:!0,fillAlpha:1},Tt=bt(),St=Ct,yt=Dt,Mt={colorLUT:[],segmentations:[],globalConfig:{renderInactiveSegmentations:!0,representations:{[Et.Labelmap]:Tt,[Et.Contour]:St,[Et.Surface]:yt}},toolGroups:{}},xt=new class{constructor(e){re(this,"state",void 0),re(this,"uid",void 0),e||(e=ne.utilities.uuidv4()),this.state=le()(Mt),this.uid=e}getState(){return this.state}getToolGroups(){return Object.keys(this.state.toolGroups)}getColorLUT(e){return this.state.colorLUT[e]}getNextColorLUTIndex(){return this.state.colorLUT.length}resetState(){this.state=le()(Mt)}getSegmentation(e){return this.state.segmentations.find((t=>t.segmentationId===e))}addSegmentation(e){if(this.getSegmentation(e.segmentationId))throw new Error("Segmentation with id ".concat(e.segmentationId," already exists"));this.state.segmentations.push(e)}getSegmentationRepresentations(e){const t=this.state.toolGroups[e];if(t)return t.segmentationRepresentations}getAllSegmentationRepresentations(){const e={};return Object.entries(this.state.toolGroups).forEach((t=>{let[n,o]=t;e[n]=o.segmentationRepresentations})),e}addSegmentationRepresentation(e,t){this.state.toolGroups[e]||(this.state.toolGroups[e]={segmentationRepresentations:[],config:{}}),this.state.toolGroups[e].segmentationRepresentations.push(t),this._handleActiveSegmentation(e,t)}getGlobalConfig(){return this.state.globalConfig}setGlobalConfig(e){this.state.globalConfig=e}getSegmentationRepresentationByUID(e,t){const n=this.getSegmentationRepresentations(e);return null==n?void 0:n.find((e=>e.segmentationRepresentationUID===t))}removeSegmentation(e){this.state.segmentations=this.state.segmentations.filter((t=>t.segmentationId!==e))}removeSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No viewport specific segmentation state found for viewport ".concat(e));const o=n.findIndex((e=>e.segmentationRepresentationUID===t));-1===o&&console.warn("No viewport specific segmentation state data found for viewport ".concat(e," and segmentation data UID ").concat(t));const i=n[o];n.splice(o,1),this._handleActiveSegmentation(e,i)}setActiveSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No segmentation data found for toolGroupId: ".concat(e));const o=n.find((e=>e.segmentationRepresentationUID===t));if(!o)throw new Error("No segmentation data found for segmentation data UID ".concat(t));o.active=!0,this._handleActiveSegmentation(e,o)}getToolGroupSpecificConfig(e){const t=this.state.toolGroups[e];if(t)return t.config}getSegmentationRepresentationSpecificConfig(e,t){const n=this.getSegmentationRepresentationByUID(e,t);if(n)return n.segmentationRepresentationSpecificConfig}setSegmentationRepresentationSpecificConfig(e,t,n){const o=this.getSegmentationRepresentationByUID(e,t);o&&(o.segmentationRepresentationSpecificConfig=n)}getSegmentSpecificConfig(e,t,n){const o=this.getSegmentationRepresentationByUID(e,t);if(o)return o.segmentSpecificConfig[n]}setSegmentSpecificConfig(e,t,n,o){const i=this.getSegmentationRepresentationByUID(e,t);i&&((!i.segmentSpecificConfig||null!=o&&o.clear)&&(i.segmentSpecificConfig={}),Object.keys(n).forEach((e=>{i.segmentSpecificConfig[e]=n[e]})))}setSegmentationRepresentationConfig(e,t){let n=this.state.toolGroups[e];n||(this.state.toolGroups[e]={segmentationRepresentations:[],config:{renderInactiveSegmentations:!0,representations:{}}},n=this.state.toolGroups[e]),n.config={...n.config,...t}}addColorLUT(e,t){this.state.colorLUT[t]&&console.warn("Color LUT table already exists, overwriting"),this.state.colorLUT[t]=le()(e)}removeColorLUT(e){delete this.state.colorLUT[e]}_handleActiveSegmentation(e,t){const n=this.getSegmentationRepresentations(e);0!==n.length&&(1!==n.length&&0!==n.filter((e=>e.active)).length?t.active&&n.forEach((e=>{e.segmentationRepresentationUID!==t.segmentationRepresentationUID&&(e.active=!1)})):n[0].active=!0)}}("DEFAULT");function Ot(e,t){const{imageIdReferenceMap:n}=e,{volumeId:o}=e;if(o&&!n)return!0;if(n&&!o)return!1;if(o&&n&&!t)throw new Error("isVolumeSegmentation: viewport is required when both volumeId and imageIdReferenceMap are provided");return t instanceof ne.VolumeViewport}const Pt=new Map,At=e=>{const t=Pt.get(e);t&&(t.isDirty=!0)};function Rt(e){const t=function(e){const t=Pt.get(e);return t&&!t.isDirty?t.indices:null}(e);if(t)return t;const n=Bt(e);if(!n)throw new Error("No segmentation found for segmentationId ".concat(e));let o;switch(n.type){case Et.Labelmap:o=function(e,t){const n=e.representationData[Et.Labelmap],o=new Set;return Ot(n)?function(e,t){ne.cache.getVolume(t).getScalarData().forEach((t=>{0!==t&&e.add(t)}))}(o,t):function(e,t){t.forEach((t=>{ne.cache.getImage(t).getPixelData().forEach((t=>{0!==t&&e.add(t)}))}))}(o,n.imageIdReferenceMap),Array.from(o).map(Number).sort(((e,t)=>e-t))}(n,e);break;case Et.Contour:o=function(e){const{annotationUIDsMap:t,geometryIds:n}=e.representationData.CONTOUR||{};if(!n)throw new Error("No geometryIds found for segmentationId ".concat(e.segmentationId));const o=new Set([...t.keys()]);return n.forEach((e=>{const t=ne.cache.getGeometry(e);o.add(t.data.getSegmentIndex())})),Array.from(o).sort(((e,t)=>e-t))}(n);break;case Et.Surface:o=function(e){var t,n;const o=null!==(t=null===(n=e.representationData.SURFACE)||void 0===n?void 0:n.geometryIds)&&void 0!==t?t:[];return Array.from(o.keys()).map(Number).sort(((e,t)=>e-t))}(n);break;default:throw new Error("Unsupported segmentation type: ".concat(n.type))}return Pt.set(e,{indices:o,isDirty:!1}),o}function Nt(e){const t={segmentationId:e};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REMOVED,t)}function Lt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_REMOVED,n)}function kt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};t?(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_MODIFIED,n):(qt(e)||[]).forEach((t=>{const{segmentationRepresentationUID:n}=t,o={toolGroupId:e,segmentationRepresentationUID:n};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_REPRESENTATION_MODIFIED,o)}))}function Ut(e){let t;t=e?[e]:Ft().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_MODIFIED,t)}))}function Vt(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};At(e),(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_DATA_MODIFIED,n)}const Wt=function(e){const{segmentationId:t,representation:n}=e,o=n.type===Et.Contour;let i=n.data?{...n.data}:null;if(i=!i&&o?{}:i,!i)throw new Error("Segmentation representation data may not be undefined");if(o){var a,r;const e=i;e.geometryIds=null!==(a=e.geometryIds)&&void 0!==a?a:[],e.annotationUIDsMap=null!==(r=e.annotationUIDsMap)&&void 0!==r?r:new Map}return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...i}}}};function Ht(){return xt}function Bt(e){return Ht().getSegmentation(e)}function Ft(){return Ht().getState().segmentations}function Gt(e,t){const n=Ht(),o=Wt(e);n.addSegmentation(o),t||Ut(o.segmentationId)}function qt(e){return Ht().getSegmentationRepresentations(e)}function jt(){return Ht().getAllSegmentationRepresentations()}function zt(e){const t=jt()||{},n=[];for(const o in t){const i=t[o].find((t=>t.segmentationId===e));i&&n.push(i)}return n}function Kt(e){const t=jt()||[],n=Object.keys(t);for(const t of n){const n=jt()[t].find((t=>t.segmentationRepresentationUID===e));if(n)return{segmentationRepresentation:n,toolGroupId:t}}}function Yt(e){if(!e)throw new Error("getToolGroupIdsWithSegmentation: segmentationId is empty");const t=Ht(),n=t.getState(),o=Object.keys(n.toolGroups),i=[];return o.forEach((n=>{t.getSegmentationRepresentations(n).forEach((t=>{t.segmentationId===e&&i.push(n)}))})),i}function Xt(e){return Ht().getToolGroupSpecificConfig(e)}function Jt(e,t,n){Ht().setSegmentationRepresentationConfig(e,t),n||kt(e)}function Zt(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ht().setSegmentationRepresentationSpecificConfig(e,t,n),o||kt(e,t)}function $t(e,t){return Ht().getSegmentationRepresentationSpecificConfig(e,t)}function Qt(e,t,n){return Ht().getSegmentSpecificConfig(e,t,n)}function en(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Ht().setSegmentSpecificConfig(e,t,n),o||kt(e,t)}function tn(e){const t=jt()||[],n=Object.keys(t);for(const t of n)if(jt()[t].find((t=>t.segmentationRepresentationUID===e)))return t}function nn(e,t,n){Ht().addSegmentationRepresentation(e,t),n||kt(e,t.segmentationRepresentationUID)}function on(){return Ht().getGlobalConfig()}function an(e,t){Ht().setGlobalConfig(e),t||Ut()}function rn(e,t){return Ht().getSegmentationRepresentationByUID(e,t)}function sn(e){Ht().removeSegmentation(e),Nt(e)}function ln(e,t){Ht().removeSegmentationRepresentation(e,t),Lt(e,t)}function cn(e){(qt(e)||[]).forEach((t=>{ln(e,t.segmentationRepresentationUID)}))}function dn(e){Ht().removeColorLUT(e)}function hn(e){return Ht().getColorLUT(e)}function un(){return Ht().getNextColorLUTIndex()}function gn(e,t){Ht().addColorLUT(e,t)}function vn(e,t){const n=t||e.currentTarget,{viewport:o}=(0,ne.getEnabledElement)(n),i=function(e){return[e.clientX,e.clientY]}(e),a=function(e){return[e.pageX,e.pageY]}(e),r=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,a);return{page:a,client:i,canvas:r,world:o.canvasToWorld(r)}}const mn=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:o}=(0,ne.getEnabledElement)(t),i=vn(e,t),a={event:e,eventName:ie.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:o,camera:{},element:t,startPoints:i,lastPoints:i,currentPoints:i,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,ne.triggerEvent)(t,ie.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},pn=ie.MOUSE_MOVE,fn=function(e){const t=e.currentTarget,n=(0,ne.getEnabledElement)(t),{renderingEngineId:o,viewportId:i}=n,a={renderingEngineId:o,viewportId:i,camera:{},element:t,currentPoints:vn(e),eventName:pn,event:e};!(0,ne.triggerEvent)(t,pn,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:In,MOUSE_DOWN_ACTIVATE:wn,MOUSE_CLICK:En,MOUSE_UP:Cn,MOUSE_DRAG:_n}=ie,bn=3,Dn={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 Tn={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 Sn={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function yn(e){const t=vn(e,Tn.element),n=kn(Tn.element,Tn.lastPoints),o=Un(t,n);if(Sn.doubleClickTimeout){if(!On(o.canvas))return;An()}const i={event:e,eventName:_n,mouseButton:Tn.mouseButton,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},element:Tn.element,startPoints:Ln(Tn.startPoints),lastPoints:Ln(n),currentPoints:t,deltaPoints:o};!(0,ne.triggerEvent)(Tn.element,_n,i)&&(e.stopImmediatePropagation(),e.preventDefault()),Tn.lastPoints=Ln(t)}function Mn(e){if(clearTimeout(Tn.preventClickTimeout),Sn.doubleClickTimeout)Sn.mouseUpEvent?Nn():(Sn.mouseUpEvent=e,Tn.element.addEventListener("mousemove",xn));else{const t=Tn.isClickEvent?En:Cn,n=vn(e,Tn.element),o=Un(n,Tn.lastPoints),i={event:e,eventName:t,mouseButton:Tn.mouseButton,element:Tn.element,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},startPoints:Ln(Tn.startPoints),lastPoints:Ln(Tn.lastPoints),currentPoints:n,deltaPoints:o};(0,ne.triggerEvent)(i.element,t,i),Nn()}document.removeEventListener("mousemove",yn)}function xn(e){On(Un(vn(e,Tn.element),kn(Tn.element,Tn.lastPoints)).canvas)&&(An(),fn(e))}function On(e){return Math.abs(e[0])+Math.abs(e[1])>bn}function Pn(){Tn.isClickEvent=!1}function An(){Sn.ignoreDoubleClick=!0;const e=Sn.mouseDownEvent,t=Sn.mouseUpEvent;Rn(),function(e){const t=Un(Tn.startPoints,Tn.startPoints),n={event:e,eventName:In,element:Tn.element,mouseButton:Tn.mouseButton,renderingEngineId:Tn.renderingEngineId,viewportId:Tn.viewportId,camera:{},startPoints:Tn.startPoints,lastPoints:Tn.startPoints,currentPoints:Tn.startPoints,deltaPoints:t};Tn.lastPoints=Ln(n.lastPoints),(0,ne.triggerEvent)(n.element,In,n)&&(0,ne.triggerEvent)(n.element,wn,n)}(e),t&&Mn(t)}function Rn(){Sn.doubleClickTimeout&&(clearTimeout(Sn.doubleClickTimeout),Sn.doubleClickTimeout=null),Sn.mouseDownEvent=null,Sn.mouseUpEvent=null}function Nn(){var e,t;document.removeEventListener("mouseup",Mn),null===(e=Tn.element)||void 0===e||e.removeEventListener("mousemove",xn),null===(t=Tn.element)||void 0===t||t.addEventListener("mousemove",fn),Rn(),Tn=JSON.parse(JSON.stringify(Dn))}function Ln(e){return JSON.parse(JSON.stringify(e))}function kn(e,t){const{viewport:n}=(0,ne.getEnabledElement)(e),o=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:o}}function Un(e,t){return{page:Vn(e.page,t.page),client:Vn(e.client,t.client),canvas:Vn(e.canvas,t.canvas),world:(n=e.world,o=t.world,[n[0]-o[0],n[1]-o[1],n[2]-o[2]])};var n,o}function Vn(e,t){return[e[0]-t[0],e[1]-t[1]]}function Wn(e){Sn.ignoreDoubleClick?(Sn.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):Nn()}const Hn=function(e){if(Sn.doubleClickTimeout){if(e.buttons===Sn.mouseDownEvent.buttons)return;return Sn.mouseDownEvent=e,void An()}Sn.doubleClickTimeout=setTimeout(An,1===e.buttons?400:150),Sn.mouseDownEvent=e,Sn.ignoreDoubleClick=!1,Tn.element=e.currentTarget,Tn.mouseButton=e.buttons;const t=(0,ne.getEnabledElement)(Tn.element),{renderingEngineId:n,viewportId:o}=t;Tn.renderingEngineId=n,Tn.viewportId=o,Tn.preventClickTimeout=setTimeout(Pn,Tn.clickDelay),Tn.element.removeEventListener("mousemove",fn);const i=vn(e,Tn.element);Tn.startPoints=Ln(i),Tn.lastPoints=Ln(i),document.addEventListener("mouseup",Mn),document.addEventListener("mousemove",yn)};function Bn(e){e.removeEventListener("dblclick",mn),e.removeEventListener("mousedown",Hn),e.removeEventListener("mousemove",fn),e.removeEventListener("dblclick",Wn,{capture:!0})}const Fn={enable:function(e){Bn(e),e.addEventListener("dblclick",mn),e.addEventListener("mousedown",Hn),e.addEventListener("mousemove",fn),e.addEventListener("dblclick",Wn,{capture:!0})},disable:Bn},Gn=function(e){const t=e.currentTarget,n=(0,ne.getEnabledElement)(t),{renderingEngineId:o,viewportId:i}=n;if(e.deltaY>-1&&e.deltaY<1)return;e.preventDefault();const{spinX:a,spinY:r,pixelX:s,pixelY:l}=function(e){let t=0,n=0,o=0,i=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),o=10*t,i=10*n,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(o=e.deltaX),(o||i)&&e.deltaMode&&(1===e.deltaMode?(o*=40,i*=40):(o*=800,i*=800)),o&&!t&&(t=o<1?-1:1),i&&!n&&(n=i<1?-1:1),{spinX:t,spinY:n,pixelX:o,pixelY:i}}(e),c=r<0?-1:1,d={event:e,eventName:ie.MOUSE_WHEEL,renderingEngineId:o,viewportId:i,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:c},points:vn(e)};(0,ne.triggerEvent)(t,ie.MOUSE_WHEEL,d)};function qn(e){e.removeEventListener("wheel",Gn)}const jn={enable:function(e){qn(e),e.addEventListener("wheel",Gn,{passive:!1})},disable:qn},zn=0,Kn=1;let Yn,Xn;function Jn(e,t){const n=Date.now();if(e!==Yn){if(n-Xn<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Yn=e}Xn=n}const Zn=Jn.bind(null,zn),$n=Jn.bind(null,Kn);function Qn(e,t,n){const o=n?Zn:$n;t.forEach((function(t){e.addEventListener(t,o,{passive:!1})}))}function eo(e,t,n){const o=n?Zn:$n;t.forEach((function(t){e.removeEventListener(t,o)}))}const to=["mousedown","mouseup","mousemove"],no=["touchstart","touchend"];function oo(e){eo(e,to,zn),eo(e,no,Kn)}const io={enable:function(e){oo(e),Qn(e,to,zn),Qn(e,no,Kn)},disable:oo};var ao=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(ao||{});function ro(e,t){const n=t||e.currentTarget,o="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(o).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(o[e]),i=function(e){return[e.pageX,e.pageY]}(o[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,i),{viewport:r}=(0,ne.getEnabledElement)(n);return{page:i,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:o[e].radiusX,radiusY:o[e].radiusY,force:o[e].force,rotationAngle:o[e].rotationAngle}}}))}function so(e,t){const n=vo(e),o=vo(t);return{page:po(n.page,o.page),client:po(n.client,o.client),canvas:po(n.canvas,o.canvas),world:(i=n.world,a=o.world,[i[0]-a[0],i[1]-a[1],i[2]-a[2]])};var i,a}function lo(e,t){const n=vo(e),o=vo(t);return{page:Io(n.page,o.page),client:Io(n.client,o.client),canvas:Io(n.canvas,o.canvas),world:wo(n.world,o.world)}}function co(e,t){}function ho(e,t){const n=fo(e),o=fo(t);return{page:n.page-o.page,client:n.client-o.client,canvas:n.canvas-o.canvas,world:n.world-o.world}}function uo(e){return JSON.parse(JSON.stringify(e))}function go(e){return JSON.parse(JSON.stringify(e))}function vo(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length]})),{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]})}function mo(e){return e.reduce(((t,n)=>({page:[t.page[0]+n.page[0]/e.length,t.page[1]+n.page[1]/e.length],client:[t.client[0]+n.client[0]/e.length,t.client[1]+n.client[1]/e.length],canvas:[t.canvas[0]+n.canvas[0]/e.length,t.canvas[1]+n.canvas[1]/e.length],world:[t.world[0]+n.world[0]/e.length,t.world[1]+n.world[1]/e.length,t.world[2]+n.world[2]/e.length],touch:{identifier:null,radiusX:t.touch.radiusX+n.touch.radiusX/e.length,radiusY:t.touch.radiusY+n.touch.radiusY/e.length,force:t.touch.force+n.touch.force/e.length,rotationAngle:t.touch.rotationAngle+n.touch.rotationAngle/e.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 po(e,t){return[e[0]-t[0],e[1]-t[1]]}function fo(e){const t=[];for(let n=0;n<e.length;n++)for(let o=0;o<e.length;o++)n<o&&t.push({page:Io(e[n].page,e[o].page),client:Io(e[n].client,e[o].client),canvas:Io(e[n].canvas,e[o].canvas),world:wo(e[n].world,e[o].world)});return t.reduce(((e,n)=>({page:e.page+n.page/t.length,client:e.client+n.client/t.length,canvas:e.canvas+n.canvas/t.length,world:e.world+n.world/t.length})),{page:0,client:0,canvas:0,world:0})}function Io(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function wo(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)+Math.pow(e[2]-t[2],2))}ne.Settings.getRuntimeSettings();const{TOUCH_START:Eo,TOUCH_START_ACTIVATE:Co,TOUCH_PRESS:_o,TOUCH_DRAG:bo,TOUCH_END:Do,TOUCH_TAP:To,TOUCH_SWIPE:So}=ie,yo={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},Mo={page:0,client:0,canvas:0,world:0},xo={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...yo,touch:null}],lastPointsList:[{...yo,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:Mo,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},Oo={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...yo,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let Po=JSON.parse(JSON.stringify(xo)),Ao=JSON.parse(JSON.stringify(Oo));function Ro(e,t,n){return(0,ne.triggerEvent)(e,t,n)}function No(e){const t=ro(e,Po.element),n=ko(Po.element,Po.lastPointsList),o=t.length===n.length?so(t,n):yo,i=t.length===n.length?ho(t,n):Mo,a=t.length===n.length?lo(t,Po.lastPointsList):Mo;Po.accumulatedDistance={page:Po.accumulatedDistance.page+a.page,client:Po.accumulatedDistance.client+a.client,canvas:Po.accumulatedDistance.canvas+a.canvas,world:Po.accumulatedDistance.world+a.world};const r={event:e,eventName:bo,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,startPoints:mo(Po.startPointsList),lastPoints:mo(n),currentPoints:mo(t),startPointsList:uo(Po.startPointsList),lastPointsList:uo(n),currentPointsList:t,deltaPoints:o,deltaDistance:i};Ro(Po.element,bo,r),function(e,t){const n=(new Date).getTime(),o=Po.startTime.getTime();if(Po.swiped||n-o>Po.swipeToleranceMs)return;const[i,a]=t.canvas,r={event:e,eventName:So,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,swipe:null};Math.abs(i)>Po.swipeDistanceThreshold&&(r.swipe=i>0?ao.RIGHT:ao.LEFT,Ro(r.element,So,r),Po.swiped=!0),Math.abs(a)>Po.swipeDistanceThreshold&&(r.swipe=a>0?ao.DOWN:ao.UP,Ro(r.element,So,r),Po.swiped=!0)}(e,o),Po.lastPointsList=uo(t)}function Lo(e){clearTimeout(Po.pressTimeout);const t=ro(e,Po.element),n=ko(Po.element,Po.lastPointsList),o=t.length===n.length?so(t,n):so(t,t),i=t.length===n.length?ho(t,n):ho(t,t),a={event:e,eventName:Do,element:Po.element,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},startPointsList:uo(Po.startPointsList),lastPointsList:uo(n),currentPointsList:t,startPoints:mo(Po.startPointsList),lastPoints:mo(n),currentPoints:mo(t),deltaPoints:o,deltaDistance:i};Ro(a.element,Do,a),function(e){if((new Date).getTime()-Po.startTime.getTime()>Ao.tapToleranceMs)return;if(0===Ao.taps&&(Ao.element=Po.element,Ao.renderingEngineId=Po.renderingEngineId,Ao.viewportId=Po.viewportId,Ao.startPointsList=Po.startPointsList),Ao.taps>0&&(Ao.element!=Po.element||Ao.renderingEngineId!=Po.renderingEngineId||Ao.viewportId!=Po.viewportId))return;const t=ro(e,Ao.element);lo(t,Ao.startPointsList).canvas>Ao.tapMaxDistance||(clearTimeout(Ao.tapTimeout),Ao.taps+=1,Ao.tapTimeout=setTimeout((()=>{const n={event:e,eventName:To,element:Ao.element,renderingEngineId:Ao.renderingEngineId,viewportId:Ao.viewportId,camera:{},currentPointsList:t,currentPoints:mo(t),taps:Ao.taps};Ro(n.element,To,n),Ao=JSON.parse(JSON.stringify(Oo))}),Ao.tapToleranceMs))}(e),Po=JSON.parse(JSON.stringify(xo)),document.removeEventListener("touchmove",No),document.removeEventListener("touchend",Lo)}function ko(e,t){const{viewport:n}=(0,ne.getEnabledElement)(e);return t.map((e=>{const t=n.canvasToWorld(e.canvas);return{page:e.page,client:e.client,canvas:e.canvas,world:t,touch:e.touch}}))}const Uo=function(e){Po.element=e.currentTarget;const t=(0,ne.getEnabledElement)(Po.element),{renderingEngineId:n,viewportId:o}=t;Po.renderingEngineId=n,Po.viewportId=o,Po.isTouchStart||(clearTimeout(Po.pressTimeout),Po.pressTimeout=setTimeout((()=>function(e){if(Po.accumulatedDistance.canvas>Po.pressMaxDistance)return;const t={event:e,eventName:_o,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},element:Po.element,startPointsList:uo(Po.startPointsList),lastPointsList:uo(Po.lastPointsList),startPoints:go(mo(Po.startPointsList)),lastPoints:go(mo(Po.lastPointsList))};Ro(t.element,_o,t)}(e)),Po.pressDelay),function(e){Po.isTouchStart=!0,Po.startTime=new Date;const t=ro(e,Po.element),n=mo(t),o=yo,i=Mo,a={event:e,eventName:Eo,element:Po.element,renderingEngineId:Po.renderingEngineId,viewportId:Po.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:o,deltaDistance:i};Po.startPointsList=uo(a.startPointsList),Po.lastPointsList=uo(a.lastPointsList),Ro(a.element,Eo,a)&&Ro(a.element,Co,a)}(e),document.addEventListener("touchmove",No),document.addEventListener("touchend",Lo))};function Vo(e){io.disable(e),e.removeEventListener("touchstart",Uo)}const Wo={enable:function(e){Vo(e),io.enable(e),e.addEventListener("touchstart",Uo,{passive:!1})},disable:Vo},Ho={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let Bo={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function Fo(e){Bo.element=e.currentTarget;const t=(0,ne.getEnabledElement)(Bo.element),{renderingEngineId:n,viewportId:o}=t;Bo.renderingEngineId=n,Bo.viewportId=o,Bo.key=e.key,Bo.keyCode=e.keyCode,e.preventDefault();const i={renderingEngineId:Bo.renderingEngineId,viewportId:Bo.viewportId,element:Bo.element,key:Bo.key,keyCode:Bo.keyCode};(0,ne.triggerEvent)(i.element,ie.KEY_DOWN,i),document.addEventListener("keyup",qo),document.addEventListener("visibilitychange",Go),Bo.element.removeEventListener("keydown",Fo)}function Go(){document.removeEventListener("visibilitychange",Go),"hidden"===document.visibilityState&&jo()}function qo(e){const t={renderingEngineId:Bo.renderingEngineId,viewportId:Bo.viewportId,element:Bo.element,key:Bo.key,keyCode:Bo.keyCode};document.removeEventListener("keyup",qo),document.removeEventListener("visibilitychange",Go),Bo.element.addEventListener("keydown",Fo),Bo=le()(Ho),(0,ne.triggerEvent)(t.element,ie.KEY_UP,t)}function jo(){Bo.keyCode=void 0}const zo=Fo;function Ko(e){e.removeEventListener("keydown",zo)}const Yo={enable:function(e){Ko(e),e.addEventListener("keydown",zo)},disable:Ko,getModifierKey:function(){return Bo.keyCode}};var Xo=C(785),Jo=C.n(Xo),Zo=C(283),$o=C.n(Zo);const Qo=function(e,t){var n;t||(t=null===(n=(0,ne.getRenderingEngines)().find((t=>t.getViewports().find((t=>t.id===e)))))||void 0===n?void 0:n.id);const o=Ye.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(o.length){if(o.length>1)throw new Error("Multiple tool groups found for renderingEngineId: ".concat(t," and viewportId: ").concat(e,". You should only\n have one tool group per viewport in a renderingEngine."));return o[0]}},ei=function(e){return Ye.toolGroups.find((t=>t.id===e))};function ti(){return on()}function ni(e){an(e)}function oi(e){return ti().representations[e]}function ii(e,t){const n=ti();ni({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function ai(e){return Xt(e)}function ri(e,t){Jt(e,t)}function si(e,t){return $t(e,t)}function li(e,t,n){Zt(e,t,n)}function ci(e,t,n){return Qt(e,t,n)}function di(e,t,n){en(e,t,n)}function hi(e,t,n){const o=qt(e);if(!o)return;const i=o.find((e=>e.segmentationRepresentationUID===t));if(!i)return;const{segmentsHidden:a,segmentationId:r}=i,s=Rt(r);n?a.clear():s.forEach((e=>{a.add(e)})),kt(e,i.segmentationRepresentationUID)}function ui(e,t){const n=qt(e).find((e=>e.segmentationRepresentationUID===t));if(!n)return;const{segmentsHidden:o,segmentationId:i}=n,a=Rt(i),r=new Set(a);return o.forEach((e=>r.delete(e))),!!r.size}function gi(e,t,n,o){const i=rn(e,t);i&&(n.forEach((e=>{o?i.segmentsHidden.delete(e):i.segmentsHidden.add(e)})),kt(e,t))}function vi(e,t,n,o){const i=rn(e,t);i&&(o?i.segmentsHidden.delete(n):i.segmentsHidden.add(n),kt(e,t))}function mi(e,t,n){const o=rn(e,t);return!!o&&!o.segmentsHidden.has(n)}class pi{constructor(e,t){re(this,"supportedInteractionTypes",void 0),re(this,"configuration",void 0),re(this,"toolGroupId",void 0),re(this,"mode",void 0);const n=ne.utilities.deepMerge(t,e),{configuration:o={},supportedInteractionTypes:i,toolGroupId:a}=n;o.strategies||(o.strategies={},o.defaultStrategy=void 0,o.activeStrategy=void 0,o.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=i||[],this.configuration=Object.assign({},o),this.mode=Je.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){var n;const{strategies:o,activeStrategy:i}=this.configuration;return null===(n=o[i])||void 0===n?void 0:n.call(this,e,t)}applyActiveStrategyCallback(e,t,n){var o;const{strategies:i,activeStrategy:a}=this.configuration;if(!i[a])throw new Error("applyActiveStrategyCallback: active strategy ".concat(a," not found, check tool configuration or spellings"));return null===(o=i[a][n])||void 0===o?void 0:o.call(this,e,t)}setConfiguration(e){this.configuration=ne.utilities.deepMerge(this.configuration,e)}setActiveStrategy(e){this.setConfiguration({activeStrategy:e})}getTargetVolumeId(e){var t;if(this.configuration.volumeId)return this.configuration.volumeId;const n=e.getActors();return n?null===(t=n.find((e=>"vtkVolume"===e.actor.getClassName())))||void 0===t?void 0:t.uid:void 0}getTargetIdImage(e,t){if(e.startsWith("imageId:")){const n=e.split("imageId:")[1],o=ne.utilities.imageIdToURI(n);let i=ne.utilities.getViewportsWithImageURI(o,t.id);if(!i||!i.length)return;if(i=i.filter((e=>e.getCurrentImageId()===n)),!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("volumeId:")){const n=ne.utilities.getVolumeId(e),o=ne.utilities.getViewportsWithVolumeId(n,t.id);if(!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("videoId:")){const n=ne.utilities.imageIdToURI(e),o=ne.utilities.getViewportsWithImageURI(n,t.id);if(!o||!o.length)return;return o[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){var t;const n=null===(t=e.getReferenceId)||void 0===t?void 0:t.call(e);if(n)return n;if(e instanceof ne.BaseVolumeViewport)return"volumeId:".concat(this.getTargetVolumeId(e));throw new Error("getTargetId: viewport must have a getTargetId method")}}re(pi,"toolName",void 0),pi.toolName="BaseTool";const fi=pi,Ii=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);o.removeActors(i)};var wi=C(610),Ei=C.n(wi),Ci=C(474),_i=C.n(Ci),bi=C(70),Di=C.n(bi),Ti=C(396),Si=C.n(Ti),yi=function(e){return e.POLYSEG_CONTOUR_TO_LABELMAP="polySeg/convertContourToVolumeLabelmap",e.POLYSEG_SURFACE_TO_LABELMAP="polySeg/convertSurfacesToVolumeLabelmap",e.POLYSEG_CONTOUR_TO_SURFACE="polySeg/convertContourToSurface",e.POLYSEG_LABELMAP_TO_SURFACE="polySeg/convertLabelmapToSurface",e.SURFACE_CLIPPING="surfaceClipping",e}(yi||{});const Mi=yi;function xi(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return parseFloat(e[0]).toFixed(t)+","+parseFloat(e[1]).toFixed(t)+","+parseFloat(e[2]).toFixed(t)+","}let Oi=!1;function Pi(){Oi||(Oi=!0,(0,ne.getWebWorkerManager)().registerWorker("polySeg",(()=>new Worker(new URL(C.p+C.u(985),C.b),{name:"polySeg"})),{maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:2e3}}))}const Ai=(0,ne.getWebWorkerManager)(),Ri=new Map,Ni=new Map,Li=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.SURFACE_CLIPPING})};async function ki(e,t,n){var o;Pi();const i=null===(o=t.getSlicesClippingPlanes)||void 0===o?void 0:o.call(t);if(!i)return;const a=t.getSliceIndex();i.sort(((e,t)=>Math.abs(e.sliceIndex-a)-Math.abs(t.sliceIndex-a))),Li(ne.eventTarget,0),await async function(e){const t=e.filter((e=>!Ni.has(e.id)));if(!t.length)return;(await Ai.executeTask("polySeg","getSurfacesAABBs",{surfacesInfo:t},{callbacks:[e=>{let{progress:t}=e;Li(ne.eventTarget,t)}]})).forEach(((e,t)=>{Ni.set(t,e)}))}(e);const r=new Map;e.forEach((e=>{r.set(e.id,Ni.get(e.id))}));const s=t.getCamera();return await Ai.executeTask("polySeg","cutSurfacesIntoPlanes",{surfacesInfo:e,planesInfo:i,surfacesAABB:r},{callbacks:[e=>{let{progress:t}=e;Li(ne.eventTarget,t)},e=>{let{sliceIndex:o,polyDataResults:i}=e;i.forEach(((e,i)=>{const a="".concat(n,"_").concat(i),r=function(e,t,n){return"".concat(e.id,"-").concat(xi(t),"-").concat(n)}(t,s.viewPlaneNormal,o);!function(e,t,n){const{points:o,lines:i,numberOfCells:a}=n;let r=Ri.get(e);r||(r=new Map,Ri.set(e,r)),r.set(t,{points:o,lines:i,numberOfCells:a})}(a,r,e)}))}]}).catch((e=>{console.error(e)})),Li(ne.eventTarget,1),Ri}function Ui(e){if("volumeId"in e){if(!ne.cache.getVolume(e.volumeId))throw new Error("volumeId of ".concat(e.volumeId," not found in cache, you should load and cache volume before adding segmentation"))}else{if(!("imageIdReferenceMap"in e))throw new Error("The segmentationInput.representationData is undefined, please provide a valid representationData");if(!e.imageIdReferenceMap)throw new Error("The segmentationInput.representationData.imageIdReferenceMap is undefined, please provide a valid representationData.imageIdReferenceMap")}}function Vi(e){Ui(e)}const Wi=new Map([[Et.Labelmap,new Set([Et.Surface,Et.Contour])],[Et.Contour,new Set([Et.Labelmap,Et.Surface])],[Et.Surface,new Set([Et.Labelmap])]]);function Hi(e){const t=Kt(e);if(null==t||!t.segmentationRepresentation)return!1;const{segmentationRepresentation:n}=t,{type:o,polySeg:i}=n;if(!i||!i.enabled)return!1;const{representationData:a}=Bt(n.segmentationId),r=function(e){const t=[];return Object.keys(e).forEach((n=>{const o=e[n];let i;if(n===Et.Labelmap&&(i=Vi),i)try{i(o),t.push(n)}catch(e){console.warn("Validation failed for labelmap of type ".concat(n))}else t.push(n)})),t}(a);return r.some((e=>async function(e,t){var n;return(null===(n=Wi.get(e))||void 0===n?void 0:n.has(t))||!1}(e,o)))}const Bi=function(e){let{segmentationId:t,type:n,data:o}=e;const i=Bt(t);switch(i.representationData[n]&&console.warn("Representation data of type ".concat(n," already exists for segmentation ").concat(t,", overwriting it.")),n){case Et.Labelmap:case Et.Contour:case Et.Surface:o&&(i.representationData[n]=o);break;default:throw new Error("Invalid representation type ".concat(n))}},Fi=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},Gi=function(e,t,n){let o,i,a,r,s,l,c=0,d=!1,h=!1,u=!0;const g=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const n=o,a=i;return o=i=void 0,c=t,r=e.apply(a,n),r}function m(e,t){return g?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-c>=a}function f(){const e=Date.now();if(p(e))return I(e);s=m(f,function(e){const n=e-c,o=t-(e-l);return h?Math.min(o,a-n):o}(e))}function I(e){return s=void 0,u&&o?v(e):(o=i=void 0,r)}function w(){const e=Date.now(),n=p(e);for(var a=arguments.length,u=new Array(a),g=0;g<a;g++)u[g]=arguments[g];if(o=u,i=this,l=e,n){if(void 0===s)return function(e){return c=e,s=m(f,t),d?v(e):r}(l);if(h)return s=m(f,t),v(l)}return void 0===s&&(s=m(f,t)),r}return t=Number(t)||0,Fi(n)&&(d=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,u="trailing"in n?Boolean(n.trailing):u),w.cancel=function(){void 0!==s&&function(e){if(g)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),c=0,o=l=i=s=void 0},w.flush=function(){return void 0===s?r:I(Date.now())},w.pending=function(){return void 0!==s},w},qi=new Map;async function ji(e,t,n,o){Pi();const i=await n();Bi({segmentationId:e,type:t,data:i}),qi.has(e)||qi.set(e,[]);const a=qi.get(e);return a.includes(t)||a.push(t),function(e){e._debouncedUpdateFunction=t=>{zi(t,e)},ne.eventTarget.removeEventListener(ie.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction),ne.eventTarget.addEventListener(ie.SEGMENTATION_DATA_MODIFIED,e._debouncedUpdateFunction)}(o),Ut(e),i}const zi=Gi(((e,t)=>{const n=e.detail.segmentationId,o=qi.get(n);o&&o.length&&(t(n),o.length&&Ut(n))}),300),Ki=(0,ne.getWebWorkerManager)(),Yi=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_CONTOUR_TO_SURFACE})};function Xi(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");ne.utilities.isEqual(e[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"),e.unshift([0,0,0,0])),gn(e,t)}function Ji(e,t,n){const o=rn(e,t);if(!o)throw new Error("setColorLUT: could not find segmentation representation with UID ".concat(t));if(!hn(n))throw new Error("setColorLUT: could not find colorLUT with index ".concat(n));o.colorLUTIndex=n,kt(e,t)}function Zi(e,t,n){const o=rn(e,t);if(!o)throw new Error("segmentation representation with UID ".concat(t," does not exist for tool group ").concat(e));const{colorLUTIndex:i}=o,a=hn(i);let r=a[n];if(!r){if("number"!=typeof n)throw new Error("Can't create colour for LUT index ".concat(n));r=a[n]=[0,0,0,0]}return r}function $i(e,t,n,o){const i=Zi(e,t,n);for(let e=0;e<o.length;e++)i[e]=o[e];kt(e,t)}async function Qi(e,t){let n,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};i.segmentationRepresentationUID&&({segmentationRepresentation:n,toolGroupId:o}=Kt(i.segmentationRepresentationUID));const a=Bt(e),r=new Map,s=Object.keys(t).map((async e=>{const i=t[e],s=i.segmentIndex,l=n;if(Zi(o,n.segmentationRepresentationUID,s).slice(0,3),!l)throw new Error("No color found for segment index, unable to create surface");const c={id:"segmentation_".concat(a.segmentationId,"_surface_").concat(s),color:l,frameOfReferenceUID:"test-frameOfReferenceUID",data:{points:i.data.points,polys:i.data.polys}},d=c.id;return r.set(s,d),ne.geometryLoader.createAndCacheGeometry(d,{type:ne.Enums.GeometryType.SURFACE,geometryData:c})}));return await Promise.all(s),{geometryIds:r}}var ea=C(441),ta=C.n(ea),na=C(795),oa=C.n(na);const ia=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;o.removeActors([t])};var aa=C(976);const ra=(0,ne.getWebWorkerManager)(),sa=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_CONTOUR_TO_LABELMAP})};async function la(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{viewport:n}=t,o=ne.utilities.getViewportImageIds(n);if(!o)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");const i=ne.utilities.uuidv4(),a=ne.utilities.generateVolumePropsFromImageIds(o,i),{metadata:r,dimensions:s,origin:l,direction:c,spacing:d,scalarData:h}=a,u=await ne.volumeLoader.createLocalSegmentationVolume({dimensions:s,origin:l,direction:c,spacing:d,metadata:r,imageIds:o.map((e=>"generated://".concat(e))),referencedImageIds:o},i),{segmentIndices:g,annotationUIDsInSegmentMap:v}=da(e,t);sa(ne.eventTarget,0);const m=await ra.executeTask("polySeg","convertContourToVolumeLabelmap",{segmentIndices:g,dimensions:s,scalarData:h,origin:l,direction:c,spacing:d,annotationUIDsInSegmentMap:v},{callbacks:[e=>{sa(ne.eventTarget,e)}]});return sa(ne.eventTarget,1),u.imageData.getPointData().getScalars().setData(m),u.imageData.modified(),u.modified(),{volumeId:u.volumeId}}async function ca(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("No viewport provided, labelmap computation from contour requires viewports");const n=t.viewport.getImageIds();if(!n)throw new Error("No imageIds found, labelmap computation from contour requires viewports with imageIds");n.forEach((e=>{if(!ne.cache.getImageLoadObject(e))throw new Error("ImageIds must be cached before converting contour to labelmap")}));const{imageIds:o}=await ne.imageLoader.createAndCacheDerivedSegmentationImages(n),{segmentIndices:i,annotationUIDsInSegmentMap:a}=da(e,t),r=new Map;o.forEach(((e,t)=>{var o,i,a,s,l;const c=ne.cache.getImage(e),d=ne.metaData.get(ne.Enums.MetadataModules.IMAGE_PLANE,e);let{columnCosines:h,rowCosines:u,rowPixelSpacing:g,columnPixelSpacing:v,imagePositionPatient:m}=d;h=null!==(o=h)&&void 0!==o?o:[0,1,0],u=null!==(i=u)&&void 0!==i?i:[1,0,0],g=null!==(a=g)&&void 0!==a?a:1,v=null!==(s=v)&&void 0!==s?s:1,m=null!==(l=m)&&void 0!==l?l:[0,0,0];const p=aa.vec3.fromValues(u[0],u[1],u[2]),f=aa.vec3.fromValues(h[0],h[1],h[2]),I=aa.vec3.create();aa.vec3.cross(I,p,f);const w=[...p,...f,...I],E=[g,v,1],C=m;r.set(n[t],{direction:w,spacing:E,origin:C,scalarData:c.getPixelData(),imageId:e,dimensions:[c.width,c.height,1]})})),sa(ne.eventTarget,0);const s=await ra.executeTask("polySeg","convertContourToStackLabelmap",{segmentationsInfo:r,annotationUIDsInSegmentMap:a,segmentIndices:i},{callbacks:[e=>{sa(ne.eventTarget,e)}]});sa(ne.eventTarget,1);const l=new Map;return s.forEach(((e,t)=>{var n;let{scalarData:o}=e;const i=r.get(t),{imageId:a}=i,s=ne.cache.getImage(a);s.getPixelData().set(o),null===(n=s.imageFrame)||void 0===n||null===(n=n.pixelData)||void 0===n||n.set(o),l.set(t,a)})),{imageIdReferenceMap:l}}function da(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=e.annotationUIDsMap,i=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Array.from(o.keys()),a=new Map;return i.forEach((e=>{const t=o.get(e);let n=Array.from(t);n=n.filter((e=>!pt(e).parentAnnotationUID));const i=n.map((e=>{var t;const n=pt(e),o=null===(t=n.childAnnotationUIDs)||void 0===t?void 0:t.length;return{polyline:n.data.contour.polyline,referencedImageId:n.metadata.referencedImageId,holesPolyline:o&&n.childAnnotationUIDs.map((e=>pt(e).data.contour.polyline))}}));a.set(e,i)})),{segmentIndices:i,annotationUIDsInSegmentMap:a}}const ha=(0,ne.getWebWorkerManager)(),ua=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_SURFACE_TO_LABELMAP})};function ga(e,t){return new Map(e.map(((e,n)=>[e,t[n]])))}async function va(e){let{volumeId:t}=e;const n=ne.cache.getVolume(t);let o=!1;n.imageCacheOffsetMap.size>0&&(o=n.imageIds.every((e=>ne.cache.getImage(e))));const i=(0,ne.getRenderingEngines)()[0].getVolumeViewports().find((e=>e.hasVolumeId(t)));n.decache(!i&&o);const a=function(e){var t,n;if(null!==(t=e.additionalDetails)&&void 0!==t&&t.imageIdReferenceMap)return e.additionalDetails.imageIdReferenceMap;if(null!==(n=e.referencedImageIds)&&void 0!==n&&n.length&&!e.referencedImageIds[0].startsWith("derived"))return ga(e.referencedImageIds,[...e.imageIds].reverse());{var o,i,a;const t=e.referencedVolumeId,n=ne.cache.getVolume(t);if(!n)throw new Error("Cannot convert volumetric segmentation without referenced volume to stack segmentation yet");if(null==n||null===(o=n.imageIds)||void 0===o||!o.length)throw new Error("Cannot convert volumetric segmentation without imageIds to stack segmentation yet");if(null!==(i=n.imageIds)&&void 0!==i&&i[0].startsWith("derived"))throw new Error("Cannot convert volume segmentation that is derived from another segmentation\n to stack segmentation yet, include the additionalDetails.imageIdReferenceMap\n in the volume segmentation in case you need it for the conversion");const r=n.imageIds;let s=e.imageIds;return null!==(a=s)&&void 0!==a&&a.length||(s=e.convertToImageSlicesAndCache()),ga(r,[...s].reverse())}}(n);return{imageIdReferenceMap:a}}async function ma(e){let{segmentationId:t,options:n}=e;const o=Bt(t).representationData.LABELMAP,{imageIdReferenceMap:i}=await va({volumeId:o.volumeId});await async function(e){let{segmentationId:t,toolGroupId:n,imageIdReferenceMap:o,options:i}=e;const a=Bt(t);if(null!=i&&i.removeOriginal){const e=a.representationData.LABELMAP;ne.cache.getVolume(e.volumeId)&&ne.cache.removeVolumeLoadObject(e.volumeId),a.representationData.LABELMAP={imageIdReferenceMap:o}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,imageIdReferenceMap:o};await Va(n,[{segmentationId:t,type:Et.Labelmap}]),Pv(n),ne.eventTarget.addEventListenerOnce(ie.SEGMENTATION_RENDERED,(()=>Vt(t)))}({segmentationId:t,toolGroupId:n.toolGroupId,imageIdReferenceMap:i,options:n})}function pa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Labelmap,(()=>async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e);let i;const a=Bt(e),r=a.representationData;try{r.CONTOUR?i=await async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null===(t=o.viewport instanceof ne.VolumeViewport)||void 0===t||t;if(i&&!o.viewport)throw new Error("Cannot compute labelmap from contour segmentation without providing the viewport");const a=null!==(n=o.segmentIndices)&&void 0!==n&&n.length?o.segmentIndices:Rt(e),r=Bt(e).representationData.CONTOUR,s=i?la:ca;return await s(r,{segmentIndices:a,segmentationRepresentationUID:o.segmentationRepresentationUID,viewport:o.viewport})}(e,{segmentIndices:o,...n}):r.SURFACE&&(i=await async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null===(t=o.viewport instanceof ne.VolumeViewport)||void 0===t||t,a=null!==(n=o.segmentIndices)&&void 0!==n&&n.length?o.segmentIndices:Rt(e),r=Bt(e),s=new Map;if(r.representationData.SURFACE.geometryIds.forEach(((e,t)=>{a.includes(t)&&s.set(t,e)})),i&&!o.viewport)throw new Error("Cannot compute labelmap from surface segmentation without providing the viewport");let l;if(i){const e=o.viewport.getDefaultActor(),{uid:t}=e;l=await ne.volumeLoader.createAndCacheDerivedSegmentationVolume(t)}else{const e=o.viewport.getImageIds(),t="generatedSegmentationVolumeId",n=ne.utilities.generateVolumePropsFromImageIds(e,t);delete n.imageIds,l=await ne.volumeLoader.createLocalSegmentationVolume({...n,scalarData:n.scalarData,referencedImageIds:e},t)}const c=await async function(e,t){const{geometryIds:n}=e;if(null==n||!n.size)throw new Error("No geometry IDs found for surface representation");const o=new Map;n.forEach(((e,t)=>{const n=ne.cache.getGeometry(e).data,i=n.getPoints(),a=n.getPolys();o.set(t,{points:i,polys:a})}));const{dimensions:i,direction:a,origin:r,spacing:s}=t;ua(ne.eventTarget,0);const l=await ha.executeTask("polySeg","convertSurfacesToVolumeLabelmap",{segmentsInfo:o,dimensions:i,spacing:s,direction:a,origin:r},{callbacks:[e=>{ua(ne.eventTarget,e)}]});return ua(ne.eventTarget,1),t.imageData.getPointData().getScalars().setData(l),t.imageData.modified(),t.modified(),{volumeId:t.volumeId}}({geometryIds:s},l);return i?c:await va({volumeId:l.volumeId})}(a.segmentationId,{segmentIndices:o,...n}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return i}(e,t)),(()=>{}))}const fa=new Map;function Ia(){const e=oa().newInstance(),t=ta().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}let wa=!1;function Ea(e,t,n,o){const i={...e,...t,...o||{}};return{fillAlpha:n?i.fillAlpha:i.fillAlphaInactive,outlineWidth:n?i.outlineWidthActive:i.outlineWidthInactive,renderFill:n?i.renderFill:i.renderFillInactive,renderOutline:i.renderOutline,outlineOpacity:n?i.outlineOpacity:i.outlineOpacityInactive}}function Ca(e,t,n,o){let{fillAlpha:i,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l,segmentsHidden:c}=o;const d="".concat(e,"-").concat(t,"-").concat(n),h=fa.get(d);if(!h)return fa.set(d,{fillAlpha:i,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(c)}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:u,renderFill:g,renderOutline:v,outlineWidth:m,segmentColor:p,segmentsHidden:f}=h,I=p[0]!==s[0]||p[1]!==s[1]||p[2]!==s[2],w=p[3]!==s[3]||u!==i||g!==a||v!==r||m!==l||f.has(n)!==c.has(n);return fa.set(d,{fillAlpha:i,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(c)}),{forceOpacityUpdate:w,forceColorUpdate:I}}async function _a(e,t,n){await async function(e,t,n){const o=(0,ne.getEnabledElement)(e),{renderingEngine:i,viewport:a}=o,{id:r}=a;if(Ot(t,a)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:ne.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,ne.addVolumesToViewports)(i,e,[r],!1,!0)}else{const e=[{imageId:t.imageIdReferenceMap.get(a.getCurrentImageId()),actorUID:n}];await(0,ne.addImageSlicesToViewports)(i,e,[r],!1,!0)}}(e.element,t,n)}const ba={getRepresentationRenderingConfig:Ia,render:async function(e,t,n){const{colorLUTIndex:o,active:i,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s,config:l}=t,c=Bt(a);if(!c)return void console.warn("No segmentation found for segmentationId: ",a);let d=c.representationData[Et.Labelmap],h=e.getActor(r);if(!d&&Hi(r)&&!wa){if(wa=!0,d=await pa(a,{segmentationRepresentationUID:r,viewport:e}),!d)throw new Error("No labelmap data found for segmentationId ".concat(a,"."));wa=!1}if(!d)return;if(Ot(d,e)){var u;if(e instanceof ne.StackViewport)return;const{volumeId:t}=d;if(!ne.cache.getVolume(t))throw new Error("No Labelmap found for volumeId: ".concat(t));if(!function(e,t){if(!t)return!0;const n=e.getDefaultActor();if(!n)return!1;const{uid:o}=n,i=ne.cache.getVolume(o);if(i){const e=ne.cache.getVolume(t);if(e&&i.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,null===(u=d)||void 0===u?void 0:u.referencedVolumeId))return;h||await _a(e,d,r),h=e.getActor(r)}else{if(e instanceof ne.VolumeViewport)return;const t=e.getCurrentImageId(),{imageIdReferenceMap:n}=d;if(!n.has(t))return;h||await _a(e,d,r),h=e.getActor(r)}if(!h)return;const{cfun:g,ofun:v}=l,m=n.renderInactiveSegmentations;!function(e,t,n,o,i,a,r,s,l,c){const{segmentSpecificConfig:d,segmentationRepresentationSpecificConfig:h}=r,u=h[Et.Labelmap],g=hn(i),v=Math.min(256,g.length),{uid:m}=t,{outlineWidth:p,renderOutline:f,outlineOpacity:I}=Ea(a,u,s);for(let t=0;t<v;t++){var w;const i=t,r=g[i],l=null===(w=d[i])||void 0===w?void 0:w[Et.Labelmap],{fillAlpha:h,outlineWidth:v,renderFill:p,renderOutline:f}=Ea(a,u,s,l),{forceOpacityUpdate:I,forceColorUpdate:E}=Ca(e,m,i,{fillAlpha:h,renderFill:p,renderOutline:f,segmentColor:r,outlineWidth:v,segmentsHidden:c});if(E&&n.addRGBPoint(i,r[0]/255,r[1]/255,r[2]/255),I)if(p){const e=c.has(i)?0:r[3]/255*h;o.removePoint(i),o.addPointLong(i,e,.5,1)}else o.addPointLong(i,.01,.5,1)}const E=t.actor;E.getProperty().setRGBTransferFunction(0,n),o.setClamping(!1),E.getProperty().setScalarOpacity(0,o),E.getProperty().setInterpolationTypeToNearest(),E.getProperty().setUseLabelOutline(f),E.getProperty().setLabelOutlineOpacity(I);const{activeSegmentIndex:C}=Bt(r.segmentationId),_=new Array(v-1);for(let e=1;e<v;e++)_[e-1]=e===C?p+a.activeSegmentOutlineWidthDelta:p;E.getProperty().setLabelOutlineThickness(_);const b=s||l;E.setVisibility(b)}(e.id,h,g,v,o,n.representations[Et.Labelmap],t,i,m,s)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);ia(i.viewport.element,t)}})(e,t),ln(e,t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}};function Da(e){const{type:t}=e;return t===Et.Labelmap?Ia():{}}const Ta=[[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 Sa(e,t){if(Ye.svgNodeCache[e])return Ye.svgNodeCache[e][t]?Ye.svgNodeCache[e][t].domRef:void 0}function ya(e,t,n,o){if(!Ye.svgNodeCache[t])return null;Ye.svgNodeCache[t][o]={touched:!0,domRef:n},e.appendChild(n)}function Ma(e,t){Ye.svgNodeCache[e]&&Ye.svgNodeCache[e][t]&&(Ye.svgNodeCache[e][t].touched=!0)}function xa(e,t){Ye.svgNodeCache[t]&&Object.keys(Ye.svgNodeCache[t]).forEach((n=>{const o=Ye.svgNodeCache[t][n];!o.touched&&o.domRef&&(e.removeChild(o.domRef),delete Ye.svgNodeCache[t][n])}))}const Oa=function(e,t){const n=function(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n,renderingEngineId:o}=t,i="".concat(n,":").concat(o),a=function(e){const t=".".concat("viewport-element");return e.querySelector(t).querySelector(":scope > .svg-layer")}(e);return Object.keys(Ye.svgNodeCache[i]).forEach((e=>{Ye.svgNodeCache[i][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:Ye.svgNodeCache,getSvgNode:Sa.bind(this,i),appendNode:ya.bind(this,a,i),setNodeTouched:Ma.bind(this,i),clearUntouched:xa.bind(this,a,i)}}(e);t(n),n.clearUntouched()};function Pa(e,t){const n=(0,ne.getEnabledElement)(e),{renderingEngineId:o,viewportId:i}=n,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],o=a.toolOptions[n];if(o&&t.includes(o.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:Aa,Passive:Ra,Enabled:Na}=Je,La=new class{constructor(){re(this,"hasBeenDestroyed",void 0),re(this,"_needsRender",new Set),re(this,"_animationFrameSet",!1),re(this,"_animationFrameHandle",null),re(this,"_viewportElements",void 0),re(this,"_renderFlaggedViewports",(()=>{this._throwIfDestroyed();const e=Array.from(this._viewportElements.values());for(let t=0;t<e.length;t++){const n=e[t];if(this._needsRender.has(n)&&(this._triggerRender(n),this._needsRender.delete(n),0===this._needsRender.size))break}this._animationFrameSet=!1,this._animationFrameHandle=null,this._render()})),this._viewportElements=new Map}addViewportElement(e,t){this._viewportElements.set(e,t)}removeViewportElement(e,t){this._viewportElements.delete(e),this._needsRender.delete(t),this._reset()}renderViewport(e){this._setViewportsToBeRenderedNextFrame([e])}_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.")}_setAllViewportsToBeRenderedNextFrame(){[...this._viewportElements.values()].forEach((e=>{this._needsRender.add(e)})),this._renderFlaggedViewports()}_setViewportsToBeRenderedNextFrame(e){const t=[...this._viewportElements.values()];e.forEach((e=>{-1!==t.indexOf(e)&&this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedViewports),this._animationFrameSet=!0)}_triggerRender(e){const t=(0,ne.getEnabledElement)(e);if(!t)return;if(!(0,ne.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=Pa(e,[Aa,Ra,Na]),{renderingEngineId:o,viewportId:i}=t,a={element:e,renderingEngineId:o,viewportId:i};Oa(e,(o=>{let i=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,o);i=i||n}})),i&&(0,ne.triggerEvent)(e,ie.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},ka=function(e){La.renderViewport(e)},Ua=function(e,t){t.length&&e&&t.forEach((t=>{const n=e.getViewport(t);if(!n)return void console.warn("Viewport not available for ".concat(t));const{element:o}=n;ka(o)}))};const Va=async function(e,t,n){if(!ei(e))throw new Error("No tool group found for toolGroupId: ".concat(e));const o=t.map((t=>async function(e,t,n){var o;const{segmentationId:i,options:a={}}=t,r=(null===(o=t.options)||void 0===o?void 0:o.segmentationRepresentationUID)||ne.utilities.uuidv4(),s=new Set,l=function(){const e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).colorLUTOrIndex;let t;if("number"==typeof e)t=e;else{const n=un();gn(Array.isArray(e)?e:Ta,n),t=n}return t}(a),c={segmentationId:i,segmentationRepresentationUID:r,type:t.type,segmentsHidden:s,colorLUTIndex:l,active:!0,segmentationRepresentationSpecificConfig:{},segmentSpecificConfig:{},config:Da(t),polySeg:a.polySeg};if(n){const t=ai(e),o=ne.utilities.deepMerge(t,n);ri(e,{renderInactiveSegmentations:o.renderInactiveSegmentations||!0,representations:{...o.representations}})}return nn(e,c),t.type===Et.Contour&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getRenderingEngine)(n);Ua(o,[t])})),r}(e,t,n)));return await Promise.all(o)};async function Wa(e){var t;let{imageIdReferenceMap:n,options:o}=e;const i=Array.from(n.values()),a={imageIdReferenceMap:n},r=null!==(t=null==o?void 0:o.volumeId)&&void 0!==t?t:ne.utilities.uuidv4();return await ne.volumeLoader.createAndCacheVolumeFromImages(r,i,{additionalDetails:a}),{volumeId:r}}async function Ha(e){let{segmentationId:t,options:n}=e;const o=Bt(t).representationData.LABELMAP,{volumeId:i}=await Wa({imageIdReferenceMap:o.imageIdReferenceMap,options:n});await async function(e){let{segmentationId:t,toolGroupId:n,volumeId:o,options:i}=e;const a=Bt(t);if(null!=i&&i.removeOriginal){const e=a.representationData.LABELMAP.imageIdReferenceMap;Array.from(e.values()).forEach((e=>{ne.cache.removeImageLoadObject(e)})),a.representationData.LABELMAP={volumeId:o}}else a.representationData.LABELMAP={...a.representationData.LABELMAP,volumeId:o};await Va(n,[{segmentationId:t,type:Et.Labelmap}]),Pv(n),ne.eventTarget.addEventListenerOnce(ie.SEGMENTATION_RENDERED,(()=>Vt(t)))}({segmentationId:t,toolGroupId:n.toolGroupId,options:n,volumeId:i})}const Ba=(0,ne.getWebWorkerManager)(),Fa=(e,t)=>{(0,ne.triggerEvent)(e,ne.Enums.Events.WEB_WORKER_PROGRESS,{progress:t,type:Mi.POLYSEG_LABELMAP_TO_SURFACE})};async function Ga(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=Bt(e);if(null==o||null===(t=o.representationData)||void 0===t||!t.LABELMAP)return void console.warn("Only support surface update from labelmaps");const i=Ot(o.representationData.LABELMAP),a=o.representationData.LABELMAP,r=n.segmentIndices||Rt(e),s=r.map((e=>{const t=async function(e,t){let n;if(arguments.length>2&&void 0!==arguments[2]&&!arguments[2]){const{imageIdReferenceMap:t}=e;({volumeId:n}=await Wa({imageIdReferenceMap:t}))}else n=e.volumeId;const o=ne.cache.getVolume(n),i=o.getScalarData(),{dimensions:a,spacing:r,origin:s,direction:l}=o;Fa(ne.eventTarget,0);const c=await Ba.executeTask("polySeg","convertLabelmapToSurface",{scalarData:i,dimensions:a,spacing:r,origin:s,direction:l,segmentIndex:t},{callbacks:[e=>{Fa(ne.eventTarget,e)}]});return Fa(ne.eventTarget,1),c}(a,e,i);return t})),l=await Promise.allSettled(s),c=l.filter((e=>"rejected"===e.status));if(c.length>0)throw console.error(c),new Error("Failed to convert labelmap to surface");return l.map(((e,t)=>{if("fulfilled"===e.status)return{segmentIndex:r[t],data:e.value}})).filter(Boolean)}function qa(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Surface,(()=>async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e);let i;const a=Bt(e),r=a.representationData;try{r.CONTOUR?i=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Bt(e).representationData.CONTOUR,o=(t.segmentIndices||Rt(e)).map((async e=>{const t=await async function(e,t){const{annotationUIDsMap:n}=e,o=[],i=[],a=n.get(t);for(const e of a){const t=pt(e),{polyline:n}=t.data.contour;i.push(n.length),n.forEach((e=>o.push(...e)))}Yi(ne.eventTarget,0);const r=await Ki.executeTask("polySeg","convertContourToSurface",{polylines:o,numPointsArray:i},{callbacks:[e=>{Yi(ne.eventTarget,e)}]});return Yi(ne.eventTarget,1),r}(n,e);return{segmentIndex:e,data:t}}));return await Promise.all(o)}(e,{segmentIndices:o,...n}):r.LABELMAP&&(i=await Ga(a.segmentationId,{segmentIndices:o,...n}))}catch(e){throw console.error(e),e}if(!i)throw new Error("Not enough data to convert to surface, currently only support converting volume labelmap to surface if available");return await Qi(e,i,n)}(e,t)),(()=>async function(e){const t=await Ga(e);if(!t)return;const n=Bt(e),o=Rt(e);if(!o.length)return n.representationData.SURFACE.geometryIds.forEach((e=>{const t=ne.cache.getGeometry(e).data;t.setPoints([]),t.setPolys([])})),void Ut(e);const i=t.map((t=>{let{data:i,segmentIndex:a}=t;const r="segmentation_".concat(e,"_surface_").concat(a),s=ne.cache.getGeometry(r);if(!s)return Yt(e).map((t=>qt(t).map((t=>{if(t.type===Et.Surface)return n.representationData.SURFACE.geometryIds.set(a,r),Qi(e,[{segmentIndex:a,data:i}],{segmentationRepresentationUID:t.segmentationRepresentationUID})}))));if(o.includes(a)){const e=s.data;e.setPoints(i.points),e.setPolys(i.polys)}else{const e=s.data;e.setPoints([]),e.setPolys([])}}));await Promise.all(i),Ut(e)}(e)))}const ja={render:async function(e,t){const{colorLUTIndex:n,segmentationId:o,segmentationRepresentationUID:i}=t,a=Bt(o);if(!a)return;if(!(e instanceof ne.VolumeViewport3D))throw new Error("Surface rendering is only supported in 3D viewports, if you need to visualize the surface cuts in 2D viewports, you can use the Contour representation, see polySeg converters");let r=a.representationData[Et.Surface];if(!r&&Hi(i)&&(r=await qa(o,{segmentationRepresentationUID:i}),!r))throw new Error("No Surface data found for segmentationId ".concat(o,"."));const{geometryIds:s}=r;null!=s&&s.size||console.warn("No Surfaces found for segmentationId ".concat(o,". Skipping render."));const l=hn(n),c=[];s.forEach(((t,n)=>{const o=ne.cache.getGeometry(t);if(null==o||!o.data)return void console.warn("No Surfaces found for geometryId ".concat(t,". Skipping render."));const a=o.data,r=l[n];a.setColor(r.slice(0,3)),function(e,t,n){var o;const i=function(e,t){return"".concat(e,"_").concat(t)}(n,t.id),a=(0,ne.getEnabledElement)(e),{viewport:r}=a,s=null===(o=r.getActor(i))||void 0===o?void 0:o.actor;if(s){const e=s.getMapper(),n=e.getInputData(),o=t.getPoints(),i=t.getPolys(),a=n.getPoints().getData(),l=n.getPolys().getData();if(o.length===a.length&&i.length===l.length)return;const c=Di().newInstance();c.getPoints().setData(o,3);const d=Si().newInstance({values:Float32Array.from(i)});return c.setPolys(d),e.setInputData(c),e.modified(),void setTimeout((()=>{r.getRenderer().resetCameraClippingRange()}),0)}const l=t.getPoints(),c=t.getPolys(),d=t.getColor(),h=Di().newInstance();h.getPoints().setData(l,3);const u=Si().newInstance({values:Float32Array.from(c)});h.setPolys(u);const g=Ei().newInstance({});g.setInputData(h);const v=_i().newInstance();v.setMapper(g),v.getProperty().setColor(d[0]/255,d[1]/255,d[2]/255),v.getProperty().setLineWidth(2),r.addActor({actor:v,uid:i,clippingFilter:void 0}),r.resetCamera(),r.render(),setTimeout((()=>{r.getRenderer().resetCameraClippingRange()}),0)}(e.element,a,i),c.push(a)})),e.render()},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);Ii(i.viewport.element,t)}})(e,t),ln(e,t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}};var za=C(127),Ka=C.n(za),Ya=C(348),Xa=C.n(Ya);function Ja(e,t,n){var o;let i=null===(o=e.segmentSpecificConfig)||void 0===o?void 0:o[t];var a;return i||(i=null===(a=e.segmentSpecificConfig)||void 0===a?void 0:a[n]),i?i.CONTOUR:null}const Za=new Map;function $a(e){return Za.get(e)}function Qa(e,t){Za.set(e,t)}function er(e,t,n,o,i){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=Ka().newInstance(),l=new Map,c=new Map;t.forEach((e=>{const t=ne.cache.getGeometry(e);if(!t)return void console.warn("No geometry found for geometryId ".concat(e,". Skipping render."));const o=t.data.getSegmentIndex();!function(e){if(!e)throw new Error("No contours found for geometryId ".concat(e.id));const t=e.id;if(e.type!==ne.Enums.GeometryType.CONTOUR)throw new Error("Geometry type ".concat(e.type," not supported for rendering."));e.data||console.warn("No contours found for geometryId ".concat(t,". Skipping render."))}(t);const i=Ja(n,e,o),a=t.data,d=function(e){const t=[],n=Xa().newInstance(),o=Si().newInstance();let i=0;e.getContours().forEach((e=>{const n=e.getPoints(),a=e.getFlatPointsArray(),r=e.getType(),s=n.map(((e,t)=>t+i));r===ne.Enums.ContourType.CLOSED_PLANAR&&s.push(s[0]);const l=Float32Array.from(a);t.push(...l),o.insertNextCell([...s]),i+=n.length})),n.setData(t,3);const a=Di().newInstance();return a.setPoints(n),a.setLines(o),a}(a),h=a.getColor(),u=d.getPoints().getNumberOfPoints(),g=Jo().newInstance({size:4*u,numberOfComponents:4,dataType:"Uint8Array"});for(let e=0;e<u;++e)g.setTuple(e,[...h,255]);d.getPointData().setScalars(g),i&&c.set(o,i),l.set(o,[...h,r.has(o)?0:255]),0===o?s.setInputData(d):s.addInputData(d)}));const d=s.getOutputData(),h=o.representations.CONTOUR.outlineWidthActive,u=Ei().newInstance();u.setInputData(d);const g=_i().newInstance();g.setMapper(u),g.getProperty().setLineWidth(h),Qa(a,Object.assign({},$a(a),{segmentsHidden:new Set(r),segmentSpecificMap:c,outlineWidthActive:h})),g.setForceOpaque(!0),e.addActor({uid:i,actor:g}),e.resetCamera(),e.render()}function tr(e,t,n,o,i){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=o.representations.CONTOUR,l=$a(a),c=e.getActor(i);if(!c)return void console.warn("No contour actor found for actorUID ".concat(i,". Skipping render."));const{actor:d}=c,h=s.outlineWidthActive;(null==l?void 0:l.outlineWidthActive)!==h&&(d.getProperty().setLineWidth(h),Qa(a,Object.assign({},l,{outlineWidthActive:h})));const u=d.getMapper(),g=u.getLookupTable(),v=[],m=[];for(const e of r)l.segmentsHidden.has(e)||v.push(e);for(const e of l.segmentsHidden)r.has(e)||m.push(e);const p=Array.from(l.segmentsHidden).filter((e=>!m.includes(e))).concat(v),{contourSets:f,segmentSpecificConfigs:I}=t.reduce(((e,t)=>{const o=ne.cache.getGeometry(t),{data:i}=o,a=i.getSegmentIndex(),r=Ja(n,t,a);return e.contourSets.push(i),e.segmentSpecificConfigs[a]=null!=r?r:{},e}),{contourSets:[],segmentSpecificConfigs:{}}),w=[...p,...m],E=Object.values(I).some((e=>Object.keys(e).length>0));let C=!1;if(w.length||E){const e=u.getInputData(),t=e.getPointData().getScalars().getData();let n=0;f.forEach((e=>{var o;const i=e.getSegmentIndex(),a=e.getTotalNumberOfPoints();if(w.includes(i)||null!==(o=I[i])&&void 0!==o&&o.fillAlpha){const o=e.getColor();let r=p.includes(i)?0:255;const s=I[i];void 0!==s.fillAlpha&&(r=255*s.fillAlpha);for(let e=0;e<a;++e)t[n+4*e]=o[0],t[n+4*e+1]=o[1],t[n+4*e+2]=o[2],t[n+4*e+3]=r;C=!0}n+=4*a})),C&&e.modified(),Qa(a,Object.assign({},l,{segmentsHidden:new Set(r)})),u.setLookupTable(g)}e.render()}const nr=function(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getActors().map((e=>{let{uid:n}=e;return n.includes(t)?n:void 0})).filter(Boolean);o.removeActors(i)};function or(e,t){const n=new Map;for(const[o,i]of e){const e=o.split("_")[1];for(const[o,a]of i){if(!a)continue;const o=Number(e)||(null==t?void 0:t.get(e));o&&(n.has(o)||n.set(o,[]),n.get(o).push(a))}}return n}const{CalibrationTypes:ir}=ne.Enums,ar="px",rr=[1],sr=["3,3"],lr=["4,3"],cr={3:"cm",4:"seconds"},dr=(e,t)=>{const{calibration:n,hasPixelSpacing:o}=t,i=o?"mm":ar;return n&&(n.type||n.sequenceOfUltrasoundRegions)?n.type===ir.UNCALIBRATED?ar:n.sequenceOfUltrasoundRegions?"US Region":"".concat(i," ").concat(n.type):i},hr="²",ur=(e,t)=>{const{calibration:n,hasPixelSpacing:o}=t,i=(o?"mm":ar)+hr;return n&&n.type?n.sequenceOfUltrasoundRegions?"US Region":"".concat(i," ").concat(n.type):i},gr=function(e){var t,n;if(null===(t=e.calibration)||void 0===t||!t.sequenceOfUltrasoundRegions)return null!==(n=e.calibration)&&void 0!==n&&n.scale?e.calibration.scale:1},vr=(e,t)=>{const[n,o]=t,{calibration:i,hasPixelSpacing:a}=e;let r=a?"mm":ar;const s=r+hr;let l=1,c="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:r,areaUnits:s,scale:l};if(i.type===ir.UNCALIBRATED)return{units:ar,areaUnits:ar+hr,scale:l};if(i.sequenceOfUltrasoundRegions){var d;let e=i.sequenceOfUltrasoundRegions.filter((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1&&o[0]>=e.regionLocationMinX0&&o[0]<=e.regionLocationMaxX1&&o[1]>=e.regionLocationMinY0&&o[1]<=e.regionLocationMaxY1));if(null===(d=e)||void 0===d||!d.length)return{units:r,areaUnits:s,scale:l};if(e=e.filter((e=>rr.includes(e.regionDataType)&&sr.includes("".concat(e.physicalUnitsXDirection,",").concat(e.physicalUnitsYDirection)))),!e.length)return{units:ar,areaUnits:ar+hr,scale:l};const t=e[0],a=Math.abs(t.physicalDeltaX),h=Math.abs(t.physicalDeltaY);if(!ne.utilities.isEqual(a,h,.001))return{units:ar,areaUnits:ar+hr,scale:l};l=1/(a*h*100),c="US Region",r="mm"}else i.scale&&(l=i.scale);return[ir.ERMF,ir.USER,ir.ERROR,ir.PROJECTION].includes(null==i?void 0:i.type)&&(c=i.type),{units:r+(c?" ".concat(c):""),areaUnits:s+(c?" ".concat(c):""),scale:l}},mr=(e,t)=>{const[n]=t,{calibration:o}=e;let i=["raw"],a=[null],r="";if(!o||!o.type&&!o.sequenceOfUltrasoundRegions)return{units:i,values:a};if(o.sequenceOfUltrasoundRegions){const e=o.sequenceOfUltrasoundRegions.filter((e=>rr.includes(e.regionDataType)&&lr.includes("".concat(e.physicalUnitsXDirection,",").concat(e.physicalUnitsYDirection))));if(null==e||!e.length)return{units:i,values:a};const t=e.find((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1));if(!t)return{units:i,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:c,physicalDeltaY:d}=t,h=(n[1]-t.regionLocationMinY0-l)*d;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*c,h],i=[cr[t.physicalUnitsXDirection],cr[t.physicalUnitsYDirection]]}return{units:i,values:a,calibrationType:r}},pr=e=>{var t;return(null===(t=e.calibration)||void 0===t?void 0:t.aspect)||1};function fr(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const o=(0,ne.getEnabledElement)(e);if(!o)throw new Error("getAnnotationNearPoint: enabledElement not found");return Ir(o,t,n)}function Ir(e,t,n){const{renderingEngineId:o,viewportId:i}=e,a=Qo(i,o);if(!a)return null;const{_toolInstances:r}=a;for(const o in r){const i=wr(r[o],e,t,n);if(i)return i}return null}function wr(e,t,n,o){var i;const{viewport:a}=t,r=st(e.constructor.toolName,null==a?void 0:a.element),s=null==a||null===(i=a.getCurrentImageId)||void 0===i?void 0:i.call(a);if(null!=r&&r.length){const{element:i}=t.viewport;for(const t of r){var l;const a=null===(l=t.metadata)||void 0===l?void 0:l.referencedImageId;if(!(s&&a&&s!==a||!e.isPointNearTool)&&(e.isPointNearTool(i,t,n,o,"")||e.getHandleNearImagePoint(i,t,n,o)))return t}}return null}const Er=function(e,t,n){let o=!0,i=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return Fi(n)&&(o="leading"in n?Boolean(n.leading):o,i="trailing"in n?Boolean(n.trailing):i),Gi(e,t,{leading:o,trailing:i,maxWait:t})};const Cr=function(e,t,n){return Math.min(Math.max(t,e),n)},{calibratedPixelSpacingMetadataProvider:_r}=ne.utilities;function br(e,t,n){"number"==typeof n&&(n={type:ne.Enums.CalibrationTypes.USER,scale:n}),_r.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}const Dr=function(e){e.forEach((e=>{const t=ei(e);t?t.getViewportsInfo().forEach((e=>{const{renderingEngineId:t,viewportId:n}=e,o=(0,ne.getRenderingEngine)(t);if(!o)return void console.warn("RenderingEngine not available for ".concat(t));const i=o.getViewport(n);ka(i.element)})):console.warn("ToolGroup not available for ".concat(e))}))};function Tr(e,t){if(!(0,ne.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof ne.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{type:n}=e,{volumeId:o,delta:i,scrollSlabs:a}=t;if(e instanceof ne.StackViewport)e.scroll(i,t.debounceLoading,t.loop);else if(e instanceof ne.VolumeViewport)!function(e,t,n){const o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:i,currentStepIndex:a,sliceRangeInfo:r}=ne.utilities.getVolumeViewportScrollInfo(e,t,o);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:c}=r,{focalPoint:d,viewPlaneNormal:h,position:u}=c,{newFocalPoint:g,newPosition:v}=ne.utilities.snapFocalPointToSlice(d,u,s,h,l,n);e.setCamera({focalPoint:g,position:v}),e.render();const m=a+n,p={volumeId:t,viewport:e,delta:n,desiredStepIndex:m,currentStepIndex:a,numScrollSteps:i,currentImageId:e.getCurrentImageId()};(m>i||m<0)&&e.getCurrentImageId()?ne.utilities.triggerEvent(ne.eventTarget,ne.EVENTS.VOLUME_SCROLL_OUT_OF_BOUNDS,p):ne.utilities.triggerEvent(ne.eventTarget,ne.EVENTS.VOLUME_VIEWPORT_SCROLL,p)}(e,o,i,a);else{if(!(e instanceof ne.VideoViewport))throw new Error("Not implemented for Viewport Type: ".concat(n));e.scroll(i)}}const Sr=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:o,volumeId:i}=t,a=(0,ne.getEnabledElement)(e);if(!a)throw new Error("Element has been disabled");const{viewport:r}=a,{imageIndex:s,numberOfSlices:l}=function(e,t){if(e instanceof ne.StackViewport)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};if(e instanceof ne.VolumeViewport)return ne.utilities.getImageSliceDataForVolumeViewport(e);throw new Error("Unsupported viewport type")}(r,o),c=function(e,t){return Cr(t,0,e-1)}(l,n);Tr(r,{delta:c-s,debounceLoading:o,volumeId:i})};function yr(e,t,n,o){let i,a,r,s,l,c,d;const{numComps:h}=e;d=e.getScalarData?e.getScalarData():e.getPointData().getScalars().getData();const u=e.getDimensions();o?[[i,a],[r,s],[l,c]]=o:(i=0,a=u[0],r=0,s=u[1],l=0,c=u[2]);const g=aa.vec3.fromValues(i,r,l),v=e.getDirection(),m=v.slice(0,3),p=v.slice(3,6),f=v.slice(6,9),I=e.getSpacing(),[w,E,C]=I,_=e.indexToWorld(g),b=aa.vec3.fromValues(m[0]*w,m[1]*w,m[2]*w),D=aa.vec3.fromValues(p[0]*E,p[1]*E,p[2]*E),T=aa.vec3.fromValues(f[0]*C,f[1]*C,f[2]*C),S=h||d.length/u[2]/u[1]/u[0],y=u[0]*S,M=u[1]*y,x=[],O=aa.vec3.clone(_);for(let e=l;e<=c;e++){const o=aa.vec3.clone(O);for(let o=r;o<=s;o++){const r=aa.vec3.clone(O);for(let r=i;r<=a;r++){const i=[r,o,e];if(t(O,i)){const t=e*M+o*y+r*S;let a;a=S>2?[d[t],d[t+1],d[t+2]]:d[t],x.push({value:a,index:t,pointIJK:i,pointLPS:O.slice()}),n&&n({value:a,index:t,pointIJK:i,pointLPS:O})}aa.vec3.add(O,O,b)}aa.vec3.copy(O,r),aa.vec3.add(O,O,D)}aa.vec3.copy(O,o),aa.vec3.add(O,O,T)}return x}const{EPSILON:Mr}=ne.CONSTANTS;function xr(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=1/0,a=o?-1/0:0,r=1/0,s=o?-1/0:0,l=1/0,c=o?-1/0:0;const d=3===(null===(n=e[0])||void 0===n?void 0:n.length);for(let t=0;t<e.length;t++){const n=e[t];var h,u;i=Math.min(n[0],i),a=Math.max(n[0],a),r=Math.min(n[1],r),s=Math.max(n[1],s),d&&(l=Math.min(null!==(h=n[2])&&void 0!==h?h:l,l),c=Math.max(null!==(u=n[2])&&void 0!==u?u:c,c))}return t?(i=Math.max(o?t[0]+Mr:0,i),a=Math.min(o?t[0]-Mr:t[0]-1,a),r=Math.max(o?t[1]+Mr:0,r),s=Math.min(o?t[1]-Mr:t[1]-1,s),d&&3===t.length&&(l=Math.max(o?t[2]+Mr:0,l),c=Math.min(o?t[2]-Mr:t[2]-1,c))):o||(i=Math.max(0,i),a=Math.min(1/0,a),r=Math.max(0,r),s=Math.min(1/0,s),d&&(l=Math.max(0,l),c=Math.min(1/0,c))),d?[[i,a],[r,s],[l,c]]:[[i,a],[r,s],null]}function Or(e,t){return xr(e,t,!1)}function Pr(e,t){return xr(e,t,!0)}const{transformWorldToIndex:Ar}=ne.utilities;function Rr(e,t,n){const[o,i]=e,a=aa.vec3.fromValues((o[0]+i[0])/2,(o[1]+i[1])/2,(o[2]+i[2])/2),r=aa.vec3.distance(o,i)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:c}=function(e,t,n,o,i){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),c=aa.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),d=aa.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=aa.vec3.create();aa.vec3.cross(h,c,d);const u=aa.vec3.create(),g=aa.vec3.create();aa.vec3.scaleAndAdd(u,r,d,i),aa.vec3.scaleAndAdd(g,a,d,-i),aa.vec3.scaleAndAdd(u,u,h,-i),aa.vec3.scaleAndAdd(g,g,h,i);return{boundsIJK:Or([Ar(e,u),Ar(e,g),...n.map((t=>Ar(e,t)))],s),topLeftWorld:u,bottomRightWorld:g}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:c}}class Nr{static imageIdToFrames(e){const t=e.match(this.frameRangeExtractor);if(!t||!t[2])return null;const n=t[2].split("-").map((e=>Number(e)));return 1===n.length?n[0]:n}static framesToString(e){return Array.isArray(e)?"".concat(e[0],"-").concat(e[1]):String(e)}static framesToImageId(e,t){const n=e.match(this.frameRangeExtractor);if(!n||!n[2])return null;const o=this.framesToString(t);return e.replace(this.frameRangeExtractor,"".concat(n[1]).concat(o))}static setFrameRange(e,t,n){const{referencedImageId:o}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(o,t);const i={...n,annotation:e};(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_MODIFIED,i)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}function Lr(e,t){const{center:n,radius:o}=e,i=e.radius2||o*o;return(t[0]-n[0])*(t[0]-n[0])+(t[1]-n[1])*(t[1]-n[1])+(t[2]-n[2])*(t[2]-n[2])<=i}re(Nr,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const{transformWorldToIndex:kr}=ne.utilities;function Ur(e,t,n,o){const{boundsIJK:i,centerWorld:a,radiusWorld:r}=function(e,t,n){const[o,i]=e,a=aa.vec3.fromValues((o[0]+i[0])/2,(o[1]+i[1])/2,(o[2]+i[2])/2),r=aa.vec3.distance(o,i)/2;let s;if(!n){const e=kr(t,a),n=t.getSpacing(),o=Math.min(...n),i=Math.ceil(r/o);return s=[[e[0]-i,e[0]+i],[e[1]-i,e[1]+i],[e[2]-i,e[2]+i]],{boundsIJK:s,centerWorld:a,radiusWorld:r}}return s=function(e,t,n,o,i){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),c=aa.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),d=aa.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=aa.vec3.create();aa.vec3.cross(h,c,d);const u=aa.vec3.create(),g=aa.vec3.create();aa.vec3.scaleAndAdd(u,r,d,i),aa.vec3.scaleAndAdd(g,a,d,-i),aa.vec3.scaleAndAdd(u,u,h,-i),aa.vec3.scaleAndAdd(g,g,h,i);return Or([kr(e,u),kr(e,g)],s)}(t,n,e,0,r),{boundsIJK:s,centerWorld:a,radiusWorld:r}}(t,e,o),s={center:a,radius:r};yr(e,(e=>Lr(s,e)),n,i)}const{isEqual:Vr}=ne.utilities;function Wr(e){const{metadata:t}=e;return(0,ne.getEnabledElements)().filter((e=>{if(e.FrameOfReferenceUID===t.FrameOfReferenceUID){const n=e.viewport,{viewPlaneNormal:o,viewUp:i}=n.getCamera();return Vr(o,t.viewPlaneNormal)&&(!t.viewUp||Vr(i,t.viewUp))}})).map((e=>e.viewport))}function Hr(e){const t=Wr(e);return t.length?t[0]:void 0}function Br(e,t){const{viewPlaneNormal:n}=e.metadata,{viewPlaneNormal:o}=t.metadata,i=aa.vec3.dot(n,o);if(!aa.glMatrix.equals(1,Math.abs(i)))return!1;const{polyline:a}=e.data.contour,{polyline:r}=t.data.contour,s=aa.vec3.dot(n,a[0]),l=aa.vec3.dot(n,r[0]);return aa.glMatrix.equals(s,l)}function Fr(e,t,n){let o=-1;if(t.forEach(((t,n)=>{o>=0||t.a==e.b&&(o=n)})),o>=0){const e=t[o];return t.splice(o,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:Fr(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Gr(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const o=Fr(n,e,t);if(0==o.remainingLines.length)return[{type:o.type,contourPoints:o.contourPoints}];{const e=Gr(o.remainingLines);return e.push({type:o.type,contourPoints:o.contourPoints}),e}}function qr(e){return Gr(e)}const jr={findContours:Gr,findContoursFromReducedSet:qr};function zr(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),o=e.getLines(),i=new Array(n.getNumberOfPoints()).fill(0).map(((e,t)=>n.getPoint(t).slice())),a=new Array(o.getNumberOfCells()).fill(0).map(((e,t)=>{const n=o.getCell(3*t).slice();return{a:n[0],b:n[1]}}));if(t)return{points:i,lines:a};const r=[];for(const[e,t]of i.entries()){const n=r.findIndex((e=>e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]));if(n>=0)a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)));else{const n=r.length;r.push(t),a.map((t=>(t.a===e&&(t.a=n),t.b===e&&(t.b=n),t)))}}return{points:r,lines:a.filter((e=>e.a!==e.b))}}const Kr={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=e.filter((e=>"CLOSED_PLANAR"!==e.type)),i=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return i.forEach(((e,n)=>{const o=[];i.forEach(((i,a)=>{n!=a&&function(e,t,n){const o=[];e.contourPoints.forEach((e=>{o.push([n[e][0],n[e][1]])}));let i=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],o=e[1];let i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){const r=t[e][0],s=t[e][1],l=t[a][0],c=t[a][1];s>o!=c>o&&n<(l-r)*(o-s)/(c-s)+r&&(i=!i)}return i})([n[e][0],n[e][1]],o)||i++})),0===i}(e,i,t)&&o.push(a)})),o.length>0?a.push({contour:e,holes:o}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",o.push(e.contour),e.holes.forEach((e=>{i[e].type="CLOSEDPLANAR_XOR",o.push(i[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{o.push(i[e])}))),o}};var Yr=C(543),Xr=C.n(Yr);const{Labelmap:Jr}=Et;function Zr(e){let{segmentations:t}=e;const{representationData:n,segments:o=[0,1]}=t,{volumeId:i}=n[Jr],a=ne.cache.getVolume(i);if(!a)return void console.warn("No volume found for ".concat(i));const r=a.dimensions[2],s=a.imageData.getPointData().getScalars().getData(),l=a.dimensions[0]*a.dimensions[1];for(let e=0;e<r;e++)for(let t=0;t<a.dimensions[1];t++){const n=t*a.dimensions[0]+e*l;s[n]=0,s[n+a.dimensions[0]-1]=0}const c=[],{FrameOfReferenceUID:d}=a.metadata,h=o.length;for(let e=0;e<h;e++){const t=o[e];if(!t)continue;const n=[],i=Jo().newInstance({name:"Scalars",numberOfComponents:1,size:l*r,dataType:"Uint8Array"}),{containedSegmentIndices:h}=t;for(let t=0;t<r;t++){if($r(t,s,l,e))continue;const o=t*l;try{var u;for(let t=0;t<l;t++){const n=s[t+o];n===e||null!=h&&h.has(n)?i.setValue(t+o,1):i.setValue(t,0)}const r=Xr().newInstance({slice:t}),c=$o().newInstance();c.shallowCopy(a.imageData),c.getPointData().setScalars(i),r.setInputData(c);const g=[1];r.setContourValues(g),r.setMergePoints(!1);const v=zr(r.getOutputData());if(null!==(u=v.points)&&void 0!==u&&u.length){const e=qr(v.lines);n.push({contours:e,polyData:v,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:d})}}catch(e){console.warn(t),console.warn(e)}}const g={FrameOfReferenceUID:d},v={label:t.label,color:t.color,metadata:g,sliceContours:n};c.push(v)}return c}function $r(e,t,n,o){const i=e*n,a=i+n;for(let e=i;e<a;e++)if(t[e]===o)return!1;return!0}class Qr{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:o,projectionPointsImageIds:i}=n.cachedStats;return o.map(((e,n)=>{const o=function(e){const t=[...e[0],...e[1],...e[3],...e[2]].flat().map((e=>e.toFixed(2)));return t}(e),a=function(e,t){const n=t.get("sopCommonModule",e);return{ReferencedSOPClassUID:n.sopClassUID,ReferencedSOPInstanceUID:n.sopInstanceUID}}(i[n],t);return{NumberOfContourPoints:o.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:o}}))}}re(Qr,"toolName",void 0),Qr.toolName="RectangleROIStartEndThreshold";const es=Qr;class ts{constructor(){}static convert(e,t,n){!function(e){if(null==e||!e.data)throw new Error("Tool data is empty");if(!e.metadata||e.metadata.referenceImageId)throw new Error("Tool data is not associated with any imageId")}(e);const{toolName:o}=e.metadata,i=ts.TOOL_NAMES[o];if(!i)throw new Error("Unknown tool type: ".concat(o,", cannot convert to RTSSReport"));const a=i.getContourSequence(e,n);return{ReferencedROINumber:t+1,ROIDisplayColor:[Math.floor(255*Math.random()),Math.floor(255*Math.random()),Math.floor(255*Math.random())],ContourSequence:a}}static register(e){ts.TOOL_NAMES[e.toolName]=e}}re(ts,"TOOL_NAMES",{}),ts.register(es);const ns=ts;function os(e){var t;return(null!==(t=e.childAnnotationUIDs)&&void 0!==t?t:[]).map((e=>pt(e).data.contour.polyline))}function is(e,t){const n=os(e),o=[];return n.forEach((e=>{const n=e.length,i=new Array(n);for(let o=0;o<n;o++)i[o]=t.worldToCanvas(e[o]);o.push(i)})),o}function as(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,o,i=0]=e,[a,r,s=0]=t,l=a-n,c=r-o,d=s-i;return l*l+c*c+d*d}function rs(e,t,n){let o;const i=as(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(o=e),!o){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/i;o=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...o],distanceSquared:as(n,o)}}function ss(e,t,n){return rs(e,t,n).distanceSquared}const ls=.1;function cs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ls;const n=e.length;if(n<3)return e;const o=t*t,i=[[0,n-1]],a=new Array(n).fill(!1);let r=2;for(a[0]=!0,a[n-1]=!0;i.length;){const[t,n]=i.pop();if(n-t==1)continue;const s=e[t],l=e[n];let c=-1/0,d=-1;for(let o=t+1;o<n;o++){const t=ss(s,l,e[o]);t>c&&(c=t,d=o)}c<o||(a[d]=!0,r++,i.push([d,n]),i.push([t,d]))}const s=new Array(r);for(let t=0,o=0;t<n;t++)a[t]&&(s[o++]=e[t]);return s}function ds(e){if(e.length<3)return 0;const t=e[0];let n=0;for(let o=0,i=e.length;o<i;o++){const a=e[o],r=e[o===i-1?0:o+1],s=a[0]-t[0],l=a[1]-t[1],c=r[0]-t[0];n+=s*(r[1]-t[1])-l*c}return n*=.5,n}function hs(e){return ds(e)>=0?1:-1}function us(e,t,n,o){var i;const{canvasToWorld:a}=n,{data:r}=e,{targetWindingDirection:s}=t;let{points:l}=t;var c;null!=o&&null!==(i=o.decimate)&&void 0!==i&&i.enabled&&(l=cs(t.points,null==o||null===(c=o.decimate)||void 0===c?void 0:c.epsilon));let{closed:d}=t;const h=l.length,u=new Array(h),g=hs(l),v=ht(e);if(void 0===d){let e=!1;if(l.length>3){const t=as(l[0],l[h-1]);e=ne.utilities.isEqual(0,t)}d=e}let m=v?-1*v.data.contour.windingDirection:s;void 0===m?m=g:m!==g&&l.reverse();for(let e=0;e<h;e++)u[e]=a(l[e]);r.contour.polyline=u,r.contour.closed=d,r.contour.windingDirection=m,It(e)}const gs="PlanarFreehandContourSegmentationTool";function vs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const{viewport:n,sliceData:o,annotation:i}=e,a=new Map,{toolName:r,originalToolName:s}=i.metadata,l=s||r,c=(st(l,n.element)||[]).filter((e=>!e.metadata.originalToolName||e.metadata.originalToolName===l));if(l!==gs){const e=st(gs,n.element);null!=e&&e.length&&e.forEach((e=>{const{metadata:t}=e;t.originalToolName===l&&t.originalToolName!==t.toolName&&c.push(e)}))}if(null==c||!c.length)return a;for(let e=0;e<o.numberOfSlices;e++){const n=c.filter((t=>t.metadata.sliceIndex===e));if(null==n||!n.length)continue;const o=n.filter((e=>t.every((t=>{const n=t.parentKey?t.parentKey(e):e,o=null==n?void 0:n[t.key];return Array.isArray(o)?o.every(((e,n)=>e===t.value[n])):o===t.value}))));o.length&&a.set(e,o)}return a}function ms(e,t,n){const o=ne.utilities.deepMerge({data:{},metadata:{}},n);return Object.assign(o,{highlighted:!1,invalidated:!0,autoGenerated:!0,annotationUID:void 0,cachedStats:{},childAnnotationUIDs:[],parentAnnotationUID:void 0}),Object.assign(o.data,{handles:{points:t.points||t||[],interpolationSources:t.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:{...n.data.contour,polyline:e}}),o}function ps(e,t){const n=e.get(t);return!(null!=n&&n.length)||1===n.length&&n[0].autoGenerated}function fs(e,t,n){const[o]=e;t[o]||(t[o]={pair:e,list:[]}),t[o].list.push(n)}function Is(e,t,n){const o=[];let i=!0;for(let a=e-1;a>=t[0];a--){const e=n.get(a);if(null!=e&&e.length){if(e[0].autoGenerated)continue;e.length>1&&(i=!1),o.push(a);break}}if(i&&o.length){for(let a=e+1;a<=t[1];a++){const e=n.get(a);if(null!=e&&e.length){if(e[0].autoGenerated)continue;e.length>1&&(i=!1),o.push(a);break}}if(i&&!(o.length<2))return o}}const{PointsManager:ws}=ne.utilities;function Es(e,t,n,o,i){n<t&&(n+=i);const a=n-t,r=Math.ceil(a/o);if(r<=0)return e[e.length-1]!==n&&e.push(Cs(n,i)),n;for(let n=1;n<=r;n++){const o=Cs(t+n*a/r,i);e.push(o)}return e[e.length-1]}function Cs(e,t){return(Math.round(e)+t)%t}function _s(e,t){let n=e;const o=(null==t?void 0:t.numDimensions)||2,i=3===o;if(!Array.isArray(e[0])){const t=e,a=t.length/o;n=new Array(t.length/o);for(let e=0,r=a;e<r;e++)n[e]=[t[e*o],t[e*o+1]],i&&n[e].push(t[e*o+2])}let a=1/0,r=1/0,s=-1/0,l=-1/0,c=1/0,d=-1/0;for(let e=0,t=n.length;e<t;e++){const[t,o,h]=n[e];a=a<t?a:t,r=r<o?r:o,s=s>t?s:t,l=l>o?l:o,i&&(c=c<h?c:h,d=d>h?d:h)}return i?{minX:a,maxX:s,minY:r,maxY:l,minZ:c,maxZ:d}:{minX:a,maxX:s,minY:r,maxY:l}}function bs(e,t){return e.minX<=t.maxX&&e.maxX>=t.minX&&e.minY<=t.maxY&&e.maxY>=t.minY}function Ds(e,t,n,o){let i=!1;const a=e[0]<t[0]?e[0]:t[0],r=e[1]<t[1]?e[1]:t[1],s=e[0]>t[0]?e[0]:t[0],l=e[1]>t[1]?e[1]:t[1],c=n[0]<o[0]?n[0]:o[0],d=n[1]<o[1]?n[1]:o[1],h=n[0]>o[0]?n[0]:o[0],u=n[1]>o[1]?n[1]:o[1];if(a>h||s<c||r>u||l<d)return!1;const g=[Ts(e,t,n),Ts(e,t,o),Ts(n,o,e),Ts(n,o,t)];return g[0]!==g[1]&&g[2]!==g[3]||((0===g[0]&&Ss(e,n,t)||0===g[1]&&Ss(e,o,t)||0===g[2]&&Ss(n,e,o)||0===g[3]&&Ss(n,t,o))&&(i=!0),i)}function Ts(e,t,n){const o=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===o?0:o>0?1:2}function Ss(e,t,n){return t[0]<=Math.max(e[0],n[0])&&t[0]>=Math.min(e[0],n[0])&&t[1]<=Math.max(e[1],n[1])&&t[1]>=Math.min(e[1],n[1])}function ys(e,t,n){let o,i;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(i=0,o=1):(i=e.length-1,o=0);for(let a=o;a<e.length;a++){if(Ds(t,n,e[i],e[a]))return[i,a];i=a}}function Ms(e,t){for(let n=0,o=e.length;n<o;n++){const i=ys(t,e[n],e[n===o-1?0:n+1]);if(2===(null==i?void 0:i.length))return!0}return!1}function xs(e){if(e.length<3)return!1;const t=e.length,n=as(e[0],e[t-1]);return aa.glMatrix.equals(0,n)}function Os(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{closed:void 0};if(e.length<3)return!1;const o=e.length;let i=0;const{closed:a,holes:r}=n;if(null!=r&&r.length)for(const e of r)if(Os(e,t))return!1;const s=!(void 0===a?xs(e):a),l=e.length-(s?1:2);for(let n=0;n<=l;n++){const a=e[n],r=e[n===o-1?0:n+1],s=a[0]>=r[0]?a[0]:r[0],l=a[1]>=r[1]?a[1]:r[1],c=a[1]<=r[1]?a[1]:r[1];if(t[0]<=s&&t[1]>=c&&t[1]<l){let e=a[0]===r[0];if(!e){const n=(t[1]-a[1])*(r[0]-a[0])/(r[1]-a[1])+a[0];e=t[0]<=n}i+=e?1:0}}return!!(i%2)}function Ps(e,t){for(let n=0,o=t.length;n<o;n++)if(!Os(e,t[n]))return!1;return!0}function As(e,t,n){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const i=[],a=e.length,r=a-(o?1:2);for(let o=0;o<=r;o++){const r=o===a-1?0:o+1;Ds(t,n,e[o],e[r])&&i.push([o,r])}return i}function Rs(e){const t=ds(e);return[0,0,t/Math.abs(t)]}const Ns=.01;function Ls(e,t,n){const o=e[0]<=t[0]?e[0]:t[0],i=e[0]>=t[0]?e[0]:t[0],a=e[1]<=t[1]?e[1]:t[1],r=e[1]>=t[1]?e[1]:t[1];if(!(n[0]>=o-Ns&&n[0]<=i+Ns&&n[1]>=a-Ns&&n[1]<=r+Ns))return!1;const s=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return(s>=0?s:-s)<=Ns}const ks=.01;function Us(e,t,n,o){const i=[t[0]-e[0],t[1]-e[1]],a=[o[0]-n[0],o[1]-n[1]],r=a[1]*i[0]-a[0]*i[1];if((r>=0?r:-r)<ks){const i=[e[0]<t[0]?e[0]:t[0],e[0]>t[0]?e[0]:t[0],e[1]<t[1]?e[1]:t[1],e[1]>t[1]?e[1]:t[1]],a=[n[0]<o[0]?n[0]:o[0],n[0]>o[0]?n[0]:o[0],n[1]<o[1]?n[1]:o[1],n[1]>o[1]?n[1]:o[1]];if(!(i[0]<=a[1]&&i[1]>=a[0]&&i[2]<=a[3]&&i[3]>=a[2]))return;if(!(Ls(e,t,n)||Ls(e,t,o)||Ls(n,o,e)))return;return[.5*((i[0]>a[0]?i[0]:a[0])+(i[1]<a[1]?i[1]:a[1])),.5*((i[2]>a[2]?i[2]:a[2])+(i[3]<a[3]?i[3]:a[3]))]}let s=e[1]-n[1],l=e[0]-n[0];const c=i[0]*s-i[1]*l;return s=(a[0]*s-a[1]*l)/r,l=c/r,[e[0]+s*i[0],e[1]+s*i[1]]}var Vs=function(e){return e[e.Vertex=0]="Vertex",e[e.Intersection=1]="Intersection",e}(Vs||{}),Ws=function(e){return e[e.Outside=-1]="Outside",e[e.Edge=0]="Edge",e[e.Inside=1]="Inside",e}(Ws||{}),Hs=function(e){return e[e.Exiting=-1]="Exiting",e[e.Unknown=0]="Unknown",e[e.Entering=1]="Entering",e}(Hs||{});function Bs(e){for(let t=0,n=e.length;t<n;t++){const o=e[t];o.next||(o.next=e[t===n-1?0:t+1])}}function Fs(e,t){const n=[],o=[],i=new Map;let a=Os(t,e[0])?Hs.Exiting:Hs.Entering;for(let o=0,r=e.length;o<r;o++){const s=e[o],l=Os(t,s),c={type:Vs.Vertex,coordinates:s,position:l?Ws.Inside:Ws.Outside,visited:!1,next:null};n.push(c);const d=e[o===r-1?0:o+1],h=As(t,s,d).map((e=>{const n=e[0],o=t[e[0]],i=t[e[1]],a=Us(s,d,o,i);return{sourceLineSegmentId:n,coordinate:a,targetStartPointDistSquared:as(s,a)}}));h.sort(((e,t)=>e.targetStartPointDistSquared-t.targetStartPointDistSquared)),h.forEach((e=>{const{sourceLineSegmentId:t,coordinate:o}=e,r={type:Vs.Intersection,coordinates:o,position:Ws.Edge,direction:a,visited:!1,next:null},s={...r,direction:Hs.Unknown,cloned:!0};a===Hs.Entering?r.next=s:s.next=r;let l=i.get(t);l||(l=[],i.set(t,l)),n.push(r),l.push(s),a*=-1}))}for(let e=0,n=t.length;e<n;e++){const n=e,a=t[e],r={type:Vs.Vertex,coordinates:a,visited:!1,next:null};o.push(r);const s=i.get(n);null!=s&&s.length&&s.map((e=>({intersectionPoint:e,lineSegStartDistSquared:as(a,e.coordinates)}))).sort(((e,t)=>e.lineSegStartDistSquared-t.lineSegStartDistSquared)).map((e=>{let{intersectionPoint:t}=e;return t})).forEach((e=>o.push(e)))}return Bs(n),Bs(o),{targetPolylinePoints:n,sourcePolylinePoints:o}}function Gs(e){for(let t=0,n=e.length;t<n;t++){const n=e[t];if(!n.visited&&n.position===Ws.Outside)return n}}function qs(e,t){const n=Rs(e),o=Rs(t),i=aa.vec3.dot(o,n);aa.glMatrix.equals(1,i)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Fs(e,t),r=Gs(a);if(!r)return e.slice();const s=[r.coordinates];let l=r.next;for(;l!==r;)l.type===Vs.Intersection&&l.cloned||s.push(l.coordinates),l=l.next;return s}function js(e,t){const n=Rs(e),o=Rs(t),i=aa.vec3.dot(o,n);aa.glMatrix.equals(-1,i)||(t=t.slice().reverse());const{targetPolylinePoints:a}=Fs(e,t);let r=null;const s=[];for(;r=Gs(a);){const e=[r.coordinates];let t=r.next;for(r.visited=!0;t!==r;)t.visited=!0,t.type===Vs.Intersection&&t.cloned||e.push(t.coordinates),t=t.next;s.push(e)}return s}function zs(e,t){const n=e.length,o=[];for(let i=0;i<n;i++){const n=e[i];n.getFrameOfReferenceUID()===t&&o.push(n)}return o}const{Active:Ks,Passive:Ys,Enabled:Xs}=Je;function Js(e,t){const n=e.length,o=[];for(let i=0;i<n;i++){const n=e[i],a=Qo(n.id,n.renderingEngineId);a&&(Zs(a,t)&&o.push(n))}return o}function Zs(e,t){const{toolOptions:n}=e,o=n[t];if(!o)return!1;const i=o.mode;return i===Ks||i===Ys||i===Xs}const $s=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const o=e.getCamera();return Math.abs(aa.vec3.dot(o.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Qs(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=(0,ne.getEnabledElement)(e),{renderingEngine:i,FrameOfReferenceUID:a}=o;let r=i.getViewports();r=zs(r,a),r=Js(r,t);const s=i.getViewport(o.viewportId);return n&&(r=$s(r,s.getCamera())),r.map((e=>e.id))}function el(e){var t;return!(null===(t=e.data)||void 0===t||!t.segmentation)}function tl(e,t){const{segmentation:n}=e.data,{segmentation:o}=t.data;return n.segmentationId===o.segmentationId&&n.segmentIndex===o.segmentIndex}function nl(e){if(!e.data.segmentation)throw new Error("removeContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,o=Bt(t),{annotationUIDsMap:i}=(null==o?void 0:o.representationData.CONTOUR)||{},a=null==i?void 0:i.get(n);a&&(a.delete(e.annotationUID),a.size||i.delete(n))}function ol(e){if(e.parentAnnotationUID)return;if(!e.data.segmentation)throw new Error("addContourSegmentationAnnotation: annotation does not have a segmentation data");const{segmentationId:t,segmentIndex:n}=e.data.segmentation,o=Bt(t);o.representationData.CONTOUR||(o.representationData.CONTOUR={annotationUIDsMap:new Map});const{annotationUIDsMap:i}=o.representationData.CONTOUR;let a=i.get(n);a||(a=new Set,i.set(n,a)),i.set(n,a.add(e.annotationUID))}function il(e){const t=e.toolName,n=void 0!==Ye.tools[t];if(!t)throw new Error("No Tool Found for the ToolClass ".concat(e.name));if(n)throw new Error("".concat(t," has already been added globally"));Ye.tools[t]={toolClass:e}}function al(e){const t=e.toolName;if(!t)throw new Error("No tool found for: ".concat(e.name));if(void 0===!Ye.tools[t])throw new Error("".concat(t," cannot be removed because it has not been added"));delete Ye.tools[t]}let rl=function(e){return e[e.CounterClockwise=-1]="CounterClockwise",e[e.Unknown=0]="Unknown",e[e.Clockwise=1]="Clockwise",e}({});const sl="PlanarFreehandContourSegmentationTool";function ll(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{toolName:n}=_v,o=Qo(e.id,e.renderingEngineId);let i;return o.hasTool(n)?o.getToolOptions(n)||(i="Tool ".concat(n," must be in active/passive state")):i="Tool ".concat(n," not added to ").concat(o.id," toolGroup"),i&&!t&&console.warn(i),!i}function cl(e,t){const n=e.length,o=new Array(n);for(let i=0;i<n;i++)o[i]=t.worldToCanvas(e[i]);return o}function dl(e,t,n){const{windingDirection:o}=t.data.contour,{windingDirection:i}=n.data.contour;o===i&&(n.data.contour.polyline.reverse(),n.data.contour.windingDirection=-1*o),dt(t,n),nl(n);const{element:a}=e,r=(0,ne.getEnabledElement)(a),{renderingEngine:s}=r,l=new Set([sl,t.metadata.toolName,n.metadata.toolName]);for(const e of l.values()){const t=Qs(a,e);Ua(s,t)}}const{PointsManager:hl}=ne.utilities;function ul(e,t,n,o){const i=n.get(t[0])[0],a=n.get(t[1])[0],r=Cl(i.data.contour.polyline),s=Cl(a.data.contour.polyline),{c1Interp:l,c2Interp:c}=function(e,t){const n=El(e),o=El(t),i=Math.max(Math.ceil(n[n.length-1]/.2),Math.ceil(o[o.length-1]/.2)),a=wl(n),r=wl(o),s=i+t.x.length,l=i+e.x.length,c=Il(s,a),d=Il(l,r),h=fl(s-2,e.x.length),u=fl(l-2,t.x.length),g=pl(c,h),v=pl(d,u),m=ml(e,g),p=ml(t,v);return function(e,t){const n=e.x.length,o={startingNode:0,totalSquaredXYLengths:1/0};for(let i=0;i<n;i++){let a=i,r=0;for(let o=0;o<n;o++)r+=(e.x[a]-t.x[o])**2+(e.y[a]-t.y[o])**2+(e.z[a]-t.z[o])**2,a++,a===n&&(a=0);r<o.totalSquaredXYLengths&&(o.totalSquaredXYLengths=r,o.startingNode=i)}const i=o.startingNode;vl(e.x,i),vl(e.y,i),vl(e.z,i),vl(e.I,i)}(m,p),function(e,t){const n={x:[],y:[],z:[],I:[]},o={x:[],y:[],z:[],I:[]};for(let i=0;i<e.x.length;i++)(e.I[i]||t.I[i])&&(n.x.push(e.x[i]),n.y.push(e.y[i]),n.z.push(e.z[i]),n.I.push(e.I[i]),o.x.push(t.x[i]),o.y.push(t.y[i]),o.z.push(t.z[i]),o.I.push(t.I[i]));return{c1Interp:n,c2Interp:o}}(m,p)}(r,s);l.kIndex=t[0],c.kIndex=t[1],e.forEach((function(e){!function(e,t,n,o,i,a,r){const[s,l]=o,c=(n-s)/(l-s),d=i.get(s)[0],h=i.get(l)[0],u=function(e,t,n,o){const i=o?e.I:t.I,a=hl.fromXYZ(e),r=hl.fromXYZ(t),{length:s}=a,l=hl.create3(s),c=aa.vec3.create(),d=aa.vec3.create(),h=hl.create3(s);h.kIndex=e.kIndex;const u=hl.create3(s);u.kIndex=t.kIndex;for(let t=0;t<e.x.length;t++)if(i[t]){const e=a.getPoint(t),o=r.getPoint(t);h.push(e),u.push(o),aa.vec3.sub(c,o,e),l.push(aa.vec3.scaleAndAdd(d,e,c,n))}return l.sources=[h,u],l}(e,t,c,a),g=c>.5?h:d,v=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:12;const n=ws.create3(t);n.sources=[];const{sources:o}=n,{length:i,sources:a=[]}=e;if(i<15)return e.subselect(t);const r=Math.floor(Math.max(2*i/t,10));a.forEach((()=>o.push(ws.create3(t))));const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6;const{length:n}=e,o=aa.vec3.create(),i=aa.vec3.create(),a=new Float32Array(n);for(let r=0;r<n;r++){const s=e.getPoint(r),l=e.getPoint(r-t),c=e.getPoint((r+t)%n);aa.vec3.sub(o,s,l),aa.vec3.sub(i,c,s);const d=aa.vec3.dot(o,i)/(aa.vec3.len(o)*aa.vec3.len(i));a[r]=d}return a}(e,5),l=function(e,t){const{max:n,deviation:o}=function(e){const{length:t}=e;let n=0,o=1/0,i=-1/0,a=0;for(let a=0;a<t;a++){const t=e[a];n+=t,o=Math.min(o,t),i=Math.max(i,t)}const r=n/t;for(let n=0;n<t;n++){const t=e[n]-r;a+=t*t}return{mean:r,max:i,min:o,sumSq:a,deviation:Math.sqrt(a/t)}}(e),{length:i}=e;if(o<.01||i<3*t)return[];const a=[];let r,s=null,l=0;for(let t=0;t<i;t++){const i=e[t];i<n-o?s?(s[2]=t,i<r&&(r=i,l=t),s[1]=l):(r=i,l=t,s=[t,t,t]):s&&(a.push(s),s=null)}return s&&(0===a[0][0]?a[0][0]=s[0]:(s[1]=l,s[2]=i-1,a.push(s))),a}(s,t),c=[];if((null==l?void 0:l.length)>2){let e=-1;const t=r/3;l.forEach((n=>{const[o,,a]=n,s=Math.ceil((o+a)/2);a-e<t||(s-o>2*t?(Es(c,e,o,r,i),e=Es(c,o,s,r,i)):e=Es(c,e,s,r,i),a-e>t&&(e=Es(c,e,a,r,i)))}));const n=c[0];Cs(n+i-e,i)>2*t&&Es(c,e,n-t,r,i)}else{const e=Math.floor(i/t);Es(c,-1,i-e,e,i)}return c.forEach((t=>{const i=e.getPointArray(t);n.push(i),a.forEach(((e,n)=>o[n].push(e.getPoint(t))))})),n}(u);i.has(n)?function(e,t,n,o,i){const a=gl(o,n,i),r=ms(e.points,t,a);Object.assign(a,{metadata:r.metadata,data:r.data})}(u,v,n,g,r):function(e,t,n,o,i){var a;const r=e.points,{viewport:s}=i,l=ms(r,t,o),c=s.getReferenceId({sliceIndex:n});l.metadata.referencedImageId=c,l.metadata.sliceIndex=n,gt(l,s.element),null===(a=o.onInterpolationComplete)||void 0===a||a.call(o,l,o);const{parentAnnotationUID:d}=o;d&&dl(s,gl(pt(d),n,i),l)}(u,v,n,g,r)}(l,c,e,t,n,r.x.length>s.x.length,o)}))}function gl(e,t,n){const{viewport:o}=n,i=st(e.metadata.toolName,o.element);for(let n=0;n<i.length;n++){const o=i[n];if(o.interpolationUID===e.interpolationUID&&o.metadata.sliceIndex===t)return o}}function vl(e,t){t-=e.length*Math.floor(t/e.length);const n=e.splice(0,t);return e.push(...n),e}function ml(e,t){const n={x:[],y:[],z:[],I:[]};for(let o=0;o<e.x.length-1;o++){n.x.push(e.x[o]),n.y.push(e.y[o]),n.z.push(e.z[o]),n.I.push(!0);const i=(e.x[o+1]-e.x[o])/(t[o]+1),a=(e.y[o+1]-e.y[o])/(t[o]+1),r=(e.z[o+1]-e.z[o])/(t[o]+1);for(let e=0;e<t[o]-1;e++)n.x.push(n.x[n.x.length-1]+i),n.y.push(n.y[n.y.length-1]+a),n.z.push(n.z[n.z.length-1]+r),n.I.push(!1)}return n}function pl(e,t){const n=[];for(let t=0;t<e.length;++t)n[t]=t;n.sort((function(t,n){return e[t]<e[n]?-1:1}));const o=[];for(let e=0;e<t.length;e++)o.push(t[n[e]]);const i=o.reduce((function(e,t,n){return t&&e.push(n),e}),[]),a=[];for(let e=0;e<i.length-1;e++)a.push(i[e+1]-i[e]);return a}function fl(e,t){const n=new Array(e+t);return n.fill(!1,0,e),n.fill(!0,e,e+t),n}function Il(e,t){const n=1/(e-1),o=[n];for(let t=1;t<e-2;t++)o.push(o[o.length-1]+n);return o.concat(t)}function wl(e){const t=[];for(let n=0;n<e.length;n++)t.push(e[n]/e[e.length-1]);return t}function El(e){const t=[0];for(let n=1;n<e.x.length;n++){const o=Math.sqrt((e.x[n]-e.x[n-1])**2+(e.y[n]-e.y[n-1])**2+(e.z[n]-e.z[n-1])**2);t.push(t[n-1]+o)}return t}function Cl(e){const t={x:[],y:[],z:[]};for(let n=0;n<e.length;n++)t.x[n]=e[n][0],t.y[n]=e[n][1],t.z[n]=e[n][2];return t.x.push(t.x[0]),t.y.push(t.y[0]),t.z.push(t.z[0]),t}const _l=function(e){if(!e.annotation)return;const{isInterpolationUpdate:t,annotation:n}=e;queueMicrotask((()=>{try{t&&(n.isInterpolationUpdate=!0,n.autoGenerated=!1),function(e){const{annotation:t}=e;!function(e){const{parentAnnotationUID:t,annotationUID:n}=e;if(!t)return e.interpolationUID;const o=pt(t),{interpolationUID:i}=o,a=o.childAnnotationUIDs.indexOf(n);e.interpolationUID="".concat(i,"-").concat(a),e.interpolationUID}(t);const{interpolationData:n,interpolationList:o}=function(e,t){const n=vs(t,[{key:"interpolationUID",value:t.interpolationUID}]),o=function(e){let t=1/0,n=-1/0,o=!1;for(const[i,a]of e.entries())a.length&&(t=Math.min(i,t),n=Math.max(i,n),o=!0);if(o)return[t,n]}(n);if(!o)return void console.warn("No annotations found to interpolate",n);const i=function(e,t){for(const[n,o]of e)for(let e=0;e<o.length;e++)if(o[e].annotationUID===t)return n}(n,e.annotationUID),a=[];for(let e=o[0]+1;e<o[1];e++)if(ps(n,e)){const t=Is(e,o,n);(null==t?void 0:t[0])!==i&&(null==t?void 0:t[1])!==i||fs(t,a,e)}return{interpolationData:n,interpolationList:a}}(t,e)||{};if(!n||!o)return;const i={toolName:t.metadata.toolName,toolType:t.metadata.toolName,viewport:e.viewport};for(let e=0;e<o.length;e++)o[e]&&ul(o[e].list,o[e].pair,n,i);const{id:a,renderingEngineId:r,element:s}=e.viewport,l={annotation:t,element:s,viewportId:a,renderingEngineId:r};o.length&&(0,ne.triggerEvent)(e.viewport.element,ie.ANNOTATION_INTERPOLATION_PROCESS_COMPLETED,l)}(e)}finally{t&&(n.autoGenerated=!0)}}))};function bl(e){const{annotation:t}=e,n=vs(e,[{key:"interpolationUID",value:e.interpolationUID}]),o=t.metadata.sliceIndex;let i=-1,a=e.sliceData.numberOfSlices;for(const[e,t]of n.entries()){if(e===o)continue;const n=t.find((e=>!e.autoGenerated));n&&(e<o?i=Math.max(e,i):a=Math.min(e,a))}const r=[];for(const[e,t]of n.entries())e<=i||e>=a||e===o||t.forEach((e=>{e.autoGenerated&&(mt(e.annotationUID),r.push(e))}));if(r.length){const t={annotations:r,element:e.viewport.element,viewportId:e.viewport.id,renderingEngineId:e.viewport.getRenderingEngine().id};(0,ne.triggerEvent)(e.viewport.element,ie.INTERPOLATED_ANNOTATIONS_REMOVED,t)}if(i>=0&&a<e.sliceData.numberOfSlices){const t=n.get(a)[0],o={viewport:e.viewport,sliceData:{numberOfSlices:e.sliceData.numberOfSlices,imageIndex:t.metadata.sliceIndex},annotation:t,interpolationUID:t.interpolationUID};_l(o)}}var Dl;const{uuidv4:Tl}=ne.utilities,Sl=[je.HandlesUpdated,je.InterpolationUpdated];class yl{static addTool(e){this.toolNames.includes(e)||this.toolNames.push(e)}static acceptAutoGenerated(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{toolNames:n,segmentationId:o,segmentIndex:i,sliceIndex:a}=t;for(const t of n||yl.toolNames){const n=st(t,e);if(null!=n&&n.length)for(const e of n){const{interpolationUID:t,data:n,autoGenerated:r,metadata:s}=e;t&&(e.interpolationCompleted=!0),r&&(i&&i!==n.segmentation.segmentIndex||void 0!==a&&s&&a!==s.sliceIndex||o&&o!==n.segmentation.segmentationId||(ol(e),e.autoGenerated=!1))}}}}function Ml(e){return{numberOfSlices:e.getNumberOfSlices(),imageIndex:e.getCurrentImageIdIndex()}}function xl(e,t){yl.acceptAutoGenerated(e,t)}Dl=yl,re(yl,"toolNames",[]),re(yl,"handleAnnotationCompleted",(e=>{var t;const n=e.detail.annotation;if(null==n||!n.metadata)return;const{toolName:o,originalToolName:i}=n.metadata;if(!Dl.toolNames.includes(o)&&!Dl.toolNames.includes(i))return;const a=Hr(n);if(!a)return void console.warn("Unable to find viewport for",n);const r={viewport:a,sliceData:Ml(a),annotation:n,interpolationUID:n.interpolationUID},s=!!n.interpolationUID;if(n.autoGenerated=!1,s)return bl(r),void _l(r);const l=[{key:"segmentIndex",value:n.data.segmentation.segmentIndex,parentKey:e=>e.data.segmentation},{key:"viewPlaneNormal",value:n.metadata.viewPlaneNormal,parentKey:e=>e.metadata},{key:"viewUp",value:n.metadata.viewUp,parentKey:e=>e.metadata}];let c=function(e,t){const n=vs(e,t),o=[];if(null==n||!n.size)return o;for(const e of n.values())e.forEach((e=>{o.push(e)}));return o}(r,l);const{sliceIndex:d}=n.metadata,h=new Set;c.forEach((e=>{if(e.interpolationCompleted||e.metadata.sliceIndex===d){const{interpolationUID:t}=e;h.add(t)}})),c=c.filter((e=>!h.has(e.interpolationUID))),n.interpolationUID=(null===(t=c[0])||void 0===t?void 0:t.interpolationUID)||Tl(),r.interpolationUID=n.interpolationUID,_l(r)})),re(yl,"handleAnnotationUpdate",(e=>{const t=e.detail.annotation,{changeType:n=je.HandlesUpdated}=e.detail;if(null==t||!t.metadata)return;const{toolName:o,originalToolName:i}=t.metadata;if(!Dl.toolNames.includes(o)&&!Dl.toolNames.includes(i)||!Sl.includes(n))return;const a=Hr(t);if(!a)return void console.warn("Unable to find matching viewport for annotation interpolation",t);t.autoGenerated&&(ol(t),t.autoGenerated=!1);const r={viewport:a,sliceData:Ml(a),annotation:t,interpolationUID:t.interpolationUID,isInterpolationUpdate:n===je.InterpolationUpdated};_l(r)})),re(yl,"handleAnnotationDelete",(e=>{const t=e.detail.annotation;if(null==t||!t.metadata)return;const{toolName:n}=t.metadata;if(!Dl.toolNames.includes(n)||t.autoGenerated)return;const o=Hr(t);if(!o)return void console.warn("No viewport, can't delete interpolated results",t);const i={viewport:o,sliceData:Ml(o),annotation:t,interpolationUID:t.interpolationUID};t.autoGenerated=!1,bl(i)}));const{isEqual:Ol}=ne.utilities;function Pl(e,t){const{polyline:n}=e.data.contour,{points:o}=e.data.handles,{length:i}=o;if(t===i)return n.length;if(t<0&&(t=(t+i)%i),0===t)return 0;const a=o[t],r=n.findIndex((e=>Ol(a,e)));if(-1!==r)return r;let s=1/0;return n.reduce(((e,t,n)=>{const o=aa.vec3.squaredDistance(t,a);return o<s?(s=o,n):e}),-1)}const Al=function(e,t){let n=0;for(let t=0;t<e.length-1;t++){const o=e[t],i=e[t+1];n+=Math.sqrt(Math.pow(i[0]-o[0],2)+Math.pow(i[1]-o[1],2))}if(t){const t=e[0],o=e[e.length-1];n+=Math.sqrt(Math.pow(o[0]-t[0],2)+Math.pow(o[1]-t[1],2))}return n};var Rl=function(e){return e.OnInteractionStart="onInteractionStart",e.OnInteractionEnd="onInteractionEnd",e.Preview="preview",e.RejectPreview="rejectPreview",e.AcceptPreview="acceptPreview",e.Fill="fill",e.StrategyFunction="strategyFunction",e.CreateIsInThreshold="createIsInThreshold",e.Initialize="initialize",e.INTERNAL_setValue="setValue",e.ComputeInnerCircleRadius="computeInnerCircleRadius",e}(Rl||{});const Nl=Rl,Ll={[Nl.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[Nl.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:o,centerIJK:i,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(null==a||!a.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let c=!1,d=!1;if(yr(s,r.isInObject,(e=>{let{value:o}=e;c||(c=o===t),d||(d=o===n)}),o.boundsIJK),!c&&!d)return;let h=o.getAtIJKPoint(i);if(h===n){if(!l)return;h=l.segmentIndex}else d&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},kl={[Nl.Initialize]:e=>{const{operationName:t,centerIJK:n,strategySpecificConfiguration:o,segmentationVoxelManager:i,imageVoxelManager:a,segmentIndex:r}=e,{THRESHOLD:s}=o;if(null==s||!s.isDynamic||!n||!r)return;if(t===Nl.RejectPreview||t===Nl.OnInteractionEnd)return;const{boundsIJK:l}=i,{threshold:c,dynamicRadius:d=0}=s,h=c?0:d,u=l.map(((e,t)=>{const[o,i]=e;return[Math.max(o,n[t]-h),Math.min(i,n[t]+h)]})),g=c||[1/0,-1/0];a.forEach((e=>{let{value:t}=e;const n=Array.isArray(t)?aa.vec3.len(t):t;g[0]=Math.min(n,g[0]),g[1]=Math.max(n,g[1])}),{boundsIJK:u}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[Nl.OnInteractionStart]:e=>{var t;const{strategySpecificConfiguration:n,preview:o}=e;(null!=n&&null!==(t=n.THRESHOLD)&&void 0!==t&&t.isDynamic||o)&&(n.THRESHOLD.threshold=null)},[Nl.ComputeInnerCircleRadius]:e=>{const{configuration:t,viewport:n}=e,{THRESHOLD:{dynamicRadius:o=0}={}}=t.strategySpecificConfiguration||{},{spacing:i}=n.getImageData(),a=[n.element.clientWidth/2,n.element.clientHeight/2],r=o*i[0],s=n.canvasToWorld(a).map((e=>e+r)),l=n.worldToCanvas(s),c=Math.abs(a[0]-l[0]),{strategySpecificConfiguration:d,activeStrategy:h}=t;d[h]||(d[h]={}),d[h].dynamicRadiusInCanvas=c}},Ul={[Nl.Initialize]:e=>{e.segmentIndex=0}};function Vl(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const Wl=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=n.onFlood,i=n.onBoundary,a=n.equals,r=n.diagonals||!1,s=v(t),l=function(e){const t=[],n=function(e){return e.split("").map((function(e){return parseInt(e,10)-1}))};for(let o=0;o<Math.pow(3,e);o+=1){const i=Vl(o.toString(3),"0",e);t.push(n(i))}return t}(t.length).filter((function(e){const t=function(e){let t=0;for(let n=0;n<e.length;n+=1)0!==e[n]&&(t+=1);return t}(e);return 0!==t&&(1===t||r)})),c=[],d=[],h=new Set,u=new Map;for(c.push({currentArgs:t});c.length>0;)g(c.pop());return{flooded:d,boundaries:function(){const e=Array.from(u.values());return e.reverse(),e}()};function g(e){const t=e.currentArgs,n=e.previousArgs;(function(e){const[t,n,o=0]=e,i=t+32768+65536*(n+32768+65536*(o+32768));return h.has(i)})(t)||(function(e){const[t,n,o=0]=e,i=t+32768+65536*(n+32768+65536*(o+32768));h.add(i)}(t),function(e){const t=v(e);return a?a(t,s):t===s}(t)?(function(e){d.push(e),o&&o(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],o=e.slice(0);for(let t=0;t<e.length;t+=1)o[t]+=n[t];c.push({currentArgs:o,previousArgs:e})}}(t)):function(e){const[t,n,o=0]=e,a=t+32768+65536*(n+32768+65536*(o+32768));u.set(a,e),i&&i(...e)}(n))}function v(t){return e(...t)}},Hl={determineSegmentIndex:Ll,dynamicThreshold:kl,erase:Ul,islandRemoval:{[Nl.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:o,previewSegmentIndex:i,segmentIndex:a}=e;if(!o.THRESHOLD||null===a)return;const r=t.getPoints();if(null==r||!r.length)return;if(void 0===i)return;const s=t.getBoundsIJK().map(((e,t)=>[Math.min(e[0],...r.map((e=>e[t]))),Math.max(e[1],...r.map((e=>e[t])))]));if(s.find((e=>e[0]<0||e[1]>65535)))return;const l=new Set,c=(e,t,o)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||o<s[2][0]||o>s[2][1])return-1;const r=n.toIndex([e,t,o]);if(l.has(r))return-2;const c=n.getAtIndex(r),d=c===i||c===a?1:0;return d||n.addPoint(r),d};let d=0;const h=(e,o,a)=>{const r=n.toIndex([e,o,a]);l.has(r)||(t.setAtIJK(e,o,a,i),l.add(r),d++)};r.forEach((e=>{1===c(...e)&&Wl(c,e,{onFlood:h,diagonals:!0})}));let u=0,g=0;t.forEach((e=>{let{index:o,pointIJK:r,value:s}=e;const c=n.getAtIndex(o);if(l.has(o)){g++;const e=s===a?a:i;t.setAtIJKPoint(r,e)}else if(c===i){u++;const e=null!=s?s:0;t.setAtIJKPoint(r,e)}}),{}),d-g!=0&&console.warn("There were flooded=",d,"cleared=",u,"preview count=",g,"not handled",d-g);const v=new Set(n.points||[]);l.clear();for(const e of v.keys()){if(l.has(e))continue;let n=!0;const o=new Set,a=(e,i,a)=>{const r=t.toIndex([e,i,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||i!==s[1][0]&&i!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&o.add(r)},r=t.toIJK(e);if(0===c(...r)&&(Wl(c,r,{onFlood:a,diagonals:!1}),n))for(const e of o)t.setAtIndex(e,i)}Vt(e.segmentationId,t.getArrayOfSlices())}},preview:{[Nl.Preview]:function(e){var t;const{previewColors:n,strategySpecificConfiguration:o,enabledElement:i}=e;if(!n||!o)return;e.preview&&delete e.preview,delete o.centerSegmentIndex,null===(t=this.onInteractionStart)||void 0===t||t.call(this,i,e);const a=this.fill(i,e);var r;return a&&(a.isPreviewFromHover=!0,e.preview=a,null===(r=this.onInteractionEnd)||void 0===r||r.call(this,i,e)),a},[Nl.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:o,previewSegmentIndex:i,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!i)return;const s=null==a?void 0:a[n],l=Zi(t,o,n);(s||l)&&$i(t,o,i,s||l.map((e=>.9*e)))},[Nl.AcceptPreview]:e=>{var t;const{segmentationVoxelManager:n,previewVoxelManager:o,previewSegmentIndex:i,preview:a}=e;if(void 0===i)return;const r=null!==(t=null==a?void 0:a.segmentIndex)&&void 0!==t?t:e.segmentIndex,s=o;s&&0!==s.modifiedSlices.size&&(s.forEach((e=>{let{index:t}=e;n.getAtIndex(t)===i&&n.setAtIndex(t,r)}),{}),Vt(e.segmentationId,s.getArrayOfSlices()),s.clear())},[Nl.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:o}=e;n.setAtIndex(t,o)})),Vt(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[Nl.Fill]:e=>{var t;const{segmentsLocked:n,segmentationImageData:o,segmentationVoxelManager:i,previewVoxelManager:a,imageVoxelManager:r,brushStrategy:s,centerIJK:l}=e,c=null===(t=s.createIsInThreshold)||void 0===t?void 0:t.call(s,e),{setValue:d}=s,h=c?t=>{const{value:o,index:i}=t;!n.includes(o)&&c(i)&&d(e,t)}:t=>d(e,t);yr(o,(null==r?void 0:r.isInObject)||i.isInObject,h,i.boundsIJK),a.addPoint(l)}},setValue:{[Nl.INTERNAL_setValue]:(e,t)=>{let{value:n,index:o}=t;const{segmentsLocked:i,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,c=l.getAtIndex(o);if(null===a){const e=r.getAtIndex(o);return void(void 0!==e&&r.setAtIndex(o,e))}if(c===a||i.includes(n))return;if(c===s){if(void 0!==r.getAtIndex(o))return;l.setAtIndex(o,a)}const d=null!=s?s:a;r.setAtIndex(o,d)}},threshold:{[Nl.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:o}=e;if(n&&o)return e=>{const{THRESHOLD:o,THRESHOLD_INSIDE_CIRCLE:i}=n,a=t.getAtIndex(e),r=Array.isArray(a)?aa.vec3.length(a):a,{threshold:s}=o||i||{};return null==s||!s.length||s[0]<=r&&r<=s[1]}}}},{VoxelManager:Bl}=ne.utilities;function Fl(e){let t,n,o,i,a,r,s,{operationData:l,viewport:c}=e;if(Ot(l,c)){const{volumeId:e,referencedVolumeId:r}=l,c=ne.cache.getVolume(e);if(!c)return;if(s=c.voxelManager,r){const e=ne.cache.getVolume(r);o=e.getScalarData(),i=e.dimensions}({imageData:t}=c),n=c.getScalarData(),a=c.dimensions}else{var d;const{imageIdReferenceMap:e,segmentationRepresentationUID:h}=l;if(!e)return;const u=c.getCurrentImageId();if(!u)return;const g=c.getActor(h);if(!g)return;t=g.actor.getMapper().getInputData(),s=t.voxelManager;const v=e.get(u),m=ne.cache.getImage(v);if(!m)return;n=null===(d=m.getPixelData)||void 0===d?void 0:d.call(m);const p=ne.cache.getImage(u),f=p?null:c.getImageData();o=(null==p?void 0:p.getPixelData())||f.getScalarData(),i=p?[p.columns,p.rows,1]:f.dimensions,a=[m.columns,m.rows,1],r=null==p?void 0:p.voxelManager}return s||(s=Bl.createVolumeVoxelManager(a,n)),r||(r=i&&Bl.createVolumeVoxelManager(i,o)),{segmentationImageData:t,segmentationScalarData:n,segmentationVoxelManager:s,imageScalarData:o,imageVoxelManager:r}}const{VoxelManager:Gl}=ne.utilities;class ql{constructor(e){re(this,"compositions",void 0),re(this,"strategyFunction",void 0),re(this,"configurationName",void 0),re(this,"_initialize",[]),re(this,"_fill",[]),re(this,"_acceptPreview",void 0),re(this,"_onInteractionStart",[]),re(this,"fill",((e,t)=>{const n=this.initialize(e,t,Nl.Fill);if(!n)return;const{strategySpecificConfiguration:o={},centerIJK:i}=n;if(ne.utilities.isEqual(i,o.centerIJK))return t.preview;o.centerIJK=i,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return Vt(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),re(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(null!=n&&n.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const o=this.initialize(e,t);o&&this._onInteractionStart.forEach((e=>e.call(this,o)))})),re(this,"onInteractionEnd",void 0),re(this,"rejectPreview",void 0),re(this,"acceptPreview",void 0),re(this,"preview",void 0),re(this,"setValue",void 0),re(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!ql.childFunctions[e])throw new Error("Didn't find ".concat(e," as a brush strategy"));ql.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(ql.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t,n){var o;const{viewport:i}=e,a=Fl({operationData:t,viewport:i});if(!a)return console.warn("No data found for BrushStrategy"),t.preview;const{imageVoxelManager:r,segmentationVoxelManager:s,segmentationImageData:l}=a,c=(null===(o=t.preview)||void 0===o?void 0:o.previewVoxelManager)||Gl.createHistoryVoxelManager(s),d={operationName:n,previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:r,segmentationVoxelManager:s,segmentationImageData:l,previewVoxelManager:c,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function jl(e,t){const n="_".concat(e);return(o,i)=>{o[n]||(o[n]=[]),o[n].push(i),o[e]||(o[e]=t?(i,a)=>{const r=o[t](i,a,e);o[n].forEach((e=>e.call(o,r)))}:e=>{o[n].forEach((t=>t.call(o,e)))})}}function zl(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,o)=>{if(n[e])throw new Error("The singleton method ".concat(e," already exists"));n[e]=t?o:(e,t)=>(t.enabledElement=e,o.call(n,t))}}function Kl(e){const[t,n,o,i]=e;return[[o[0],n[1]],[i[0],t[1]]]}function Yl(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||Xl(e,n),n.precalculated(t)}re(ql,"COMPOSITIONS",Hl),re(ql,"childFunctions",{[Nl.OnInteractionStart]:jl(Nl.OnInteractionStart,Nl.Initialize),[Nl.OnInteractionEnd]:jl(Nl.OnInteractionEnd,Nl.Initialize),[Nl.Fill]:jl(Nl.Fill),[Nl.Initialize]:jl(Nl.Initialize),[Nl.CreateIsInThreshold]:zl(Nl.CreateIsInThreshold),[Nl.AcceptPreview]:jl(Nl.AcceptPreview,Nl.Initialize),[Nl.RejectPreview]:jl(Nl.RejectPreview,Nl.Initialize),[Nl.INTERNAL_setValue]:zl(Nl.INTERNAL_setValue),[Nl.Preview]:zl(Nl.Preview,!1),[Nl.ComputeInnerCircleRadius]:jl(Nl.ComputeInnerCircleRadius),compositions:null});const Xl=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:o,zRadius:i}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==o?1/o**2:0,t.invZRadiusSq=0!==i?1/i**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[c,d,h]=l;return t.precalculated=e=>{const t=e[0]-c;let n=t*t*a;if(n>1)return!1;const o=e[1]-d;if(n+=o*o*r,n>1)return!1;const i=e[2]-h;return n+=i*i*s,n<=1},t},{transformWorldToIndex:Jl,isEqual:Zl}=ne.utilities,$l={[Nl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:o,segmentationImageData:i,segmentationVoxelManager:a}=e;if(!t)return;const r=aa.vec3.fromValues(0,0,0);t.forEach((e=>{aa.vec3.add(r,r,e)})),aa.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Jl(i,r);const s=t.map((e=>o.worldToCanvas(e))),[l,c]=Kl(s),d=o.canvasToWorld(l),h=o.canvasToWorld(c),u=Or(t.map((e=>Jl(i,e))),i.getDimensions());a.boundsIJK=u,n.isInObject=Ql({topLeftWorld:d,bottomRightWorld:h,center:r})}};function Ql(e){const{topLeftWorld:t,bottomRightWorld:n,center:o}=e,i=Math.abs(t[0]-n[0])/2,a=Math.abs(t[1]-n[1])/2,r=Math.abs(t[2]-n[2])/2,s=Math.max(i,a,r);if(Zl(i,s)&&Zl(a,s)&&Zl(r,s)){const e={center:o,radius:s,radius2:s*s};return t=>Lr(e,t)}const l={center:o,xRadius:i,yRadius:a,zRadius:r},{precalculated:c}=Xl(l,{});return c}const ec=new ql("Circle",Hl.regionFill,Hl.setValue,$l,Hl.determineSegmentIndex,Hl.preview),tc=new ql("CircleThreshold",Hl.regionFill,Hl.setValue,$l,Hl.determineSegmentIndex,Hl.dynamicThreshold,Hl.threshold,Hl.preview,Hl.islandRemoval),nc=ec.strategyFunction,oc=tc.strategyFunction,{transformWorldToIndex:ic}=ne.utilities,ac={[Nl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:o,segmentationImageData:i,segmentationVoxelManager:a}=e;if(!t)return;const r=aa.vec3.fromValues(0,0,0);t.forEach((e=>{aa.vec3.add(r,r,e)})),aa.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=ic(i,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:c}=Rr(t.slice(0,2),i,o);a.boundsIJK=s,n?n.isInObject=Ql({topLeftWorld:l,bottomRightWorld:c,center:r}):a.isInObject=Ql({topLeftWorld:l,bottomRightWorld:c,center:r})}},rc=new ql("Sphere",Hl.regionFill,Hl.setValue,ac,Hl.determineSegmentIndex,Hl.preview),sc=rc.strategyFunction,lc=new ql("SphereThreshold",...rc.compositions,Hl.dynamicThreshold,Hl.threshold,Hl.islandRemoval).strategyFunction,cc=new ql("EraseSphere",Hl.erase,...rc.compositions).strategyFunction,dc=new ql("EraseCircle",Hl.erase,...ec.compositions).strategyFunction,hc=function(e,t,n){return"".concat(e,"::").concat(t,"::").concat(n)},uc=function(e,t){Object.keys(e).forEach((n=>{const o=t.getAttribute(n),i=e[n];void 0===i||""===i?t.removeAttribute(n):o!==i&&t.setAttribute(n,i)}))},gc=function(e,t){Object.keys(e).forEach((n=>{const o=e[n];void 0!==o&&""!==o&&t.setAttribute(n,o)}))},vc=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,fill:l,width:c,lineWidth:d,lineDash:h,fillOpacity:u,strokeOpacity:g}=Object.assign({color:"rgb(0, 255, 0)",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),v=d||c,m=hc(t,"circle",n),p=e.getSvgNode(m),f={cx:"".concat(o[0]),cy:"".concat(o[1]),r:"".concat(i),stroke:s,fill:l,"stroke-width":v,"stroke-dasharray":h,"fill-opacity":u,"stroke-opacity":g};if(p)uc(f,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),gc(f,t),e.appendNode(t,m)}},mc=Symbol("DefinedCursors"),pc=new Set(["alias","all-scroll","auto","cell","col-resize","context-menu","copy","crosshair","default","e-resize","ew-resize","grab","grabbing","help","move","ne-resize","nesw-resize","no-drop","none","not-allowed","n-resize","ns-resize","nw-resize","nwse-resize","pointer","progress","row-resize","se-resize","s-resize","sw-resize","text","vertical-text","wait","w-resize","zoom-in","zoom-out"]);class fc{constructor(e,t){re(this,"name",void 0),re(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof fc?"".concat(e,", ").concat(t.getStyleProperty()):e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=Ic(fc,mc);let n=t.get(e);return n instanceof fc?n:pc.has(e)?(n=new fc(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof fc&&(Ic(fc,mc).set(e,t),!0)}}function Ic(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const wc=pc.values(),Ec=Symbol("ElementCursorsMap");function Cc(e,t){Tc(e)[0]=t,_c(e,t)}function _c(e,t){const n=Tc(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof fc?t:fc.getDefinedCursor("auto")).getStyleProperty()}function bc(e){_c(e,Tc(e)[1])}function Dc(e){_c(e,fc.getDefinedCursor("none"))}function Tc(e){let t=Tc[Ec];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(Tc,Ec,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}function Sc(e){const t=Ht().getSegmentationRepresentations(e);if(t)return t.find((e=>e.active))}function yc(e){const t=Sc(e);if(t)return Bt(t.segmentationId)}function Mc(e,t){Ht().setActiveSegmentationRepresentation(e,t),kt(e,t)}function xc(e,t){const n=Bt(e);if(!n)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:o}=n;return o.has(t)}function Oc(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=Bt(e);if(!o)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:i}=o;n?i.add(t):i.delete(t),Ut(e)}function Pc(e){const t=Bt(e);if(!t)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:n}=t;return Array.from(n)}function Ac(e){const t=ei(e);if(void 0===t)return;Uc(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo(),o=Object.keys(n).map((e=>n[e]));if(!o.length)return;const{renderingEngineId:i}=o[0],a=t.getViewportIds(),r=(0,ne.getRenderingEngine)(i);Ua(r,a)}function Rc(e,t){const n=Bt(e);"string"==typeof t&&(console.warn("segmentIndex is a string, converting to number"),t=Number(t)),(null==n?void 0:n.activeSegmentIndex)!==t&&(n.activeSegmentIndex=t,Ut(e)),Yt(e).forEach((e=>{Ac(e)}))}function Nc(e){const t=Bt(e);if(t)return t.activeSegmentIndex}class Lc extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE_CIRCLE:nc,ERASE_INSIDE_CIRCLE:dc,FILL_INSIDE_SPHERE:sc,ERASE_INSIDE_SPHERE:cc,THRESHOLD_INSIDE_CIRCLE:oc,THRESHOLD_INSIDE_SPHERE:lc},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70],dynamicRadius:0}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",thresholdVolumeId:null,brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},actions:{[Nl.AcceptPreview]:{method:Nl.AcceptPreview,bindings:[{key:"Enter"}]},[Nl.RejectPreview]:{method:Nl.RejectPreview,bindings:[{key:"Escape"}]}}}}),re(this,"_editData",void 0),re(this,"_hoverData",void 0),re(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),re(this,"onSetToolPassive",(e=>{this.disableCursor()})),re(this,"onSetToolEnabled",(()=>{this.disableCursor()})),re(this,"onSetToolDisabled",(e=>{this.disableCursor()})),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o;this._editData=this.createEditData(n),this._activateDraw(n),Dc(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const a=this._hoverData||this.createHoverData(n);return Ua(i,a.viewportIdsToRender),this.applyActiveStrategyCallback(o,this.getOperationData(n),Nl.OnInteractionStart),!0})),re(this,"mouseMoveCallback",(e=>{if(this.mode===Je.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:o}=this.configuration.preview,{currentPoints:i,element:a}=e.detail,{canvas:r}=i,{preview:s,startPoint:l,timer:c,timerStart:d,isDrag:h}=this._previewData,u=aa.vec2.distance(r,l),g=Date.now()-d;if((u>n||g>t&&u>o)&&(c&&(window.clearTimeout(c),this._previewData.timer=null),s&&!h&&this.rejectPreview(a)),!this._previewData.timer){const e=window.setTimeout(this.previewCallback,250);Object.assign(this._previewData,{timerStart:Date.now(),timer:e,startPoint:r,element:a})}}})),re(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,ne.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),Nl.Preview))})),re(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=(0,ne.getEnabledElement)(n),{renderingEngine:a}=i;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;Ua(a,r);const s=aa.vec2.distance(o.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:c}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<c||(this._previewData.preview=this.applyActiveStrategy(i,this.getOperationData(n)),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=o.canvas)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),i=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(o,i),this._deactivateDraw(n),bc(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(o,i,Nl.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,ne.getEnabledElement)(e),{viewport:n}=t,o=Sc(this.toolGroupId);if(!o)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:i,type:a,segmentationRepresentationUID:r}=o;if(a===Et.Contour)throw new Error("Not implemented yet");const s=Pc(i),{representationData:l}=Bt(i),c=l[Et.Labelmap];if(Ot(c,n)){var d,h,u;const{volumeId:e}=l[a],t=n.getActors().map((e=>ne.cache.getVolume(e.referenceId))),o=ne.cache.getVolume(e),i=(null===(d=t.find((e=>ne.utilities.isEqual(e.dimensions,o.dimensions))))||void 0===d?void 0:d.volumeId)||(null===(h=t[0])||void 0===h?void 0:h.volumeId);return{volumeId:e,referencedVolumeId:null!==(u=this.configuration.thresholdVolumeId)&&void 0!==u?u:i,segmentsLocked:s,segmentationRepresentationUID:r}}{const{imageIdReferenceMap:e}=c,t=n.getCurrentImageId();if(!e.get(t))return;if(this.configuration.activeStrategy.includes("SPHERE"))throw new Error("Sphere manipulation is not supported for stacks of image segmentations yet");return{imageIdReferenceMap:e,segmentsLocked:s,segmentationRepresentationUID:r}}}createHoverData(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=o.getCamera(),{viewPlaneNormal:a,viewUp:r}=i,s=[o.id],{segmentIndex:l,segmentationId:c,segmentationRepresentationUID:d,segmentColor:h}=this.getActiveSegmentationData()||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:o.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,segmentationId:c,segmentationRepresentationUID:d,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(){const e=this.toolGroupId,t=Sc(e);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationRepresentationUID:n,segmentationId:o}=t,i=Nc(o);return{segmentIndex:i,segmentationId:o,segmentationRepresentationUID:n,segmentColor:Zi(e,n,i)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas;this._hoverData=this.createHoverData(n,i),this._calculateCursor(n,i),this._hoverData&&Ua((0,ne.getEnabledElement)(n).renderingEngine,this._hoverData.viewportIdsToRender)}getOperationData(e){var t,n;const o=this._editData||this.createEditData(e),{segmentIndex:i,segmentationId:a,segmentationRepresentationUID:r,brushCursor:s}=this._hoverData||this.createHoverData(e),{data:l,metadata:c={}}=s||{},{viewPlaneNormal:d,viewUp:h}=c;return{...o,points:null==l||null===(t=l.handles)||void 0===t?void 0:t.points,segmentIndex:i,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:d,toolGroupId:this.toolGroupId,segmentationId:a,segmentationRepresentationUID:r,viewUp:h,strategySpecificConfiguration:this.configuration.strategySpecificConfiguration,preview:null===(n=this._previewData)||void 0===n?void 0:n.preview}}_calculateCursor(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,{canvasToWorld:i}=o,a=o.getCamera(),{brushSize:r}=this.configuration,s=aa.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=aa.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),c=aa.vec3.create();aa.vec3.cross(c,s,l);const d=i([t[0],t[1]]),h=aa.vec3.create(),u=aa.vec3.create(),g=aa.vec3.create(),v=aa.vec3.create();for(let e=0;e<=2;e++)h[e]=d[e]-s[e]*r,u[e]=d[e]+s[e]*r,g[e]=d[e]-c[e]*r,v[e]=d[e]+c[e]*r;if(!this._hoverData)return;const{brushCursor:m}=this._hoverData,{data:p}=m;void 0===p.handles&&(p.handles={}),p.handles.points=[h,u,g,v];const f=this.configuration.activeStrategy,I=this.configuration.strategies[f];"function"==typeof I.computeInnerCircleRadius&&I.computeInnerCircleRadius({configuration:this.configuration,viewport:o}),p.invalidated=!1}rejectPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e||!this._previewData.preview)return;const t=(0,ne.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Nl.RejectPreview),this._previewData.preview=null,this._previewData.isDrag=!1}acceptPreview(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this._previewData.element;if(!e)return;const t=(0,ne.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Nl.AcceptPreview),this._previewData.isDrag=!1,this._previewData.preview=null}invalidateBrushCursor(){if(void 0===this._hoverData)return;const{data:e}=this._hoverData.brushCursor;e.invalidated=!0;const{segmentColor:t}=this.getActiveSegmentationData()||{};this._hoverData.brushCursor.metadata.segmentColor=t}renderAnnotation(e,t){var n;if(!this._hoverData)return;const{viewport:o}=e;if(!this._hoverData.viewportIdsToRender.includes(o.id))return;const i=this._hoverData.brushCursor;if(!0===i.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=o;this._calculateCursor(t,e)}const a=i.metadata;if(!a)return;const r=a.brushCursorUID,s=i.data,{points:l}=s.handles,c=l.map((e=>o.worldToCanvas(e))),d=c[0],h=c[1],u=[Math.floor((d[0]+h[0])/2),Math.floor((d[1]+h[1])/2)],g=Math.abs(d[1]-Math.floor((d[1]+h[1])/2)),v="rgb(".concat((null===(n=a.segmentColor)||void 0===n?void 0:n.slice(0,3))||[0,0,0],")");if(!o.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");vc(t,r,"0",u,g,{color:v});const m=this.configuration.activeStrategy,{dynamicRadiusInCanvas:p}=this.configuration.strategySpecificConfiguration[m]||{dynamicRadiusInCanvas:0};p&&vc(t,r,"1",u,p,{color:v})}}re(Lc,"toolName",void 0),Lc.toolName="Brush";const kc=Lc;function Uc(e,t){const n=ei(e);if(void 0===n)return;const o=n._toolInstances;return Object.keys(o).length?t&&o[t]?[o[t]]:Object.values(o).filter((e=>e instanceof kc)):void 0}function Vc(e,t,n,o){const i=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...o];r[0]=r[0]+(2*e-1)*n[0]/2,r[1]=r[1]+(2*t-1)*n[1]/2,r[2]=r[2]+(2*a-1)*n[2]/2,i.push(r)}return Or(i.map((t=>ne.utilities.transformWorldToIndex(e,t))),t)}function Wc(e,t){const{spacing:n}=e,o=e.getScalarData(),i=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:c,dimensions:d}=t[e].volume,h=t[e].volume.getScalarData().length;h===o.length&&(r=c,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const u=l.getPointData().getScalars().getData(),g=t[e].lower,v=t[e].upper;i.push({imageData:l,referenceValues:u,lower:g,upper:v,spacing:c,dimensions:d,volumeSize:h})}var r,s;return{volumeInfoList:i,baseVolumeIdx:a}}const Hc=function(e,t,n){const{imageData:o}=e,i=e.getScalarData(),{overwrite:a,boundsIJK:r}=n,s=(null==n?void 0:n.overlapType)||0;if(a)for(let e=0;e<i.length;e++)i[e]=0;const{baseVolumeIdx:l,volumeInfoList:c}=Wc(e,t);let d,h,u;const g=(e,t,n)=>{const{imageData:o,dimensions:i,lower:a,upper:r}=e,l=Vc(o,i,t,n);h=0,d=0,u={lower:a,upper:r};let c=!1;return yr(o,(()=>!0),(e=>{let{value:t}=e;h+=1,t>=u.lower&&t<=u.upper&&(d+=1)}),l),0===s?c=d>0:1==s&&(c=d===h),c},v=(e,t)=>{const{imageData:n,referenceValues:o,lower:i,upper:a}=e,r=o[n.computeOffsetIndex(t)];return!(r<=i||r>=a)};return yr(o,(()=>!0),(e=>{let{index:t,pointIJK:o,pointLPS:a}=e,r=c.length>0;for(let e=0;e<c.length&&(r=c[e].volumeSize===i.length?v(c[e],o):g(c[e],c[l].spacing,a),r);e++);r&&(i[t]=n.segmentIndex||1)}),r),Vt(e.volumeId),e},Bc=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5?arguments[5]:void 0;const{color:r,handleRadius:s,width:l,lineWidth:c,fill:d,type:h,opacity:u}=Object.assign({color:"rgb(0, 255, 0)",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},i),g=c||l,v=hc(t,"handle","hg-".concat(n,"-index-").concat(a));let m;if("circle"===h)m={cx:"".concat(o[0]),cy:"".concat(o[1]),r:s,stroke:r,fill:d,"stroke-width":g,opacity:u};else{if("rect"!==h)throw new Error("Unsupported handle type: ".concat(h));{const e=1.5*parseFloat(s),t=o[0]-.5*e,n=o[1]-.5*e;m={x:"".concat(t),y:"".concat(n),width:"".concat(e),height:"".concat(e),stroke:r,fill:d,"stroke-width":g,rx:"".concat(.1*e),opacity:u}}}const p=e.getSvgNode(v);if(p)uc(m,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);gc(m,t),e.appendNode(t,v)}},Fc=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};o.forEach(((o,a)=>{Bc(e,t,n,o,i,a)}))};function Gc(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const{color:s,width:l,lineWidth:c,lineDash:d}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),h=c||l,u=hc(t,"rect",n),g=e.getSvgNode(u),v=[Math.min(o[0],i[0]),Math.min(o[1],i[1])],m=Math.abs(o[0]-i[0]),p=Math.abs(o[1]-i[1]),f={x:"".concat(v[0]),y:"".concat(v[1]),width:"".concat(m),height:"".concat(p),stroke:s,fill:"transparent","stroke-width":h,"stroke-dasharray":d};if(g)uc(f,g),e.setNodeTouched(u);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==r&&t.setAttribute("data-id",r),gc(f,t),e.appendNode(t,u)}}const{EPSILON:qc}=ne.CONSTANTS,jc=1-qc;function zc(e,t,n){const{viewPlaneNormal:o}=t,i=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:o}=ne.metaData.get("imagePlaneModule",n),i=aa.vec3.fromValues(o[0],o[1],o[2]),a=aa.vec3.fromValues(o[3],o[4],o[5]);t=aa.vec3.create(),aa.vec3.cross(t,i,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(aa.vec3.dot(o,t))>jc;return t&&n}));if(!i.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of i){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=aa.vec3.create();aa.vec3.sub(n,r,t);const i=aa.vec3.dot(n,o);Math.abs(i)<a&&s.push(e)}return s}function Kc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e instanceof ne.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:o}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return zc(t,n,o)}if(e instanceof ne.StackViewport){const t=e.getCurrentImageId(),o=t.indexOf(":");n.imageURI=t.substring(o+1)}return t.filter((t=>!!t.isVisible&&e.isReferenceViewable(t.metadata,n)))}const Yc=new class{constructor(){re(this,"config",void 0),this._initializeConfig({color:"rgb(255, 255, 0)",colorHighlighted:"rgb(0, 255, 0)",colorSelected:"rgb(0, 220, 0)",colorLocked:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"",shadow:!0,textBoxVisibility:!0,textBoxFontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",textBoxFontSize:"14px",textBoxColor:"rgb(255, 255, 0)",textBoxColorHighlighted:"rgb(0, 255, 0)",textBoxColorSelected:"rgb(0, 255, 0)",textBoxColorLocked:"rgb(255, 255, 0)",textBoxBackground:"",textBoxLinkLineWidth:"1",textBoxLinkLineDash:"2,3",textBoxShadow:!0})}getAnnotationToolStyles(e){return this.config.annotations&&this.config.annotations[e]}getViewportToolStyles(e){return this.config.viewports&&this.config.viewports[e]}getToolGroupToolStyles(e){return this.config.toolGroups&&this.config.toolGroups[e]}getDefaultToolStyles(){return this.config.default}setAnnotationStyles(e,t){let n=this.config.annotations;n||(this.config={...this.config,annotations:{}},n=this.config.annotations),n[e]=t}setViewportToolStyles(e,t){let n=this.config.viewports;n||(this.config={...this.config,viewports:{}},n=this.config.viewports),n[e]=t}setToolGroupToolStyles(e,t){let n=this.config.toolGroups;n||(this.config={...this.config,toolGroups:{}},n=this.config.toolGroups),n[e]=t}setDefaultToolStyles(e){this.config.default=e}getStyleProperty(e,t){const{annotationUID:n,viewportId:o,toolGroupId:i,toolName:a}=t;return this._getToolStyle(e,n,o,i,a)}_getToolStyle(e,t,n,o,i){if(t){const n=this.getAnnotationToolStyles(t);if(n&&void 0!==n[e])return n[e]}if(n){const t=this.getViewportToolStyles(n);if(t){if(t[i]&&void 0!==t[i][e])return t[i][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(o){const t=this.getToolGroupToolStyles(o);if(t){if(t[i]&&void 0!==t[i][e])return t[i][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[i]&&void 0!==a[i][e]?a[i][e]:a.global&&void 0!==a.global[e]?a.global[e]:void 0}_initializeConfig(e){const t={};for(const n in e)t[n]=e[n];this.config={default:{global:t}}}};function Xc(e,t,n,o){const i=function(e,t,n){const o=["".concat(e)];return t&&o.push("".concat(o[0]).concat(t)),n&&o.push("".concat(o[o.length-1]).concat(n)),o}(e,n,o);for(let e=i.length-1;e>=0;--e){const n=Yc.getStyleProperty(i[e],t);if(void 0!==n)return n}}var Jc=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e.AutoGenerated="AutoGenerated",e}(Jc||{});const Zc=Jc,$c=function(e){if(e){if(e.data&&e.highlighted)return Zc.Highlighted;if(Se(e.annotationUID))return Zc.Selected;if(ge(e))return Zc.Locked;if(e.data&&e.autoGenerated)return Zc.AutoGenerated}return Zc.Default};class Qc extends fi{constructor(){super(...arguments),re(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,o=ne.utilities.imageIdToURI(n),i=it();i.getFramesOfReference().forEach((e=>{const n=i.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{var t;null!==(t=e.metadata)&&void 0!==t&&t.referencedImageId&&ne.utilities.imageIdToURI(e.metadata.referencedImageId)===o&&(e.invalidated=!0,e.data.cachedStats={})})),ka(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;return Kc(o,t)}getReferencedImageId(e,t,n,o){const i=this.getTargetId(e);let a;if(e instanceof ne.StackViewport)a=i.split("imageId:")[1];else if(e instanceof ne.VideoViewport)a=i.split("videoId:")[1];else{const e=ne.utilities.getVolumeId(i),o=ne.cache.getVolume(e);a=ne.utilities.getClosestImageId(o,t,n)}return a}getStyle(e,t,n){return Xc(e,t,$c(n),this.mode)}}re(Qc,"toolName",void 0),Qc.toolName="AnnotationDisplayTool";const ed=Qc;class td extends ed{static createAnnotation(){let e={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(var t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];for(const t of n)e=ne.utilities.deepMerge(e,t);return e}static createAnnotationForViewport(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];return this.createAnnotation({metadata:e.getViewReference()},...n)}static createAndAddAnnotation(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const i=this.createAnnotationForViewport(e,...n);gt(i,e.element),Qe(i,e.element)}constructor(e,t){var n,o;super(e,t),re(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:o}=e.detail,i=o.canvas;let a=!1;for(const e of t){if(ge(e)||!Ne(e.annotationUID))continue;const{data:t}=e,o=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,i,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==o&&(a=!0)}return a})),null!==(n=e.configuration)&&void 0!==n&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),null!==(o=e.configuration)&&void 0!==o&&o.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s,textBox:l}=r.handles;if(l){const{worldBoundingBox:e}=l;if(e){const t={topLeft:a.worldToCanvas(e.topLeft),topRight:a.worldToCanvas(e.topRight),bottomLeft:a.worldToCanvas(e.bottomLeft),bottomRight:a.worldToCanvas(e.bottomRight)};if(n[0]>=t.topLeft[0]&&n[0]<=t.bottomRight[0]&&n[1]>=t.topLeft[1]&&n[1]<=t.bottomRight[1])return r.handles.activeHandleIndex=null,l}}for(let e=0;e<(null==s?void 0:s.length);e++){const t=s[e],i=a.worldToCanvas(t);if(!0==aa.vec2.distance(n,i)<o)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null}getLinkedTextBoxStyle(e,t){return{visibility:this.getStyle("textBoxVisibility",e,t),fontFamily:this.getStyle("textBoxFontFamily",e,t),fontSize:this.getStyle("textBoxFontSize",e,t),color:this.getStyle("textBoxColor",e,t),shadow:this.getStyle("textBoxShadow",e,t),background:this.getStyle("textBoxBackground",e,t),lineWidth:this.getStyle("textBoxLinkLineWidth",e,t),lineDash:this.getStyle("textBoxLinkLineDash",e,t)}}isSuvScaled(e,t,n){if(e instanceof ne.BaseVolumeViewport){var o;const e=ne.utilities.getVolumeId(t);return void 0!==(null===(o=ne.cache.getVolume(e).scaling)||void 0===o?void 0:o.PT)}const i=n&&ne.metaData.get("scalingModule",n);return"number"==typeof(null==i?void 0:i.suvbw)}getAnnotationStyle(e){const{annotation:t,styleSpecifier:n}=e,o=e=>this.getStyle(e,n,t),{annotationUID:i}=t,a=Ne(i),r=ge(t),s=o("lineWidth"),l=o("lineDash"),c=o("color");return{visibility:a,locked:r,color:c,lineWidth:s,lineDash:l,lineOpacity:1,fillColor:c,fillOpacity:0,shadow:o("shadow"),textbox:this.getLinkedTextBoxStyle(n,t)}}_imagePointNearToolOrHandle(e,t,n,o){return!!this.getHandleNearImagePoint(e,t,n,o)||(!!this.isPointNearTool(e,t,n,o,"mouse")||void 0)}}re(td,"toolName",void 0),td.toolName="AnnotationTool";const nd=td;function od(e){const t=document.createElementNS("http://www.w3.org/2000/svg","tspan");return t.setAttribute("x","0"),t.setAttribute("dy","1.2em"),t.textContent=e,t}function id(e,t){let n=e.querySelector("rect.background");if(!t)return n&&e.removeChild(n),e.getBBox();n||(n=document.createElementNS("http://www.w3.org/2000/svg","rect"),n.setAttribute("class","background"),e.insertBefore(n,e.firstChild));const o=e.getBBox(),i={x:"".concat(o.x),y:"".concat(o.y),width:"".concat(o.width),height:"".concat(o.height),fill:t};return uc(i,n),o}const ad=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],i=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:c,background:d}=a;let h;const[u,g]=[i[0]+r,i[1]+r],v=hc(t,"text",n),m=e.getSvgNode(v);if(m){const t=m.querySelector("text"),n=Array.from(t.children);for(let e=0;e<n.length;e++){const t=n[e],i=o[e]||"";t.textContent=i}if(o.length>n.length){for(let e=0;e<o.length-n.length;e++){const i=od(o[e+n.length]);t.appendChild(i)}m.appendChild(t),e.appendNode(m,v)}const i={fill:s,"font-size":c,"font-family":l},a={transform:"translate(".concat(u," ").concat(g,")")};uc(i,t),uc(a,m),h=id(m,d),e.setNodeTouched(v)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform","translate(".concat(u," ").concat(g,")"));const n=function(e,t){const{color:n,fontFamily:o,fontSize:i}=t,a=document.createElementNS("http://www.w3.org/2000/svg","text"),r="filter:url(#shadow-".concat(e.svgLayerElement.id,");"),s="".concat("user-select: none; pointer-events: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0);").concat(r);return a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("fill",n),a.setAttribute("font-family",o),a.setAttribute("font-size",i),a.setAttribute("style",s),a}(e,a);for(let e=0;e<o.length;e++){const t=od(o[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,v),h=id(t,d)}return Object.assign({},h,{x:u,y:g,height:h.height+r,width:h.width+r})}(e,t,n,o,i,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function rd(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(o[0])||isNaN(o[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:s,width:l,lineWidth:c,lineDash:d,shadow:h}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),u=c||l,g=hc(t,"line",n),v=e.getSvgNode(g),m=h?"filter:url(#shadow-".concat(e.svgLayerElement.id,");"):"",p={x1:"".concat(o[0]),y1:"".concat(o[1]),x2:"".concat(i[0]),y2:"".concat(i[1]),stroke:s,style:m,"stroke-width":u,"stroke-dasharray":d};if(v)uc(p,v),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),gc(p,t),e.appendNode(t,g)}}function sd(e,t){let n=[0,0],o=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const i=function(e,t){const[n,o]=e,[i,a]=t;return Math.sqrt(Math.pow(n-i,2)+Math.pow(o-a,2))}(t,e);i<o&&(o=i,n=[...e])})),n}const ld=function(e,t,n,o,i,a,r){let s=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};const l=Object.assign({handleRadius:"6",centering:{x:!1,y:!0}},s),c=ad(e,t,n,o,i,l);return function(e,t,n,o,i,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=o.length>0?sd(o,i):i,l=sd(function(e){const{x:t,y:n,height:o,width:i}=e,a=i/2,r=o/2;return[[t+a,n],[t,n+r],[t+a,n+o],[t+i,n+r]]}(a),s),c=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r);rd(e,t,"link-".concat(n),s,l,c)}(e,t,n,a,i,c,l),c};function cd(e,t,n){if(2!==e.length||2!==t.length||2!==n.length)throw Error("lineStart, lineEnd, and point should have 2 elements of [x, y]");return Math.sqrt(ss(e,t,n))}function dd(e,t){if(4!==e.length||2!==t.length)throw Error("rectangle:[left, top, width, height] or point: [x,y] not defined correctly");const[n,o,i,a]=e;let r=655535;const s=function(e,t,n,o){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+o]],bottom:[[e+n,t+o],[e,t+o]],left:[[e,t+o],[e,t]]}}(n,o,i,a);return Object.keys(s).forEach((e=>{const[n,o]=s[e],i=cd(n,o,t);i<r&&(r=i)})),r}function hd(e){const t=function(e){const t=[e[0],e[1]].sort((function(e,t){return e[0]<t[0]?-1:1})),n=[e[0],e[1]].sort((function(e,t){return e[1]<t[1]?-1:1})),o=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:o}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function ud(e,t,n,o){const i=aa.vec3.create();aa.vec3.cross(i,t,e);const a=aa.vec3.fromValues(...n),r=aa.vec3.fromValues(...o),s=aa.vec3.create();aa.vec3.subtract(s,a,r);const l=aa.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const c=aa.vec3.dot(s,i)/(l*aa.vec3.length(i));return{worldWidth:Math.sqrt(1-c*c)*l,worldHeight:c*l}}function gd(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=ne.metaData.get("generalSeriesModule",e);if("PT"===(null==n?void 0:n.modality)){const t=ne.metaData.get("petSeriesModule",e);return(null==t?void 0:t.units)||"unitless"}}(t,n):""}function vd(e,t){if(e instanceof ne.BaseVolumeViewport){const e=t.split("volumeId:"),n=e.length>1?e[1].split("?")[0]:e[0],o=ne.cache.getVolume(n);return!(null==o||!o.scaling)&&Object.keys(o.scaling).length>0}if(e instanceof ne.StackViewport){const{preScale:t}=e.getImageData()||{};return!(null==t||!t.scaled)}return!1}class md{}re(md,"run",void 0),re(md,"getStatistics",void 0);const pd=md;var fd;class Id extends pd{}function wd(e){return 1===e.length?e[0]:e}fd=Id,re(Id,"max",[-1/0]),re(Id,"sum",[0]),re(Id,"sumSquares",[0]),re(Id,"squaredDiffSum",[0]),re(Id,"count",0),re(Id,"statsCallback",(e=>{let{value:t}=e;Array.isArray(t)&&t.length>1&&1===fd.max.length&&(fd.max.push(fd.max[0],fd.max[0]),fd.sum.push(fd.sum[0],fd.sum[0]),fd.sumSquares.push(fd.sumSquares[0],fd.sumSquares[0]),fd.squaredDiffSum.push(fd.squaredDiffSum[0],fd.squaredDiffSum[0]));const n=Array.isArray(t)?t:[t];fd.count+=1,fd.max.forEach(((e,t)=>fd.max[t]=Math.max(e,n[t]))),fd.sum.map(((e,t)=>fd.sum[t]+=n[t])),fd.sumSquares.map(((e,t)=>fd.sumSquares[t]+=n[t]**2)),fd.squaredDiffSum.map(((e,t)=>fd.squaredDiffSum[t]+=Math.pow(n[t]-fd.sum[t]/fd.count,2)))})),re(Id,"getStatistics",(()=>{const e=fd.sum.map((e=>e/fd.count)),t=fd.squaredDiffSum.map((e=>Math.sqrt(e/fd.count))),n=fd.sumSquares.map(((t,n)=>Math.sqrt(fd.sumSquares[n]/fd.count-e[n]**2))),o={max:{name:"max",label:"Max Pixel",value:wd(fd.max),unit:null},mean:{name:"mean",label:"Mean Pixel",value:wd(e),unit:null},stdDev:{name:"stdDev",label:"Standard Deviation",value:wd(t),unit:null},stdDevWithSumSquare:{name:"stdDevWithSumSquare",value:wd(n),unit:null},count:{name:"count",label:"Pixel Count",value:fd.count,unit:null},array:[]};return o.array.push(o.max,o.mean,o.stdDev,o.stdDevWithSumSquare,o.count),fd.max=[-1/0],fd.sum=[0],fd.sumSquares=[0],fd.squaredDiffSum=[0],fd.count=0,o}));const{transformWorldToIndex:Ed}=ne.utilities;class Cd extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:_d,statsCalculator:Id}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{label:"",handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[3]),d=this._getRectangleImageCoordinates([l,c]),h=[n[0],n[1]],{left:u,top:g,width:v,height:m}=d;return dd([u,g,v,m],h)<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=s.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,i=(0,ne.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=i.viewport,c=e.world,{points:d}=s.handles;let h,u,g,v,m,p,f,I;switch(d[a]=[...c],a){case 0:case 3:h=r(d[0]),v=r(d[3]),u=[v[0],h[1]],g=[h[0],v[1]],p=l(u),f=l(g),d[1]=p,d[2]=f;break;case 1:case 2:u=r(d[1]),g=r(d[2]),h=[g[0],u[1]],v=[u[0],g[1]],m=l(h),I=l(v),d[0]=m,d[3]=I}o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles,v=u.map((e=>a.worldToCanvas(e)));d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),{viewPlaneNormal:I,viewUp:w}=a.getCamera();if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,I,w,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(o,I,w,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let E;if(!Ne(r))continue;ge(o)||this.editData||null===g||(E=[v[g]]),E&&Fc(t,r,"0",E,{color:m});const C="".concat(r,"-rect");Gc(t,r,"0",v[0],v[3],{color:m,lineDash:f,lineWidth:p},C),i=!0;const _=this.getLinkedTextBoxStyle(d,o);if(!_.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}const b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;if(!h.handles.textBox.hasMoved){const e=hd(v);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const D=a.worldToCanvas(h.handles.textBox.worldPosition),T=ld(t,r,"1",b,D,v,{},_),{x:S,y,width:M,height:x}=T;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([S,y]),topRight:a.canvasToWorld([S+M,y]),bottomLeft:a.canvasToWorld([S,y+x]),bottomRight:a.canvasToWorld([S+M,y+x])}}return i})),re(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),re(this,"_calculateCachedStats",((e,t,n,o,i)=>{const{data:a}=e,{viewport:r}=i,{element:s}=r,l=a.handles.points[0],c=a.handles.points[3],{cachedStats:d}=a,h=Object.keys(d);for(let i=0;i<h.length;i++){const a=h[i],s=this.getTargetIdImage(a,o);if(!s)continue;const{dimensions:m,imageData:p,metadata:f}=s,I=("getScalarData"in s?s.getScalarData():s.scalarData,Ed(p,l));I[0]=Math.floor(I[0]),I[1]=Math.floor(I[1]),I[2]=Math.floor(I[2]);const w=Ed(p,c);if(w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]),this._isInsideVolume(I,w,m)){var u,g,v;this.isHandleOutsideImage=!1;const o=[[Math.min(I[0],w[0]),Math.max(I[0],w[0])],[Math.min(I[1],w[1]),Math.max(I[1],w[1])],[Math.min(I[2],w[2]),Math.max(I[2],w[2])]],{worldWidth:i,worldHeight:h}=ud(t,n,l,c),m=gr(s),E=Math.abs(i*h)/(m*m),C={isPreScaled:vd(r,a),isSuvScaled:this.isSuvScaled(r,a,e.metadata.referencedImageId)},_=gd(f.Modality,e.metadata.referencedImageId,C),b=yr(p,(()=>!0),this.configuration.statsCalculator.statsCallback,o),D=this.configuration.statsCalculator.getStatistics();d[a]={Modality:f.Modality,area:E,mean:null===(u=D.mean)||void 0===u?void 0:u.value,stdDev:null===(g=D.stdDev)||void 0===g?void 0:g.value,max:null===(v=D.max)||void 0===v?void 0:v.value,statsArray:D.array,pointsInShape:b,areaUnit:ur(null,s),modalityUnit:_}}else this.isHandleOutsideImage=!0,d[a]={Modality:f.Modality}}return e.invalidated=!1,Qe(e,s),d})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}}function _d(e,t){const n=e.cachedStats[t],{area:o,mean:i,max:a,stdDev:r,areaUnit:s,modalityUnit:l}=n;if(void 0===i)return;const c=[];return c.push("Area: ".concat(zu(o)," ").concat(s)),c.push("Mean: ".concat(zu(i)," ").concat(l)),c.push("Max: ".concat(zu(a)," ").concat(l)),c.push("Std Dev: ".concat(zu(r)," ").concat(l)),c}re(Cd,"toolName",void 0),Cd.toolName="RectangleROI";const bd=Cd;class Dd extends bd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getTargetId(r);let u,g;if(r instanceof ne.StackViewport)u=h.split("imageId:")[1];else{g=ne.utilities.getVolumeId(h);const e=ne.cache.getVolume(g);u=ne.utilities.getClosestImageId(e,i,c)}const v=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],enabledElement:a,viewUp:[...d],FrameOfReferenceUID:v,referencedImageId:u,toolName:this.getToolName(),volumeId:g},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},segmentationId:null}};gt(m,o);const p=Qs(o,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,p),m})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o,data:c}=n,{points:d,activeHandleIndex:h}=c.handles,u=d.map((e=>a.worldToCanvas(e)));l.annotationUID=o;const g=this.getStyle("lineWidth",l,n),v=this.getStyle("lineDash",l,n),m=this.getStyle("color",l,n);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let p;(Qe(n,r),Ne(o))&&(ge(n)||this.editData||null===h||(p=[u[h]]),p&&Fc(t,o,"0",p,{color:m}),Gc(t,o,"0",u[0],u[3],{color:m,lineDash:v,lineWidth:g}),i=!0)}return i}))}}re(Dd,"toolName",void 0),Dd.toolName="RectangleROIThreshold";const Td=Dd,{transformWorldToIndex:Sd}=ne.utilities;class yd extends bd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{numSlicesToPropagate:10,computePointsInsideVolume:!1}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l;let h,u,g;if(r instanceof ne.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ne.utilities.getVolumeId(e),u=ne.cache.getVolume(g),h=ne.utilities.getClosestImageId(u,i,c)}if(!h)throw new Error("This tool does not work on non-acquisition planes");const v=r.getCurrentImageIdIndex(),m=ne.utilities.getSpacingInNormalDirection(u,c),p=this._getEndSliceIndex(u,i,m,c),f=r.getFrameOfReferenceUID(),I={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],enabledElement:a,viewUp:[...d],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:g,spacingInNormal:m},data:{label:"",startSlice:v,endSlice:p,cachedStats:{pointsInVolume:[],projectionPoints:[],projectionPointsImageIds:[h]},handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(I,u),gt(I,o);const w=Qs(o,this.getToolName());return this.editData={annotation:I,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,w),I})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const c=this.getTargetId(l.viewport),d=ne.cache.getVolume(c.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(o,d,l),Ua(l.renderingEngine,i),a&&et(o)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e,i=st(this.getToolName(),o.element);if(null==i||!i.length)return n;const a=o.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<i.length;s++){const l=i[s],{annotationUID:c,data:d}=l,{startSlice:h,endSlice:u}=d,{points:g,activeHandleIndex:v}=d.handles,m=g.map((e=>o.worldToCanvas(e)));r.annotationUID=c;const p=this.getStyle("lineWidth",r,l),f=this.getStyle("lineDash",r,l),I=this.getStyle("color",r,l);if(a<Math.min(h,u)||a>Math.max(h,u))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let w,E=!1;if(a!==h&&a!==u||(E=!0),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Ne(c))continue;ge(l)||this.editData||null===v||!E||(w=[m[v]]),w&&Fc(t,c,"0",w,{color:I});let C=f;E||(C=2),Gc(t,c,"0",m[0],m[3],{color:I,lineDash:C,lineWidth:p}),n=!0}return n})),this._throttledCalculateCachedStats=Er(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:o}=e,{viewPlaneNormal:i,spacingInNormal:a}=o,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:c}=n.handles,d=Sd(r,c[0]);if(d[2]!==s)throw new Error("Start slice does not match");const h=aa.vec3.fromValues(d[0],d[1],l),u=aa.vec3.create();r.indexToWorldVec3(d,u);const g=aa.vec3.create();r.indexToWorldVec3(h,g);const v=aa.vec3.distance(u,g),m=[];for(let e=0;e<v;e+=a)m.push(c.map((t=>{const n=aa.vec3.create();return aa.vec3.scaleAndAdd(n,t,i,e),Array.from(n)})));n.cachedStats.projectionPoints=m;const p=[];for(const e of m){const n=ne.utilities.getClosestImageId(t,e[0],i);p.push(n)}n.cachedStats.projectionPointsImageIds=p}_computePointsInsideVolume(e,t,n){const{data:o}=e,i=o.cachedStats.projectionPoints,a=[[]];for(let e=0;e<i.length;e++){if(!t)continue;const n=i[e][0],r=o.handles.points[0],s=o.handles.points[3],{dimensions:l,imageData:c}=t,d=Sd(c,r),h=Sd(c,n);d[0]=Math.floor(d[0]),d[1]=Math.floor(d[1]),d[2]=Math.floor(h[2]);const u=Sd(c,s);if(u[0]=Math.floor(u[0]),u[1]=Math.floor(u[1]),u[2]=Math.floor(h[2]),this._isInsideVolume(d,u,l)){this.isHandleOutsideImage=!1;const e=yr(c,(()=>!0),null,[[Math.min(d[0],u[0]),Math.max(d[0],u[0])],[Math.min(d[1],u[1]),Math.max(d[1],u[1])],[Math.min(d[2],u[2]),Math.max(d[2],u[2])]]);a.push(e)}}o.cachedStats.pointsInVolume=a}_calculateCachedStatsTool(e,t){const n=e.data,{viewport:o}=t,{cachedStats:i}=n,a=this.getTargetId(o),r=ne.cache.getVolume(a.split(/volumeId:|\?/)[1]);return this._computeProjectionPoints(e,r),e.invalidated=!1,Qe(e,o.element),i}_getEndSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=aa.vec3.create();aa.vec3.scaleAndAdd(a,t,o,i*n);const r=n/2,{imageIds:s}=e;let l;for(let e=0;e<s.length;e++){const t=s[e],{imagePositionPatient:n}=ne.metaData.get("imagePlaneModule",t),i=aa.vec3.create();aa.vec3.sub(i,a,n);const c=aa.vec3.dot(i,o);Math.abs(c)<r&&(l=e)}return l}}re(yd,"toolName",void 0),yd.toolName="RectangleROIStartEndThreshold";const Md=yd,xd=function(e,t){const n=e.findIndex((e=>{let[t,n]=e;return t===n}));if(-1===n)throw new Error("3D bounding boxes not supported in an oblique plane");return e[n][0]-=t,e[n][1]+=t,e},Od=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=[];return e.forEach((e=>{var i,a;const{data:r}=e,{points:s}=r.handles,{imageData:l,dimensions:c}=t;let d=s;if(null!==(i=r.cachedStats)&&void 0!==i&&i.projectionPoints){const{projectionPoints:e}=r.cachedStats;d=[].concat(...e)}let h=Or(d.map((e=>ne.utilities.transformWorldToIndex(l,e))),c);!n.numSlicesToProject||null!==(a=r.cachedStats)&&void 0!==a&&a.projectionPoints||(h=xd(h,n.numSlicesToProject)),o.push(h)})),1===o.length?o[0]:o.reduce(((e,t)=>({iMin:Math.min(e.iMin,t.iMin),jMin:Math.min(e.jMin,t.jMin),kMin:Math.min(e.kMin,t.kMin),iMax:Math.max(e.iMax,t.iMax),jMax:Math.max(e.jMax,t.jMax),kMax:Math.max(e.kMax,t.kMax)})),{iMin:1/0,jMin:1/0,kMin:1/0,iMax:-1/0,jMax:-1/0,kMax:-1/0})},Pd=function(e,t,n,o){const i=e.map((e=>pt(e)));let a;!function(e){const t=[Td.toolName,Md.toolName];for(const n of e){const e=n.metadata.toolName;if(!t.includes(e))throw new Error("rectangleROIThresholdVolumeByRange only supports RectangleROIThreshold and RectangleROIStartEndThreshold annotations")}}(i);for(let e=0;e<n.length;e++)n[e].volume.getScalarData().length!==t.getScalarData().length&&0!==e||(a=Od(i,n[e].volume,o));const r=Hc(t,n,{...o,boundsIJK:a});return r.modified(),r},Ad=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"mergedLabelmap";e.forEach((t=>{let{direction:n,dimensions:o,origin:i,spacing:a}=t;if(!(ne.utilities.isEqual(o,e[0].dimensions)&&ne.utilities.isEqual(n,e[0].direction)&&ne.utilities.isEqual(a,e[0].spacing)&&ne.utilities.isEqual(i,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const o=e[0],i=new(0,o.getScalarData().constructor)(o.getScalarData().length);e.forEach((e=>{const n=e.getScalarData();for(let e=0;e<n.length;e++)n[e]===t&&(i[e]=t)}));const a={scalarData:i,metadata:o.metadata,spacing:o.spacing,origin:o.origin,direction:o.direction,dimensions:o.dimensions};return ne.volumeLoader.createLocalVolume(a,n,!0)};function Rd(e,t){if(e===Et.Labelmap)return function(e){return e&&"boolean"==typeof e.renderOutline&&"number"==typeof e.outlineWidthActive&&"number"==typeof e.outlineWidthInactive&&"number"==typeof e.activeSegmentOutlineWidthDelta&&"boolean"==typeof e.renderFill&&"boolean"==typeof e.renderFillInactive&&"number"==typeof e.fillAlpha&&"number"==typeof e.fillAlphaInactive&&"number"==typeof e.outlineOpacity&&"number"==typeof e.outlineOpacityInactive}(t);throw new Error("Unknown representation type: ".concat(e))}function Nd(e){const{type:t}=e;if(t===Et.Labelmap)return bt();throw new Error("Unknown representation type: ".concat(t))}async function Ld(e){const{viewportId:t,renderingEngineId:n,options:o}=e;let{segmentationId:i}=e;const a=(0,ne.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof ne.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();var l;if(void 0===i&&(i="".concat(s,"-based-segmentation-").concat(null!==(l=null==o?void 0:o.volumeId)&&void 0!==l?l:ne.utilities.uuidv4().slice(0,8))),o){const e=le()(o);await ne.volumeLoader.createLocalVolume(e,i)}else{const{uid:e}=r.getDefaultActor();await ne.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:i})}return i}function kd(e,t,n){const o=ei(e);if(void 0===o)return;Uc(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const i=o.getViewportsInfo(),a=Object.keys(i).map((e=>i[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=o.getViewportIds(),l=(0,ne.getRenderingEngine)(r);Ua(l,s)}function Ud(e,t){const n=ei(e);if(void 0===n)return;const o=n._toolInstances;if(!Object.keys(o).length)return;const i=Uc(e,t)[0];return i?i.configuration.brushSize:void 0}function Vd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const o=ei(e);if(void 0===o)return;const i=Uc(e),a={...n,...void 0!==t&&{threshold:t}};i.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=o.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=o.getViewportIds(),c=(0,ne.getRenderingEngine)(s);Ua(c,l)}function Wd(e){const t=ei(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const o=Uc(e)[0];return o?o.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const Hd=function(e,t,n,o){const i=e.getScalarData(),{baseVolumeIdx:a,volumeInfoList:r}=Wc(e,n);return r.forEach((e=>{const{volumeSize:n}=e;n===i.length?function(e,t,n){const{referenceValues:o,lower:i,upper:a}=n;for(let n=0;n<e.length;n++)if(e[n]===t){const r=o[n];e[n]=r>=i&&r<=a?t:0}}(i,t,e):function(e,t,n,o,i,a){const{imageData:r,lower:s,upper:l,dimensions:c}=n;let d,h,u;for(let n=0;n<e.length;n++)if(e[n]===t){const g=Vc(r,c,o[i].spacing,o[i].imageData.getPoint(n)),v=e=>{let{value:t}=e;d+=1,t>=u.lower&&t<=u.upper&&(h+=1)};d=0,h=0,u={lower:s,upper:l};let m=!1;yr(r,(()=>!0),v,g),m=0===a?h>0:h===d,e[n]=m?t:0}}(i,t,e,r,a,o)})),Vt(e.volumeId),e};function Bd(e,t,n){const o=n.toIJK(e),i=n.toIJK(t),a=aa.vec3.create(),{testIJK:r}=n,s=aa.vec3.sub(aa.vec3.create(),o,i),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const c=aa.vec3.scale(aa.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(aa.vec3.scaleAndAdd(a,i,c,e),!r(a))return!1;return!0}const Fd=.01;function Gd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:o}=e.polyData,{maxMinor:i,maxMajor:a}=n;let r,s=a*a,l=i*i;for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){const i=o[e],a=o[n],c=aa.vec3.sqrDist(i,a);c<s||c-Fd<s+Fd&&r||t.testCenter(i,a)&&Bd(i,a,t)&&(s=c-Fd,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+Fd);const c=o[r[0]],d=o[r[1]],h=aa.vec3.sub(aa.vec3.create(),c,d);let u;aa.vec3.scale(h,h,1/s);for(let e=0;e<o.length;e++)for(let n=e+1;n<o.length;n++){const i=o[e],a=o[n],r=aa.vec3.sqrDist(i,a);if(r<=l)continue;const s=aa.vec3.sub(aa.vec3.create(),i,a);Math.abs(aa.vec3.dot(s,h))/Math.sqrt(r)>Fd||t.testCenter(i,a)&&Bd(i,a,t)&&(l=r,u=[e,n])}return u?(l=Math.sqrt(l),{majorAxis:[c,d],minorAxis:[o[u[0]],o[u[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:qd}=Et;function jd(e){const t=Zr({segmentations:e});if(null==t||!t.length||!t[0].sliceContours.length)return;const{representationData:n,segments:o=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:i}=n[qd],a=o.findIndex((e=>!!e));return-1!==a?(o[a].segmentIndex=a,function(e,t,n){const{sliceContours:o}=e,{segmentIndex:i,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const o=ne.cache.getVolume(e);if(!o)return void console.warn("No volume found for ".concat(e));const i=o.imageData.getPointData().getScalars().getData(),a=o.dimensions[0],r=a*o.dimensions[1];return{testCenter:(e,s)=>{const l=aa.vec3.add(aa.vec3.create(),e,s).map((e=>e/2)),c=o.imageData.worldToIndex(l).map(Math.round),[d,h,u]=c,g=i[d+h*a+u*r];return g===t||(null==n?void 0:n.has(g))},toIJK:e=>o.imageData.worldToIndex(e),testIJK:e=>{const[o,s,l]=e,c=Math.round(o)+Math.round(s)*a+Math.round(l)*r,d=i[c];return d===t||(null==n?void 0:n.has(d))}}}(t,i,a);for(const e of o){const t=Gd(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],i,o[a])):void 0}function zd(e,t){const{majorAxis:n,minorAxis:o,label:i="",sliceIndex:a}=e,[r,s]=n,[l,c]=o,d=[r,s,l,c];return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",...t.getViewReference({sliceIndex:a})},data:{handles:{points:d,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}}function Kd(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function Yd(e,t,n,o){const[i,a]=e,[r,s]=t,[l,c]=n,[d,h]=o,u=s-a,g=i-r,v=r*a-i*s,m=u*l+g*c+v,p=u*d+g*h+v;if(0!==m&&0!==p&&Kd(m)===Kd(p))return;const f=h-c,I=l-d,w=d*c-l*h,E=f*i+I*a+w,C=f*r+I*s+w;if(0!==E&&0!==C&&Kd(E)===Kd(C))return;const _=u*I-f*g;let b;b=g*w-I*v;const D=b/_;return b=f*v-u*w,[D,b/_]}const{transformWorldToIndex:Xd}=ne.utilities;class Jd extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Zd}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preventHandleOutsideImage",void 0),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[1]),d={start:{x:l[0],y:l[1]},end:{x:c[0],y:c[1]}},h=cd([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]);return h<=o||(l=a.worldToCanvas(s[2]),c=a.worldToCanvas(s[3]),d={start:{x:l[0],y:l[1]},end:{x:c[0],y:c[1]}},h=cd([d.start.x,d.start.y],[d.end.x,d.end.y],[n[0],n[1]]),h<=o)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),Dc(o),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());Dc(i),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=aa.vec3.distance(e[0],e[1]);if(aa.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],o=[...e[1]],i=aa.vec2.create();aa.vec2.set(i,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=aa.vec2.create();aa.vec2.set(a,-i[1],i[0]);const r=aa.vec2.create();let l;aa.vec2.set(r,o[0]-n[0],o[1]-n[0]),l=aa.vec2.dot(r,a)>0?[n,o]:[o,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{renderingEngine:a,viewport:r}=i,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:c,handleIndex:d}=this.editData,{data:h}=l,u=n.world;h.handles.points[d]=[...u];const g=h.handles.points.map(s),v={x:g[0][0],y:g[0][1]},m={x:g[1][0],y:g[1][1]},p=(g[2][0],g[2][1],g[3][0],g[3][1],aa.vec2.distance(g[0],g[1])/3),f=v.x-m.x,I=v.y-m.y,w=Math.sqrt(f*f+I*I),E=f/w,C=I/w,_=(v.x+m.x)/2,b=(v.y+m.y)/2,D=_+p*C,T=b-p*E,S=_-p*C,y=b+p*E;h.handles.points[2]=r.canvasToWorld([D,T]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,Ua(a,c),this.editData.hasMoved=!0})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:c}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;c.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),a.invalidated=!0}else this._dragModifyHandle(e),a.invalidated=!0;Ua(i,r)})),re(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{viewport:a}=i,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,c=n.world,d=[a.worldToCanvas(l.handles.points[0]),a.worldToCanvas(l.handles.points[1]),a.worldToCanvas(l.handles.points[2]),a.worldToCanvas(l.handles.points[3])],h={start:{x:d[0][0],y:d[0][1]},end:{x:d[1][0],y:d[1][1]}},u={start:{x:d[2][0],y:d[2][1]},end:{x:d[3][0],y:d[3][1]}},g=[...c],v=a.worldToCanvas(g);if(0===s||1===s){const e=d[0===s?1:0],t=aa.vec2.set(aa.vec2.create(),v[0]-e[0],v[1]-e[1]),n=aa.vec2.set(aa.vec2.create(),d[s][0]-e[0],d[s][1]-e[1]);aa.vec2.normalize(t,t),aa.vec2.normalize(n,n);const o={start:{x:e[0],y:e[1]},end:{x:v[0],y:v[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(o,u))return;const i=e,r=this._getSignedAngle(n,t);let c=d[2][0],h=d[2][1],m=d[3][0],p=d[3][1];c-=i[0],h-=i[1],m-=i[0],p-=i[1];const f=c*Math.cos(r)-h*Math.sin(r),I=c*Math.sin(r)+h*Math.cos(r),w=m*Math.cos(r)-p*Math.sin(r),E=m*Math.sin(r)+p*Math.cos(r);c=f+i[0],h=I+i[1],m=w+i[0],p=E+i[1];const C=a.canvasToWorld([c,h]),_=a.canvasToWorld([m,p]);l.handles.points[s]=g,l.handles.points[2]=C,l.handles.points[3]=_}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:u.start,end:u.end}},n=aa.vec2.subtract(aa.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),o=aa.vec2.normalize(aa.vec2.create(),n),i=aa.vec2.subtract(aa.vec2.create(),[v[0],v[1]],[d[s][0],d[s][1]]),r=aa.vec2.length(i),c=this._getSignedAngle(o,i),m=Math.cos(c)*r,p=aa.vec2.scaleAndAdd(aa.vec2.create(),[d[e][0],d[e][1]],o,m);if(this._movingLongAxisWouldPutItThroughShortAxis({start:{x:v[0],y:v[1]},end:{x:p[0],y:p[1]}},{start:{x:t.longLineSegment.start.x,y:t.longLineSegment.start.y},end:{x:t.longLineSegment.end.x,y:t.longLineSegment.end.y}}))return;if(!Yd([v[0],v[1]],[p[0],p[1]],[h.start.x,h.start.y],[h.end.x,h.end.y]))return;l.handles.points[e]=a.canvasToWorld(p),l.handles.points[s]=g}})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!0;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles,v=u.map((e=>a.worldToCanvas(e)));d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f,shadow:I}=this.getAnnotationStyle({annotation:o,styleSpecifier:d});if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(o,c,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let w;if(!Ne(r))continue;ge(o)||this.editData||null===g||(w=[v[g]]),w&&Fc(t,r,"0",w,{color:m});const E="".concat(r,"-line-1"),C="".concat(r,"-line-2");rd(t,r,"0",v[0],v[1],{color:m,lineDash:f,lineWidth:p,shadow:I},E),rd(t,r,"1",v[2],v[3],{color:m,lineDash:f,lineWidth:p,shadow:I},C),i=!0;const _=this.getLinkedTextBoxStyle(d,o);if(!_.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}const b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;let D;h.handles.textBox.hasMoved||(D=hd(v),h.handles.textBox.worldPosition=a.canvasToWorld(D));const T=a.worldToCanvas(h.handles.textBox.worldPosition),S=ld(t,r,"1",b,T,v,{},_),{x:y,y:M,width:x,height:O}=S;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([y,M]),topRight:a.canvasToWorld([y+x,M]),bottomLeft:a.canvasToWorld([y,M+O]),bottomRight:a.canvasToWorld([y+x,M+O])}}return i})),re(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=aa.vec2.create();aa.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),aa.vec2.normalize(n,n);const o={start:{x:t.start.x-10*n[0],y:t.start.y-10*n[1]},end:{x:t.end.x+10*n[0],y:t.end.y+10*n[1]}};return!Yd([o.start.x,o.start.y],[o.end.x,o.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),re(this,"_calculateCachedStats",((e,t,n)=>{const{data:o}=e,{element:i}=n.viewport,a=o.handles.points[0],r=o.handles.points[1],s=o.handles.points[2],l=o.handles.points[3],{cachedStats:c}=o,d=Object.keys(c);for(let e=0;e<d.length;e++){const n=d[e],o=this.getTargetIdImage(n,t);if(!o)continue;const{imageData:i,dimensions:h}=o,u=gr(o),g=this._calculateLength(a,r)/u,v=this._calculateLength(s,l)/u,m=g>v?g:v,p=g>v?v:g,f=Xd(i,a),I=Xd(i,r),w=Xd(i,s),E=Xd(i,l);this._isInsideVolume(f,I,w,E,h)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,c[n]={length:m,width:p,unit:dr(null,o)}}return e.invalidated=!1,Qe(e,i),c})),re(this,"_isInsideVolume",((e,t,n,o,i)=>ne.utilities.indexWithinDimensions(e,i)&&ne.utilities.indexWithinDimensions(t,i)&&ne.utilities.indexWithinDimensions(n,i)&&ne.utilities.indexWithinDimensions(o,i))),re(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i],[...i],[...i]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g}_calculateLength(e,t){const n=e[0]-t[0],o=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+o*o+i*i)}}function Zd(e,t){const{cachedStats:n,label:o}=e,{length:i,width:a,unit:r}=n[t],s=[];return o&&s.push(o),void 0===i||s.push("L: ".concat(zu(i)," ").concat(r),"W: ".concat(zu(a)," ").concat(r)),s}re(Jd,"toolName",void 0),Jd.toolName="Bidirectional";const $d=Jd;function Qd(e,t){const{data:n}=t,o=(0,ne.getEnabledElement)(e),i=(n.getSegment||eh)(o,n);if(!i)return;const a=o.viewport.getFrameOfReferenceUID(),r=Ft(),{segmentIndex:s,segmentationId:l}=i,c=st(this.toolName||$d.toolName,a);let d=!1;const h=c.filter((e=>{const{segment:t}=e.data;if(t)return t.segmentationId===l&&t.segmentIndex===s&&(d=!0,e.data.segment=t),!!t}));let u;if(d||h.push({data:{segment:i}}),h.forEach((e=>{const t=[],{segment:n}=e.data,{segmentIndex:s,segmentationId:l}=n;t[s]=n,mt(e.annotationUID);const c=jd({...r.find((e=>e.segmentationId===l)),segments:t});if(!c)return;const d=zd(c,o.viewport);d.annotationUID=e.annotationUID,d.data.segment=n;const h=gt(d,a);if(n.segmentIndex===i.segmentIndex&&n.segmentationId===i.segmentationId){u=c;const{style:e}=i;e&&Yc.setAnnotationStyles(h,e)}})),u){const{sliceIndex:t}=u,n=o.viewport.getImageIds();Sr(e,{imageIndex:n.length-1-t}),o.viewport.render()}else console.warn("No bidirectional found");return u}function eh(e,t){var n,o;const i=Ft();if(!i.length)return;const a=t.segmentationId||i[0].segmentationId,r=null!==(n=t.segmentIndex)&&void 0!==n?n:Nc(a);if(!r)return;const s=null===(o=t.segmentData)||void 0===o?void 0:o.get(r);return{label:"Segment ".concat(r),segmentIndex:r,segmentationId:a,...s}}const th=1e-6;function nh(e){let t;const n=ne.utilities.getRandomSampleFromArray(e,50);for(let e=0;e<3;e++)if(n.every(((t,n,o)=>Math.abs(t[e]-o[0][e])<th))){t=e;break}if(void 0===t)throw new Error("Cannot find a shared dimension index for polyline, probably oblique plane");const o=[],i=(t+1)%3,a=(t+2)%3;for(let t=0;t<e.length;t++)o.push([e[t][i],e[t][a]]);return{sharedDimensionIndex:t,projectedPolyline:o}}function oh(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{sharedDimensionIndex:o,projectedPolyline:i}=nh(t),{holes:a}=n,r=[];if(a)for(let e=0;e<a.length;e++){const t=a[e],n=[];for(let e=0;e<t.length;e++)n.push([t[e][(o+1)%3],t[e][(o+2)%3]]);r.push(n)}return Os(i,[e[(o+1)%3],e[(o+2)%3]],{holes:r})}function ih(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=Bt(e),a=i.representationData,r=null!==(n=null==o?void 0:o.representationType)&&void 0!==n?n:Object.keys(a)[0];if(!r)throw new Error("Segmentation ".concat(e," does not have any representations"));switch(r){case Et.Labelmap:return function(e,t,n){let{viewport:o}=n;const i=e.representationData.LABELMAP;if(Ot(i)){const{volumeId:e}=i,n=ne.cache.getVolume(e);if(!n)return;return n.imageData.getScalarValueFromWorld(t)}const{imageIdReferenceMap:a}=i,r=o.getCurrentImageId(),s=a.get(r);if(!ne.cache.getImage(s))return;const l=zt(e.segmentationId),{segmentationRepresentationUID:c}=l[0],d=o.getActor(c),h=null==d?void 0:d.actor.getMapper().getInputData(),u=ne.utilities.transformWorldToIndex(h,t),g=h.getDimensions();return(h.voxelManager||ne.utilities.VoxelManager.createVolumeVoxelManager(g,h.getPointData().getScalars().getData())).getAtIJKPoint(u)}(i,t,o);case Et.Contour:return function(e,t,n){let{viewport:o}=n;const i=e.representationData.CONTOUR,a=Array.from(i.annotationUIDsMap.keys()),{viewPlaneNormal:r}=o.getCamera();for(const e of a){const n=i.annotationUIDsMap.get(e);if(n)for(const o of n){const n=pt(o);if(!n)continue;const{polyline:i}=n.data.contour;if(ne.utilities.isEqual(r,n.metadata.viewPlaneNormal)&&oh(t,i))return Number(e)}}}(i,t,o);default:return}}function ah(e,t,n){let{viewport:o,searchRadius:i}=n;const a=Bt(e),r=a.representationData.LABELMAP;if(Ot(r)){const{volumeId:e}=r,n=ne.cache.getVolume(e);if(!n)return;const a=n.imageData,s=a.getScalarValueFromWorld(t),l=function(e,t,n,o,i){return rh(((t,i)=>{const a=[e[0]+t,e[1]+i],r=n.canvasToWorld(a);return o.getScalarValueFromWorld(r)}),t,i)}(o.worldToCanvas(t),s,o,a,i);return l?s:void 0}const{imageIdReferenceMap:s}=r,l=o.getCurrentImageId(),c=s.get(l);if(!ne.cache.getImage(c))return;const d=zt(a.segmentationId),{segmentationRepresentationUID:h}=d[0],u=o.getActor(h),g=null==u?void 0:u.actor.getMapper().getInputData(),v=ne.utilities.transformWorldToIndex(g,t),m=g.getDimensions(),p=g.voxelManager||ne.utilities.VoxelManager.createVolumeVoxelManager(m,g.getPointData().getScalars().getData()),f=p.getAtIJKPoint(v),I=function(e,t,n,o,i){return rh(((t,o,i)=>{const a=[e[0]+t,e[1]+o,e[2]+i];return n.getAtIJK(...a)}),o,void 0)}(v,0,p,f);return I?f:void 0}function rh(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;const o=Array.from({length:2*n+1},((e,t)=>t-n));for(const n of o)for(const i of o)for(const a of o){if(0===n&&0===i&&0===a)continue;const o=e(n,i,a);if(void 0!==o&&t!==o)return!0}return!1}function sh(e){const t=Bt(e),{annotationUIDsMap:n}=t.representationData.CONTOUR;for(const[e,t]of n.entries())if(Array.from(t).find((e=>pt(e).highlighted)))return e}function lh(e,t){const n=e.maxX-e.minX,o=e.maxY-e.minY,i=[n,o],a=[e.minX+n/2,e.minY+o/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*i[0],l=r[1]-.5*i[1];if(s>0&&l>0)return s*s+l*l;const c=Math.max(s,0)+Math.max(l,0);return c*c}function ch(e,t){return Math.sqrt(lh(e,t))}function dh(e,t){return Math.sqrt(as(e,t))}function hh(e,t){const[n,o]=e,[i,a]=t;return[2*i-n,2*a-o]}function uh(e){const t=e.length;let n=0,o=t-1;for(let i=0;i<t;i++)n+=(e[o][0]+e[i][0])*(e[o][1]-e[i][1]),o=i;return Math.abs(n/2)}function gh(e){const t=function(e){const t=aa.vec3.create(),n=e[0];for(let o=0,i=e.length;o<i;o++){const a=e[o],r=e[o===i-1?0:o+1],s=a[0]-n[0],l=a[1]-n[1],c=a[2]-n[2],d=r[0]-n[0],h=r[1]-n[1],u=r[2]-n[2];t[0]+=l*u-c*h,t[1]+=c*d-s*u,t[2]+=s*h-l*d}return aa.vec3.scale(t,t,.5),t}(e);return aa.vec3.normalize(t,t)}function vh(e,t,n){const o=[],i=As(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<i.length;a++){const r=Us(t,n,e[i[a][0]],e[i[a][1]]);o.push(r)}return o}function mh(e,t,n){let o,i;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(i=0,o=1):(i=e.length-1,o=0);const a=[];for(let r=o;r<e.length;r++){const o=e[i],s=e[r];Ds(t,n,o,s)&&a.push([i,r]),i=r}if(0===a.length)return;const r=[];a.forEach((n=>{const o=[e[n[0]],e[n[1]]],i=[(o[0][0]+o[1][0])/2,(o[0][1]+o[1][1])/2];r.push(aa.vec2.distance(i,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}const ph=.001,fh=(e,t)=>{let n,o,i;if(e instanceof ne.StackViewport){const t=e.getImageData();o=t.direction.slice(0,3),i=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),c=a.slice(0,3),d=a.slice(3,6),h=a.slice(6,9),u=aa.vec3.create();aa.vec3.cross(u,l,s);const g=Math.abs(aa.vec3.dot(u,c)),v=Math.abs(aa.vec3.dot(u,d)),m=Math.abs(aa.vec3.dot(u,h));let p;if(Math.abs(1-g)<ph)p=r[0],o=c;else if(Math.abs(1-v)<ph)p=r[1],o=d;else{if(!(Math.abs(1-m)<ph))throw new Error("No support yet for oblique plane planar contours");p=r[2],o=h}const f=Math.abs(aa.vec3.dot(l,c)),I=Math.abs(aa.vec3.dot(l,d)),w=Math.abs(aa.vec3.dot(l,h));let E;if(Math.abs(1-f)<ph)E=r[0],i=c;else if(Math.abs(1-I)<ph)E=r[1],i=d;else{if(!(Math.abs(1-w)<ph))throw new Error("No support yet for oblique plane planar contours");E=r[2],i=h}n=[p,E]}return{spacing:[n[0]/t,n[1]/t],xDir:o,yDir:i}},Ih=(e,t,n)=>aa.vec2.dist(e,t)<n,wh=(e,t,n,o)=>{const{xDir:i,yDir:a,spacing:r}=o,s=(0,ne.getEnabledElement)(e),{viewport:l}=s;if(!t.length)return t.push(n),console.log(">>>>> !canvasPoints. :: RETURN"),1;const c=l.canvasToWorld(t[t.length-1]),d=l.canvasToWorld(n),h=aa.vec3.create();aa.vec3.subtract(h,d,c);const u=Math.abs(aa.vec3.dot(h,i)),g=Math.abs(aa.vec3.dot(h,a)),v=Math.max(Math.floor(u/r[0]),Math.floor(g/r[0]));if(v>1){const e=t[t.length-1],o=aa.vec2.dist(e,n),i=aa.vec2.create();aa.vec2.subtract(i,n,e),aa.vec2.set(i,i[0]/o,i[1]/o);const a=o/v;for(let n=1;n<=v;n++)t.push([e[0]+a*i[0]*n,e[1]+a*i[1]*n])}else t.push(n);return v},Eh=(e,t,n,o)=>{const i=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=i[0]*a[0]+i[1]*a[1];if(r<0)return!1;const s=Math.sqrt(a[0]*a[0]+a[1]*a[1]);if(0===s)return!1;const l=r/s,c=[a[0]/s,a[1]/s],d=[c[0]*l,c[1]*l],h=[t[0]+d[0],t[1]+d[1]];return!(aa.vec2.distance(e,h)>o||aa.vec2.distance(t,h)>aa.vec2.distance(t,n))},Ch=1e-6,_h=1,bh=0;function Dh(e,t,n){const[o,i]=n;if(Math.abs(t)<Ch)return e<0;const a=e/t;if(t>0){if(a>i)return 0;a>o&&(n[0]=a)}else{if(a<o)return 0;a<i&&(n[1]=a)}return 1}function Th(e,t,n,o,i){const[a,r]=e,[s,l]=t,c=s-a,d=l-r;if(void 0===o||void 0===i?(o=e,i=t):(o[0]=e[0],o[1]=e[1],i[0]=t[0],i[1]=t[1]),Math.abs(c)<Ch&&Math.abs(d)<Ch&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return _h;const h=[0,1];if(Dh(n[0]-a,c,h)&&Dh(a-n[2],-c,h)&&Dh(n[1]-r,d,h)&&Dh(r-n[3],-d,h)){const[e,t]=h;return t<1&&(i[0]=a+t*c,i[1]=r+t*d),e>0&&(o[0]+=e*c,o[1]+=e*d),_h}return bh}var Sh=C(807),yh=C.n(Sh);function Mh(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*i,c=e.getBounds(),d=c[0],h=c[1],u=[0,0,0];let g,v=[0,0,0];yh().subtract(t,r,u);for(let t=d;t<=h;t+=l){v=[t,0,0];const n=(t-r[0])/u[0];if(v[1]=n*u[1]+r[1],v[2]=n*u[2]+r[2],xh(v,c)){const t=o(e.getIntensityFromWorld(v),v);t&&(g=t)}}return g}const xh=function(e,t){const[n,o,i,a,r,s]=t;return e[0]>n&&e[0]<o&&e[1]>i&&e[1]<a&&e[2]>r&&e[2]<s},Oh=(e,t,n,o,i,a,r,s)=>{const l=[aa.vec3.fromValues(n,o,i),aa.vec3.fromValues(a,o,i),aa.vec3.fromValues(n,r,i),aa.vec3.fromValues(a,r,i),aa.vec3.fromValues(n,o,s),aa.vec3.fromValues(a,o,s),aa.vec3.fromValues(n,r,s),aa.vec3.fromValues(a,r,s)],c=aa.vec3.fromValues(t[0],t[1],t[2]),d=aa.vec3.fromValues(e[0],e[1],e[2]),h=-aa.vec3.dot(c,d);let u=null;for(const e of l){const t=aa.vec3.dot(c,e)+h;if(null===u)u=Math.sign(t);else if(Math.sign(t)!==u)return!0}return!1},Ph={filterAnnotationsWithinSlice:zc,getWorldWidthAndHeightFromCorners:ud,filterAnnotationsForDisplay:Kc,getPointInLineOfSightWithCriteria:Mh,isPlaneIntersectingAABB:Oh};function Ah(e){let t="";const n=e[0]<0?"R":"L",o=e[1]<0?"A":"P",i=e[2]<0?"F":"H",a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=1e-4;for(let e=0;e<3;e++)if(a[0]>r&&a[0]>a[1]&&a[0]>a[2])t+=n,a[0]=0;else if(a[1]>r&&a[1]>a[0]&&a[1]>a[2])t+=o,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=i,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+o,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+i,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=o+i,a[1]=0,a[2]=0}return t}function Rh(e){let t=e.replace("H","f");return t=t.replace("F","h"),t=t.replace("R","l"),t=t.replace("L","r"),t=t.replace("A","p"),t=t.replace("P","a"),t=t.toUpperCase(),t}var Nh=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}(Nh||{});const Lh=Nh,kh={};function Uh(e,t){const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;kh[o]=t}function Vh(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n}=t;return kh[n]}const{ViewportStatus:Wh}=ne.Enums,{triggerEvent:Hh}=ne.utilities,Bh=!0,Fh=new Map;function Gh(e,t){var n;let o,i;if(void 0===e)throw new Error("playClip: element must not be undefined");const a=(0,ne.getEnabledElement)(e);if(!a)throw new Error("playClip: element must be a valid Cornerstone enabled element");t||(t={}),t.dynamicCineEnabled=null===(n=t.dynamicCineEnabled)||void 0===n||n;const{viewport:r}=a,s=Kh(r),l=function(e,t){var n;if(e instanceof ne.StackViewport)return function(e,t){const n=e.getImageIds();return{get numScrollSteps(){return n.length},get currentStepIndex(){return e.getTargetImageIdIndex()},get frameTimeVectorEnabled(){return!0},waitForRenderedCount:0,scroll(n){this.waitForRenderedCount<=t&&e.viewportStatus!==Wh.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,Tr(e,{delta:n,debounceLoading:Bh}))}}}(e,null!==(n=t.waitForRendered)&&void 0!==n?n:30);if(e instanceof ne.VolumeViewport){const n=Kh(e);return t.dynamicCineEnabled&&null!=n&&n.isDynamicVolume()?function(e){return{get numScrollSteps(){return e.numTimePoints},get currentStepIndex(){return e.timePointIndex},get frameTimeVectorEnabled(){return!1},scroll(t){e.timePointIndex+=t}}}(n):function(e,t){const{volumeId:n}=t,o={viewPlaneNormal:aa.vec3.create(),scrollInfo:null},i=()=>{const t=e.getCamera();if(!o.scrollInfo||!aa.vec3.equals(t.viewPlaneNormal,o.viewPlaneNormal)){const i=ne.utilities.getVolumeViewportScrollInfo(e,n);o.viewPlaneNormal=t.viewPlaneNormal,o.scrollInfo=i}return o.scrollInfo};return{get numScrollSteps(){return i().numScrollSteps},get currentStepIndex(){return i().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),o=t.direction.slice(6,9).map((e=>-e)),i=aa.vec3.dot(o,n.viewPlaneNormal);return aa.glMatrix.equals(i,1)},scroll(t){i().currentStepIndex+=t,Tr(e,{delta:t})}}}(e,n)}throw new Error("Unknown viewport type")}(r,t);let c=Vh(e);const d=t.dynamicCineEnabled&&(null==s?void 0:s.isDynamicVolume());var h,u,g,v;if(d&&zh(e),c?jh(e,{stopDynamicCine:!d,viewportId:r.id}):(c={intervalId:void 0,framesPerSecond:30,lastFrameTimeStamp:void 0,ignoreFrameTimeVector:!1,usingFrameTimeVector:!1,frameTimeVector:null!==(h=t.frameTimeVector)&&void 0!==h?h:void 0,speed:null!==(u=t.frameTimeVectorSpeedMultiplier)&&void 0!==u?u:1,reverse:null!==(g=t.reverse)&&void 0!==g&&g,loop:null===(v=t.loop)||void 0===v||v},Uh(e,c)),c.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(c.framesPerSecond=Number(t.framesPerSecond),c.reverse=c.framesPerSecond<0,c.ignoreFrameTimeVector=!0),!0!==c.ignoreFrameTimeVector&&c.frameTimeVector&&c.frameTimeVector.length===l.numScrollSteps&&l.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,o,i,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)i=Number(e[n])/t|0,s.push(i),1===n?o=i:i!==o&&(l=!0),a+=i;return s.length>0&&(i=l?a/s.length|0:s[0],s.push(i)),{timeouts:s,isTimeVarying:l}}(c.frameTimeVector,c.speed);o=e,i=t}const m=()=>{const{numScrollSteps:t,currentStepIndex:n}=l;let o=n+(c.reverse?-1:1);const i=o<0||o>=t;if(!c.loop&&i){jh(e,{stopDynamicCine:!d,viewportId:r.id});const t={element:e};return void Hh(e,Lh.CLIP_STOPPED,t)}o>=t?o=0:o<0&&(o=t-1);const a=o-n;a&&l.scroll(a)};d&&Fh.set(s.volumeId,e),o&&o.length>0&&i?(c.usingFrameTimeVector=!0,c.intervalId=window.setTimeout((function e(){c.intervalId=window.setTimeout(e,o[l.currentStepIndex]),m()}),0)):(c.usingFrameTimeVector=!1,c.intervalId=window.setInterval(m,1e3/Math.abs(c.framesPerSecond)));const p={element:e};Hh(e,Lh.CLIP_STARTED,p)}function qh(e,t){jh(e,{stopDynamicCine:!0,viewportId:t})}function jh(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{stopDynamicCine:!0,viewportId:void 0};const{stopDynamicCine:n,viewportId:o}=t,i=(0,ne.getEnabledElement)(e);let a;if(i){const{viewport:e}=i;a=Vh(e.element)}else{if(!o)return;a=function(e){return kh[e]}(o)}a&&function(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}(a),n&&(null==i?void 0:i.viewport)instanceof ne.BaseVolumeViewport&&zh(e)}function zh(e){const{viewport:t}=(0,ne.getEnabledElement)(e),n=Kh(t);if(null!=n&&n.isDynamicVolume()){const t=Fh.get(n.volumeId);Fh.delete(n.volumeId),t&&t!==e&&qh(t)}}function Kh(e){const t=function(e){return e.getActors().map((e=>ne.cache.getVolume(e.uid))).filter((e=>!!e))}(e),n=t.find((e=>e.isDynamicVolume()));return null!=n?n:t[0]}function Yh(e){var t=e.length-1;return function(n){var o=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),i=e[o],a=e[o+1],r=o>0?e[o-1]:2*i-a,s=o<t-1?e[o+2]:2*a-i;return function(e,t,n,o,i){var a=e*e,r=a*e;return((1-3*e+3*a-r)*t+(4-6*a+3*r)*n+(1+3*e+3*a-3*r)*o+r*i)/6}((n-o/t)*t,r,i,a,s)}}function Xh(e,t){for(var n=new Array(t),o=0;o<t;++o)n[o]=e(o/(t-1));return n}function Jh(e){return e.length}function Zh(){return function(e){if(!(i=e.length))return[];for(var t=-1,n=function(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let o=-1;for(let i of e)null!=(i=t(i,++o,e))&&(n>i||void 0===n&&i>=i)&&(n=i)}return n}(e,Jh),o=new Array(n);++t<n;)for(var i,a=-1,r=o[t]=new Array(i);++a<i;)r[a]=e[a][t];return o}(arguments)}function $h(e,t,n,o){var i,a;const r=n-t+1,s=null!==(i=Math.floor(o/100*r))&&void 0!==i?i:1,l=null!==(a=Math.floor(r/s))&&void 0!==a?a:1;if(isNaN(r)||!r||!l)return e;if(r/l<2)return e;const c=Math.max(0,t),d=Math.min(e.length-1,n),h=e.slice(0,c),u=e.slice(d+1,e.length);return[...h,...function(e,t){if(!t||0===t.length||t.length===e.length)return e;const n=t[t.length-1]-t[0]+1,o=Yh(t.map((t=>e[t][0]))),i=Yh(t.map((t=>e[t][1])));if(3===(null===(a=e[0])||void 0===a?void 0:a.length)){const a=Yh(t.map((t=>e[t][2])));return Zh(Xh(o,n),Xh(i,n),Xh(a,n))}return Zh(Xh(o,n),Xh(i,n));var a}(e,function(e,t){const n=[],[o,i]=t,a=i-o+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+o;for(;l<=i;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+o;return n}(l,[c,d])),...u]}function Qh(e,t,n){if(function(e,t,n){var o;if(null==t||null===(o=t.data)||void 0===o||!o.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:i,viewportId:a,FrameOfReferenceUID:r}=e,s=Qo(a,i);if(t.metadata.FrameOfReferenceUID!==r)return!0;if(!s)return!0;const l=s.getToolInstance(t.metadata.toolName);return!(l instanceof Ev)||l.isDrawing||l.isEditingOpen||l.isEditingClosed}(e,t,n))return!1;const{viewport:o}=e,i=t.data.contour.polyline.map(o.worldToCanvas),a=$h(i,0,i.length,n);return a!==i&&(t.data.contour.polyline=a.map(o.canvasToWorld),!0)}const eu={smoothAnnotation:Qh},{isEqual:tu}=ne.utilities,nu=[aa.vec3.fromValues(1,0,0),aa.vec3.fromValues(0,1,0),aa.vec3.fromValues(0,0,1)];function ou(e){const t=aa.vec3.subtract(aa.vec3.create(),e[0],e[1]),n=aa.vec3.subtract(aa.vec3.create(),e[0],e[2]);return[...iu(t,nu),...iu(n,nu)].every((e=>tu(e,0)||tu(e,90)||tu(e,180)||tu(e,270)))}function iu(e,t){return t.map((t=>180*aa.vec3.angle(e,t)/Math.PI))}const au={};function ru(e,t){const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;au[o]=t}function su(e){const t=(0,ne.getEnabledElement)(e),{viewportId:n}=t;return au[n]}const lu=ne.Enums.RequestType.Prefetch,cu=0;function du(e,t){e=Math.round(e)||0;const n=[];let o=(t=Math.round(t)||0)-e+1;if(o<=0)return n;for(;o--;)n[o]=t--;return n}function hu(e){const t=(0,ne.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof ne.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:(console.warn("stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented"),null)}function uu(e){return function(t){const n=t.detail;let o;try{o=hu(e)}catch(e){return}if(!o||!o.imageIds||0===o.imageIds.length)return;const i=o.imageIds.indexOf(n.imageId);if(i<0)return;const a=su(e);a&&a.data&&a.data.length&&a.indicesToRequest.push(i)}}const gu=e=>{const t=new Set(e.imageIds);return e=>e.type!==lu||!t.has(e.additionalDetails.imageId)};let vu,mu={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function pu(e){var t,n;const o=su(e);if(!o)return;const i=o||{},a=hu(e);if(null==a||null===(t=a.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:r}=a;if(i.enabled&&(i.enabled=null===(n=i.indicesToRequest)||void 0===n?void 0:n.length),!1===i.enabled)return;if(o.indicesToRequest.sort(((e,t)=>e-t)),i.indicesToRequest.slice().forEach((function(e){const t=a.imageIds[e];t&&(Math.abs(r-e)<6?ne.cache.getImageLoadObject(t):ne.cache.isLoaded(t))&&function(e){const t=i.indicesToRequest.indexOf(e);t>-1&&i.indicesToRequest.splice(t,1)}(e)})),!i.indicesToRequest.length)return;mu.preserveExistingPool||ne.imageLoadPoolManager.clearRequestStack(lu);const s=function(e,t){let n=0,o=e.length-1;return e.forEach(((e,i)=>{e<t?n=Math.max(i,n):e>t&&(o=Math.min(i,o))})),{low:n,high:o}}(i.indicesToRequest,a.currentImageIdIndex);let l,c,d=s.low,h=s.high;const u=[];for(;d>=0||h<i.indicesToRequest.length;){const e=a.currentImageIdIndex,t=!(e-i.indicesToRequest[d]>mu.maxImagesToPrefetch)&&d>=0,n=!(i.indicesToRequest[h]-e>mu.maxImagesToPrefetch)&&h<i.indicesToRequest.length;if(!n&&!t)break;t&&(c=i.indicesToRequest[d--],l=a.imageIds[c],u.push(l)),n&&(c=i.indicesToRequest[h++],l=a.imageIds[c],u.push(l))}const g=(e,t)=>ne.imageLoader.loadAndCacheImage(e,t),{useNorm16Texture:v}=(0,ne.getConfiguration)().rendering;u.forEach((e=>{const t={targetBuffer:{type:v?void 0:"Float32Array"},preScale:{enabled:!0},requestType:lu};ne.imageLoadPoolManager.addRequest(g.bind(null,e,t),lu,{imageId:e},cu)}))}function fu(e){clearTimeout(vu),vu=setTimeout((function(){const t=e.target;try{pu(t)}catch(e){return}}),10)}const Iu={enable:function(e){const t=hu(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:du(0,t.imageIds.length-1),enabled:!0,direction:1},o=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(o,1),ru(e,n),pu(e),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu),e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu);const i=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,i),ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,i)},disable:function(e){clearTimeout(vu),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,fu);const t=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=su(e);n&&n.indicesToRequest.length&&(n.enabled=!1,ne.imageLoadPoolManager.clearRequestStack(lu))},getConfiguration:function(){return mu},setConfiguration:function(e){mu=e}};let wu,Eu={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function Cu(e){var t,n;const o=hu(e);if(null==o||null===(t=o.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const i=su(e);if(!i)return;const a=i||{};if(a.enabled&&(a.enabled=null===(n=a.indicesToRequest)||void 0===n?void 0:n.length),!1===a.enabled)return;function r(e){const t=a.indicesToRequest.indexOf(e);t>-1&&a.indicesToRequest.splice(t,1)}const s=a.indicesToRequest.slice(),{currentImageIdIndex:l}=o;if(s.forEach((e=>{const t=o.imageIds[e];t&&(Math.abs(l-e)<6?ne.cache.getImageLoadObject(t):ne.cache.isLoaded(t))&&r(e)})),!a.indicesToRequest.length)return;Eu.preserveExistingPool||ne.imageLoadPoolManager.filterRequests(gu(o));const c=(t,n)=>ne.imageLoader.loadAndCacheImage(t,n).then((()=>function(t){var n;r(o.imageIds.indexOf(t));const i=ne.cache.getCachedImageBasedOnImageURI(t),{stats:s}=a,l=(null==i||null===(n=i.image)||void 0===n?void 0:n.decodeTimeInMS)||0;if(l){var c;s.imageIds.set(t,l),s.decodeTimeInMS+=l;const e=(null==i||null===(c=i.image)||void 0===c?void 0:c.loadTimeInMS)||0;s.loadTimeInMS+=e}if(!a.indicesToRequest.length&&null!=i&&i.sizeInBytes){const{sizeInBytes:t}=i,n=ne.cache.getMaxCacheSize()/4/t;if(a.cacheFill){if(s.imageIds.size){s.fillTime=Date.now()-s.start;const{size:e}=s.imageIds;s.fillSize=e,console.log("Done cache fill",s.fillTime,"ms",e,"items","average total time",zu(s.fillTime/e),"ms","average load",zu(s.loadTimeInMS/e),"ms","average decode",zu(s.decodeTimeInMS/e),"ms")}}else s.initialTime=Date.now()-s.start,s.initialSize=s.imageIds.size,bu(e,n),Cu(e)}}(t))),{useNorm16Texture:d}=(0,ne.getConfiguration)().rendering;s.forEach((e=>{const t=o.imageIds[e],n={targetBuffer:{type:d?void 0:"Float32Array"},preScale:{enabled:!0},requestType:lu};ne.imageLoadPoolManager.addRequest(c.bind(null,t,n),lu,{imageId:t},cu)}))}function _u(e){clearTimeout(wu),wu=setTimeout((function(){const t=e.target;try{bu(t),Cu(t)}catch(e){return}}),5)}const bu=(e,t)=>{const n=hu(e);if(!n||!n.imageIds||0===n.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:o}=n;let{maxAfter:i=2,minBefore:a=2}=Eu;const{directionExtraImages:r=10}=Eu,s=su(e)||{indicesToRequest:[],currentImageIdIndex:o,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=o-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=o,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>i||!l)if(s.stackCount=0,t){const e=o/n.imageIds.length;a=Math.ceil(t*e),i=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,i=0):(i+=s.stackCount,a=0);const c=Math.max(0,o-a),d=Math.min(n.imageIds.length-1,o+i),h=[];for(let e=o+1;e<=d;e++)h.push(e);for(let e=o-1;e>=c;e--)h.push(e);s.indicesToRequest=h,ru(e,s)},Du={enable:e=>{const t=hu(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");bu(e),Cu(e),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u),e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u);const n=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),ne.eventTarget.addEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(wu),e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,_u);const t=uu(e);ne.eventTarget.removeEventListener(ne.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=su(e);n&&n.data.length&&(n.enabled=!1)},getConfiguration:function(){return Eu},setConfiguration:function(e){Eu=e}};function Tu(e,t){if(!(e instanceof ne.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),o=[0,0,0];return aa.vec3.sub(o,t,n),function(e,t){const n=e.getCamera(),o=n.viewPlaneNormal,i=aa.vec3.dot(t,o),a=aa.vec3.fromValues(o[0],o[1],o[2]);if(aa.vec3.scale(a,a,i),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],o=[0,0,0];aa.vec3.add(t,n.focalPoint,a),aa.vec3.add(o,n.position,a),e.setCamera({focalPoint:t,position:o}),e.render()}}(e,o),!0}const Su=function(e,t){const n=t.frameNumbers||[...Array(e.numTimePoints).keys()];if(!t.maskVolumeId&&!t.imageCoordinate)throw new Error("You should provide either maskVolumeId or imageCoordinate");if(t.maskVolumeId&&t.imageCoordinate)throw new Error("You can only use one of maskVolumeId or imageCoordinate");if(t.maskVolumeId){const o=ne.cache.getVolume(t.maskVolumeId),[i,a]=function(e,t,n){const{imageData:o}=n,i=n.getScalarData(),a=i.length,r=[];r.length=a;const s=[],l=n.dimensions;let c=0;for(let e=0,t=i.length;e<t;e++)0!==i[e]&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[c++]=e);r.length=c;const d=t.getScalarDataArrays(),h=[];if(d[0].length===a&&JSON.stringify(t.spacing)===JSON.stringify(n.spacing)){for(let t=0;t<r.length;t++){const n=[];e.forEach((e=>{const o=d[e];n.push(o[r[t]])})),h.push(n)}return[h,s]}return yr(o,(()=>!0),(n=>{let{pointLPS:o,value:i,pointIJK:a}=n;if(0===i)return;const r=Vc(t.imageData,t.dimensions,t.spacing,o);let l=0;const c=new Map;e.forEach((e=>c.set(e,0)));yr(t.imageData,(()=>!0),(t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const o=d[t][n],i=e[t];c.set(i,c.get(i)+o)}l++}),r);const u=[];c.forEach((e=>{u.push(e/l)})),s.push(a),h.push(u)})),[h,s]}(n,e,o);return[i,a]}if(t.imageCoordinate){const o=function(e,t,n){const{dimensions:o,imageData:i}=n,a=i.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!ne.utilities.indexWithinDimensions(a,o))throw new Error("outside bounds");const r=o[0],s=o[0]*o[1],l=n.getScalarDataArrays(),c=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];c.push(t[n])})),c}(n,t.imageCoordinate,e);return o}},yu=function(e,t,n){const o=n||[...Array(e.numTimePoints).keys()],i=o.length;if(o.length<=1)throw new Error("Please provide two or more time points");const a=e.getScalarDataArrays(),r=a[0].length,s=new Float32Array(r);if(t===ne.Enums.DynamicOperatorType.SUM){for(let e=0;e<i;e++){const t=a[o[e]];for(let e=0;e<r;e++)s[e]+=t[e]}return s}if(t===ne.Enums.DynamicOperatorType.SUBTRACT){if(o.length>2)throw new Error("Please provide only 2 time points for subtraction.");for(let e=0;e<r;e++)s[e]+=a[o[0]][e]-a[o[1]][e];return s}if(t===ne.Enums.DynamicOperatorType.AVERAGE){for(let e=0;e<i;e++){const t=a[o[e]];for(let e=0;e<r;e++)s[e]+=t[e]}for(let e=0;e<r;e++)s[e]=s[e]/i;return s}};function Mu(e,t){const n=3*t;if(n<e.length)return aa.vec3.fromValues(e[n],e[n+1],e[n+2])}function xu(e){const t=e.getLines().getData();let n=0;const o=new Map;for(;n<t.length;){const e=t[n++],i=[];for(let o=0;o<e;o++)i.push(t[n+o]);o.set(i[0],i),n+=e}const i=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(o);for(;-1!==r;){const e=[r];for(;o.has(r);){const t=o.get(r)[1];o.has(t)&&e.push(t),o.delete(r),r=t}i.push(e),r=a(o)}return i.length?i:void 0}function Ou(e){const t=xu(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Mu(n,e)))))}let Pu=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const Au=e=>e&&e.upper>e.lower,Ru=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,Nu=e=>!!e&&e.width>0&&e.height>0,Lu=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:ku}=ne.utilities;class Uu{constructor(e){re(this,"_canvas",void 0),re(this,"_imageRange",void 0),re(this,"_voiRange",void 0),re(this,"_colormap",void 0),re(this,"_showFullImageRange",void 0),Uu.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:o={lower:0,upper:1},voiRange:i={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=o,this._voiRange=i,this._showFullImageRange=r,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:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Nu(e)&&!Lu(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Au(e)&&!Ru(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Au(e)&&!Ru(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:t}=e;null==t||t.removeChild(e)}static validateProps(e){const{size:t,imageRange:n,voiRange:o}=e;if(t&&!Nu(t))throw new Error('Invalid "size"');if(n&&!Au(n))throw new Error('Invalid "imageRange"');if(o&&!Au(o))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:o}=t;e.width=n,e.height=o,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(o,"px")})}_createRootElement(e){const t=document.createElement("canvas");return Object.assign(t.style,{position:"absolute",top:"0",left:"0",pointerEvents:"none",boxSizing:"border-box"}),this._setCanvasSize(t,e),t}render(){if(!this._canvas.isConnected)return;const{_colormap:e}=this,{RGBPoints:t}=e,n=t.length/4,o=e=>{const o=4*e;if(!(e<0||e>=n))return{index:e,position:t[o],color:[t[o+1],t[o+2],t[o+3]]}},{width:i,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=i>a,l=s?i:a,{_voiRange:c}=this,d=this._showFullImageRange?this._imageRange:{...c},{windowWidth:h}=ne.utilities.windowLevel.toWindowLevel(c.lower,c.upper);let u,g=o(0);const v=(d.upper-d.lower)/(l-1);let m=d.lower;for(let e=0;e<l;e++){const t=(m-c.lower)/h;if(g)for(let e=g.index;e<n&&!(t<=g.position);e++)u=g,g=o(e+1);let l;if(u)if(g){const e=(t-u.position)/(g.position-u.position);p=u.color,f=g.color,I=e,l=[p[0]*(1-I)+f[0]*I,p[1]*(1-I)+f[1]*I,p[2]*(1-I)+f[2]*I]}else l=[...u.color];else l=[...g.color];const d=l.map((e=>ku(Math.round(255*e),0,255)));r.fillStyle="rgb(".concat(d[0],", ").concat(d[1],", ").concat(d[2],")"),s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,i,1),m+=v}var p,f,I}}const Vu={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 Wu{constructor(e){var t,n,o,i,a,r;re(this,"_canvas",void 0),re(this,"_imageRange",void 0),re(this,"_voiRange",void 0),re(this,"_color",void 0),re(this,"_tickSize",void 0),re(this,"_tickWidth",void 0),re(this,"_labelMargin",void 0),re(this,"_maxNumTicks",void 0),re(this,"_rangeTextPosition",void 0),re(this,"_showFullPixelValueRange",void 0),re(this,"_font",void 0),Wu.validateProps(e);const{top:s=0,left:l=0,size:c={width:20,height:100},imageRange:d={lower:0,upper:1},voiRange:h={lower:0,upper:1},ticks:u,container:g,showFullPixelValueRange:v=!1}=e,{style:m,position:p}=null!=u?u:{};this._imageRange=d,this._voiRange=h,this._font=null!==(t=null==m?void 0:m.font)&&void 0!==t?t:Vu.FONT,this._color=null!==(n=null==m?void 0:m.color)&&void 0!==n?n:Vu.COLOR,this._tickSize=null!==(o=null==m?void 0:m.tickSize)&&void 0!==o?o:Vu.TICK_SIZE,this._tickWidth=null!==(i=null==m?void 0:m.tickWidth)&&void 0!==i?i:Vu.TICK_WIDTH,this._labelMargin=null!==(a=null==m?void 0:m.labelMargin)&&void 0!==a?a:Vu.TICK_LABEL_MARGIN,this._maxNumTicks=null!==(r=null==m?void 0:m.maxNumTicks)&&void 0!==r?r:Vu.MAX_NUM_TICKS,this._rangeTextPosition=null!=p?p:Pu.Right,this._showFullPixelValueRange=v,this._canvas=this._createCanvasElement(c,s,l),g&&this.appendTo(g)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;Nu(e)&&!Lu(t,e)&&(this._setCanvasSize(t,e),this.render())}get top(){return Number.parseInt(this._canvas.style.top)}set top(e){const{_canvas:t}=this;e!==this.top&&(t.style.top="".concat(e,"px"),this.render())}get left(){return Number.parseInt(this._canvas.style.left)}set left(e){const{_canvas:t}=this;e!==this.left&&(t.style.left="".concat(e,"px"),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){Au(e)&&!Ru(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){Au(e)&&!Ru(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"block"===this._canvas.style.display}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:t,imageRange:n,voiRange:o}=e;if(t&&!Nu(t))throw new Error('Invalid "size"');if(n&&!Au(n))throw new Error('Invalid "imageRange"');if(o&&!Au(o))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:o}=t;e.width=n,e.height=o,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(o,"px")})}_createCanvasElement(e,t,n){const o=document.createElement("canvas");return Object.assign(o.style,{display:"none",position:"absolute",boxSizing:"border-box",top:"".concat(t,"px"),left:"".concat(n,"px")}),this._setCanvasSize(o,e),o}_getTicks(e){const{lower:t,upper:n}=e,o=(n-t)/(this._maxNumTicks-1),i=Math.pow(10,-Math.floor(Math.log10(Math.abs(o)))),a=o*i,r=Vu.TICKS_STEPS.find((e=>e>=a))/i,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,c=Math.round((s-l)/r)+1,d=[];for(let e=0;e<c;e++)d.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:d}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:o}=this._canvas;return{labelPoint:[o-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[o-this._tickSize,t],end:[o,t]}}}_getRightTickInfo(e){let{position:t}=e;return{labelPoint:[this._tickSize+this._labelMargin,t],tickPoints:{start:[0,t],end:[this._tickSize,t]}}}_getTopTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}_getBottomTickInfo(e){let{position:t,labelMeasure:n}=e;throw new Error("Not implemented")}render(){const{_canvas:e}=this;if(!e.isConnected||!this.visible)return;const{width:t,height:n}=e,o=t>=n,i=o?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:c}=this._getTicks(s);a.clearRect(0,0,t,n),a.font=this._font,a.textBaseline="middle",a.fillStyle=this._color,a.strokeStyle=this._color,a.lineWidth=this.tickWidth,c.forEach((e=>{let t=Math.round(i*((e-s.lower)/l));if(o||(t=n-t),t<0||t>i)return;const r=e.toString(),c=a.measureText(r);let d;d=o?this._rangeTextPosition===Pu.Top?this._getTopTickInfo({position:t,labelMeasure:c}):this._getBottomTickInfo({position:t,labelMeasure:c}):this._rangeTextPosition===Pu.Left?this._getLeftTickInfo({position:t,labelMeasure:c}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:u}=d,{start:g,end:v}=u;return a.beginPath(),a.moveTo(g[0],g[1]),a.lineTo(v[0],v[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class Hu{constructor(e){let{id:t,container:n}=e;re(this,"_id",void 0),re(this,"_rootElement",void 0),re(this,"_containerSize",void 0),re(this,"_containerResizeObserver",void 0),re(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:o,contentBoxSize:i}=e[0];o?(t=o.width,n=o.height):null!=i&&i.length&&(t=i[0].inlineSize,n=i[0].blockSize),this._containerSize={width:t,height:n},this.onContainerResize()})),this._id=t,this._containerSize={width:0,height:0},this._rootElement=this.createRootElement(t),this._containerResizeObserver=new ResizeObserver(this._containerResizeCallback),n&&this.appendTo(n)}get id(){return this._id}get rootElement(){return this._rootElement}appendTo(e){const{_rootElement:t,_containerResizeObserver:n}=this,{parentElement:o}=t;e&&e!==o&&(o&&n.unobserve(o),e.appendChild(t),n.observe(e))}destroy(){const{_rootElement:e,_containerResizeObserver:t}=this,{parentElement:n}=e;null==n||n.removeChild(e),t.disconnect()}get containerSize(){return{...this._containerSize}}createRootElement(e){const t=document.createElement("div");return t.id=e,t.classList.add("widget"),Object.assign(t.style,{width:"100%",height:"100%"}),t}onContainerResize(){}}const Bu={MULTIPLIER:1,RANGE_TEXT_POSITION:Pu.Right,TICKS_BAR_SIZE:50};class Fu extends Hu{constructor(e){var t,n;super(e),re(this,"_colormaps",void 0),re(this,"_activeColormapName",void 0),re(this,"_eventListenersManager",void 0),re(this,"_canvas",void 0),re(this,"_ticksBar",void 0),re(this,"_rangeTextPosition",void 0),re(this,"_isMouseOver",!1),re(this,"_isInteracting",!1),re(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),re(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),re(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),re(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),o=this._getPointsFromMouseEvent(e),{points:i,voiRange:a}=t,r=aa.vec2.sub(aa.vec2.create(),o.local,i.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:c,upper:d}=a;let{windowWidth:h,windowCenter:u}=ne.utilities.windowLevel.toWindowLevel(c,d);h=Math.max(h+s,1),u+=l;const g=ne.utilities.windowLevel.toLowHighRange(h,u);this.voiRange=g,e.stopPropagation(),e.preventDefault()})),re(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new ne.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=Fu.getColormapsMap(e),this._activeColormapName=Fu.getInitialColormapName(e),this._canvas=this._createCanvas(e),this._ticksBar=this._createTicksBar(e),this._rangeTextPosition=null!==(t=null===(n=e.ticks)||void 0===n?void 0:n.position)&&void 0!==t?t:Bu.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 t=this._colormaps.get(e);t?(this._activeColormapName=e,this._canvas.colormap=t):console.warn("Invalid colormap name (".concat(e,")"))}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:t}=this._canvas;Au(e)&&!Ru(e,t)&&(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[Bu.MULTIPLIER,Bu.MULTIPLIER]}onVoiChange(e){}showTicks(){this.updateTicksBar(),this._ticksBar.visible=!0}hideTicks(){this._isInteracting||this._isMouseOver||(this._ticksBar.visible=!1)}static getColormapsMap(e){const{colormaps:t}=e;return t.reduce(((e,t)=>e.set(t.Name,t)),new Map)}static getInitialColormapName(e){const{activeColormapName:t,colormaps:n}=e;return t&&n.some((e=>e.Name===t))?t:n[0].Name}_createCanvas(e){const{imageRange:t,voiRange:n,showFullPixelValueRange:o}=e,i=this._colormaps.get(this._activeColormapName);return new Uu({colormap:i,imageRange:t,voiRange:n,showFullPixelValueRange:o})}_createTicksBar(e){const t=e.ticks;return new Wu({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],o=[e.pageX,e.pageY],i=t.getBoundingClientRect();return{client:n,page:o,local:[o[0]-i.left-window.pageXOffset,o[1]-i.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:o}=this,i=e>=t,a=i?e:Bu.TICKS_BAR_SIZE,r=i?Bu.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[Pu.Top,Pu.Bottom]:[Pu.Left,Pu.Right]).includes(n)}(e,t,o))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},i?(l=0,s=o===Pu.Top?-r:t):(s=0,l=o===Pu.Left?-a:e),n.top=s,n.left=l}_addRootElementEventListeners(){const{_eventListenersManager:e}=this,{rootElement:t}=this;e.addEventListener(t,"mouseover",this._mouseOverCallback),e.addEventListener(t,"mouseout",this._mouseOutCallback),e.addEventListener(t,"mousedown",this._mouseDownCallback)}_addVOIEventListeners(e){const{_eventListenersManager:t}=this,n={points:this._getPointsFromMouseEvent(e),voiRange:{...this._canvas.voiRange}};this._removeVOIEventListeners(),t.addEventListener(document,"voi.mouseup",this._mouseUpCallback),t.addEventListener(document,"voi.mousemove",(e=>this._mouseDragCallback(e,n)))}_removeVOIEventListeners(){const{_eventListenersManager:e}=this;e.removeEventListener(document,"voi.mouseup"),e.removeEventListener(document,"voi.mousemove")}}const{Events:Gu}=ne.Enums,qu={lower:-1e3,upper:1e3};class ju extends Fu{constructor(e){const{element:t,volumeId:n}=e,o=ju._getImageRange(t,n),i=ju._getVOIRange(t,n);super({...e,imageRange:o,voiRange:i}),re(this,"_element",void 0),re(this,"_volumeId",void 0),re(this,"_hideTicksTime",void 0),re(this,"_hideTicksTimeoutId",void 0),re(this,"autoHideTicks",(()=>{if(this._hideTicksTimeoutId)return;const e=this._hideTicksTime-Date.now();e<=0?this.hideTicks():this._hideTicksTimeoutId=window.setTimeout((()=>{this._hideTicksTimeoutId=0,this.autoHideTicks()}),e)})),re(this,"_stackNewImageCallback",(()=>{this.imageRange=ju._getImageRange(this._element)})),re(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail.imageVolume;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=ju._getImageRange(n,t)})),re(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:o}=e.detail,{viewport:i}=this.enabledElement;t===i.id&&n===this._volumeId&&(this.voiRange=o,this.showAndAutoHideTicks())})),re(this,"_viewportColormapModifiedCallback",(e=>{const{viewportId:t,colormap:n,volumeId:o}=e.detail,{viewport:i}=this.enabledElement;t===i.id&&o===this._volumeId&&(this.activeColormapName=n.name)})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,ne.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t,n){if("PT"===ne.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:o}=e.element,i=5/Math.max(n,o),a=vd(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:i;return a?[s,i]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof ne.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof ne.VolumeViewport){const{_volumeId:n}=this,o=ne.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),o.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=t?o.getActor(t):o.getDefaultActor();if(!i)return qu;const a=i.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?qu:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,i=t?o.getActor(t):o.getDefaultActor();if(!i||!ne.utilities.isImageActor(i))return qu;const a=i.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?qu:{lower:a[0],upper:a[1]}}showAndAutoHideTicks(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;this._hideTicksTime=Date.now()+e,this.showTicks(),this.autoHideTicks()}_addCornerstoneEventListener(){const{_element:e}=this;ne.eventTarget.addEventListener(Gu.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(Gu.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(Gu.VOI_MODIFIED,this._viewportVOIModifiedCallback),e.addEventListener(Gu.COLORMAP_MODIFIED,this._viewportColormapModifiedCallback)}}const zu=ne.utilities.roundNumber;function Ku(e,t){var n,o;return(null==t||!t.autoGenerated)&&(!0===(null==e||null===(n=e.smoothing)||void 0===n?void 0:n.smoothOnAdd)||!0===(null==e||null===(o=e.smoothing)||void 0===o?void 0:o.smoothOnEdit))}function Yu(e,t,n){return(e+t+n)%t}function Xu(e,t,n,o){const[,i,a]=e,[,r,s]=t,l=a.length,c=s.length;let d=e[0],h=t[0];if(!(a[d]&&s[h]&&a[i]&&s[r]))return[void 0,void 0];for(;d!==i&&h!==r;){if(n(s[h],a[d]))return[d,h];d=Yu(d,l,o),h=Yu(h,c,o)}return[void 0,void 0]}function Ju(e,t,n){const{interpolation:o,smoothing:i}=e,a=t;if(o){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:o,smoothOnAdd:a=!1,smoothOnEdit:r=!1}=i,s=n?o:e;if(n?r:a){const[e,o]=n?function(e,t){const[n,o]=function(e,t){for(let n=0;n<e.length;n++)for(let o=0;o<t.length;o++)if(0===dh(e[n],t[o]))return[n,o]}(e,t)||[],i=(e,t)=>!1===function(e,t){return dh(e,t)<.001}(e,t),[a,r]=Xu([Yu(n,e.length,1),n,e],[Yu(o,t.length,1),o,t],i,1),[s]=Xu([Yu(a,e.length,-1),a,e],[Yu(r,t.length,-1),r,t],i,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[o]?$h(t,e,o,s):t}}return a}var Zu=function(e){return e[e.Primary=1]="Primary",e[e.Secondary=2]="Secondary",e[e.Primary_And_Secondary=3]="Primary_And_Secondary",e[e.Auxiliary=4]="Auxiliary",e[e.Primary_And_Auxiliary=5]="Primary_And_Auxiliary",e[e.Secondary_And_Auxiliary=6]="Secondary_And_Auxiliary",e[e.Primary_And_Secondary_And_Auxiliary=7]="Primary_And_Secondary_And_Auxiliary",e[e.Fourth_Button=8]="Fourth_Button",e[e.Fifth_Button=16]="Fifth_Button",e}(Zu||{}),$u=function(e){return e[e.Shift=16]="Shift",e[e.Ctrl=17]="Ctrl",e[e.Alt=18]="Alt",e[e.Meta=91]="Meta",e[e.ShiftCtrl=1617]="ShiftCtrl",e[e.ShiftAlt=1618]="ShiftAlt",e[e.ShiftMeta=1691]="ShiftMeta",e[e.CtrlAlt=1718]="CtrlAlt",e[e.CtrlMeta=1791]="CtrlMeta",e[e.AltMeta=1891]="AltMeta",e}($u||{});const Qu=e=>e.shiftKey?e.ctrlKey?$u.ShiftCtrl:e.altKey?$u.ShiftAlt:e.metaKey?$u.ShiftMeta:$u.Shift:e.ctrlKey?e.altKey?$u.CtrlAlt:e.metaKey?$u.CtrlMeta:$u.Ctrl:e.altKey?e.metaKey&&$u.AltMeta||$u.Alt:e.metaKey?$u.Meta:void 0;function eg(e,t){const n=e[0],o=e[e.length-1],i=aa.vec2.create();aa.vec2.set(i,o[0]-n[0],o[1]-n[1]),aa.vec2.normalize(i,i);const a=aa.vec2.create(),r=aa.vec2.create();aa.vec2.set(a,-i[1],i[0]),aa.vec2.set(r,i[1],-i[0]);const s=[(n[0]+o[0])/2,(n[1]+o[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],o=aa.vec2.dist(n,s);o>l.dist&&(l.dist=o,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}const{addCanvasPointsToArray:tg,pointsAreWithinCloseContourProximity:ng,getFirstLineSegmentIntersectionIndexes:og,getSubPixelSpacingAndXYDirections:ig}=D;function ag(e,t,n){this.isDrawing=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a),{viewport:l}=s,c=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,{spacing:d,xDir:h,yDir:u}=ig(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0,contourHoleProcessingEnabled:c},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),Dc(a)}function rg(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),bc(e)}function sg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{annotation:c,viewportIdsToRender:d,xDir:h,yDir:u,spacing:g,movingTextBox:v}=this.commonData,{polylineIndex:m,canvasPoints:p}=this.drawData,f=p[p.length-1],I=l.canvasToWorld(f),w=aa.vec3.create();aa.vec3.subtract(w,i,I);const E=Math.abs(aa.vec3.dot(w,h)),C=Math.abs(aa.vec3.dot(w,u));if(!(E<=g[0]&&C<=g[1])){if(v){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.data.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=tg(o,p,a,this.commonData);this.drawData.polylineIndex=m+e}}Ua(s,d)}}function lg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,i=n[0],a=n[n.length-1],r=e.detail,{element:s}=r;t&&!ng(i,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(s,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(s,{contourHoleProcessingEnabled:o})}function cg(e,t){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:o,minPointsToSave:i}=null!=t?t:{};if(i&&n.length<i)return!1;if(this.haltDrawing(e,n))return!1;const{annotation:a,viewportIdsToRender:r}=this.commonData,s=(0,ne.getEnabledElement)(e),{viewport:l,renderingEngine:c}=s;tg(e,n,n[0],this.commonData),n.pop();const d=Ku(this.configuration,a)?Ju(this.configuration,n):n;this.updateContourPolyline(a,{points:d,closed:!0,targetWindingDirection:rl.Clockwise},l);const{textBox:h}=a.data.handles;return null!=h&&h.hasMoved||tt(a,o),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(c,r),this.deactivateDraw(e),!0}function dg(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],o=e.slice(0,-1).slice(1),i=og(o,n[0],n[1],!1);if(i){const t=i[1];this.drawData.canvasPoints=1===t?e.splice(1):e.splice(0,t)}}function hg(e,t){const{canvasPoints:n}=this.drawData,{contourHoleProcessingEnabled:o}=null!=t?t:{};if(this.haltDrawing(e,n))return!1;const{annotation:i,viewportIdsToRender:a}=this.commonData,r=(0,ne.getEnabledElement)(e),{viewport:s,renderingEngine:l}=r,c=Ku(this.configuration,i)?Ju(this.configuration,n):n;this.updateContourPolyline(i,{points:c,closed:!1},s);const{textBox:d}=i.data.handles,h=i.data.contour.polyline;return i.data.handles.points=[h[0],h[h.length-1]],i.data.isOpenUShapeContour&&(i.data.openUShapeContourVectorToPeak=eg(n,s)),d.hasMoved||tt(i,o),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(l,a),this.deactivateDraw(e),!0}function ug(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=og(s,i,a,!1);if(void 0!==l)return l[0]}function gg(e,t){const n=e.detail,{element:o}=n,{canvasPoints:i,contourHoleProcessingEnabled:a}=this.drawData,{annotation:r,viewportIdsToRender:s}=this.commonData;tg(o,i,i[t],this.commonData),i.pop();const l=uh(i.slice(t));if(ne.utilities.isEqual(l,0))return void i.splice(t+1);i.splice(0,t);const c={contourHoleProcessingEnabled:a,minPointsToSave:3};this.completeDrawClosedContour(o,c)&&this.activateClosedContourEdit(e,r,s)}function vg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n,contourHoleProcessingEnabled:o}=this.drawData,i=n[0],a=n[n.length-1];t&&!ng(i,a,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e,{contourHoleProcessingEnabled:o}):this.completeDrawClosedContour(e,{contourHoleProcessingEnabled:o})}function mg(e,t){const{subPixelResolution:n}=this.configuration;if(function(e,t){const n=Math.max(3*t,3);return e.length<n}(t,n)){const{annotation:t,viewportIdsToRender:n}=this.commonData,o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o;return mt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,Ua(i,n),this.deactivateDraw(e),!0}return!1}const pg=function(e){e.activateDraw=ag.bind(e),e.deactivateDraw=rg.bind(e),e.applyCreateOnCross=gg.bind(e),e.findCrossingIndexDuringCreate=ug.bind(e),e.completeDrawOpenContour=hg.bind(e),e.removeCrossedLinesOnCompleteDraw=dg.bind(e),e.mouseDragDrawCallback=sg.bind(e),e.mouseUpDrawCallback=lg.bind(e),e.completeDrawClosedContour=cg.bind(e),e.cancelDrawing=vg.bind(e),e.haltDrawing=mg.bind(e)},{addCanvasPointsToArray:fg,getFirstLineSegmentIntersectionIndexes:Ig}=D;function wg(e,t){const n=e.detail,{element:o,currentPoints:i,lastPoints:a}=n,r=i.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:c}=this.editData,d=Ig(c,r,s,t);if(d)this.editData.startCrossingIndex=d[0],this.removePointsUpUntilFirstCrossing(t);else if(c.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<c.length;n++){const o=c[n],i=aa.vec2.distance(o,e);t.push({distance:i,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],o=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=o}else{const e=aa.vec2.create();aa.vec2.subtract(e,l[1],l[0]),aa.vec2.normalize(e,e);const n=6,i=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=Ig(c,i,l[0],t);if(a){const e=[i];fg(o,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Eg(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let o=0;for(let i=0;i<t.length-1;i++){const a=[t[i],t[i+1]];if(o++,Ig(n,a[0],a[1],e))break}t.splice(0,o),this.editData.editIndex=t.length-1}function Cg(e,t){const n=e.detail,{currentPoints:o,lastPoints:i}=n,a=o.canvas,r=i.canvas,{prevCanvasPoints:s}=this.editData;return!!Ig(s,a,r,t)}function _g(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let o=n.length-1;o>0;o--){const i=[n[o],n[o-1]],a=!!Ig(t,i[0],i[1],e);if(n.pop(),a)break}}function bg(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const o=e[e.length-1],i=[];for(let e=0;e<t.length;e++){const n=t[e],a=aa.vec2.distance(n,o);i.push({distance:a,index:e})}i.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<i.length;n++){const{index:o}=i[n],r=t[o],s=e[e.length-1];if(!Ig(a,r,s,!1))return o}return-1}function Dg(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=Ig(s,i,a,!1);if(!l)return;const c=l[0],d=r.length-c;for(let e=0;e<d;e++)r.pop()}const Tg=function(e){e.checkForFirstCrossing=wg.bind(e),e.removePointsUpUntilFirstCrossing=Eg.bind(e),e.checkForSecondCrossing=Cg.bind(e),e.findSnapIndex=bg.bind(e),e.removePointsAfterSecondCrossing=_g.bind(e),e.checkAndRemoveCrossesOnEditLine=Dg.bind(e)},{getSubPixelSpacingAndXYDirections:Sg,addCanvasPointsToArray:yg,getArea:Mg}=D;function xg(e,t,n){this.isEditingClosed=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a);if(!s)return;const{viewport:l}=s,c=t.data.contour.polyline.map(l.worldToCanvas),{spacing:d,xDir:h,yDir:u}=Sg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:c,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpClosedContourEditCallback),Dc(a)}function Og(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpClosedContourEditCallback),bc(e)}function Pg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:c,xDir:d,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),I=aa.vec3.create();aa.vec3.subtract(I,i,f);const w=Math.abs(aa.vec3.dot(I,d)),E=Math.abs(aa.vec3.dot(I,h));if(w<=u[0]&&E<=u[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+yg(o,v,a,this.commonData);this.editData.editIndex=C,void 0===m&&v.length>1&&this.checkForFirstCrossing(e,!0),this.editData.snapIndex=this.findSnapIndex(),-1!==this.editData.snapIndex?(this.editData.fusedCanvasPoints=this.fuseEditPointsWithClosedContour(e),void 0!==m&&this.checkForSecondCrossing(e,!0)&&(this.removePointsAfterSecondCrossing(!0),this.finishEditAndStartNewEdit(e)),Ua(s,c)):this.finishEditAndStartNewEdit(e)}function Ag(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i,renderingEngine:a}=o,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:c}=this.editData;us(r,{points:l,closed:!0,targetWindingDirection:rl.Clockwise},i),r.autoGenerated&&(r.autoGenerated=!1),Qe(r,n);const d=c.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[d],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},Ua(a,s)}function Rg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o,snapIndex:i}=this.editData;if(void 0===o||void 0===i)return;const a=e.detail,{element:r}=a,s=[...n];let l,c;yg(r,s,t[i],this.commonData),s.length>n.length&&s.pop(),o>i?(l=i,c=o):(l=o,c=i);const d=aa.vec2.distance(t[l],s[0]),h=aa.vec2.distance(t[l],s[s.length-1]),u=aa.vec2.distance(t[c],s[0]),g=aa.vec2.distance(t[c],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}let m=d+g,p=h+u;if(m<p)for(let e=0;e<s.length;e++){const t=s[e];v.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];v.push([t[0],t[1]])}for(let e=c;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}const f=[];for(let e=l;e<c;e++){const n=t[e];f.push([n[0],n[1]])}if(m=u+h,p=g+d,m<p)for(let e=0;e<s.length;e++){const t=s[e];f.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];f.push([t[0],t[1]])}return Mg(v)>Mg(f)?v:f}function Ng(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function Lg(e){const t=(0,ne.getEnabledElement)(e),{viewport:n,renderingEngine:o}=t,{annotation:i,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;r&&(us(i,{points:Ku(this.configuration,i)?Ju(this.configuration,r,s):r,closed:!0,targetWindingDirection:rl.Clockwise},n),i.autoGenerated&&(i.autoGenerated=!1),Qe(i,e)),this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,Ua(o,a),this.deactivateClosedContourEdit(e)}function kg(e){this.completeClosedContourEdit(e)}const Ug=function(e){e.activateClosedContourEdit=xg.bind(e),e.deactivateClosedContourEdit=Og.bind(e),e.mouseDragClosedContourEditCallback=Pg.bind(e),e.mouseUpClosedContourEditCallback=Ng.bind(e),e.finishEditAndStartNewEdit=Ag.bind(e),e.fuseEditPointsWithClosedContour=Rg.bind(e),e.cancelClosedContourEdit=kg.bind(e),e.completeClosedContourEdit=Lg.bind(e)},{addCanvasPointsToArray:Vg,getSubPixelSpacingAndXYDirections:Wg}=D;function Hg(e,t,n){this.isEditingOpen=!0;const o=e.detail,{currentPoints:i,element:a}=o,r=i.canvas,s=(0,ne.getEnabledElement)(a),{viewport:l}=s,c=t.data.contour.polyline.map(l.worldToCanvas),{spacing:d,xDir:h,yDir:u}=Wg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:c,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:h,yDir:u,movingTextBox:!1},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpOpenContourEditCallback),Dc(a)}function Bg(e){Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(ie.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(ie.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(ie.TOUCH_TAP,this.mouseUpOpenContourEditCallback),bc(e)}function Fg(e){const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:c,xDir:d,yDir:h,spacing:u}=this.commonData,{editIndex:g,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),I=aa.vec3.create();aa.vec3.subtract(I,i,f);const w=Math.abs(aa.vec3.dot(I,d)),E=Math.abs(aa.vec3.dot(I,h));if(w<=u[0]&&E<=u[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const C=g+Vg(o,v,a,this.commonData);this.editData.editIndex=C,void 0===m&&v.length>1&&this.checkForFirstCrossing(e,!1),this.editData.snapIndex=this.findSnapIndex(),this.editData.fusedCanvasPoints=this.fuseEditPointsWithOpenContour(e),void 0!==m&&this.checkForSecondCrossing(e,!1)?(this.removePointsAfterSecondCrossing(!1),this.finishEditOpenOnSecondCrossing(e)):this.checkIfShouldOverwriteAnEnd(e)&&this.openContourEditOverwriteEnd(e),Ua(s,c)}function Gg(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,{annotation:a,viewportIdsToRender:r}=this.commonData;us(a,{points:this.fuseEditPointsForOpenContourEndEdit(),closed:!1},i);const s=a.data.contour.polyline;a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,Qe(a,n),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function qg(e){const t=e.detail,{currentPoints:n,lastPoints:o}=t,i=n.canvas,a=o.canvas,{snapIndex:r,prevCanvasPoints:s,startCrossingIndex:l}=this.editData;if(void 0===l||void 0===r)return!1;if(-1===r)return!0;if(0!==r&&r!==s.length-1)return!1;const c=i,d=a,h=s[r],u=aa.vec2.create(),g=aa.vec2.create();aa.vec2.set(u,c[0]-d[0],c[1]-d[1]),aa.vec2.set(g,c[0]-h[0],c[1]-h[1]);const v=aa.vec2.dot(u,g),m=Math.sqrt(u[0]*u[0]+u[1]*u[1]),p=Math.sqrt(g[0]*g[0]+g[1]*g[1]);return Math.acos(v/(m*p))<Math.PI/2}function jg(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o}=this.editData,i=[];if(0===e)for(let e=t.length-1;e>=o;e--){const n=t[e];i.push([n[0],n[1]])}else for(let e=0;e<o;e++){const n=t[e];i.push([n[0],n[1]])}if(aa.vec2.distance(t[o],n[0])<aa.vec2.distance(t[o],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];i.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];i.push([t[0],t[1]])}return i}function zg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:o,snapIndex:i}=this.editData;if(void 0===o||void 0===i)return;const a=e.detail,{element:r}=a,s=[...n];let l,c;Vg(r,s,t[i],this.commonData),s.length>n.length&&s.pop(),o>i?(l=i,c=o):(l=o,c=i);const d=aa.vec2.distance(t[l],s[0]),h=aa.vec2.distance(t[l],s[s.length-1]),u=aa.vec2.distance(t[c],s[0]),g=aa.vec2.distance(t[c],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}if(d+g<h+u)for(let e=0;e<s.length;e++){const t=s[e];v.push([t[0],t[1]])}else for(let e=s.length-1;e>=0;e--){const t=s[e];v.push([t[0],t[1]])}for(let e=c;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}return v}function Kg(e){const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i,renderingEngine:a}=o,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:c}=this.editData;us(r,{points:l,closed:!1},i);const d=r.data.contour.polyline;r.data.handles.points=[d[0],d[d.length-1]],Qe(r,n);const h=c.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},Ua(a,s)}function Yg(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function Xg(e){const t=(0,ne.getEnabledElement)(e),{viewport:n,renderingEngine:o}=t,{annotation:i,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){us(i,{points:Ku(this.configuration)?Ju(this.configuration,r,s):r,closed:!1},n);const t=i.data.contour.polyline;i.data.handles.points=[t[0],t[t.length-1]],i.data.isOpenUShapeContour&&(i.data.openUShapeContourVectorToPeak=eg(r,n)),Qe(i,e)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,Ua(o,a),this.deactivateOpenContourEdit(e)}function Jg(e){this.completeOpenContourEdit(e)}const Zg=function(e){e.activateOpenContourEdit=Hg.bind(e),e.deactivateOpenContourEdit=Bg.bind(e),e.mouseDragOpenContourEditCallback=Fg.bind(e),e.mouseUpOpenContourEditCallback=Yg.bind(e),e.fuseEditPointsWithOpenContour=zg.bind(e),e.finishEditOpenOnSecondCrossing=Kg.bind(e),e.checkIfShouldOverwriteAnEnd=qg.bind(e),e.fuseEditPointsForOpenContourEndEdit=jg.bind(e),e.openContourEditOverwriteEnd=Gg.bind(e),e.cancelOpenContourEdit=Jg.bind(e),e.completeOpenContourEdit=Xg.bind(e)},{getSubPixelSpacingAndXYDirections:$g}=D;function Qg(e,t,n,o){this.isDrawing=!0;const i=e.detail,{element:a}=i,r=(0,ne.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:c,yDir:d}=$g(s,this.configuration.subPixelResolution),h=t.data.contour.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let u=!1;null!=o&&o.worldPosition&&(u=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:c,yDir:d,movingTextBox:u},Ye.isInteractingWithTool=!0,a.addEventListener(ie.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(ie.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(ie.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(ie.TOUCH_TAP,this.mouseUpDrawCallback),Dc(a)}const ev=function(e){e.activateOpenContourEndEdit=Qg.bind(e)};function tv(e,t,n,o,i){const a=o.length&&o[0].length&&Array.isArray(o[0][0])?o:[o],{color:r="rgb(0, 255, 0)",width:s=10,fillColor:l="none",fillOpacity:c=0,lineWidth:d,lineDash:h,closePath:u=!1}=i,g=d||s,v=hc(t,"path",n),m=e.getSvgNode(v);let p="";for(let e=0,t=a.length;e<t;e++){const t=a[e],n=t.length;if(!(n<2)){for(let e=0;e<n;e++){const n=t[e];p+="".concat(e?"L":"M"," ").concat(n[0].toFixed(1),", ").concat(n[1].toFixed(1)," ")}u&&(p+="Z ")}}if(!p)return;const f={d:p,stroke:r,fill:l,"fill-opacity":c,"stroke-width":g,"stroke-dasharray":h};if(m)uc(f,m),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg","path");gc(f,t),e.appendNode(t,v)}}function nv(e,t,n,o,i){if(o.length<2)return;const{color:a="rgb(0, 255, 0)",width:r=10,fillColor:s="none",fillOpacity:l=0,lineWidth:c,lineDash:d,closePath:h=!1}=i,u=c||r,g=hc(t,"polyline",n),v=e.getSvgNode(g);let m="";for(const e of o)m+="".concat(e[0].toFixed(1),", ").concat(e[1].toFixed(1)," ");if(h){const e=o[0];m+="".concat(e[0],", ").concat(e[1])}const p={points:m,stroke:a,fill:s,"fill-opacity":l,"stroke-width":u,"stroke-dasharray":d};if(v)uc(p,v),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");gc(p,t),e.appendNode(t,g)}}const{pointsAreWithinCloseContourProximity:ov}=D;function iv(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},{lineWidth:o,lineDash:i,color:a,fillColor:r,fillOpacity:s}=this.getAnnotationStyle({annotation:t,styleSpecifier:n}),{closed:l}=t.data.contour;return{color:a,width:o,lineDash:i,fillColor:r,fillOpacity:s,closePath:l}}function av(e,t,n){var o;null!=e&&null!==(o=e.viewport)&&void 0!==o&&o.getImageData()&&(n.data.contour.closed?this.renderClosedContour(e,t,n):n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return eg(t.data.contour.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n))}function rv(e,t,n){if(n.parentAnnotationUID)return;const{viewport:o}=e,i=this._getRenderingOptions(e,n),a=[n.data.contour.polyline.map((e=>o.worldToCanvas(e))),...is(n,o)];tv(t,n.annotationUID,"1",a,i)}function sv(e,t,n){var o;const{viewport:i}=e,a=this._getRenderingOptions(e,n),r=n.data.contour.polyline.map((e=>i.worldToCanvas(e)));nv(t,n.annotationUID,"1",r,a);const s=n.data.handles.activeHandleIndex;if(!0===(null===(o=this.configuration.alwaysRenderOpenContourHandles)||void 0===o?void 0:o.enabled)){const e=this.configuration.alwaysRenderOpenContourHandles.radius,o="0",i=[r[0],r[r.length-1]];0===s?i.shift():1===s&&i.pop(),Fc(t,n.annotationUID,o,i,{color:a.color,handleRadius:e})}if(null!==s){const e="1",o=r[0===s?0:r.length-1];Fc(t,n.annotationUID,e,[o],{color:a.color})}}function lv(e,t,n){const{viewport:o}=e,{openUShapeContourVectorToPeak:i}=n.data,{polyline:a}=n.data.contour;if(this.renderOpenContour(e,t,n),!i)return;const r=o.worldToCanvas(a[0]),s=o.worldToCanvas(a[a.length-1]),l=[o.worldToCanvas(i[0]),o.worldToCanvas(i[1])],c=this._getRenderingOptions(e,n);nv(t,n.annotationUID,"first-to-last",[r,s],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"}),nv(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:c.color,width:c.width,closePath:!1,lineDash:"2,2"})}function cv(e,t,n){const o=this._getRenderingOptions(e,n),{allowOpenContours:i}=this.configuration,{canvasPoints:a}=this.drawData;if(o.closePath=!1,nv(t,n.annotationUID,"1",a,o),i){const e=a[0],i=a[a.length-1];if(ov(e,i,this.configuration.closeContourProximity))nv(t,n.annotationUID,"2",[i,e],o);else{const i="0";Fc(t,n.annotationUID,i,[e],{color:o.color,handleRadius:2})}}}function dv(e,t,n){const{viewport:o}=e,{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderClosedContour(e,t,n);const a=[i,...is(n,o)],r=this._getRenderingOptions(e,n);n.parentAnnotationUID&&r.fillOpacity&&(r.fillOpacity=0),tv(t,n.annotationUID,"preview-1",a,r)}function hv(e,t,n){const{fusedCanvasPoints:o}=this.editData;if(void 0===o)return void this.renderOpenContour(e,t,n);const i=this._getRenderingOptions(e,n);nv(t,n.annotationUID,"preview-1",o,i)}const uv=function(e){e.renderContour=av.bind(e),e.renderClosedContour=rv.bind(e),e.renderOpenContour=sv.bind(e),e.renderOpenUShapedContour=lv.bind(e),e.renderContourBeingDrawn=cv.bind(e),e.renderClosedContourBeingEdited=dv.bind(e),e.renderOpenContourBeingEdited=hv.bind(e),e._getRenderingOptions=iv.bind(e)};class gv extends nd{constructor(e,t){super(e,t)}renderAnnotation(e,t){var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n];c.annotationUID=o.annotationUID;const a=this.getAnnotationStyle({annotation:o,styleSpecifier:c});if(!a.visibility)continue;const r=this.renderAnnotationInstance({enabledElement:e,targetId:l,annotation:o,annotationStyle:a,svgDrawingHelper:t});i||(i=r),o.invalidated=!1}return i}createAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{world:i}=n,a=(0,ne.getEnabledElement)(o),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l,viewUp:c,position:d}=s,h=this.getReferencedImageId(r,i,l,c),u=r.getViewReference({points:[i]});return{highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),...u,referencedImageId:h,viewUp:c,cameraPosition:d},data:{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]}}},contour:{polyline:[],closed:!1}},interpolationUID:"",autoGenerated:!1}}addAnnotation(e,t){return gt(e,t)}cancelAnnotation(e){}moveAnnotation(e,t){const{points:n}=e.data.handles;for(let e=0,o=n.length;e<o;e++){const o=n[e];o[0]+=t[0],o[1]+=t[1],o[2]+=t[2]}e.invalidated=!0,ut(e).forEach((e=>this.moveAnnotation(e,t)))}updateContourPolyline(e,t,n){var o;const i=(null===(o=this.configuration)||void 0===o?void 0:o.decimate)||{};us(e,t,n,{decimate:{enabled:!!i.enabled,epsilon:i.epsilon}})}getPolylinePoints(e){var t,n;return null!==(t=null===(n=e.data.contour)||void 0===n?void 0:n.polyline)&&void 0!==t?t:e.data.polyline}renderAnnotationInstance(e){const{enabledElement:t,annotationStyle:n,svgDrawingHelper:o}=e,i=e.annotation;if(i.parentAnnotationUID)return;const{annotationUID:a}=i,{viewport:r}=t,{worldToCanvas:s}=r,l=this.getPolylinePoints(i).map((e=>s(e))),{lineWidth:c,lineDash:d,color:h,fillColor:u,fillOpacity:g}=n;return tv(o,a,"contourPolyline",[l,...is(i,r)],{color:h,lineDash:d,lineWidth:Math.max(.1,c),fillColor:u,fillOpacity:g}),!0}}class vv extends gv{constructor(e,t){var n;super(e,t),null!==(n=this.configuration.interpolation)&&void 0!==n&&n.enabled&&yl.addTool(this.getToolName())}isContourSegmentationTool(){return!0}createAnnotation(e){const{toolGroupId:t}=this,n=super.createAnnotation(e);if(!this.isContourSegmentationTool())return n;const o=Sc(t);if(!o)throw new Error("No active segmentation detected, create one before using scissors tool");const{type:i}=o;if(i!==Et.Contour)throw new Error("A contour segmentation must be active");const{segmentationId:a}=o,r=Nc(a);return ne.utilities.deepMerge(n,{data:{segmentation:{segmentationId:a,segmentIndex:r}}})}addAnnotation(e,t){const n=super.addAnnotation(e,t);return this.isContourSegmentationTool()&&ol(e),n}cancelAnnotation(e){this.isContourSegmentationTool()&&nl(e),super.cancelAnnotation(e)}getAnnotationStyle(e){const t=super.getAnnotationStyle(e);if(!this.isContourSegmentationTool())return t;const n=this._getContourSegmentationStyle(e);return ne.utilities.deepMerge(t,n)}renderAnnotationInstance(e){const{annotation:t}=e,{invalidated:n}=t,o=super.renderAnnotationInstance(e);if(n&&this.isContourSegmentationTool()){const{segmentationId:e}=t.data.segmentation;Vt(e);const n=Yt(e);Dr(n)}return o}_getContourSegmentationStyle(e){var t,n,o,i,a,r;const{toolGroupId:s}=this,l=e.annotation,{segmentationId:c,segmentIndex:d}=l.data.segmentation,h=Bt(c),u=this._getSegmentationRepresentation(c);if(!u)return{};const{segmentationRepresentationUID:g}=u,{active:v}=u,{autoGenerated:m}=l,p=Pc(c).includes(d),f=Zi(s,g,d),I=ui(s,g),w=ti(),E=ai(s),C=si(s,g),_=ci(s,g,d),b=mi(s,g,d),D=Object.assign({},null!==(t=null==w||null===(n=w.representations)||void 0===n?void 0:n.CONTOUR)&&void 0!==t?t:{},null!==(o=null==E||null===(i=E.representations)||void 0===i?void 0:i.CONTOUR)&&void 0!==o?o:{},null!==(a=null==C?void 0:C.CONTOUR)&&void 0!==a?a:{},null!==(r=null==_?void 0:_.CONTOUR)&&void 0!==r?r:{});let T,S=1,y=1,M=0;var x,O,P,A;if(m)S=null!==(x=D.outlineWidthAutoGenerated)&&void 0!==x?x:S,T=null!==(O=D.outlineDashAutoGenerated)&&void 0!==O?O:T,y=null!==(P=D.outlineOpacity)&&void 0!==P?P:y,M=null!==(A=D.fillAlphaAutoGenerated)&&void 0!==A?A:M;else if(v){var R,N,L,k;S=null!==(R=D.outlineWidthActive)&&void 0!==R?R:S,T=null!==(N=D.outlineDashActive)&&void 0!==N?N:T,y=null!==(L=D.outlineOpacity)&&void 0!==L?L:y,M=null!==(k=D.fillAlpha)&&void 0!==k?k:M}else{var U,V,W,H;S=null!==(U=D.outlineWidthInactive)&&void 0!==U?U:S,T=null!==(V=D.outlineDashInactive)&&void 0!==V?V:T,y=null!==(W=D.outlineOpacityInactive)&&void 0!==W?W:y,M=null!==(H=D.fillAlphaInactive)&&void 0!==H?H:M}h.activeSegmentIndex===d&&(S+=D.activeSegmentOutlineWidthDelta),S=D.renderOutline?S:0,M=D.renderFill?M:0;const B="rgba(".concat(f[0],", ").concat(f[1],", ").concat(f[2],", ").concat(y,")");return{color:B,fillColor:"rgb(".concat(f[0],", ").concat(f[1],", ").concat(f[2],")"),lineWidth:S,fillOpacity:M,lineDash:T,textbox:{color:B},visibility:I&&b,locked:p}}_getSegmentationRepresentation(e){const t=qt(this.toolGroupId).filter((t=>t.segmentationId===e));if(t)return qt(this.toolGroupId).length>1&&console.warn("Multiple segmentation representations detected for this tool group. The first one will be used."),t[0];console.warn("No segmentation representation found for toolGroupId: ".concat(this.toolGroupId))}}const{pointCanProjectOnLine:mv}=D,{EPSILON:pv}=ne.CONSTANTS,fv=1-pv;class Iv extends vv{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:$u.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},calculateStats:!0,getTextLines:wv,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"commonData",void 0),re(this,"isDrawing",!1),re(this,"isEditingClosed",!1),re(this,"isEditingOpen",!1),re(this,"activateDraw",void 0),re(this,"activateClosedContourEdit",void 0),re(this,"activateOpenContourEdit",void 0),re(this,"activateOpenContourEndEdit",void 0),re(this,"cancelDrawing",void 0),re(this,"cancelClosedContourEdit",void 0),re(this,"cancelOpenContourEdit",void 0),re(this,"renderContour",void 0),re(this,"renderContourBeingDrawn",void 0),re(this,"renderClosedContourBeingEdited",void 0),re(this,"renderOpenContourBeingEdited",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,a=this.createAnnotation(e);this.addAnnotation(a,n);const r=Qs(n,this.getToolName());return this.activateDraw(e,a,r),e.preventDefault(),Ua(i,r),a})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,a=Qs(i,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n,i=Qs(o,this.getToolName());t.data.contour.closed?this.activateClosedContourEdit(e,t,i):this.activateOpenContourEdit(e,t,i),e.preventDefault()})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{polyline:r}=t.data.contour;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,i=a.worldToCanvas(r[e]);if(mv(n,t,i,o))return!0;s=i}if(!t.data.contour.closed)return!1;const l=a.worldToCanvas(r[0]),c=a.worldToCanvas(r[r.length-1]);return mv(n,l,c,o)})),re(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,o=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):o&&this.cancelClosedContourEdit(e)})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const{data:i}=e,{cachedStats:a}=i,{polyline:r,closed:s}=i.contour,l=Object.keys(a);for(let o=0;o<l.length;o++){var c,d,h;const i=l[o],u=this.getTargetIdImage(i,n);if(!u)continue;const{imageData:g,metadata:v}=u,m=r.map((e=>t.worldToCanvas(e))),p=m[0],f=t.canvasToWorld(p),I=t.canvasToWorld([p[0]+1,p[1]]),w=t.canvasToWorld([p[0],p[1]+1]),E=aa.vec3.distance(f,I),C=aa.vec3.distance(f,w),_=gr(u);let b=uh(m)/_/_;b*=E*C;const D=ne.utilities.transformWorldToIndex(g,r[0]);D[0]=Math.floor(D[0]),D[1]=Math.floor(D[1]),D[2]=Math.floor(D[2]);let T=D[0],S=D[0],y=D[1],M=D[1],x=D[2],O=D[2];for(let e=1;e<r.length;e++){const t=ne.utilities.transformWorldToIndex(g,r[e]);t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),T=Math.min(T,t[0]),S=Math.max(S,t[0]),y=Math.min(y,t[1]),M=Math.max(M,t[1]),x=Math.min(x,t[2]),O=Math.max(O,t[2])}const P=.01*(S-T),A=.01*(M-y),R=.01*(O-x);T=Math.floor(T-P),S=Math.ceil(S+P),y=Math.floor(y-A),M=Math.ceil(M+A),x=Math.floor(x-R),O=Math.ceil(O+R);const N=[[T,S],[y,M],[x,O]],L=g.indexToWorld([S,M,O]),k=t.worldToCanvas(L);let U=0,V=[],W=0;const H=yr(g,((e,n)=>{let o=!0;const i=t.worldToCanvas(e);return i[1]!=U&&(W=0,U=i[1],V=vh(m,i,[k[0],i[1]]),V.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),V.length&&i[0]>V[0][0]&&(V.shift(),W++),W%2==0&&(o=!1),o}),this.configuration.statsCalculator.statsCallback,N),B={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},F=gd(v.Modality,e.metadata.referencedImageId,B),G=this.configuration.statsCalculator.getStatistics();a[i]={Modality:v.Modality,area:b,perimeter:Al(m,s),mean:null===(c=G.mean)||void 0===c?void 0:c.value,max:null===(d=G.max)||void 0===d?void 0:d.value,stdDev:null===(h=G.stdDev)||void 0===h?void 0:h.value,statsArray:G.array,pointsInShape:H,areaUnit:ur(null,u),modalityUnit:F}}return Qe(e,o.viewport.element,je.StatsUpdated),e.invalidated=!1,a})),re(this,"_renderStats",((e,t,n,o)=>{var i;const{data:a}=e,r=this.getTargetId(t),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},l=this.getLinkedTextBoxStyle(s,e);if(!l.visibility)return;const c=this.configuration.getTextLines(a,r);if(!c||0===c.length)return;const d=a.contour.polyline.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=hd(d);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),u=ld(o,null!==(i=e.annotationUID)&&void 0!==i?i:"","1",c,h,d,{},l),{x:g,y:v,width:m,height:p}=u;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([g,v]),topRight:t.canvasToWorld([g+m,v]),bottomLeft:t.canvasToWorld([g,v+p]),bottomRight:t.canvasToWorld([g+m,v+p])}})),pg(this),Tg(this),Ug(this),Zg(this),ev(this),uv(this),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,ne.getEnabledElement)(e),{viewport:o}=n;let i;if(o instanceof ne.VolumeViewport){const e=o.getCamera(),{spacingInNormalDirection:n}=ne.utilities.getTargetVolumeAndSpacingInNormalDir(o,e);i=this.filterAnnotationsWithinSlice(t,e,n)}else i=Kc(o,t);return i}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:o}=t,i=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(aa.vec3.dot(o,t))>fv;return t&&n}));if(!i.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of i){const t=e.data.contour.polyline[0];if(!e.isVisible)continue;const n=aa.vec3.create();aa.vec3.sub(n,r,t);const i=aa.vec3.dot(n,o);Math.abs(i)<a&&s.push(e)}return s}isContourSegmentationTool(){return!1}createAnnotation(e){const t=e.detail.currentPoints.world,n=super.createAnnotation(e);return ne.utilities.deepMerge(n,{data:{contour:{polyline:[[...t]]},label:"",cachedStats:{}},onInterpolationComplete:e=>{e.data.handles.points.length=0}})}getAnnotationStyle(e){return super.getAnnotationStyle(e)}renderAnnotationInstance(e){const{enabledElement:t,targetId:n,svgDrawingHelper:o}=e,i=e.annotation;let a=!1;const{viewport:r,renderingEngine:s}=t,l=this.isDrawing,c=this.isEditingOpen,d=this.isEditingClosed;if(l||c||d){const e=this.commonData.annotation.annotationUID;if(i.annotationUID===e)if(l)this.renderContourBeingDrawn(t,o,i);else if(d)this.renderClosedContourBeingEdited(t,o,i);else{if(!c)throw new Error("Unknown ".concat(this.getToolName()," annotation rendering state"));this.renderOpenContourBeingEdited(t,o,i)}else this.renderContour(t,o,i);a=!0}else this.renderContour(t,o,i);if(this.configuration.calculateStats)return this._calculateStatsIfActive(i,n,r,s,t),this._renderStats(i,r,t,o),a}_calculateStatsIfActive(e,t,n,o,i){var a,r,s;const l=null===(a=this.commonData)||void 0===a?void 0:a.annotation.annotationUID;if((e.annotationUID!==l||null!==(r=this.commonData)&&void 0!==r&&r.movingTextBox)&&(null===(s=this.commonData)||void 0===s||!s.movingTextBox)){const{data:a}=e;a.cachedStats[t]&&null!=a.cachedStats[t].areaUnit?e.invalidated&&this._throttledCalculateCachedStats(e,n,o,i):(a.cachedStats[t]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(e,n,o,i))}}}function wv(e,t){const n=e.cachedStats[t],{area:o,mean:i,stdDev:a,perimeter:r,max:s,isEmptyArea:l,areaUnit:c,modalityUnit:d}=n||{},h=[];if(o){const e=l?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(c);h.push(e)}return i&&h.push("Mean: ".concat(zu(i)," ").concat(d)),s&&h.push("Max: ".concat(zu(s)," ").concat(d)),a&&h.push("Std Dev: ".concat(zu(a)," ").concat(d)),r&&h.push("Perimeter: ".concat(zu(r)," ").concat(d)),h}re(Iv,"toolName",void 0),Iv.toolName="PlanarFreehandROI";const Ev=Iv;class Cv extends Ev{constructor(e){super(ne.utilities.deepMerge({configuration:{calculateStats:!1,allowOpenContours:!1}},e))}isContourSegmentationTool(){return!0}renderAnnotationInstance(e){const t=e.annotation,{invalidated:n}=t,o=super.renderAnnotationInstance(e);if(n){const{segmentationId:e}=t.data.segmentation;Vt(e)}return o}}re(Cv,"toolName",void 0),Cv.toolName="PlanarFreehandContourSegmentationTool";const _v=Cv,bv=e=>{const{numberOfCells:t,lines:n}=e,o=[],i=[];for(let e=0;e<n.length;){const a=n[e];if(i.push(a),o.push(n.slice(e+1,e+a+1)),e+=a+1,o.length===t)break}return{lineSegments:o,linesNumberOfPoints:i}};function Dv(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ji(e,Et.Contour,(()=>async function(e){var t,n;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=null!==(t=o.segmentIndices)&&void 0!==t&&t.length?o.segmentIndices:Rt(e);let a;const r=Bt(e).representationData;try{r.SURFACE?a=await async function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!n.viewport)throw new Error("Viewport is required to compute contour from surface");const{viewport:o,segmentationRepresentationUID:i}=n,a=null!==(t=n.segmentIndices)&&void 0!==t&&t.length?n.segmentIndices:Rt(e),r=new Map,s=new Map,l=Bt(e).representationData.SURFACE,c=[];return l.geometryIds.forEach(((e,t)=>{if(a.includes(t)){var n;r.set(t,e);const o=null===(n=ne.cache.getGeometry(e))||void 0===n?void 0:n.data;o&&c.push({id:e,points:o.getPoints(),polys:o.getPolys()})}})),r.forEach(((e,t)=>{s.set(e,t)})),or(await ki(c,o,i),s)}(e,{segmentIndices:i,...o}):r.LABELMAP&&(a=await async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.viewport)throw new Error("Viewport is required to compute contour from labelmap");const n=await Ga(e,t);if(null==n||!n.length)return void console.error("Failed to convert labelmap to surface or labelmap is empty");const{viewport:o,segmentationRepresentationUID:i}=t,a=n.map((e=>({id:e.segmentIndex.toString(),points:e.data.points,polys:e.data.polys,segmentIndex:e.segmentIndex})));return or(await ki(a,o,i))}(e,{segmentIndices:i,...o}))}catch(e){throw console.error(e),e}if(!a)throw new Error("Not enough data to convert to contour, currently only support converting volume labelmap to contour if available");const{viewport:s,segmentationRepresentationUID:l}=o,c=function(e,t,n){const o=new Map;for(const[i,a]of e)for(const e of a){const{points:a}=e,{lineSegments:r,linesNumberOfPoints:s}=bv(e);for(let e=0;e<r.length;e++){const l=r[e],c=[];for(let t=0;t<s[e];t++){const e=l[t];c.push([a[3*e],a[3*e+1],a[3*e+2]])}if(c.length<3)continue;const d={annotationUID:ne.utilities.uuidv4(),data:{contour:{closed:!0,polyline:c},segmentation:{segmentationId:n,segmentIndex:i},handles:{}},handles:{},highlighted:!1,autoGenerated:!1,invalidated:!1,isLocked:!1,isVisible:!0,metadata:{toolName:_v.toolName,...t.getViewReference()}};gt(d,t.element);const h=o.get(i)||new Set;h.add(d.annotationUID),o.set(i,h)}}return o}(a,s,e);return Zt(null===(n=Qo(s.id))||void 0===n?void 0:n.id,l,{CONTOUR:{fillAlpha:0}}),{annotationUIDsMap:c}}(e,t)),(()=>{}))}let Tv=!1;const Sv={render:async function(e,t,n){const{segmentationId:o}=t,i=Bt(o);if(!i)return;let a=i.representationData[Et.Contour];a||!Hi(t.segmentationRepresentationUID)||Tv||(Tv=!0,a=await Dv(o,{segmentationRepresentationUID:t.segmentationRepresentationUID,viewport:e}));const{geometryIds:r}=a;null!=r&&r.length&&e instanceof ne.BaseVolumeViewport&&function(e,t,n,o){const{segmentationRepresentationUID:i}=n,a="CONTOUR_".concat(i);(e.getActor(a)?tr:er)(e,t,n,o,a)}(e,r,t,n)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=ei(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:o}=n;for(const e of o){const{viewportId:n,renderingEngineId:o}=e,i=(0,ne.getEnabledElementByIds)(n,o);nr(i.viewport.element,t)}})(e,t),ln(e,t),function(e){Za.delete(e)}(t),n&&ei(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,ne.getEnabledElementByIds)(t,n).viewport.render()}))}},yv=_v.toolName;class Mv extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{}}),re(this,"renderSegmentation",(e=>{const t=ei(e);if(!t)return;const n=qt(e);if(!n||0===n.length)return;const o=t.viewportsInfo.map((e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t);if(o)return o.viewport})),i=n.map((t=>{const n=this._getMergedRepresentationsConfig(e),i=[],a={[Et.Labelmap]:ba,[Et.Contour]:Sv,[Et.Surface]:ja};t.type===Et.Contour&&this.addPlanarFreeHandToolIfAbsent(e);const r=a[t.type];for(const e of o){const o=r.render(e,t,n);i.push(o)}return i}));Promise.allSettled(i).then((()=>{o.forEach((e=>{e.render()}))}))}))}onSetToolEnabled(){const e=this.toolGroupId,t=qt(e);t&&0!==t.length&&t.forEach((t=>{hi(e,t.segmentationRepresentationUID,!0)}))}onSetToolDisabled(){const e=this.toolGroupId,t=qt(e);t&&0!==t.length&&t.forEach((t=>{hi(e,t.segmentationRepresentationUID,!1)}))}addPlanarFreeHandToolIfAbsent(e){yv in Ye.tools||il(_v);const t=ei(e);t.hasTool(yv)||(t.addTool(yv),t.setToolPassive(yv))}_getMergedRepresentationsConfig(e){const t=ai(e),n=ti();return ne.utilities.deepMerge(n,t)}}re(Mv,"toolName",void 0),Mv.toolName="SegmentationDisplay";const xv=Mv,Ov=new class{constructor(){re(this,"_needsRender",new Set),re(this,"_animationFrameSet",!1),re(this,"_animationFrameHandle",null),re(this,"hasBeenDestroyed",void 0),re(this,"_renderFlaggedToolGroups",(()=>{this._throwIfDestroyed();const e=Array.from(this._needsRender.values());for(const t of e)if(this._triggerRender(t),this._needsRender.delete(t),0===this._needsRender.size)return this._animationFrameSet=!1,void(this._animationFrameHandle=null)}))}removeToolGroup(e){this._needsRender.delete(e),0===this._needsRender.size&&this._reset()}renderToolGroupSegmentations(e){this._setToolGroupSegmentationToBeRenderedNextFrame([e])}_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.")}_setToolGroupSegmentationToBeRenderedNextFrame(e){e.forEach((e=>{this._needsRender.add(e)})),this._render()}_render(){this._needsRender.size>0&&!1===this._animationFrameSet&&(this._animationFrameHandle=window.requestAnimationFrame(this._renderFlaggedToolGroups),this._animationFrameSet=!0)}_triggerRender(e){const t=ei(e);if(!t)return void console.warn("No tool group found with toolGroupId: ".concat(e));const{viewportsInfo:n}=t,o=n.map((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getRenderingEngine)(n);if(!o)return void console.warn("rendering Engine has been destroyed");return o.getViewport(t)||void 0})).filter(Boolean),i=t.getToolInstance(xv.toolName);function a(e){const{element:t,viewportId:n,renderingEngineId:o}=e.detail;t.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,a);const i=Qo(n,o);if(!i)return void console.warn("toolGroup has been destroyed");const r={toolGroupId:i.id,viewportId:n};(0,ne.triggerEvent)(ne.eventTarget,ie.SEGMENTATION_RENDERED,{...r})}i?(o.forEach((e=>{let{element:t}=e;t.addEventListener(ne.Enums.Events.IMAGE_RENDERED,a)})),i.renderSegmentation(e)):console.warn("No segmentation tool found inside",e)}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null}};function Pv(e){Ov.renderToolGroupSegmentations(e)}const Av=Pv,Rv=new Map;function Nv(e){var t;const n=e.detail,{viewportId:o,renderingEngineId:i}=n,{viewport:a}=(0,ne.getEnabledElementByIds)(o,i),r=Qo(o,i);if(!r)return;let s=qt(r.id)||[];if(s=s.filter((e=>e.type===Et.Labelmap)),null===(t=s)||void 0===t||!t.length)return;const l={};s.forEach((e=>{var t;const n=Bt(e.segmentationId);if(!n||null===(t=n.representationData)||void 0===t||!t.LABELMAP)return;const o=n.representationData.LABELMAP;if(Ot(o,a))return;const{imageIdReferenceMap:i}=o;l[e.segmentationRepresentationUID]={imageIdReferenceMap:i}}));const c=Object.keys(l),d=a.getCurrentImageId(),h=a.getActors();h.find((e=>!!c.includes(e.uid)))?h.forEach((t=>{if(!c.includes(t.uid))return;const n=t.actor,{imageIdReferenceMap:o}=l[t.uid],i=o.get(d),s=n.getMapper().getInputData();if(!i){if(s.setDerivedImage)return void s.setDerivedImage(null);const e=Jo().newInstance({name:"Pixels",numberOfComponents:1,values:new Uint8Array(s.getNumberOfPoints())}),t=$o().newInstance();return t.getPointData().setScalars(e),void n.getMapper().setInputData(t)}const h=ne.cache.getImage(i),{dimensions:u,spacing:g,direction:v}=a.getImageDataMetadata(h),m=ne.cache.getImage(d)||{imageId:d},{origin:p}=a.getImageDataMetadata(m),f=p;if(s.setOrigin(f),s.modified(),s.getDimensions()[0]!==u[0]||s.getDimensions()[1]!==u[1])return a.removeActors([t.uid]),a.addImages([{imageId:i,actorUID:t.uid,callback:e=>{let{imageActor:t}=e;const n=Jo().newInstance({name:"Pixels",numberOfComponents:1,values:[...h.getPixelData()]}),o=$o().newInstance();o.setDimensions(u[0],u[1],1),o.setSpacing(g),o.setDirection(v),o.setOrigin(f),o.getPointData().setScalars(n),t.getMapper().setInputData(o)}}],!0,!1),void Av(r.id);s.setDerivedImage?s.setDerivedImage(h):ne.utilities.updateVTKImageDataWithCornerstoneImage(s,h),a.render(),e.type===ne.Enums.Events.IMAGE_RENDERED&&a.element.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv)})):Rv.has(r.id)||(Rv.set(r.id,!0),Av(r.id))}const Lv={enable:function(e){const{viewport:t}=(0,ne.getEnabledElement)(e);t instanceof ne.BaseVolumeViewport||(e.addEventListener(ne.Enums.Events.STACK_NEW_IMAGE,Nv),e.addEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv))},disable:function(e){e.removeEventListener(ne.Enums.Events.STACK_NEW_IMAGE,Nv),e.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,Nv)}},kv=function(e){ka(e.detail.element)},Uv={enable:function(e){e.addEventListener(ne.Enums.Events.IMAGE_RENDERED,kv)},disable:function(e){e.removeEventListener(ne.Enums.Events.IMAGE_RENDERED,kv)}};function Vv(e,t,n){const{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const o=s[e],i=a.toolOptions[o],l=null!=n&&i.bindings.length&&i.bindings.some((e=>e.mouseButton===n));if(t.includes(i.mode)&&(!n||l)){const e=a.getToolInstance(o);r.push(e)}}return r}const{Active:Wv,Passive:Hv,Enabled:Bv}=Je,Fv=function(e){Vv(e,[Wv,Hv,Bv]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},Gv={enable:function(e){e.addEventListener(ne.Enums.Events.CAMERA_MODIFIED,Fv)},disable:function(e){e.removeEventListener(ne.Enums.Events.CAMERA_MODIFIED,Fv)}},{Active:qv,Passive:jv,Enabled:zv}=Je,Kv=function(e){Vv(e,[qv,jv,zv]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},Yv={enable:function(e){e.addEventListener(ne.Enums.Events.IMAGE_SPACING_CALIBRATED,Kv)},disable:function(e){e.removeEventListener(ne.Enums.Events.IMAGE_SPACING_CALIBRATED,Kv)}},{Active:Xv}=Je;function Jv(e,t,n){if(Ye.isInteractingWithTool)return!1;const{renderingEngineId:o,viewportId:i}=n.detail,a=Qo(i,o);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],o=a.toolOptions[n],i=a.getToolInstance(n);if(o.mode===Xv&&"function"==typeof i[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const Zv=Jv.bind(null,"Mouse","mouseClickCallback");function $v(e,t,n){const o="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,i=[];return t.forEach((t=>{let{tool:a,annotations:r}=t;for(const t of r){if(t.isLocked||!t.isVisible)continue;const r=a.getHandleNearImagePoint(e,t,n,o);if(r){i.push({tool:a,annotation:t,handle:r});break}}})),i}function Qv(e,t){const n=[];for(let i=0;i<t.length;i++){var o;const a=t[i];if(!a){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let r=st(a.constructor.toolName,e);null!==(o=r)&&void 0!==o&&o.length&&("function"==typeof a.filterInteractableAnnotationsForElement&&(r=a.filterInteractableAnnotationsForElement(e,r)),r.length>0&&n.push({tool:a,annotations:r}))}return n}function em(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const i="touch"===o?36:6,a=[];return t.forEach((t=>{let{tool:r,annotations:s}=t;for(const t of s)if(!t.isLocked&&t.isVisible&&r.isPointNearTool(e,t,n,i,o)){a.push({tool:r,annotation:t});break}})),a}const{Active:tm}=Je;function nm(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=e.detail.event,i=Qu(o)||Yo.getModifierKey(),a=Qo(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t],l=n.bindings.length&&n.bindings.some((e=>e.mouseButton===(o?o.buttons:s)&&e.modifierKey===i));if(n.mode===tm&&l)return a.getToolInstance(t)}}const{Active:om,Passive:im}=Je;const{Active:am,Passive:rm}=Je;function sm(e){if(Ye.isInteractingWithTool)return;const t=nm(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,o=[...Vv(e,[am],e.detail.event.buttons)||[],...(n?Vv(e,[rm]):void 0)||[]];if(function(e){if(Ye.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{canvas:i}=t.currentPoints;if(!o)return!1;const a=function(e,t){var n;const o=new Map,{renderingEngineId:i,viewportId:a}=e.detail,r=Qo(a,i);if(!r)return o;const s=Object.keys(r.toolOptions),l=r.getDefaultMousePrimary(),c=e.detail.event,d=null!==(n=null==c?void 0:c.buttons)&&void 0!==n?n:l,h=Qu(c)||Yo.getModifierKey();for(let e=0;e<s.length;e++){var u,g;const n=s[e],i=r.getToolInstance(n),a=null!==(u=null===(g=i.configuration)||void 0===g?void 0:g.actions)&&void 0!==u?u:{},l=Object.values(a);if(null==l||!l.length||!t.includes(i.mode))continue;const c=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===d&&e.modifierKey===h))));c&&o.set(i,c)}return o}(e,[om,im]),r=em(n,Qv(n,Array.from(a.keys())),i);if(r.length>0){const{tool:t,annotation:n}=r[0],o=a.get(t);return("string"==typeof o.method?t[o.method]:o.method).call(t,e,n),!0}return!1}(e))return;const i=e.detail,{element:a}=i,r=Qv(a,o),s=i.currentPoints.canvas,l=$v(a,r,s,"mouse"),c=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:o}=lm(l);return cm(n.annotationUID,c),void t.handleSelectedCallback(e,n,o,"Mouse")}const d=em(a,r,s,"mouse");if(d.length>0){const{tool:t,annotation:n}=lm(d);return cm(n.annotationUID,c),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function lm(e){return e.length>1&&e.find((e=>!ge(e.annotation)&&Ne(e.annotation.annotationUID)))||e[0]}function cm(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Se(e)?_e(e,!1):_e(e,!0,!0):_e(e,!0,!1)}function dm(e){if(Ye.isInteractingWithTool)return;const t=nm(e);t&&!Ye.isMultiPartToolActive&&t.addNewAnnotation&&_e(t.addNewAnnotation(e,"mouse").annotationUID)}const hm=Jv.bind(null,"Mouse","doubleClickCallback");function um(e){if(Ye.isInteractingWithTool)return;const t=nm(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:gm,Passive:vm}=Je;function mm(e){if(Ye.isInteractingWithTool||Ye.isMultiPartToolActive)return;const t=Vv(e,[gm,vm]),n=e.detail,{element:o}=n,i=Qv(o,t),a=t.filter((e=>!i.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of i)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&ka(o)}const pm=Jv.bind(null,"Mouse","mouseUpCallback"),fm=Jv.bind(null,"MouseWheel","mouseWheelCallback"),Im={enable:function(e){e.addEventListener(ie.MOUSE_CLICK,Zv),e.addEventListener(ie.MOUSE_DOWN,sm),e.addEventListener(ie.MOUSE_DOWN_ACTIVATE,dm),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,hm),e.addEventListener(ie.MOUSE_DRAG,um),e.addEventListener(ie.MOUSE_MOVE,mm),e.addEventListener(ie.MOUSE_UP,pm),e.addEventListener(ie.MOUSE_WHEEL,fm)},disable:function(e){e.removeEventListener(ie.MOUSE_CLICK,Zv),e.removeEventListener(ie.MOUSE_DOWN,sm),e.removeEventListener(ie.MOUSE_DOWN_ACTIVATE,dm),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,hm),e.removeEventListener(ie.MOUSE_DRAG,um),e.removeEventListener(ie.MOUSE_MOVE,mm),e.removeEventListener(ie.MOUSE_UP,pm),e.removeEventListener(ie.MOUSE_WHEEL,fm)}},{Active:wm}=Je;function Em(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=Tn.mouseButton,i=Yo.getModifierKey(),a=Qo(n,t);if(!a)return null;const r=Object.keys(a.toolOptions),s=a.getDefaultMousePrimary();for(let e=0;e<r.length;e++){const t=r[e],n=a.toolOptions[t];if(n.mode===wm&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(null!=o?o:s)&&e.modifierKey===i))))return a.getToolInstance(t)}}function Cm(e){const t=Em(e);if(t){const{renderingEngineId:n,viewportId:o}=e.detail,i=Qo(o,n),a=t.getToolName();Object.keys(i.toolOptions).includes(a)&&i.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return n;const r=Object.keys(a.toolOptions),s=e.detail.key;for(let e=0;e<r.length;e++){var l;const o=r[e],i=a.getToolInstance(o),c=null===(l=i.configuration)||void 0===l?void 0:l.actions;if(!c)continue;const d=Object.values(c);if(null==d||!d.length||!t.includes(i.mode))continue;const h=d.find((e=>e.bindings.some((e=>e.key===s))));h&&n.set(i,h)}return n}(e,[Je.Active]);if(null!=n&&n.size){const{element:t}=e.detail;for(const[o,i]of[...n.entries()])("function"==typeof i.method?i.method:o[i.method]).call(o,t,i,e)}}function _m(e){const t=Em(e);if(!t)return;const{renderingEngineId:n,viewportId:o}=e.detail,i=Qo(o,n);jo();const a=t.getToolName();Object.keys(i.toolOptions).includes(a)&&i.setViewportsCursorByToolName(a)}const bm={enable:function(e){e.addEventListener(ie.KEY_DOWN,Cm),e.addEventListener(ie.KEY_UP,_m)},disable:function(e){e.removeEventListener(ie.KEY_DOWN,Cm),e.removeEventListener(ie.KEY_UP,_m)}},{Active:Dm}=Je;function Tm(e){const{renderingEngineId:t,viewportId:n}=e.detail,o=e.detail.event,i=Qo(n,t);if(!i)return null;const a=Object.keys(i.toolOptions),r=Object.keys(o.touches).length,s=Qu(o)||Yo.getModifierKey(),l=i.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=i.toolOptions[t],o=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Dm&&o)return i.getToolInstance(t)}}function Sm(e,t,n){const{renderingEngineId:o,viewportId:i}=e.detail,a=Qo(i,o);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const o=s[e],i=a.toolOptions[o],l=null!=n&&i.bindings.length&&i.bindings.some((e=>e.numTouchPoints===n));if(t.includes(i.mode)&&(!n||l)){const e=a.getToolInstance(o);r.push(e)}}return r}const{Active:ym,Passive:Mm}=Je;function xm(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,o=[...Sm(e,[ym],Object.keys(e.detail.event.touches).length)||[],...(n?Sm(e,[Mm]):void 0)||[],t],i=e.detail,{element:a}=i,r=Qv(a,o),s=i.currentPoints.canvas,l=$v(a,r,s,"touch");if(l.length>0){const{tool:t,annotation:n,handle:o}=Om(l);return Pm(n.annotationUID,!1),void t.handleSelectedCallback(e,n,o,"Touch")}const c=em(a,r,s,"touch");if(c.length>0){const{tool:t,annotation:n}=Om(c);return Pm(n.annotationUID,!1),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Om(e){return e.length>1&&e.find((e=>!ge(e.annotation)&&Ne(e.annotation.annotationUID)))||e[0]}function Pm(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?Se(e)?_e(e,!1):_e(e,!0,!0):_e(e,!0,!1)}function Am(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);t&&!Ye.isMultiPartToolActive&&t.addNewAnnotation&&_e(t.addNewAnnotation(e,"touch").annotationUID)}function Rm(e){if(Ye.isInteractingWithTool)return;const t=Tm(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const Nm=Jv.bind(null,"Touch","touchEndCallback"),Lm=Jv.bind(null,"Touch","touchTapCallback"),km=Jv.bind(null,"Touch","touchPressCallback"),Um={enable:function(e){e.addEventListener(ie.TOUCH_START,xm),e.addEventListener(ie.TOUCH_START_ACTIVATE,Am),e.addEventListener(ie.TOUCH_DRAG,Rm),e.addEventListener(ie.TOUCH_END,Nm),e.addEventListener(ie.TOUCH_TAP,Lm),e.addEventListener(ie.TOUCH_PRESS,km)},disable:function(e){e.removeEventListener(ie.TOUCH_START,xm),e.removeEventListener(ie.TOUCH_START_ACTIVATE,Am),e.removeEventListener(ie.TOUCH_DRAG,Rm),e.removeEventListener(ie.TOUCH_END,Nm),e.removeEventListener(ie.TOUCH_PRESS,km)}};function Vm(e){const{element:t,viewportId:n}=e.detail,o=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),o="svg-layer-".concat(e);n.classList.add("svg-layer"),n.setAttribute("id",o),n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.style.width="100%",n.style.height="100%",n.style.pointerEvents="none",n.style.position="absolute";const i=document.createElementNS(t,"defs"),a=document.createElementNS(t,"filter"),r=document.createElementNS(t,"feOffset"),s=document.createElementNS(t,"feColorMatrix"),l=document.createElementNS(t,"feBlend");return a.setAttribute("id","shadow-".concat(o)),a.setAttribute("filterUnits","userSpaceOnUse"),r.setAttribute("result","offOut"),r.setAttribute("in","SourceGraphic"),r.setAttribute("dx","0.5"),r.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"),l.setAttribute("in","SourceGraphic"),l.setAttribute("in2","matrixOut"),l.setAttribute("mode","normal"),a.appendChild(r),a.appendChild(s),a.appendChild(l),i.appendChild(a),n.appendChild(i),n}(n);var i;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,o="".concat(t,":").concat(n);Ye.svgNodeCache[o]={}}(t),i=o,t.querySelector("div.viewport-element").appendChild(i),La.addViewportElement(n,t),Fn.enable(t),jn.enable(t),Wo.enable(t),Yo.enable(t),Lv.enable(t),Uv.enable(t),Gv.enable(t),Yv.enable(t),Im.enable(t),bm.enable(t),Um.enable(t),Ye.enabledElements.push(t)}const Wm=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let o=0;o<Ye.synchronizers.length;o++){const i=Ye.synchronizers[o],a=!i.isDisabled(),r=i.hasSourceViewport(t,e),s=i.hasTargetViewport(t,e);a&&(r||s)&&n.push(i)}return n},Hm=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,o="".concat(t,":").concat(n);delete Ye.svgNodeCache[o]}(t),function(e){const t=e.querySelector("div.".concat("viewport-element")),n=t.querySelector("svg");n&&t.removeChild(n)}(t),La.removeViewportElement(n,t),Fn.disable(t),jn.disable(t),Wo.disable(t),Yo.disable(t),Lv.disable(t),Uv.disable(t),Gv.disable(t),Yv.disable(t),Im.disable(t),bm.disable(t),Um.disable(t),(e=>{const t=(0,ne.getEnabledElement)(e);Wm(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,ne.getEnabledElement)(e),o=Qo(n,t);o&&o.removeViewports(t,n)})(t),function(e){const t=Ye.enabledElements.findIndex((t=>t===e));t>-1&&Ye.enabledElements.splice(t,1)}(t)};function Bm(e){el(e.detail.annotation)&&async function(e){const t=e.detail.annotation;if(!el(t))return;const n=function(e){const t=Wr(e),n=t.find((e=>ll(e,!0)));return null!=n?n:t[0]}(t),o=function(e,t){const{annotationUID:n}=t;return lt().filter((o=>o.annotationUID&&o.annotationUID!==n&&el(o)&&tl(o,t)&&e.isReferenceViewable(o.metadata)))}(n,t);if(!o.length)return;const i=cl(t.data.contour.polyline,n),a=function(e,t,n){const o=_s(t);for(let i=0;i<n.length;i++){const a=n[i],r=cl(a.data.contour.polyline,e),s=bs(o,_s(r)),l=s&&Ms(t,r),c=s&&!l&&Ps(r,t);if(l||c)return{targetAnnotation:a,targetPolyline:r,isContourHole:c}}}(n,i,o);if(!a)return;const{targetAnnotation:r,targetPolyline:s,isContourHole:l}=a;if(l){const{contourHoleProcessingEnabled:o=!1}=e.detail;if(!o)return;dl(n,r,t)}else!function(e,t,n,o,i){if(!function(e){const t=e.toolName;return!(!t||!Ye.tools[t])}(_v))return void console.warn("".concat(_v.toolName," is not registered in cornerstone"));if(!ll(e))return;const a=Os(n,i[0]),r=function(e,t){return ut(t).map((t=>({annotation:t,polyline:cl(t.data.contour.polyline,e)})))}(e,t),s=new Set(r),l=new Map,c=(e,t)=>{let n=l.get(e);n||(n=[],l.set(e,n)),n.push(t),s.delete(t)},d=[];if(a){const e=qs(n,i);d.push(e),Array.from(s.keys()).forEach((t=>c(e,t)))}else js(n,i).forEach((e=>{d.push(e),Array.from(s.keys()).forEach((t=>{Ps(e,t.polyline)&&(c(e,t),s.delete(t))}))}));Array.from(l.values()).forEach((e=>e.forEach((e=>ct(e.annotation)))));const{element:h}=e,u=(0,ne.getEnabledElement)(h),{metadata:g,data:v}=t,{handles:m,segmentation:p}=v,{textBox:f}=m;mt(o.annotationUID),mt(t.annotationUID);for(let n=0;n<d.length;n++){var I;const o=d[n],i=e.canvasToWorld(o[0]),a=e.canvasToWorld(o[o.length-1]),r={metadata:{...g,toolName:sl,originalToolName:g.originalToolName||g.toolName},data:{cachedStats:{},handles:{points:[i,a],textBox:f?{...f}:void 0},contour:{polyline:[],closed:!0},spline:t.data.spline,segmentation:{...p}},annotationUID:ne.utilities.uuidv4(),highlighted:!0,invalidated:!0,isLocked:!1,isVisible:void 0,interpolationUID:t.interpolationUID,interpolationCompleted:t.interpolationCompleted};us(r,{points:o,closed:!0,targetWindingDirection:rl.Clockwise},e),gt(r,h),ol(r),Qe(r,e.element),null===(I=l.get(o))||void 0===I||I.forEach((e=>dt(r,e.annotation)))}!function(e,t,n){const{viewport:o}=e,{element:i}=o,{renderingEngine:a}=e,r=new Set([sl,t.metadata.toolName,n.metadata.toolName]);for(const e of r.values()){const t=Qs(i,e);Ua(a,t)}new Promise((e=>window.requestAnimationFrame(e)))}(u,t,o)}(n,r,s,t,i)}(e)}const Fm=function(e){const{viewportId:t,renderingEngineId:n}=e.detail,o=(0,ne.getRenderingEngine)(n);Ua(o,[t])},Gm=function(e){e.detail.removed.length&&(0,ne.getRenderingEngines)().forEach((e=>{const t=e.getViewports().map((e=>e.id));Ua(e,t)}))};function qm(e){el(e.detail.annotation)&&function(e){nl(e.detail.annotation)}(e)}const jm=function(e){const{segmentationId:t}=e.detail;Yt(t).forEach((e=>{qt(e).forEach((n=>{n.segmentationId===t&&kt(e,n.segmentationRepresentationUID)}))}))},zm=function(e){const{segmentationId:t}=e.detail,{type:n}=Bt(t),o=Yt(t);n===Et.Labelmap&&function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail,{representationData:o,type:i}=Bt(t),a=Yt(t),r=o[i];"volumeId"in r&&function(e){let{modifiedSlicesToUse:t,representationData:n,type:o}=e;const i=ne.cache.getVolume(n[o].volumeId);if(!i)return void console.warn("segmentation not found in cache");const{imageData:a,vtkOpenGLTexture:r}=i;let s;if(t&&Array.isArray(t))s=t;else{const e=a.getDimensions()[2];s=[...Array(e).keys()]}s.forEach((e=>{r.setUpdatedFrame(e)})),a.modified()}({modifiedSlicesToUse:n,representationData:o,type:i}),"imageIdReferenceMap"in r&&function(e){let{toolGroupIds:t,segmentationId:n,representationData:o,type:i}=e;t.forEach((e=>{const t=qt(e),a=ei(e).getViewportsInfo();t.forEach((e=>{e.segmentationId===n&&a.forEach((t=>{let{viewportId:n,renderingEngineId:a}=t;const r=(0,ne.getEnabledElementByIds)(n,a).viewport;if(r instanceof ne.VolumeViewport)return;const s=r.getActor(e.segmentationRepresentationUID);if(!s)return;const l=r.getCurrentImageId(),c=s.actor.getMapper().getInputData(),{imageIdReferenceMap:d}=o[i],h=d.get(l),u=ne.cache.getImage(h);c.modified(),ne.utilities.updateVTKImageDataWithCornerstoneImage(c,u)}))}))}))}({toolGroupIds:a,segmentationId:t,representationData:o,type:i})}(e),o.forEach((e=>{Av(e)}))},Km=function(e){const{toolGroupId:t}=e.detail;Av(t)},Ym=function(e){const{toolGroupId:t,segmentationRepresentationUID:n}=e.detail;Av(t)},Xm={enable:function(){ne.eventTarget.addEventListener(ie.ANNOTATION_COMPLETED,yl.handleAnnotationCompleted),ne.eventTarget.addEventListener(ie.ANNOTATION_MODIFIED,yl.handleAnnotationUpdate),ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,yl.handleAnnotationDelete)},disable:function(){ne.eventTarget.removeEventListener(ie.ANNOTATION_COMPLETED,yl.handleAnnotationCompleted),ne.eventTarget.removeEventListener(ie.ANNOTATION_MODIFIED,yl.handleAnnotationUpdate),ne.eventTarget.removeEventListener(ie.ANNOTATION_REMOVED,yl.handleAnnotationDelete)}},Jm=function(e,t,n){const o=qt(e);if(!o||0===o.length)return;const i=o.map((e=>e.segmentationRepresentationUID));let a=t;if(a){const e=t.filter((e=>!i.includes(e)));if(e.length>0)throw new Error("The following segmentationRepresentationUIDs are not part of the toolGroup: ".concat(JSON.stringify(e)))}else a=i;a.forEach((t=>{!function(e,t,n){const o=rn(e,t),{type:i}=o;if(i===Et.Labelmap)ba.removeSegmentationRepresentation(e,t,n);else{if(i!==Et.Contour)throw new Error("The representation ".concat(i," is not supported yet"));Sv.removeSegmentationRepresentation(e,t,n)}}(e,t,n)}))},Zm=function(e){const t=Ye.toolGroups.findIndex((t=>t.id===e));t>-1&&(Ov.removeToolGroup(e),Jm(e),Ye.toolGroups.splice(t,1))},$m=function(){const e=[...Ye.toolGroups];for(const t of e)Zm(t.id);Ye.toolGroups=[]};let Qm=!1;function ep(){Qm||(function(){np();const e=ne.Enums.Events.ELEMENT_ENABLED,t=ne.Enums.Events.ELEMENT_DISABLED;ne.eventTarget.addEventListener(e,Vm),ne.eventTarget.addEventListener(t,Hm),Xm.enable()}(),op(),ne.eventTarget.addEventListener(ie.ANNOTATION_COMPLETED,Bm),ne.eventTarget.addEventListener(ie.ANNOTATION_MODIFIED,Fm),ne.eventTarget.addEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.addEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,qm),ne.eventTarget.addEventListener(ie.SEGMENTATION_MODIFIED,jm),ne.eventTarget.addEventListener(ie.SEGMENTATION_DATA_MODIFIED,zm),ne.eventTarget.addEventListener(ie.SEGMENTATION_REPRESENTATION_MODIFIED,Km),ne.eventTarget.addEventListener(ie.SEGMENTATION_REPRESENTATION_REMOVED,Ym),Qm=!0)}function tp(){np(),op(),$m(),ze={},Ye={...le()({...Ke,svgNodeCache:{}}),svgNodeCache:{...Ke.svgNodeCache}};const e=it(),t=Ht();e.restoreAnnotations({}),t.resetState(),Qm=!1}function np(){const e=ne.Enums.Events.ELEMENT_ENABLED,t=ne.Enums.Events.ELEMENT_DISABLED;ne.eventTarget.removeEventListener(e,Vm),ne.eventTarget.removeEventListener(t,Hm),Xm.disable()}function op(){ne.eventTarget.removeEventListener(ie.ANNOTATION_COMPLETED,Bm),ne.eventTarget.removeEventListener(ie.ANNOTATION_MODIFIED,Fm),ne.eventTarget.removeEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.removeEventListener(ie.ANNOTATION_SELECTION_CHANGE,Gm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_MODIFIED,jm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_DATA_MODIFIED,zm),ne.eventTarget.removeEventListener(ie.SEGMENTATION_REPRESENTATION_MODIFIED,Km),ne.eventTarget.removeEventListener(ie.SEGMENTATION_REPRESENTATION_REMOVED,Ym)}function ip(e){const t=Qv(e,Pa(e,[Je.Active,Je.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function ap(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function rp(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const sp=class{constructor(e,t,n,o){re(this,"_enabled",void 0),re(this,"_eventName",void 0),re(this,"_auxiliaryEventNames",void 0),re(this,"_eventHandler",void 0),re(this,"_ignoreFiredEvents",void 0),re(this,"_sourceViewports",void 0),re(this,"_targetViewports",void 0),re(this,"_viewportOptions",{}),re(this,"_options",void 0),re(this,"id",void 0),re(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=(0,ne.getEnabledElement)(e.currentTarget);if(!t)return;const{renderingEngineId:n,viewportId:o}=t;this._sourceViewports.find((e=>e.viewportId===o))&&this.fireEvent({renderingEngineId:n,viewportId:o},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=o||{},this._auxiliaryEventNames=this._options.auxiliaryEventNames||[],this.id=e}isDisabled(){return!this._enabled||!this._hasSourceElements()}setOptions(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._viewportOptions[e]=t}setEnabled(e){this._enabled=e}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(rp(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,o=(0,ne.getRenderingEngine)(t).getViewport(n);if(!o)return void console.warn("Synchronizer.addSource: No viewport for ".concat(t," ").concat(n));const i=o.element;i.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{i.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){rp(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 t=ap(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,ne.getRenderingEngine)(e.renderingEngineId);if(!t)throw new Error("No RenderingEngine for Id: ".concat(e.renderingEngineId));return t.getViewport(e.viewportId).element}(e);this._sourceViewports.splice(t,1),n.removeEventListener(this._eventName,this._eventHandler),this._auxiliaryEventNames&&this._auxiliaryEventNames.forEach((e=>{n.removeEventListener(e,this._eventHandler)})),this._updateDisableHandlers()}removeTarget(e){const t=ap(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return rp(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return rp(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let o=0;o<this._targetViewports.length;o++){const i=this._targetViewports[o];if(e.viewportId===i.viewportId)continue;const a=this._eventHandler(this,e,i,t,this._options);a instanceof Promise&&n.push(a)}}catch(e){console.warn("Synchronizer, for: ".concat(this._eventName),e)}finally{n.length?Promise.allSettled(n).then((()=>{this._ignoreFiredEvents=!1})):this._ignoreFiredEvents=!1}}_hasSourceElements(){return 0!==this._sourceViewports.length}_updateDisableHandlers(){const e=function(e,t){const n=[],o=e.concat(t);for(let e=0;e<o.length;e++){const t=o[e];n.some((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))||n.push(t)}return n}(this._sourceViewports,this._targetViewports),t=this.remove,n=e=>{t(e.detail.element)};e.forEach((function(e){const t=(0,ne.getRenderingEngine)(e.renderingEngineId);if(!t)return;const o=t.getViewport(e.viewportId),{element:i}=o;i.removeEventListener(ne.Enums.Events.ELEMENT_DISABLED,n),i.addEventListener(ne.Enums.Events.ELEMENT_DISABLED,n)}))}},lp=function(e,t,n,o){if(Ye.synchronizers.some((t=>t.id===e)))throw new Error("Synchronizer with id '".concat(e,"' already exists."));const i=new sp(e,t,n,o);return Ye.synchronizers.push(i),i},cp=function(){for(;Ye.synchronizers.length>0;)Ye.synchronizers.pop().destroy()},dp=function(e){return Ye.synchronizers.find((t=>t.id===e))},hp=function(){return Ye.synchronizers},up=function(e){const t=Ye.synchronizers.findIndex((t=>t.id===e));t>-1&&(Ye.synchronizers[t].destroy(),Ye.synchronizers.splice(t,1))};var gp=C(485),vp=C.n(gp);class mp extends fc{constructor(e,t,n,o,i){super(o||mp.getUniqueInstanceName("image-cursor"),i),re(this,"url",void 0),re(this,"x",void 0),re(this,"y",void 0),this.url=e,this.x=Number(t)||0,this.y=Number(n)||0}getStyleProperty(){const{url:e,x:t,y:n}=this;let o="url('".concat(e,"')");return t>=0&&n>=0&&(t>0||n>0)&&(o+=" ".concat(t," ").concat(n)),this.addFallbackStyleProperty(o)}static getUniqueInstanceName(e){return"".concat(e,"-").concat(ne.utilities.getRuntimeId(mp))}}const pp={iconContent:"",iconSize:16,viewBox:{x:16,y:16},mousePoint:{x:8,y:8},mousePointerGroupString:'\n <path stroke="{{color}}" d="M8 16L8 0"></path>\n <path stroke="{{color}}" d="M16 8L0 8"></path>\n '},fp={x:127,y:60},Ip='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',wp='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n<rect fill="{{color}}" x="95.84" y="9.38" width="15.85" height="47.14"/>\n',Ep='<path fill="{{color}}" d="M82.89,10a12.09,12.09,0,0,0-16.8-2.5l-27.5,20.4-8.5-6.3a2.93,2.93,0,0,1-1.1-3,14.66,14.66,0,0,0,.1-6.6,14.08,14.08,0,1,0-6.5,15.2,2.87,2.87,0,0,1,3.2.2l8.2,6.1-8.2,6.1a2.87,2.87,0,0,1-3.2.2,14.16,14.16,0,1,0,6.7,14.4,14,14,0,0,0-.3-5.8,2.93,2.93,0,0,1,1.1-3l8.5-6.3,27.5,20.4A11.91,11.91,0,0,0,82.89,57l-31.7-23.5ZM15.29,21a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,21Zm0,36.8a5.9,5.9,0,1,1,5.9-5.9A5.91,5.91,0,0,1,15.29,57.77Zm28.3-21.5a2.8,2.8,0,1,1,2.8-2.8A2.8,2.8,0,0,1,43.59,36.27Z" transform="translate(-1.17 -0.96)"/>',Cp='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',_p='<path fill="{{color}}" d="M40.77,2.25A31.92,31.92,0,1,0,72.69,34.16,31.92,31.92,0,0,0,40.77,2.25Zm0,57.63A25.71,25.71,0,1,1,66.48,34.16,25.71,25.71,0,0,1,40.77,59.87Z" transform="translate(-8.86 -2.25)"/>',bp={Angle:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1203 544q0 13-10 23l-393 393 393 393q10 10 10 23t-10 23l-50\n 50q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l466-466q10-10 23-10t23\n 10l50 50q10 10 10 23z" />',viewBox:{x:1792,y:1792}}),ArrowAnnotate:Dp(pp,{iconContent:'<g id="arrowAnnotate-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="arrowAnnotate-arrow" d="M23,7 l-15,15 M7,17 l0,6 6,0" stroke-width="2" />\n </g>',viewBox:{x:24,y:24}}),Bidirectional:Dp(pp,{iconContent:'<g fill="{{color}}" stroke-width="3" stroke="{{color}}">\n <path d="M27.63 3.21L3.12 28.81"></path>\n <path d="M27.63 15.75L15.27 4.43"></path>\n <path d="M16.5 4.28C16.5 4.96 15.95 5.51 15.27 5.51C14.59 5.51 14.03 4.96 14.03 4.28C14.03 3.59 14.59 3.04 15.27 3.04C15.95 3.04 16.5 3.59 16.5 4.28Z" ></path>\n <path d="M28.87 3.19C28.87 3.87 28.31 4.43 27.63 4.43C26.95 4.43 26.4 3.87 26.4 3.19C26.4 2.51 26.95 1.95 27.63 1.95C28.31 1.95 28.87 2.51 28.87 3.19Z"></path>\n <path d="M28.87 15.75C28.87 16.43 28.31 16.99 27.63 16.99C26.95 16.99 26.4 16.43 26.4 15.75C26.4 15.07 26.95 14.51 27.63 14.51C28.31 14.51 28.87 15.07 28.87 15.75Z"></path>\n <path d="M4.73 28.44C4.73 29.12 4.17 29.68 3.49 29.68C2.81 29.68 2.25 29.12 2.25 28.44C2.25 27.76 2.81 27.2 3.49 27.2C4.17 27.2 4.73 27.76 4.73 28.44Z"></path>\n </g>',viewBox:{x:48,y:48}}),CobbAngle:Dp(pp,{iconContent:'<g stroke="{{color}}" stroke-width="3">\n <path d="M28.59 2.34L3.82 12.32"></path>\n <path d="M28.59 29.66L3.82 19.68"></path>\n <path stroke-dasharray="2" fill-opacity="0" d="M12.37\n 23.06C12.67 22.36 12.85 21.93 12.92 21.76C14.6 17.8 14.68 13.35 13.15\n 9.33C13.11 9.24 13.02 9 12.88 8.63">\n </path>\n </g>',viewBox:{x:32,y:32}}),CircleROI:Dp(pp,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Dp(pp,{iconContent:'<path stroke="{{color}}" fill="none" stroke-width="3" d="M30.74 15.76C30.74 20.99 24.14 25.23 16\n 25.23C7.86 25.23 1.26 20.99 1.26 15.76C1.26 10.54 7.86 6.3 16 6.3C24.14\n 6.3 30.74 10.54 30.74 15.76Z" />',viewBox:{x:32,y:32}}),FreehandROI:Dp(pp,{iconContent:'<g fill="{{color}}" stroke="{{color}}" stroke-width="2">\n <ellipse ry="1" rx="1" id="svg_3" cy="4.240343" cx="14.306499"/>\n <line id="svg_4" y2="3.58462" x2="12.242186" y1="3.997482" x1="13.432202"/>\n <line id="svg_5" y2="3.268901" x2="10.857882" y1="3.608906" x1="12.387902"/>\n <line id="svg_6" y2="3.147471" x2="9.740724" y1="3.293187" x1="10.955026"/>\n <line id="svg_7" y2="3.147471" x2="8.089274" y1="3.196043" x1="9.983585"/>\n <line id="svg_8" y2="3.268901" x2="6.874972" y1="3.123185" x1="8.307848"/>\n <line id="svg_9" y2="3.657478" x2="5.587812" y1="3.220329" x1="7.020688"/>\n <line id="svg_10" y2="4.046054" x2="4.737801" y1="3.560334" x1="5.854959"/>\n <line id="svg_11" y2="4.337487" x2="4.300652" y1="3.997482" x1="4.834945"/>\n <line id="svg_12" y2="4.726063" x2="3.88779" y1="4.191771" x1="4.470655"/>\n <line id="svg_15" y2="5.3575" x2="3.377783" y1="4.604633" x1="3.960648"/>\n <line id="svg_16" y2="6.183226" x2="2.916348" y1="5.138926" x1="3.547785"/>\n <line id="svg_17" y2="6.960379" x2="2.770632" y1="5.867507" x1="3.037779"/>\n <line id="svg_18" y2="7.713246" x2="2.673488" y1="6.741804" x1="2.819204"/>\n <line id="svg_19" y2="8.684687" x2="2.697774" y1="7.616102" x1="2.673488"/>\n <line id="svg_20" y2="9.753273" x2="2.892062" y1="8.611829" x1="2.697774"/>\n <line id="svg_21" y2="10.724714" x2="3.134923" y1="9.534698" x1="2.84349"/>\n <line id="svg_23" y2="11.647583" x2="3.596357" y1="10.578998" x1="3.086351"/>\n <line id="svg_25" y2="12.521881" x2="4.276366" y1="11.501867" x1="3.499213"/>\n <line id="svg_26" y2="13.930471" x2="5.830673" y1="12.376165" x1="4.13065"/>\n <line id="svg_28" y2="14.707624" x2="7.263549" y1="13.881899" x1="5.733528"/>\n <line id="svg_29" y2="15.339061" x2="8.963571" y1="14.61048" x1="7.06926"/>\n <line id="svg_30" y2="15.581921" x2="10.882168" y1="15.314775" x1="8.817855"/>\n <line id="svg_31" y2="15.460491" x2="12.023612" y1="15.581921" x1="10.785024"/>\n <line id="svg_33" y2="15.120487" x2="13.092197" y1="15.484777" x1="11.877895"/>\n <line id="svg_34" y2="14.586194" x2="13.86935" y1="15.217631" x1="12.897909"/>\n <line id="svg_35" y2="13.833327" x2="14.597931" y1="14.756196" x1="13.699348"/>\n <line id="svg_37" y2="12.716169" x2="15.180796" y1="13.881899" x1="14.549359"/>\n <line id="svg_39" y2="11.429009" x2="15.520801" y1="12.813313" x1="15.15651"/>\n <ellipse ry="1" rx="1" id="svg_40" cy="10.967574" cx="15.520801"/>\n </g>',viewBox:{x:18,y:18}}),FreehandROISculptor:Dp(pp,{iconContent:'<g id="icon-freehand-sculpt" fill="none" stroke-width="1.5" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <line id="svg_1" y2="2.559367" x2="10.184807" y1="4.467781" x1="8.81711"/>\n <line id="svg_4" y2="1.493836" x2="11.727442" y1="2.766112" x1="10.089386"/>\n <line id="svg_7" y2="1.080346" x2="13.047428" y1="1.748291" x1="11.345759"/>\n <line id="svg_8" y2="1.000829" x2="14.351511" y1="1.112153" x1="12.77707"/>\n <line id="svg_9" y2="1.350705" x2="15.242104" y1="0.905408" x1="13.969828"/>\n <line id="svg_10" y2="2.098167" x2="15.862339" y1="1.14396" x1="14.955842"/>\n <line id="svg_11" y2="3.195505" x2="16.41896" y1="1.939133" x1="15.766918"/>\n <line id="svg_12" y2="4.292843" x2="16.530284" y1="2.925147" x1="16.387153"/>\n <line id="svg_16" y2="5.644637" x2="16.196311" y1="3.831643" x1="16.593898"/>\n <line id="svg_18" y2="7.266789" x2="15.623787" y1="5.19934" x1="16.275829"/>\n <line id="svg_19" y2="10.813258" x2="14.526449" y1="6.726071" x1="15.766918"/>\n <line id="svg_20" y2="5.056209" x2="8.085552" y1="4.181519" x1="8.976145"/>\n <line id="svg_23" y2="5.326568" x2="7.481221" y1="4.78585" x1="8.403621"/>\n <line id="svg_24" y2="5.565119" x2="6.749662" y1="5.294761" x1="7.624352"/>\n <line id="svg_25" y2="5.994512" x2="5.429675" y1="5.533312" x1="6.956407"/>\n <line id="svg_27" y2="6.551133" x2="4.284627" y1="5.962706" x1="5.572807"/>\n <line id="svg_28" y2="7.584858" x2="3.044158" y1="6.392099" x1="4.427758"/>\n <line id="svg_29" y2="8.84123" x2="2.185372" y1="7.489437" x1="3.219096"/>\n <line id="svg_31" y2="10.606513" x2="1.644654" y1="8.602678" x1="2.280792"/>\n <line id="svg_32" y2="13.214679" x2="1.48562" y1="10.352058" x1="1.724171"/>\n <line id="svg_33" y2="14.375631" x2="1.676461" y1="12.992031" x1="1.453813"/>\n <line id="svg_34" y2="15.298031" x2="2.264889" y1="14.152983" x1="1.517427"/>\n <line id="svg_35" y2="16.172721" x2="3.521261" y1="14.948155" x1="1.915013"/>\n <line id="svg_36" y2="16.824762" x2="5.207027" y1="15.997783" x1="3.28271"/>\n <line id="svg_38" y2="17.063314" x2="7.035924" y1="16.745245" x1="4.968475"/>\n <line id="svg_39" y2="16.888376" x2="9.278311" y1="17.047411" x1="6.733758"/>\n <line id="svg_40" y2="16.284045" x2="10.661911" y1="16.983797" x1="8.992048"/>\n <line id="svg_41" y2="15.313934" x2="11.647925" y1="16.395369" x1="10.455166"/>\n <line id="svg_44" y2="13.898527" x2="12.82478" y1="15.425259" x1="11.504794"/>\n <line id="svg_45" y2="12.037824" x2="14.144766" y1="14.312017" x1="12.522614"/>\n <line id="svg_47" y2="10.59061" x2="14.605966" y1="12.228665" x1="13.953925"/>\n <ellipse ry="1" rx="1" id="svg_48" cy="3.982726" cx="13.460918"/>\n </g>',viewBox:{x:18,y:18}}),Length:Dp(pp,{iconContent:'<g id="length-group" fill="none" stroke-width="1" stroke="{{color}}" stroke-linecap="round" stroke-linejoin="round">\n <path id="length-dashes" d="m22.5,6 -16.5,16.5" stroke-width="3" stroke-dasharray="0.6666,5" />\n </g>',viewBox:{x:24,y:24}}),Probe:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1152 896q0 106-75 181t-181 75-181-75-75-181 75-181 181-75 181 75\n 75 181zm-256-544q-148 0-273 73t-198 198-73 273 73 273 198 198 273 73 273-73\n 198-198 73-273-73-273-198-198-273-73zm768 544q0 209-103 385.5t-279.5\n 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5\n 385.5-103 385.5 103 279.5 279.5 103 385.5z" />',viewBox:{x:1792,y:1792}}),RectangleROI:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1312 256h-832q-66 0-113 47t-47 113v832q0 66 47\n 113t113 47h832q66 0 113-47t47-113v-832q0-66-47-113t-113-47zm288 160v832q0\n 119-84.5 203.5t-203.5 84.5h-832q-119 0-203.5-84.5t-84.5-203.5v-832q0-119\n 84.5-203.5t203.5-84.5h832q119 0 203.5 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),TextMarker:Dp(pp,{iconContent:'<path fill="{{color}}" d="M789 559l-170 450q33 0 136.5 2t160.5 2q19 0\n 57-2-87-253-184-452zm-725 1105l2-79q23-7 56-12.5t57-10.5 49.5-14.5 44.5-29\n 31-50.5l237-616 280-724h128q8 14 11 21l205 480q33 78 106 257.5t114 274.5q15\n 34 58 144.5t72 168.5q20 45 35 57 19 15 88 29.5t84 20.5q6 38 6 57 0 5-.5\n 13.5t-.5 12.5q-63 0-190-8t-191-8q-76 0-215 7t-178 8q0-43 4-78l131-28q1 0\n 12.5-2.5t15.5-3.5 14.5-4.5 15-6.5 11-8 9-11\n 2.5-14q0-16-31-96.5t-72-177.5-42-100l-450-2q-26 58-76.5 195.5t-50.5 162.5q0\n 22 14 37.5t43.5 24.5 48.5 13.5 57 8.5 41 4q1 19 1 58 0 9-2 27-58\n 0-174.5-10t-174.5-10q-8 0-26.5 4t-21.5 4q-80 14-188 14z" />',viewBox:{x:1792,y:1792}}),Crosshairs:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1325 1024h-109q-26 0-45-19t-19-45v-128q0-26\n 19-45t45-19h109q-32-108-112.5-188.5t-188.5-112.5v109q0 26-19 45t-45\n 19h-128q-26 0-45-19t-19-45v-109q-108 32-188.5 112.5t-112.5 188.5h109q26\n 0 45 19t19 45v128q0 26-19 45t-45 19h-109q32 108 112.5 188.5t188.5\n 112.5v-109q0-26 19-45t45-19h128q26 0 45 19t19 45v109q108-32\n 188.5-112.5t112.5-188.5zm339-192v128q0 26-19 45t-45 19h-143q-37 161-154.5\n 278.5t-278.5 154.5v143q0 26-19 45t-45 19h-128q-26\n 0-45-19t-19-45v-143q-161-37-278.5-154.5t-154.5-278.5h-143q-26\n 0-45-19t-19-45v-128q0-26 19-45t45-19h143q37-161\n 154.5-278.5t278.5-154.5v-143q0-26 19-45t45-19h128q26 0 45 19t19 45v143q161\n 37 278.5 154.5t154.5 278.5h143q26 0 45 19t19 45z" />',viewBox:{x:1792,y:1792}}),Eraser:Dp(pp,{iconContent:'<path transform="translate(0,1792) scale(1,-1)" fill="{{color}}" d="M960 1408l336-384h-768l-336 384h768zm1013-1077q15\n 34 9.5 71.5t-30.5 65.5l-896 1024q-38 44-96 44h-768q-38\n 0-69.5-20.5t-47.5-54.5q-15-34-9.5-71.5t30.5-65.5l896-1024q38-44 96-44h768q38\n 0 69.5 20.5t47.5 54.5z" />',viewBox:{x:2048,y:1792}}),Magnify:Dp(pp,{iconContent:'<path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />',viewBox:{x:512,y:512}}),Pan:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1411 541l-355 355 355 355 144-144q29-31 70-14 39 17\n 39 59v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39 14-69l144-144-355-355-355\n 355 144 144q31 30 14 69-17 40-59 40h-448q-26 0-45-19t-19-45v-448q0-42 40-59\n 39-17 69 14l144 144 355-355-355-355-144 144q-19 19-45 19-12\n 0-24-5-40-17-40-59v-448q0-26 19-45t45-19h448q42 0 59 40 17 39-14 69l-144\n 144 355 355 355-355-144-144q-31-30-14-69 17-40 59-40h448q26 0 45 19t19\n 45v448q0 42-39 59-13 5-25 5-26 0-45-19z" />',viewBox:{x:1792,y:1792}}),Rotate:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1664 256v448q0 26-19 45t-45 19h-448q-42 0-59-40-17-39\n 14-69l138-138q-148-137-349-137-104 0-198.5 40.5t-163.5 109.5-109.5\n 163.5-40.5 198.5 40.5 198.5 109.5 163.5 163.5 109.5 198.5 40.5q119 0\n 225-52t179-147q7-10 23-12 15 0 25 9l137 138q9 8 9.5 20.5t-7.5 22.5q-109\n 132-264 204.5t-327 72.5q-156 0-298-61t-245-164-164-245-61-298 61-298\n 164-245 245-164 298-61q147 0 284.5 55.5t244.5 156.5l130-129q29-31 70-14\n 39 17 39 59z" />',viewBox:{x:1792,y:1792}}),StackScroll:Dp(pp,{iconContent:'<path fill="{{color}}" d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0\n 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547\n 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547\n 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z" />',viewBox:{x:24,y:28}}),WindowLevelRegion:Dp(pp,{iconContent:'<path fill="{{color}}" d="M1664 416v960q0 119-84.5 203.5t-203.5 84.5h-960q-119\n 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5\n 84.5t84.5 203.5z" />',viewBox:{x:1792,y:1792}}),WindowLevel:Dp(pp,{iconContent:'\n <path fill="{{color}}" d="M14.5,3.5 a1 1 0 0 1 -11,11 Z" stroke="none" opacity="0.8" />\n <circle cx="9" cy="9" r="8" fill="none" stroke-width="2" stroke="{{color}}" />',viewBox:{x:18,y:18}}),Zoom:Dp(pp,{iconContent:'\n <path fill="{{color}}" d="M508.5 481.6l-129-129c-2.3-2.3-5.3-3.5-8.5-3.5h-10.3C395\n 312 416 262.5 416 208 416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c54.5\n 0 104-21 141.1-55.2V371c0 3.2 1.3 6.2 3.5 8.5l129 129c4.7 4.7 12.3 4.7 17\n 0l9.9-9.9c4.7-4.7 4.7-12.3 0-17zM208 384c-97.3 0-176-78.7-176-176S110.7 32 208\n 32s176 78.7 176 176-78.7 176-176 176z" />\n <path fill="{{color}}" transform="scale(0.22,0.22) translate(1400,0)" d="M1216\n 320q0 26-19 45t-45 19h-128v1024h128q26 0 45 19t19 45-19 45l-256 256q-19\n 19-45 19t-45-19l-256-256q-19-19-19-45t19-45 45-19h128v-1024h-128q-26\n 0-45-19t-19-45 19-45l256-256q19-19 45-19t45 19l256 256q19 19 19 45z" />',viewBox:{x:640,y:512}}),SegmentationFreeHandEraseInside:Dp(pp,{iconContent:"".concat(Ep," ").concat(Ip),viewBox:fp}),SegmentationFreeHandFillInside:Dp(pp,{iconContent:"".concat(Ep," ").concat(wp),viewBox:fp}),SegmentationFreeHandEraseOutside:Dp(pp,{iconContent:"".concat(Ep," ").concat(Ip),viewBox:fp}),SegmentationFreeHandFillOutside:Dp(pp,{iconContent:"".concat(Ep," ").concat(wp),viewBox:fp}),SegmentationRectangleEraseInside:Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),RectangleScissor:Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.FILL_INSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.FILL_OUTSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(wp),viewBox:fp}),"RectangleScissor.ERASE_OUTSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),"RectangleScissor.ERASE_INSIDE":Dp(pp,{iconContent:"".concat(Cp," ").concat(Ip),viewBox:fp}),CircleScissor:Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp}),"CircleScissor.FILL_INSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp}),"CircleScissor.ERASE_OUTSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(Ip),viewBox:fp}),"CircleScissor.FILL_OUTSIDE":Dp(pp,{iconContent:"".concat(_p," ").concat(wp),viewBox:fp})};function Dp(e,t){return Object.assign(Object.create(e),t)}function Tp(e,t,n){bp[e]=Dp(pp,{iconContent:t,viewBox:n})}const Sp=Object.keys(bp),yp=Zc.Highlighted,Mp=Je.Active;class xp extends mp{constructor(e,t,n,o,i){super(e,t,n,o,i)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=Xc("color",{},yp,Mp));const o=function(e,t,n){return"".concat(t?"pointer":"cursor",":").concat(e,"/").concat(n)}(e,t,n);let i=super.getDefinedCursor(o);if(!i){const a=function(e){return bp[e]}(e);a&&(i=function(e,t,n,o,i){const{x:a,y:r}=e.mousePoint;return new xp(function(e,t,n){return URL.createObjectURL(function(e,t,n){const o=(t?Ap:Pp)(e,n);return new Blob([o],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:o}),a,r,t,i)}(a,o,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(o,i))}return i}}function Op(e,t){const n=Object(t),o=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>o(t)?n[t]+"":""))}function Pp(e,t){const{iconContent:n,iconSize:o,viewBox:i}=e;return Op('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(o,'" height="').concat(o,'" viewBox="0 0\n ').concat(i.x," ").concat(i.y,'">\n ').concat(n,"\n </svg>"),t)}function Ap(e,t){const{iconContent:n,iconSize:o,viewBox:i,mousePointerGroupString:a}=e,r=o/Math.max(i.x,i.y,1),s=16+o;return Op('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(s,'" height="').concat(s,'" viewBox="0 0 ').concat(s," ").concat(s,'">\n <g>').concat(a,'</g>\n <g transform="translate(16, 16) scale(').concat(r,')">').concat(n,"</g>\n </svg>"),t)}const{Active:Rp,Passive:Np,Enabled:Lp,Disabled:kp}=Je,Up=[{mouseButton:Zu.Primary}];class Vp{constructor(e){re(this,"id",void 0),re(this,"viewportsInfo",[]),re(this,"toolOptions",{}),re(this,"currentActivePrimaryToolName",null),re(this,"prevActivePrimaryToolName",null),re(this,"restoreToolOptions",{}),re(this,"_toolInstances",{}),this.id=e}getViewportIds(){return this.viewportsInfo.map((e=>{let{viewportId:t}=e;return t}))}getViewportsInfo(){return this.viewportsInfo.slice()}getToolInstance(e){const t=this._toolInstances[e];if(t)return t;console.warn("'".concat(e,"' is not registered with this toolGroup (").concat(this.id,")."))}getToolInstances(){return this._toolInstances}hasTool(e){return!!this._toolInstances[e]}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ye.tools[e],o=void 0!==e&&""!==e,i=this.toolOptions[e];if(!o)return void console.warn("Tool with configuration did not produce a toolName: ",t);if(!n)return void console.warn("'".concat(e,"' is not registered with the library. You need to use cornerstoneTools.addTool to register it."));if(i)return void console.warn("'".concat(e,"' is already registered for ToolGroup ").concat(this.id,"."));const{toolClass:a}=n,r=new a({name:e,toolGroupId:this.id,configuration:t});this._toolInstances[e]=r}addToolInstance(e,t){var n;let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=null===(n=Ye.tools[e])||void 0===n?void 0:n.toolClass;if(!i){const n=Ye.tools[t].toolClass;class o extends n{}o.toolName=e,i=o,Ye.tools[e]={toolClass:o}}this.addTool(i.toolName,o)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,ne.getRenderingEngines)();if(!t&&n.length>1)throw new Error("You must specify a renderingEngineId when there are multiple rendering engines.");const o=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:o});const i=this.getActivePrimaryMouseButtonTool();ne.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(i)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((o,i)=>{let a=!1;o.renderingEngineId===e&&(a=!0,t&&o.viewportId!==t&&(a=!1)),a&&n.push(i)})),n.length)for(let e=n.length-1;e>=0;e--)this.viewportsInfo.splice(n[e],1)}setActiveStrategy(e,t){const n=this._toolInstances[e];void 0!==n?n.setActiveStrategy(t):console.warn("Tool ".concat(e," not added to toolGroup, can't set tool configuration."))}setToolMode(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e?t!==Je.Active?t!==Je.Passive?t!==Je.Enabled?t!==Je.Disabled?console.warn("setToolMode: mode must be defined"):this.setToolDisabled(e):this.setToolEnabled(e):this.setToolPassive(e):this.setToolActive(e,n||this.restoreToolOptions[e]):console.warn("setToolMode: toolName must be defined")}setToolActive(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=this._toolInstances[e];if(void 0===n)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));if(!n)return void console.warn("'".concat(e,"' instance ").concat(n," is not registered with this toolGroup, can't set tool mode."));const o={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,o=void 0!==t.mouseButton;return e.some((e=>Wp(e,t)))||!n&&!o||e.push(t),e}),[]),mode:Rp};this.toolOptions[e]=o,this._toolInstances[e].mode=Rp;const i=ne.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&i)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&i){const e=fc.getDefinedCursor("default");this._setCursorForViewports(e)}this._hasMousePrimaryButtonBinding(t)&&(null===this.prevActivePrimaryToolName?this.prevActivePrimaryToolName=e:this.prevActivePrimaryToolName=this.currentActivePrimaryToolName,this.currentActivePrimaryToolName=e),"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,ne.triggerEvent)(ne.eventTarget,ie.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,Rp,t)}setToolPassive(e,t){const n=this._toolInstances[e];if(void 0===n)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const o=this.getToolOptions(e),i=Object.assign({bindings:o?o.bindings:[]},o,{mode:Np}),a=Array.isArray(null==t?void 0:t.removeAllBindings)?t.removeAllBindings:this.getDefaultPrimaryBindings();i.bindings=i.bindings.filter((e=>!0!==(null==t?void 0:t.removeAllBindings)&&!a.some((t=>Wp(e,t)))));let r=Np;0!==i.bindings.length&&(r=Rp,i.mode=r),this.toolOptions[e]=i,n.mode=r,"function"==typeof n.onSetToolPassive&&n.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Np)}setToolEnabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const n={bindings:[],mode:Lp};this.toolOptions[e]=n,t.mode=Lp,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,Lp)}setToolDisabled(e){const t=this._toolInstances[e];if(void 0===t)return void console.warn("Tool ".concat(e," not added to toolGroup, can't set tool mode."));const n={bindings:[],mode:kp};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=kp,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,kp)}getToolOptions(e){const t=this.toolOptions[e];if(void 0!==t)return t}getActivePrimaryMouseButtonTool(){return Object.keys(this.toolOptions).find((e=>{const t=this.toolOptions[e];return t.mode===Rp&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,o;return t&&(n="".concat(e,".").concat(t),o=xp.getDefinedCursor(n,!0),o)?o:(n="".concat(e),o=xp.getDefinedCursor(n,!0),o||(n=e,o=xp.getDefinedCursor(n,!0),o||fc.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:o}=t;const i=(0,ne.getEnabledElementByIds)(o,n);if(!i)return;const{viewport:a}=i;Cc(a.element,e)}))}setToolConfiguration(e,t,n){const o=this._toolInstances[e];if(void 0===o)return console.warn("Tool ".concat(e," not present, can't set tool configuration.")),!1;let i;return i=n?t:Object.assign(o.configuration,t),o.configuration=i,"function"==typeof o.onSetToolConfiguration&&o.onSetToolConfiguration(),this._renderViewports(),!0}getDefaultMousePrimary(){return Zu.Primary}getDefaultPrimaryBindings(){return Up}getToolConfiguration(e,t){if(void 0===this._toolInstances[e])return void console.warn("Tool ".concat(e," not present, can't set tool configuration."));const n=vp()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return le()(n)}getPrevActivePrimaryToolName(){return this.prevActivePrimaryToolName}clone(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=ei(e);return o?(console.warn("ToolGroup ".concat(e," already exists")),o):(o=Hp(e),n=null!==(t=n)&&void 0!==t?t:()=>!0,Object.keys(this._toolInstances).filter(n).forEach((e=>{var t;const n=this._toolInstances[e],i=this.toolOptions[e],a=n.mode;o.addTool(e),o.setToolMode(e,a,{bindings:null!==(t=i.bindings)&&void 0!==t?t:[]})})),o)}_hasMousePrimaryButtonBinding(e){var t;const n=this.getDefaultPrimaryBindings();return null==e||null===(t=e.bindings)||void 0===t?void 0:t.some((e=>n.some((t=>Wp(e,t)))))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,ne.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const o={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,ne.triggerEvent)(ne.eventTarget,ie.TOOL_MODE_CHANGED,o)}}function Wp(e,t){return e.mouseButton===t.mouseButton&&e.numTouchPoints===t.numTouchPoints&&e.modifierKey===t.modifierKey}const Hp=function(e){if(Ye.toolGroups.some((t=>t.id===e)))return void console.warn("'".concat(e,"' already exists."));const t=new Vp(e);return Ye.toolGroups.push(t),t},Bp=function(){return Ye.toolGroups};function Fp(e,t,n,o){const{camera:i}=o.detail,a=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId);r.setCamera(i),r.render()}const{CAMERA_MODIFIED:Gp}=ne.Enums.Events;function qp(e){return lp(e,Gp,Fp)}function jp(e,t,n,o,i){const a=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId),s=a.getViewport(t.viewportId).getViewPresentation(i);r.setView(null,s),r.render()}const{CAMERA_MODIFIED:zp}=ne.Enums.Events;function Kp(e,t){return lp(e,zp,jp,t)}function Yp(e,t,n,o,i){const a=o.detail,{volumeId:r,range:s,invertStateChanged:l,invert:c,colormap:d}=a,h=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!h)throw new Error("Rendering Engine does not exist: ".concat(n.renderingEngineId));const u=h.getViewport(n.viewportId),g={voiRange:s};if(null!=i&&i.syncInvertState&&l&&(g.invert=c),null!=i&&i.syncColormap&&d&&(g.colormap=d),u instanceof ne.BaseVolumeViewport)u._actors&&u._actors.size>1?u.setProperties(g,r):u.setProperties(g);else{if(!(u instanceof ne.StackViewport))throw new Error("Viewport type not supported.");u.setProperties(g)}u.render()}function Xp(e,t){return t=Object.assign({syncInvertState:!0,syncColormap:!0},t),lp(e,ne.Enums.Events.VOI_MODIFIED,Yp,{auxiliaryEventNames:[ne.Enums.Events.COLORMAP_MODIFIED],...t})}function Jp(e,t,n){const o=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!o)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const i=e.getOptions(n.viewportId),a=o.getViewport(n.viewportId),r=o.getViewport(t.viewportId);if(!1!==(null==i?void 0:i.syncZoom)){const e=r.getZoom();a.setZoom(e)}if(!1!==(null==i?void 0:i.syncPan)){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:Zp}=ne.Enums.Events;function $p(e){return lp(e,Zp,Jp)}const Qp=(e,t)=>ne.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function ef(e,t,n){const o=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!o)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const i=o.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(null!=a&&a.disabled)return;const r=o.getViewport(n.viewportId),s=i.getCurrentImageId(),l=ne.metaData.get("imagePlaneModule",s).imagePositionPatient,c=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:o}=t.getCamera(),i=aa.vec3.dot(n,o);return Math.abs(i)>.9}(i,r))return;let d=Qp(n.viewportId,t.viewportId);if(!d&&(i.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==(null==a?void 0:a.useInitialPosition)?d=aa.mat4.identity(aa.mat4.create()):(ne.utilities.calculateViewportsSpatialRegistration(i,r),d=Qp(n.viewportId,t.viewportId)),!d))return;const h=aa.vec3.transformMat4(aa.vec3.create(),l,d),u=(g=h,c.reduce(((e,t,n)=>{const{imagePositionPatient:o}=ne.metaData.get("imagePlaneModule",t),i=aa.vec3.distance(o,g);return i<e.distance?{distance:i,index:n}:e}),{distance:1/0,index:-1}));var g;let v=u.index;r instanceof ne.VolumeViewport&&(v=c.length-u.index-1),-1!==u.index&&r.getCurrentImageIdIndex()!==u.index&&await Sr(r.element,{imageIndex:v})}const{STACK_NEW_IMAGE:tf,VOLUME_NEW_IMAGE:nf}=ne.Enums.Events;function of(e){return lp(e,tf,ef,{auxiliaryEventNames:[nf]})}function af(e,t,n){var o,i,a,r;const s=(0,ne.getRenderingEngine)(n.renderingEngineId);if(!s)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const l=s.getViewport(n.viewportId),c=null===(o=(i=s.getViewport(t.viewportId)).getSlabThickness)||void 0===o?void 0:o.call(i);c&&(null===(a=(r=l).setSlabThickness)||void 0===a||a.call(r,c),l.render())}const{CAMERA_MODIFIED:rf}=ne.Enums.Events;function sf(e){return lp(e,rf,af)}const lf=of,cf=function(e,t,n,o){let i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},i),d=l||s,h=hc(t,"ellipse",n),u=e.getSvgNode(h),[g,v,m,p]=o,f=Math.hypot(m[0]-p[0],m[1]-p[1]),I=Math.hypot(v[0]-g[0],v[1]-g[1]),w=180*Math.atan2(m[1]-p[1],m[0]-p[0])/Math.PI,E=[(m[0]+p[0])/2,(v[1]+g[1])/2],C=f/2,_=I/2,b={cx:"".concat(E[0]),cy:"".concat(E[1]),rx:"".concat(C),ry:"".concat(_),stroke:r,fill:"transparent",transform:"rotate(".concat(w," ").concat(E[0]," ").concat(E[1],")"),"stroke-width":d,"stroke-dasharray":c};if(u)uc(b,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),gc(b,t),e.appendNode(t,h)}},df=function(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(o[0]+i[0])/2,o[1]],l=[(o[0]+i[0])/2,i[1]],c=[o[0],(o[1]+i[1])/2],d=[i[0],(o[1]+i[1])/2];cf(e,t,n,[l,s,c,d],a={},r="")};function hf(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(o[0])||isNaN(o[1])||isNaN(i[0])||isNaN(i[1]))return;const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a);rd(e,t,n,o,i,{color:r,width:s,lineWidth:l,lineDash:c});const d=Math.atan2(i[1]-o[1],i[0]-o[0]),h={start:[i[0]-10*Math.cos(d-Math.PI/7),i[1]-10*Math.sin(d-Math.PI/7)],end:i},u={start:[i[0]-10*Math.cos(d+Math.PI/7),i[1]-10*Math.sin(d+Math.PI/7)],end:i};rd(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),rd(e,t,"3",u.start,u.end,{color:r,width:s,lineWidth:l})}function uf(e,t,n,o,i){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:c}=Object.assign({color:"rgb(0, 255, 0)",width:"2",lineWidth:void 0,lineDash:void 0},a),d=l||s,h=hc(t,"rect",n),u=e.getSvgNode(h),g=[Math.min(o[0],i[0]),Math.min(o[1],i[1])],v=Math.abs(o[0]-i[0]),m=Math.abs(o[1]-i[1]),p={x:"".concat(g[0]),y:"".concat(g[1]),width:"".concat(v),height:"".concat(m),stroke:r,fill:"black","stroke-width":d,"stroke-dasharray":c};if(u)uc(p,u),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");gc(p,t),e.appendNode(t,h)}}const gf=function(e,t){let n=xp.getDefinedCursor(t,!0);n||(n=fc.getDefinedCursor(t)),n||(console.log("Cursor ".concat(t," is not defined either as SVG or as a standard cursor.")),n=fc.getDefinedCursor(t)),_c(e,n)},vf=[...Sp,...wc],mf=function(e,t,n){const o=Xc("textBoxFontSize",e,t,n),i=Xc("textBoxFontFamily",e,t,n);return"".concat(o,"px ").concat(i)};class pf{constructor(){re(this,"annotationUIDs",new Set),re(this,"_isVisible",!0),re(this,"visibleFilter",void 0),this.visibleFilter=this.unboundVisibleFilter.bind(this)}unboundVisibleFilter(e){return!this._isVisible||!this.annotationUIDs.has(e)}has(e){return this.annotationUIDs.has(e)}setVisible(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;this._isVisible!==e&&(this._isVisible=e,this.annotationUIDs.forEach((o=>{const i=pt(o);if(!i)return void this.annotationUIDs.delete(o);if(i.isVisible===e)return;if(!e&&!1===(null==n?void 0:n(o)))return;i.isVisible=e;const a={...t,annotation:i};(0,ne.triggerEvent)(ne.eventTarget,ie.ANNOTATION_MODIFIED,a)})))}get isVisible(){return this._isVisible}findNearby(e,t){const n=[...this.annotationUIDs];if(0===n.length)return null;if(!e)return n[1===t?0:n.length-1];const o=n.indexOf(e);return-1===o||o+t<0||o+t>=n.length?null:n[o+t]}add(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.add(e)))}remove(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t.forEach((e=>this.annotationUIDs.delete(e)))}clear(){this.annotationUIDs.clear()}}const ff=function(e){(function(e){if(!e||0===e.length)throw new Error("The segmentationInputArray is undefined or an empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("Undefined segmentationInput.segmentationId. Please provide a valid segmentationId");if(void 0===e.representation)throw new Error("Undefined segmentationInput.representation. Please provide a valid representation");e.representation.type===Et.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");Ui(e.representation.data)}(e)}))})(e),e.map((e=>{Gt(le()(e))}))};class If extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]})}touchDragCallback(e){this._dragCallback(e)}mouseDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),i=n.world,a=o.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-i[0],s[1]-i[1],s[2]-i[2]],c=[r[0]-i[0],r[1]-i[1],r[2]-i[2]];o.viewport.setCamera({focalPoint:c,position:l}),o.viewport.render()}}re(If,"toolName",void 0),If.toolName="Pan";const wf=If;class Ef extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{rotateIncrementDegrees:2}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"cleanUp",void 0),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,a=i.getDefaultActor().actor.getMapper(),r=a.getSampleDistance();return a.setSampleDistance(2*r),null!==this.cleanUp&&document.removeEventListener("mouseup",this.cleanUp),this.cleanUp=()=>{a.setSampleDistance(r),i.render()},document.addEventListener("mouseup",this.cleanUp,{once:!0}),!0})),re(this,"rotateCamera",((e,t,n,o)=>{const i=e.getVtkActiveCamera(),a=i.getViewUp(),r=i.getFocalPoint(),s=i.getPosition(),l=[0,0,0],c=[0,0,0],d=[0,0,0],h=aa.mat4.identity(new Float32Array(16));aa.mat4.translate(h,h,t),aa.mat4.rotate(h,h,o,n),aa.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),aa.vec3.transformMat4(l,s,h),aa.vec3.transformMat4(c,r,h),aa.mat4.identity(h),aa.mat4.rotate(h,h,o,n),aa.vec3.transformMat4(d,a,h),e.setCamera({position:l,viewUp:d,focalPoint:c})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:o}=e.detail,i=n.canvas,a=o.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,ne.getEnabledElement)(t),{viewport:l}=s,c=l.getCamera(),d=t.clientWidth,h=t.clientHeight,u=[i[0]/d,i[1]/h],g=[a[0]/d,a[1]/h],v=[.5*d,.5*h],m=l.canvasToWorld(v),p=(1+Math.abs(.5))**2,f=[g[0],0,0],I=[u[0],0,0],w=f[0]**2,E=I[0]**2,C=w>p?0:Math.sqrt(p-w),_=E>p?0:Math.sqrt(p-E),b=[f[0],0,C];yh().normalize(b);const D=[I[0],0,_];yh().normalize(D);const T=yh().dot(b,D);if(Math.abs(T)>1e-4){const e=-2*Math.acos(yh().clampValue(T,-1,1))*Math.sign(u[0]-g[0])*r,t=c.viewUp,n=c.viewPlaneNormal,o=[0,0,0],i=[0,0,0];yh().cross(t,n,o),yh().normalize(o),yh().cross(n,o,i),yh().normalize(i),yh().normalize(t),this.rotateCamera(l,m,i,e);const a=(g[1]-u[1])*r;this.rotateCamera(l,m,o,a),l.render()}}}re(Ef,"toolName",void 0),Ef.toolName="TrackballRotate";const Cf=Ef,{transformWorldToIndex:_f}=ne.utilities;class bf extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:Df}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"eventDispatchDetail",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{label:"",handles:{points:[[...i]]},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a}=this.editData,{viewportId:r,renderingEngine:s}=(0,ne.getEnabledElement)(n);this.eventDispatchDetail={viewportId:r,renderingEngineId:s.id},this._deactivateModify(n),bc(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(s,i),a&&et(o)})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...i],a.invalidated=!0;const l=(0,ne.getEnabledElement)(o),{renderingEngine:c}=l;Ua(c,r)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],r=o.annotationUID,h=o.data,u=h.handles.points[0],g=a.worldToCanvas(u);d.annotationUID=r;const{color:v}=this.getAnnotationStyle({annotation:o,styleSpecifier:d});if(h.cachedStats||(h.cachedStats={}),h.cachedStats[l]&&null!=h.cachedStats[l].value){if(o.invalidated&&(this._calculateCachedStats(o,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,index:null,value:null},this._calculateCachedStats(o,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;Fc(t,r,"0",[g],{color:v}),i=!0;const m=this.getLinkedTextBoxStyle(d,o);if(!m.visibility)continue;const p=this.configuration.getTextLines(h,l);if(p){const e=[g[0]+6,g[1]-6];ad(t,r,"0",p,[e[0],e[1]],m)}}return i}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==aa.vec2.distance(n,l)<o)return s}handleSelectedCallback(e,t){const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{renderingEngineId:i,viewport:a}=n,{element:r}=a,s=o.handles.points[0],{cachedStats:l}=o,c=Object.keys(l);for(let n=0;n<c.length;n++){const o=c[n],d={isPreScaled:vd(a,o),isSuvScaled:this.isSuvScaled(a,o,e.metadata.referencedImageId)},h=this.getTargetIdImage(o,t);if(!h)continue;const{dimensions:u,imageData:g,metadata:v}=h,m="getScalarData"in h?h.getScalarData():h.scalarData,p=v.Modality,f=_f(g,s);f[0]=Math.round(f[0]),f[1]=Math.round(f[1]),f[2]=Math.round(f[2]);const I=m.length/u[2]/u[1]/u[0];if(ne.utilities.indexWithinDimensions(f,u)){this.isHandleOutsideImage=!1;const t=u[0]*I,n=u[0]*u[1]*I,a=f[2]*n+f[1]*t+f[0]*I;let r,s=I>2?[m[a],m[a+1],m[a+2]]:m[a];if(o.startsWith("imageId:")){const e=o.split("imageId:")[1],t=ne.utilities.imageIdToURI(e),n=ne.utilities.getViewportsWithImageURI(t,i)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=mr(h,[f]),t=e.values.every((e=>null!==e));s=t?e.values:s,r=t?e.units:"raw"}else r=gd(p,e.metadata.referencedImageId,d);l[o]={index:f,value:s,Modality:p,modalityUnit:r}}else this.isHandleOutsideImage=!0,l[o]={index:f,Modality:p};e.invalidated=!1,Qe(e,r)}return l}}function Df(e,t){const n=e.cachedStats[t],{index:o,value:i,modalityUnit:a}=n;if(void 0===i)return;const r=[];if(r.push("(".concat(o[0],", ").concat(o[1],", ").concat(o[2],")")),i instanceof Array&&a instanceof Array)for(let e=0;e<i.length;e++)r.push("".concat(zu(i[e])," ").concat(a[e]));else r.push("".concat(zu(i)," ").concat(a));return r}re(bf,"toolName",void 0),bf.toolName="Probe";const Tf=bf;class Sf extends Tf{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:yf}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"eventDispatchDetail",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...i]]},cachedStats:{}}},g=Qs(o,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:g},this._activateModify(o),Dc(o),e.preventDefault(),Ua(s,g),u})),re(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e;if(!this.editData)return n;const i=this.filterInteractableAnnotationsForElement(o.element,[this.editData.annotation]);if(null==i||!i.length)return n;const a=this.getTargetId(o),r=o.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,c=l.annotationUID,d=l.data,h=d.handles.points[0],u=o.worldToCanvas(h);s.annotationUID=c;const{color:g}=this.getAnnotationStyle({annotation:l,styleSpecifier:s});if(vd(o,a),this.isSuvScaled(o,a,l.metadata.referencedImageId),d.cachedStats[a]&&null!=d.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(d.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;Fc(t,c,"0",[u],{color:g}),n=!0;const v=this.configuration.getTextLines(d,a);if(v){const e=[u[0]+6,u[1]-6];ad(t,c,"0",v,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function yf(e,t){const n=e.cachedStats[t],{index:o,value:i,modalityUnit:a}=n;if(void 0===i)return;const r=[];return r.push("(".concat(o[0],", ").concat(o[1],", ").concat(o[2],")")),r.push("".concat(i.toFixed(2)," ").concat(a)),r}re(Sf,"toolName",void 0),Sf.toolName="DragProbe";const Mf=Sf;class xf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),o=t[0]*t[1];let i,a;e instanceof Float32Array?(i=4,a=Float32Array):e instanceof Uint8Array?(i=1,a=Uint8Array):e instanceof Uint16Array?(i=2,a=Uint16Array):e instanceof Int16Array&&(i=2,a=Int16Array);const r=new a(e.buffer,n*o*i,o),{max:s,min:l}=this._getMinMax(r,o);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{renderingEngine:i,viewport:a}=o;let r,s,l,c,d,h,u=!1;const g=a.getProperties();if(a instanceof ne.VolumeViewport){const e=this.getTargetId(a);r=ne.utilities.getVolumeId(e),h=ne.utilities.getViewportsWithVolumeId(r,i.id),({lower:s,upper:l}=g.voiRange);const t=ne.cache.getVolume(r);if(!t)throw new Error("Volume not found "+r);c=t.metadata.Modality,u=t.scaling&&Object.keys(t.scaling).length>0}else{if(!g.voiRange)throw new Error("Viewport is not a valid type");{var v,m;c=a.modality,({lower:s,upper:l}=g.voiRange);const{preScale:e={scaled:!1}}=(null===(v=a.getImageData)||void 0===v?void 0:v.call(a))||{};u=e.scaled&&void 0!==(null===(m=e.scalingParameters)||void 0===m?void 0:m.suvbw)}}d="PT"===c&&u?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:u,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),d.lower>=d.upper||(a.setProperties({voiRange:d}),a.render(),a instanceof ne.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()})))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:o,clientHeight:i,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/i:this._getMultiplierFromDynamicRange(a,r)||4,o-=t[1]*l,o=s?Math.max(o,.1):o,{lower:n,upper:o}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:o,lower:i,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,o)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:c,windowCenter:d}=ne.utilities.windowLevel.toWindowLevel(i,a);return c+=s,d+=l,c=Math.max(c,1),ne.utilities.windowLevel.toLowHighRange(c,d)}_getMultiplierFromDynamicRange(e,t){let n;if(t){var o;const e=ne.cache.getVolume(t),{dimensions:i}=e,a=e.getScalarData(),r=this._getImageDynamicRangeFromMiddleSlice(a,i),s=null==e||null===(o=e.metadata)||void 0===o?void 0:o.BitsStored,l=s?2**s:1/0;n=Math.min(r,l)}else n=this._getImageDynamicRangeFromViewport(e);const i=n/1024;return i>1?Math.round(i):i}_getImageDynamicRangeFromViewport(e){const{imageData:t}=e.getImageData(),n=t.getDimensions();if(t.getRange){const e=t.getRange();return e[1]-e[0]}let o,i;if(o=t.getScalarData?t.getScalarData():t.getPointData().getScalars(),1!==n[2])return this._getImageDynamicRangeFromMiddleSlice(o,n);if(o.getRange)i=o.getRange();else{const{min:e,max:t}=this._getMinMax(o,o.length);i=[e,t]}return i[1]-i[0]}_getMinMax(e,t){let n=1/0,o=-1/0;for(let i=0;i<t;i++){const t=e[i];t<n&&(n=t),t>o&&(o=t)}return{max:o,min:n}}}re(xf,"toolName",void 0),xf.toolName="WindowLevel";const Of=xf;class Pf extends fi{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{zoomToCenter:!1,minZoomScale:.1,maxZoomScale:30,pinchToZoom:!0,pan:!0,invert:!1}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"initialMousePosWorld",void 0),re(this,"dirVec",void 0),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=o.world,a=(0,ne.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=i;let s=aa.vec3.fromValues(r[0]-i[0],r[1]-i[1],r[2]-i[2]);return s=aa.vec3.normalize(aa.vec3.create(),s),this.dirVec=s,!1})),re(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),re(this,"_dragParallelProjection",(function(t,n,o){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=i?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:c,focalPoint:d,position:h}=o,u=s*(5/l[1])*(e.configuration.invert?-1:1),g=(1-u)*c;let v=d,m=h;if(!e.configuration.zoomToCenter){const t=aa.vec3.distance(d,e.initialMousePosWorld);m=aa.vec3.scaleAndAdd(aa.vec3.create(),h,e.dirVec,-t*u),v=aa.vec3.scaleAndAdd(aa.vec3.create(),d,e.dirVec,-t*u)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:I,maxZoomScale:w}=e.configuration,E=a.clientHeight*f[1]*.5,C=E/g;let _=g,b=!1;p&&(C<I?(_=E/I,b=!0):C>=w&&(_=E/w,b=!0)),n.setCamera({parallelScale:_,focalPoint:b?d:v,position:b?h:m})})),re(this,"_dragPerspectiveProjection",(function(t,n,o){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=i?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:c,focalPoint:d,viewPlaneNormal:h}=o,u=yh().distance2BetweenPoints(c,d),g=Math.sqrt(u)/l[1],v=[-h[0],-h[1],-h[2]],m=e.configuration.invert?s/g:s*g;let p=m*v[0];c[0]+=p,d[0]+=p,p=m*v[1],c[1]+=p,d[1]+=p,p=m*v[2],c[2]+=p,d[2]+=p,n.setCamera({position:c,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)}_pinchCallback(e){if(e.detail.currentPointsList.length>1){const{element:t,currentPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i}=o,a=i.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=aa.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=aa.vec3.normalize(aa.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,i,a,!0):this._dragPerspectiveProjection(e,i,a,!0),i.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,ne.getEnabledElement)(t),{viewport:o}=n,i=o.getCamera();i.parallelProjection?this._dragParallelProjection(e,o,i):this._dragPerspectiveProjection(e,o,i),o.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),i=n.world,a=o.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-i[0],s[1]-i[1],s[2]-i[2]],c=[r[0]-i[0],r[1]-i[1],r[2]-i[2]];o.viewport.setCamera({focalPoint:c,position:l}),o.viewport.render()}}re(Pf,"toolName",void 0),Pf.toolName="Zoom";const Af=Pf;class Rf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1}}),re(this,"deltaY",void 0),this.deltaY=1}mouseDragCallback(e){this._dragCallback(e)}touchDragCallback(e){this._dragCallback(e)}_dragCallback(e){const{deltaPoints:t,viewportId:n,renderingEngineId:o}=e.detail,{viewport:i}=(0,ne.getEnabledElementByIds)(n,o),a=this.getTargetId(i),{debounceIfNotLoaded:r,invert:s,loop:l}=this.configuration,c=t.canvas[1];let d;i instanceof ne.VolumeViewport&&(d=a.split(/volumeId:|\?/)[1]);const h=this._getPixelPerImage(i),u=c+this.deltaY;if(h)if(Math.abs(u)>=h){const e=Math.round(u/h);Tr(i,{delta:s?-e:e,volumeId:d,debounceLoading:r,loop:l}),this.deltaY=u%h}else this.deltaY=u}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}re(Rf,"toolName",void 0),Rf.toolName="StackScroll";const Nf=Rf;function Lf(e,t){return 3===e[0].length?function(e,t){const[n,o]=e,[i,a]=t,r=aa.vec3.sub(aa.vec3.create(),o,n),s=aa.vec3.sub(aa.vec3.create(),i,a),l=aa.vec3.dot(r,s)/(aa.vec3.length(r)*aa.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,o]=e,[i,a]=t,r=aa.vec2.sub(aa.vec2.create(),o,n),s=aa.vec2.sub(aa.vec2.create(),i,a),l=aa.vec2.dot(r,s)/(aa.vec2.length(r)*aa.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class kf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:o}=e.detail,i=n.world,a=o.world,r=(0,ne.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),c=[.5*t.clientWidth,.5*t.clientHeight],d=s.canvasToWorld(c);let h=Lf([a,d],[d,i]);const{viewPlaneNormal:u,viewUp:g}=l,v=aa.vec3.sub(aa.vec3.create(),d,a),m=aa.vec3.sub(aa.vec3.create(),d,i),p=aa.vec3.cross(aa.vec3.create(),v,m);if(aa.vec3.dot(u,p)>0&&(h=-h),!Number.isNaN(h)){if(s instanceof ne.BaseVolumeViewport){const e=h*Math.PI/180,t=aa.mat4.identity(new Float32Array(16));aa.mat4.rotate(t,t,e,u);const n=aa.vec3.transformMat4(aa.vec3.create(),g,t);s.setCamera({viewUp:n})}else{const{rotation:e}=s.getProperties();s.setProperties({rotation:e+h})}s.render()}}}re(kf,"toolName",void 0),kf.toolName="PlanarRotate";const Uf=kf;class Vf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{invert:!1,debounceIfNotLoaded:!0,loop:!1,scrollSlabs:!1}}),re(this,"_configuration",void 0)}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:o}=t,{invert:i}=this.configuration,{viewport:a}=(0,ne.getEnabledElement)(n),r=o*(i?-1:1),s=this.getTargetId(a),l=ne.utilities.getVolumeId(s);Tr(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:l,scrollSlabs:this.configuration.scrollSlabs})}}re(Vf,"toolName",void 0),Vf.toolName="StackScrollMouseWheel";const Wf=Vf,Hf={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class Bf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{direction:Hf.Z,rotateIncrementDegrees:30}}),re(this,"_configuration",void 0)}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i}=o,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=i.getCamera(),{viewUp:l,position:c,focalPoint:d}=s,{direction:h}=n,[u,g,v]=d,[m,p,f]=a,I=h*(r*Math.PI)/180,w=[0,0,0],E=[0,0,0],C=[0,0,0],_=aa.mat4.identity(new Float32Array(16));aa.mat4.translate(_,_,[u,g,v]),aa.mat4.rotate(_,_,I,[m,p,f]),aa.mat4.translate(_,_,[-u,-g,-v]),aa.vec3.transformMat4(w,c,_),aa.vec3.transformMat4(E,d,_),aa.mat4.identity(_),aa.mat4.rotate(_,_,I,[m,p,f]),aa.vec3.transformMat4(C,l,_),i.setCamera({position:w,viewUp:C,focalPoint:E}),i.render()}}re(Bf,"toolName",void 0),Bf.toolName="VolumeRotateMouseWheel";const Ff=Bf;class Gf extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{targetViewportIds:[]}}),re(this,"_bounds",void 0)}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,o=(0,ne.getEnabledElement)(t),{viewport:i,renderingEngine:a}=o,r=this.getTargetId(i);if(!r.startsWith("volumeId"))throw new Error("MIPJumpToClickTool: targetId is not a volumeId, you should only use MIPJumpToClickTool with a volumeId as the targetId");const s=ne.utilities.getVolumeId(r);let l=-1/0;const c=Mh(i,n.world,s,((e,t)=>{if(e>l)return l=e,t}));if(!c||!c.length)return;const{targetViewportIds:d,toolGroupId:h}=this.configuration;a.getViewports().filter((e=>{if((null==d?void 0:d.indexOf(e.id))>=0)return!0;const t=Qo(e.id,a.id);return!(!h||h!==(null==t?void 0:t.id))})).forEach((e=>{e instanceof ne.VolumeViewport?Tu(e,c):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}re(Gf,"toolName",void 0),Gf.toolName="MIPJumpToClickTool";const qf=Gf,{transformWorldToIndex:jf}=ne.utilities;class zf extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,getTextLines:Kf}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const{viewPlaneNormal:l,viewUp:c,position:d}=r.getCamera(),h=this.getReferencedImageId(r,i,l,c),u={highlighted:!0,invalidated:!0,metadata:{...r.getViewReference({points:[i]}),toolName:this.getToolName(),referencedImageId:h,viewUp:c,cameraPosition:d},data:{handles:{points:[[...i],[...i]],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:{}}};gt(u,o);const g=Qs(o,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:g,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,g),u})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l]=r.handles.points,c=a.worldToCanvas(s),d=a.worldToCanvas(l),h={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}};return cd([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u,activeHandleIndex:g}=h.handles;d.annotationUID=r;const{color:v,lineWidth:m,lineDash:p,shadow:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=u.map((e=>a.worldToCanvas(e)));let w;if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(o,c,e)),!Ne(r))continue;ge(o)||this.editData||null===g||(w=[I[g]]),w&&Fc(t,r,"0",I,{color:v,lineDash:p,lineWidth:m});const E="".concat(r,"-line");if(rd(t,r,"1",I[0],I[1],{color:v,width:m,lineDash:p,shadow:f},E),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;const C=this.getLinkedTextBoxStyle(d,o);if(!C.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}const _=this.configuration.getTextLines(h,l);if(!h.handles.textBox.hasMoved){const e=hd(I);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),D=ld(t,r,"1",_,b,I,{},C),{x:T,y:S,width:y,height:M}=D;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([T,S]),topRight:a.canvasToWorld([T+y,S]),bottomLeft:a.canvasToWorld([T,S+M]),bottomRight:a.canvasToWorld([T+y,S+M])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],o=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+o*o+i*i)}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport,a=o.handles.points[0],r=o.handles.points[1],{cachedStats:s}=o,l=Object.keys(s);for(let e=0;e<l.length;e++){const n=l[e],o=this.getTargetIdImage(n,t);if(!o)continue;const{imageData:i,dimensions:c}=o,d=jf(i,a),h=jf(i,r),u=[d,h],{scale:g,units:v}=vr(o,u),m=this._calculateLength(a,r)/g;this._isInsideVolume(d,h,c)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,s[n]={length:m,unit:v}}return e.invalidated=!1,Qe(e,i),s}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function Kf(e,t){const n=e.cachedStats[t],{length:o,unit:i}=n;if(null!=o&&!isNaN(o))return["".concat(zu(o)," ").concat(i)]}re(zf,"toolName",void 0),zf.toolName="Length";const Yf=zf;var Xf=C(847),Jf=C.n(Xf);const{RENDERING_DEFAULTS:Zf}=ne.CONSTANTS;function $f(){return"rgb(0, 200, 0)"}function Qf(){return!0}function eI(){return!0}function tI(){return!0}class nI extends nd{constructor(){var e,t,n,o;let i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(i,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse"],configuration:{shadow:!0,viewportIndicators:!0,autoPan:{enabled:!1,panSize:10},referenceLinesCenterGapRadius:20,filterActorUIDsToSetSlabThickness:[],slabThicknessBlendMode:ne.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),re(this,"toolCenter",[0,0,0]),re(this,"_getReferenceLineColor",void 0),re(this,"_getReferenceLineControllable",void 0),re(this,"_getReferenceLineDraggableRotatable",void 0),re(this,"_getReferenceLineSlabThicknessControlsOn",void 0),re(this,"editData",void 0),re(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:i,viewport:a}=o,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:c}=a.getCamera();let d=this._getAnnotations(o);return d=this.filterInteractableAnnotationsForElement(r,d),d.length&&mt(d[0].annotationUID),gt({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:i,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:c,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),re(this,"_getViewportsInfo",(()=>ei(this.toolGroupId).viewportsInfo)),re(this,"resetCrosshairs",(()=>{const e=this._getViewportsInfo();e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const o=(0,ne.getEnabledElementByIds)(t,n),{viewport:i}=o,{element:a}=i;let r=this._getAnnotations(o);r=this.filterInteractableAnnotationsForElement(a,r),r.length&&mt(r[0].annotationUID)})),this.computeToolCenter(e)})),re(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)return void console.warn("For crosshairs to operate, at least two viewports must be given.");const[t,n,o]=e,{normal:i,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],c=aa.vec3.create();o?({normal:l,point:c}=this.initializeViewport(o)):(aa.vec3.add(c,a,s),aa.vec3.scale(c,c,.5),aa.vec3.cross(l,i,r));const d=ne.utilities.planar.planeEquation(i,a),h=ne.utilities.planar.planeEquation(r,s),u=ne.utilities.planar.planeEquation(l,c);this.toolCenter=ne.utilities.planar.threePlaneIntersection(d,h,u);const{renderingEngine:g}=(0,ne.getEnabledElementByIds)(e[0].viewportId,e[0].renderingEngineId);Ua(g,e.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.world,a=(0,ne.getEnabledElement)(n),{viewport:r}=a;this._jump(a,i);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:c}=l[0],{rotationPoints:d}=c.handles,h=[];for(let e=0;e<d.length-1;++e){const t=d[e][1],n=this._getReferenceLineControllable(t.id),o=this._getReferenceLineDraggableRotatable(t.id);n&&o&&(h.push(t.id),e++)}return c.activeViewportIds=[...h],c.handles.activeOperation=1,e.preventDefault(),Dc(n),this._activateModify(n),l[0]})),re(this,"cancel",(()=>{console.log("Not implemented yet")})),re(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0,this._activateModify(o),Dc(o),e.preventDefault()})),re(this,"isPointNearTool",((e,t,n,o)=>!!this._pointNearTool(e,t,n,6))),re(this,"toolSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o;t.highlighted=!0,this._activateModify(i),Dc(i),e.preventDefault()})),re(this,"onCameraModified",(e=>{var t;const n=e.detail,{element:o}=n,i=(0,ne.getEnabledElement)(o),{renderingEngine:a}=i,r=i.viewport,s=this._getAnnotations(i),l=this.filterInteractableAnnotationsForElement(o,s)[0];if(!l)return;const c=r.getCamera(),d=l.metadata.cameraPosition,h=[0,0,0];yh().subtract(c.position,d,h);const u=l.metadata.cameraFocalPoint,g=[0,0,0];yh().subtract(c.focalPoint,u,g),l.metadata.cameraPosition=[...c.position],l.metadata.cameraFocalPoint=[...c.focalPoint];const v=this._getReferenceLineControllable(r.id),m=this._getReferenceLineDraggableRotatable(r.id);if(!ne.utilities.isEqual(c.position,d,.001)&&v&&m){let e=!1;ne.utilities.isEqual(h,g,.001)||(e=!0);const t=Math.abs(yh().dot(h,c.viewPlaneNormal))<.01;e||t||(this.toolCenter[0]+=h[0],this.toolCenter[1]+=h[1],this.toolCenter[2]+=h[2])}null!==(t=this.configuration.autoPan)&&void 0!==t&&t.enabled&&Qo(r.id,a.id).getViewportIds().filter((e=>e!==r.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,a)}));const p=Qs(o,this.getToolName(),!1);Ua(a,p)})),re(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:o}=e.detail,i=o.canvas;let a=!1;for(let e=0;e<t.length;e++){const o=t[e];if(ge(o))continue;const{data:r,highlighted:s}=o;if(!r.handles)continue;const l=r.handles.activeOperation,c=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let d=!1;d=!!this.getHandleNearImagePoint(n,o,i,6)||this._pointNearTool(n,o,i,6),d&&!s||!d&&s?(o.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,c)||(a=!0)}return a})),re(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,ne.getEnabledElement)(e),{viewportId:o}=n;return t.filter((e=>e.data.viewportId===o))})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o,renderingEngine:i}=e,{element:a}=o,r=this._getAnnotations(e),s=o.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(null==r||!r.length||null==l||!l.data)return n;const c=l.annotationUID,{clientWidth:d,clientHeight:h}=o.canvas,u=Math.sqrt(d*d+h*h),g=Math.min(d,h),v=l.data,m=o.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],I=[0,0,d,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=i.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),c=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:d,clientHeight:h}=n.canvas,v=Math.sqrt(d*d+h*h),w=[.5*d,.5*h],E=n.canvasToWorld(w),C=[0,0,0];yh().cross(s.viewPlaneNormal,a.viewPlaneNormal,C),yh().normalize(C),yh().multiplyScalar(C,v);const _=[0,0,0];yh().add(E,C,_);const b=[0,0,0];yh().subtract(E,C,b);const D=o.worldToCanvas(_),T=o.worldToCanvas(E),S=aa.vec2.create();aa.vec2.subtract(S,D,T),aa.vec2.normalize(S,S);const y=aa.vec2.create();aa.vec2.scale(y,S,100*u);const M=aa.vec2.create();aa.vec2.scale(M,S,.4*g);const x=aa.vec2.create();aa.vec2.scale(x,S,.2*g);const O=aa.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;aa.vec2.scale(O,S,2===p.length?P:0);const A=aa.vec2.create(),R=aa.vec2.create(),N=aa.vec2.create(),L=aa.vec2.create();let k=aa.vec2.clone(m);l&&r||(k=aa.vec2.clone(T)),aa.vec2.add(A,k,O),aa.vec2.add(R,k,y),aa.vec2.subtract(N,k,O),aa.vec2.subtract(L,k,y),Th(A,R,I),Th(N,L,I);const U=aa.vec2.create();aa.vec2.subtract(U,m,M);const V=aa.vec2.create();aa.vec2.add(V,m,M);let W=aa.vec2.clone(m);!l&&c&&(W=aa.vec2.clone(T));let H=[...this.toolCenter];!l&&c&&(H=[...E]);const B=[0,0,0];yh().subtract(_,b,B),yh().normalize(B);const{viewPlaneNormal:F}=s,{matrix:G}=Jf().buildFromDegree().rotate(90,F),q=[0,0,0];aa.vec3.transformMat4(q,B,G);const j=n.getSlabThickness(),z=[...q];yh().multiplyScalar(z,j);const K=[0,0,0];yh().add(H,z,K);const Y=o.worldToCanvas(K),X=aa.vec2.create();aa.vec2.subtract(X,W,Y);const J=aa.vec2.create();aa.vec2.subtract(J,W,y),aa.vec2.add(J,J,X);const Z=aa.vec2.create();aa.vec2.add(Z,W,y),aa.vec2.add(Z,Z,X),Th(J,Z,I);const $=aa.vec2.create();aa.vec2.add($,W,y),aa.vec2.subtract($,$,X);const Q=aa.vec2.create();aa.vec2.subtract(Q,W,y),aa.vec2.subtract(Q,Q,X),Th($,Q,I);const ee=aa.vec2.create(),te=aa.vec2.create(),ne=aa.vec2.create(),oe=aa.vec2.create();aa.vec2.subtract(ee,W,x),aa.vec2.add(ee,ee,X),aa.vec2.add(te,W,x),aa.vec2.add(te,te,X),aa.vec2.subtract(ne,W,x),aa.vec2.subtract(ne,ne,X),aa.vec2.add(oe,W,x),aa.vec2.subtract(oe,oe,X),f.push([n,A,R,N,L,J,Z,$,Q,U,V,ee,te,ne,oe])}));const w=[],E=[],C=this._getReferenceLineColor(o.id),_=void 0!==C?C:"rgb(200, 200, 200)";return f.forEach(((e,n)=>{var i,a;const r=e[0],s=this._getReferenceLineColor(r.id),l=this._getReferenceLineControllable(r.id),d=this._getReferenceLineDraggableRotatable(r.id)||(null===(i=this.configuration.mobile)||void 0===i?void 0:i.enabled),h=this._getReferenceLineSlabThicknessControlsOn(r.id)||(null===(a=this.configuration.mobile)||void 0===a?void 0:a.enabled),u=v.activeViewportIds.find((e=>e===r.id));let g=void 0!==s?s:"rgb(200, 200, 200)",m=1;const p=null!==v.handles.activeOperation&&1===v.handles.activeOperation&&u;p&&(m=2.5);let f="".concat(n);if(l&&d?(f="".concat(n,"One"),rd(t,c,f,e[1],e[2],{color:g,lineWidth:m}),f="".concat(n,"Two"),rd(t,c,f,e[3],e[4],{color:g,lineWidth:m})):rd(t,c,f,e[2],e[4],{color:g,lineWidth:m}),l){var I;g=void 0!==s?s:"rgb(200, 200, 200)";const i=2===v.handles.activeOperation,a=[e[9],e[10]],l=[o.canvasToWorld(e[9]),r,e[1],e[2]],m=[o.canvasToWorld(e[10]),r,e[3],e[4]];w.push(l,m);const U=3===v.handles.activeOperation,V=[e[11],e[12],e[13],e[14]],W=[o.canvasToWorld(e[11]),r,e[5],e[6]],H=[o.canvasToWorld(e[12]),r,e[5],e[6]],B=[o.canvasToWorld(e[13]),r,e[7],e[8]],F=[o.canvasToWorld(e[14]),r,e[7],e[8]];if(E.push(W,H,B,F),(p||null!==(I=this.configuration.mobile)&&void 0!==I&&I.enabled)&&!i&&!U&&d&&h){var C,_,b,D,T,S,y,M;let e="".concat(n,"One");Fc(t,c,e,a,{color:g,handleRadius:null!==(C=this.configuration.mobile)&&void 0!==C&&C.enabled?null===(_=this.configuration.mobile)||void 0===_?void 0:_.handleRadius:3,opacity:null!==(b=this.configuration.mobile)&&void 0!==b&&b.enabled?null===(D=this.configuration.mobile)||void 0===D?void 0:D.opacity:1,type:"circle"}),e="".concat(n,"Two"),Fc(t,c,e,V,{color:g,handleRadius:null!==(T=this.configuration.mobile)&&void 0!==T&&T.enabled?null===(S=this.configuration.mobile)||void 0===S?void 0:S.handleRadius:3,opacity:null!==(y=this.configuration.mobile)&&void 0!==y&&y.enabled?null===(M=this.configuration.mobile)||void 0===M?void 0:M.opacity:1,type:"rect"})}else if(p&&!i&&!U&&d){var x,O,P,A;const e="".concat(n);Fc(t,c,e,a,{color:g,handleRadius:null!==(x=this.configuration.mobile)&&void 0!==x&&x.enabled?null===(O=this.configuration.mobile)||void 0===O?void 0:O.handleRadius:3,opacity:null!==(P=this.configuration.mobile)&&void 0!==P&&P.enabled?null===(A=this.configuration.mobile)||void 0===A?void 0:A.opacity:1,type:"circle"})}else if(u&&!i&&!U&&h){var R,N,L,k;const e="".concat(n);Fc(t,c,e,V,{color:g,handleRadius:null!==(R=this.configuration.mobile)&&void 0!==R&&R.enabled?null===(N=this.configuration.mobile)||void 0===N?void 0:N.handleRadius:3,opacity:null!==(L=this.configuration.mobile)&&void 0!==L&&L.enabled?null===(k=this.configuration.mobile)||void 0===k?void 0:k.opacity:1,type:"rect"})}else if(i&&d){const e="".concat(n);Fc(t,c,e,a,{color:g,handleRadius:2,fill:g,type:"circle"})}else U&&u&&h&&Fc(t,c,f,V,{color:g,handleRadius:2,fill:g,type:"rect"});r.getSlabThickness()>.5&&h&&(f="".concat(n,"STOne"),rd(t,c,f,e[5],e[6],{color:g,width:1,lineDash:[2,3]}),f="".concat(n,"STTwo"),rd(t,c,f,e[7],e[8],{color:g,width:e,lineDash:[2,3]}))}})),n=!0,v.handles.rotationPoints=w,v.handles.slabThicknessPoints=E,this.configuration.viewportIndicators&&vc(t,c,"0",[.95*d,.05*h],.01*u,{color:_,fill:_}),n})),re(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=st(this.getToolName(),t.element)||[],o=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return o.includes(t.viewportId)}))})),re(this,"_onNewVolume",(e=>{const t=this._getViewportsInfo();this.computeToolCenter(t)})),re(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let o=0;o<t.length;++o)if(e===t[o]){n=!0;break}if(!1===n)return!1})),!0))),re(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:o,viewport:i}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=i.getCamera(),{viewPlaneNormal:s,position:l}=r,c=a.filter((e=>{const{viewportId:t}=e.data,n=o.getViewport(t).getCamera();return!(ne.utilities.isEqual(n.viewPlaneNormal,s,.01)&&ne.utilities.isEqual(n.position,l,1))}));return c})),re(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:o}=e,{data:i}=t,a=o.getViewport(i.viewportId),r=n.filter((e=>{const{data:t}=e,n=o.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return yh().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=o.getViewport(t).getCamera(),i=n.viewPlaneNormal;return yh().normalize(i),ne.utilities.isEqual(l,i,.01)&&ne.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),re(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:o}=e,i=o.getCamera().viewPlaneNormal;yh().normalize(i);const a=t.filter((e=>{const{data:t}=e,i=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(i.id);return o!==i&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:o}=t.data,s=n.getViewport(o).getCamera(),l=s.viewPlaneNormal;if(yh().normalize(l),ne.utilities.isEqual(i,l,.01)||ne.utilities.isOpposite(i,l,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,s.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,s.position,1)&&(c=!0)}c||r.push(t)}const s=t.filter((e=>{const{data:t}=e,i=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(i.id);return o!==i&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:o}=t.data,a=n.getViewport(o).getCamera(),l=a.viewPlaneNormal;if(yh().normalize(l),ne.utilities.isEqual(i,l,.01)||ne.utilities.isOpposite(i,l,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,a.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,a.position,1)&&(c=!0)}c||r.push(t)}const l=this._getAnnotationsForViewportsWithDifferentCameras(e,t);for(let e=0;e<l.length;++e){const t=l[e];if(r.some((e=>e===t)))continue;const{viewportId:o}=t.data,a=n.getViewport(o).getCamera(),s=a.viewPlaneNormal;if(yh().normalize(s),ne.utilities.isEqual(i,s,.01)||ne.utilities.isOpposite(i,s,.01))continue;let c=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:o}=t.data,i=n.getViewport(o).getCamera();ne.utilities.isEqual(i.viewPlaneNormal,a.viewPlaneNormal,.01)&&ne.utilities.isEqual(i.position,a.position,1)&&(c=!0)}c||r.push(t)}return r})),re(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),o=t.getActors();let i=!0;return n.forEach((e=>{n.length===o.length&&void 0!==o.find((t=>{let{uid:n}=t;return n===e.uid}))||(i=!1)})),i})),re(this,"_jump",((e,t)=>{Ye.isInteractingWithTool=!0;const{viewport:n,renderingEngine:o}=e,i=this._getAnnotations(e),a=[0,0,0];yh().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,i).filter((e=>{const{data:t}=e,i=o.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,i);return this._getReferenceLineControllable(i.id)&&this._getReferenceLineDraggableRotatable(i.id)&&a}));return 0===r.length?(Ye.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(o,r,a),Ye.isInteractingWithTool=!1,!0)})),re(this,"_activateModify",(e=>{var t;Ye.isInteractingWithTool=!(null!==(t=this.configuration.mobile)&&void 0!==t&&t.enabled),e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this.editData.annotation.data.handles.activeOperation=null,this.editData.annotation.data.activeViewportIds=[],this._deactivateModify(n),bc(n),this.editData=null;const o=(0,ne.getEnabledElement)(n),{renderingEngine:i}=o,a=Qs(n,this.getToolName(),!1);Ua(i,a)})),re(this,"_dragCallback",(e=>{const t=e.detail,n=t.deltaPoints.world;if(Math.abs(n[0])<.001&&Math.abs(n[1])<.001&&Math.abs(n[2])<.001)return;const{element:o}=t,i=(0,ne.getEnabledElement)(o),{renderingEngine:a,viewport:r}=i,s=this._getAnnotations(i),l=this.filterInteractableAnnotationsForElement(o,s)[0];if(!l)return;const{handles:c}=l.data,{currentPoints:d}=e.detail,h=d.canvas;if(1===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineDraggableRotatable(n.id);return!0===o&&!0===i&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineDraggableRotatable(n.id);return!0===o&&!0===i})),n=aa.vec2.create(),o=aa.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],c=r.worldToCanvas(l),d=t.currentPoints.canvas,h=aa.vec2.create();aa.vec2.sub(h,d,t.deltaPoints.canvas),aa.vec2.sub(n,h,c),aa.vec2.sub(o,d,c);let u=aa.vec2.angle(n,o);this._isClockWise(c,h,d)&&(u*=-1),u=Math.round(100*u)/100;const g=r.getCamera().viewPlaneNormal,{matrix:v}=Jf().buildFromRadian().translate(l[0],l[1],l[2]).rotate(u,g).translate(-l[0],-l[1],-l[2]),m=[];e.forEach((e=>{const{data:t}=e;t.handles.toolCenter=l;const n=a.getViewport(t.viewportId),o=n.getCamera(),{viewUp:i,position:r,focalPoint:s}=o;i[0]+=r[0],i[1]+=r[1],i[2]+=r[2],aa.vec3.transformMat4(s,s,v),aa.vec3.transformMat4(r,r,v),aa.vec3.transformMat4(i,i,v),i[0]-=r[0],i[1]-=r[1],i[2]-=r[2],n.setCamera({position:r,viewUp:i,focalPoint:s}),m.push(n.id)})),a.renderViewports(m)}else if(3===c.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(i,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),o=this._getReferenceLineControllable(n.id),i=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===o&&!0===i&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const o=this._filterViewportWithSameOrientation(i,e[0],s),c=[];c.push(r.id),o.forEach((e=>{const{data:o}=e,i=a.getViewport(o.viewportId),s=i.getCamera().viewPlaneNormal,d=yh().dot(n,s),u=[...s];if(yh().multiplyScalar(u,d),Math.abs(u[0])>.001||Math.abs(u[1])>.001||Math.abs(u[2])>.001){const e=Math.sqrt(u[0]*u[0]+u[1]*u[1]+u[2]*u[2]),n=t.lastPoints.world,o=[0,0,0],d=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(i.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===i.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);yh().add(e,n,d),yh().multiplyScalar(d,.5)}}yh().subtract(n,d,o);const g=yh().dot(o,s),v=[...s];yh().multiplyScalar(v,g);const m=[v[0],v[1],v[2]];aa.vec3.normalize(m,m);const p=[u[0],u[1],u[2]];aa.vec3.normalize(p,p);let f=i.getSlabThickness();ne.utilities.isOpposite(m,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(Zf.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,i)&&(f=Zf.MINIMUM_SLAB_THICKNESS),Qo(i.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(i,f),c.push(i.id)}})),a.renderViewports(c)}})),re(this,"_pointNearReferenceLine",((e,t,n,o)=>{const{data:i}=e,{rotationPoints:a}=i.handles;for(let e=0;e<a.length-1;++e){const i=a[e][1];if(i.id!==o.id)continue;if(!this._getReferenceLineControllable(i.id))continue;const r={start:{x:a[e][2][0],y:a[e][2][1]},end:{x:a[e][3][0],y:a[e][3][1]}},s=cd([r.start.x,r.start.y],[r.end.x,r.end.y],[t[0],t[1]]),l={start:{x:a[e+1][2][0],y:a[e+1][2][1]},end:{x:a[e+1][3][0],y:a[e+1][3][1]}},c=cd([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||c<=n)return!0;e++}return!1})),this._getReferenceLineColor=(null===(e=i.configuration)||void 0===e?void 0:e.getReferenceLineColor)||$f,this._getReferenceLineControllable=(null===(t=i.configuration)||void 0===t?void 0:t.getReferenceLineControllable)||Qf,this._getReferenceLineDraggableRotatable=(null===(n=i.configuration)||void 0===n?void 0:n.getReferenceLineDraggableRotatable)||eI,this._getReferenceLineSlabThicknessControlsOn=(null===(o=i.configuration)||void 0===o?void 0:o.getReferenceLineSlabThicknessControlsOn)||tI}onSetToolActive(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),this._subscribeToViewportNewVolumeSet(e),this.computeToolCenter(e)}onSetToolPassive(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolEnabled(){const e=this._getViewportsInfo();this.computeToolCenter(e)}onSetToolDisabled(){const e=this._getViewportsInfo();this._unsubscribeToViewportNewVolumeSet(e),e.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;const o=(0,ne.getEnabledElementByIds)(n,t);if(!o)return;const i=this._getAnnotations(o);null!=i&&i.length&&i.forEach((e=>{mt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i;let r=this._getRotationHandleNearImagePoint(a,t,n,o);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,o),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:o}=(0,ne.getEnabledElementByIds)(t,n),{element:i}=o;i.removeEventListener(ne.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:o}=(0,ne.getEnabledElementByIds)(t,n),{element:i}=o;i.addEventListener(ne.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:o,clientHeight:i}=n.canvas,a=n.worldToCanvas(this.toolCenter),r=this.configuration.autoPan.panSize,s=[a[0],a[1]];if(a[0]<0?s[0]=r:a[0]>o&&(s[0]=o-r),a[1]<0?s[1]=r:a[1]>i&&(s[1]=i-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),c=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],d=n.getCamera(),{focalPoint:h,position:u}=d,g=[u[0]-c[0],u[1]-c[1],u[2]-c[2]],v=[h[0]-c[0],h[1]-c[1],h[2]-c[2]];n.setCamera({focalPoint:v,position:g}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:o}=this.configuration;o&&o.length>0&&(n=o);let i=this.configuration.slabThicknessBlendMode;t===Zf.MINIMUM_SLAB_THICKNESS&&(i=ne.Enums.BlendModes.COMPOSITE),e.setBlendMode(i,n,!1),e.setSlabThickness(t,n)}_isClockWise(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])>0}_applyDeltaShiftToSelectedViewportCameras(e,t,n){t.forEach((t=>{this._applyDeltaShiftToViewportCamera(e,t,n)}))}_applyDeltaShiftToViewportCamera(e,t,n){const{data:o}=t,i=e.getViewport(o.viewportId),a=i.getCamera(),r=a.viewPlaneNormal,s=yh().dot(n,r),l=[...r];if(yh().multiplyScalar(l,s),Math.abs(l[0])>.001||Math.abs(l[1])>.001||Math.abs(l[2])>.001){const e=[0,0,0],t=[0,0,0];yh().add(a.focalPoint,l,e),yh().add(a.position,l,t),i.setCamera({focalPoint:e,position:t}),i.render()}}_getRotationHandleNearImagePoint(e,t,n,o){const{data:i}=t,{rotationPoints:a}=i.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineDraggableRotatable(l.id))continue;const c=e.worldToCanvas(s);if(aa.vec2.distance(n,c)<o)return i.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,o){const{data:i}=t,{slabThicknessPoints:a}=i.handles;for(let r=0;r<a.length;r++){const s=a[r][0],l=a[r][1];if(!this._getReferenceLineControllable(l.id))continue;if(!this._getReferenceLineSlabThicknessControlsOn(l.id))continue;const c=e.worldToCanvas(s);if(aa.vec2.distance(n,c)<o)return i.handles.activeOperation=3,i.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,o){const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:c}=t,{rotationPoints:d}=c.handles,{slabThicknessPoints:h}=c.handles,u=[];for(let e=0;e<d.length-1;++e){const t=d[e][1],i=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!i||!a)continue;const r={start:{x:d[e][2][0],y:d[e][2][1]},end:{x:d[e][3][0],y:d[e][3][1]}},s=cd([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:d[e+1][2][0],y:d[e+1][2][1]},end:{x:d[e+1][3][0],y:d[e+1][3][1]}},h=cd([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=o||h<=o)&&(u.push(t.id),c.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(u.find((e=>e===t.id)))continue;const i=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!i||!a)continue;const r=h[e][2],s=h[e][3],d=aa.vec2.create();aa.vec2.add(d,r,s),aa.vec2.scale(d,d,.5);const g=aa.vec2.create();aa.vec2.subtract(g,r,d),aa.vec2.normalize(g,g);const v=aa.vec2.create();aa.vec2.scale(v,g,.05*l);const m=aa.vec2.create(),p=aa.vec2.create();aa.vec2.add(m,d,v),aa.vec2.subtract(p,d,v);const f={start:{x:m[0],y:m[1]},end:{x:r[0],y:r[1]}},I=cd([f.start.x,f.start.y],[f.end.x,f.end.y],[n[0],n[1]]),w={start:{x:p[0],y:p[1]},end:{x:s[0],y:s[1]}},E=cd([w.start.x,w.start.y],[w.end.x,w.end.y],[n[0],n[1]]);(I<=o||E<=o)&&(u.push(t.id),c.handles.activeOperation=null),e++}return c.activeViewportIds=[...u],this.editData={annotation:t},1===c.handles.activeOperation}}re(nI,"toolName",void 0),nI.toolName="Crosshairs";const oI=nI,{EPSILON:iI}=ne.CONSTANTS;class aI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceViewportId:"",showFullDimension:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",{}),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"_init",(()=>{const e=(0,ne.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Js(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(null==n||!n.getImageData())return;const{element:o}=n,{viewUp:i,viewPlaneNormal:a}=n.getCamera(),r=ne.utilities.getViewportImageCornersInWorld(n);let s=this.editData.annotation;const l=n.getFrameOfReferenceUID();if(s)this.editData.annotation.data.handles.points=r;else{const e={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...a],viewUp:[...i],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};gt(e,o),s=e}this.editData={sourceViewportId:n.id,renderingEngine:e,annotation:s},Ua(e,t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onSetToolConfiguration",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this._init()})),re(this,"renderAnnotation",((e,t)=>{var n;const{viewport:o}=e,{annotation:i,sourceViewportId:a}=this.editData;let r=!1;const{viewport:s}=(0,ne.getEnabledElementByViewportId)(a)||{};if(!s)return r;if(s.id===o.id)return r;if(!i||null==i||null===(n=i.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return r;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},c=i.data.handles.points[0],d=i.data.handles.points[1],h=i.data.handles.points[2],u=i.data.handles.points[3],{focalPoint:g,viewPlaneNormal:v,viewUp:m}=o.getCamera(),{viewPlaneNormal:p}=s.getCamera();if(this.isParallel(v,p))return r;const f=ne.utilities.planar.planeEquation(v,g),I=[c,h,d,u],w=[c,d,h,u];let E=I,C=aa.vec3.subtract(aa.vec3.create(),I[0],I[1]);C=aa.vec3.normalize(aa.vec3.create(),C);let _=aa.vec3.subtract(aa.vec3.create(),I[2],I[0]);_=aa.vec3.normalize(aa.vec3.create(),_);const b=aa.vec3.cross(aa.vec3.create(),C,_);if(this.isParallel(b,v))return r;this.isPerpendicular(C,v)&&(E=w);const D=ne.utilities.planar.linePlaneIntersection(E[0],E[1],f),T=ne.utilities.planar.linePlaneIntersection(E[2],E[3],f),{annotationUID:S}=i;l.annotationUID=S;const y=this.getStyle("lineWidth",l,i),M=this.getStyle("lineDash",l,i),x=this.getStyle("color",l,i),O=this.getStyle("shadow",l,i);let P=[D,T].map((e=>o.worldToCanvas(e)));if(this.configuration.showFullDimension&&(P=this.handleFullDimension(o,D,v,m,T,P)),P.length<2)return r;const A="".concat(S,"-line");return rd(t,S,"1",P[0],P[1],{color:x,width:y,lineDash:M,shadow:O},A),r=!0,r})),re(this,"isPerpendicular",((e,t)=>{const n=aa.vec3.dot(e,t);return Math.abs(n)<iI}))}handleFullDimension(e,t,n,o,i,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),c=this.getReferencedImageId(e,t,n,o);if(c&&l)try{const{imageData:n,dimensions:o}=l,[r,s,d,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([o[0]-1,0,0]),n.indexToWorld([o[0]-1,o[1]-1,0]),n.indexToWorld([0,o[1]-1,0])].map((e=>ne.utilities.worldToImageCoords(c,e))),[u,g]=[t,i].map((e=>ne.utilities.worldToImageCoords(c,e)));a=[[r,s],[s,d],[h,d],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,u,g)})).filter((e=>e&&this.isInBound(e,o))).map((t=>{const n=ne.utilities.imageToWorldCoords(c,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,o){const[i,a]=e,[r,s]=t,[l,c]=n,[d,h]=o,u=s-a,g=i-r,v=r*a-i*s,m=h-c,p=l-d,f=d*c-l*h;if(!(Math.abs(u*p-m*g)<iI))return[(g*f-p*v)/(u*p-m*g),(m*v-u*f)/(u*p-m*g)]}isParallel(e,t){return Math.abs(aa.vec3.dot(e,t))>1-iI}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}re(aI,"toolName",void 0),aI.toolName="ReferenceLines";const rI=aI,{EPSILON:sI}=ne.CONSTANTS;class lI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{sourceImageIds:[]}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onSetToolActive",(()=>{this._init()})),re(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(null==e||!e.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=ne.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,o=ei(this.toolGroupId).viewportsInfo;if(null==o||!o.length)return void console.warn("OverlayGridTool: No viewports found");const i=st(this.getToolName(),n);if(null==i||!i.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}Ua((0,ne.getRenderingEngine)(o[0].renderingEngineId),o.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:o,rowCosines:i,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=ne.metaData.get("imagePlaneModule",e),l=[...t],c=[...t],d=[...t],h=[...t];return aa.vec3.scaleAndAdd(c,t,a,o*s),aa.vec3.scaleAndAdd(d,t,i,n*r),aa.vec3.scaleAndAdd(h,d,a,o*s),{pointSet1:[l,d,c,h],pointSet2:[l,c,d,h]}})),re(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let o=!1;if(null==n||!n.length)return o;const{viewport:i,FrameOfReferenceUID:a}=e;if(i.getImageIds().length<2)return o;const r=st(this.getToolName(),a);if(null==r||!r.length)return o;const s=r[0],{annotationUID:l}=s,{focalPoint:c,viewPlaneNormal:d}=i.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},u=this.getImageIdNormal(n[0]);if(this.isParallel(d,u))return o;const g=ne.utilities.planar.planeEquation(d,c),v=s.data.pointSets,m=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:o}=v[e],a=m.get(i.id)||this.initializeViewportData(m,i.id);if(!a.pointSetsToUse[e]){let t=n,i=aa.vec3.subtract(aa.vec3.create(),n[0],n[1]);i=aa.vec3.normalize(aa.vec3.create(),i),this.isPerpendicular(i,d)&&(t=o),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=ne.utilities.planar.linePlaneIntersection(t[0],t[1],g),a.lineEndsWorld[e]=ne.utilities.planar.linePlaneIntersection(t[2],t[3],g)}const r=a.lineStartsWorld[e],c=a.lineEndsWorld[e];h.annotationUID=l;const u=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),I=this.getStyle("shadow",h,s),w=[r,c].map((e=>i.worldToCanvas(e))),E="".concat(l,"-line");rd(t,l,"".concat(e),w[0],w[1],{color:f,width:u,lineDash:p,shadow:I},E)}return o=!0,o})),re(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),re(this,"isPerpendicular",((e,t)=>{const n=aa.vec3.dot(e,t);return Math.abs(n)<sI}))}isParallel(e,t){return Math.abs(aa.vec3.dot(e,t))>1-sI}getImageIdNormal(e){const{imageOrientationPatient:t}=ne.metaData.get("imagePlaneModule",e),n=aa.vec3.fromValues(t[0],t[1],t[2]),o=aa.vec3.fromValues(t[3],t[4],t[5]);return aa.vec3.cross(aa.vec3.create(),n,o)}}re(lI,"toolName",void 0),lI.toolName="OverlayGrid";const cI=lI;class dI extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),re(this,"_init",(()=>{var e;const t=ei(this.toolGroupId).viewportsInfo;if(null==t||!t.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const n=null===(e=(0,ne.getRenderingEngine)(t[0].renderingEngineId))||void 0===e?void 0:e.getViewport(t[0].viewportId);if(!n)return;const o=n.getFrameOfReferenceUID(),i=st(this.getToolName(),o);if(null==i||!i.length){const e=new Map;!function(e,t){t.forEach((t=>{var n;let{viewportId:o,renderingEngineId:i}=t;const a=null===(n=(0,ne.getRenderingEngine)(i))||void 0===n?void 0:n.getViewport(o);hI(e,a)}))}(e,t),gt({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:o,referencedImageId:null},data:{actorsWorldPointsMap:e}},o)}Ua((0,ne.getRenderingEngine)(t[0].renderingEngineId),t.map((e=>{let{viewportId:t}=e;return t})))})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this._init()})),re(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:o}=e;let i=!1;const a=st(this.getToolName(),o);if(null==a||!a.length)return i;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;hI(l,n);const c=n.getActors(),d=uI(n);return c.forEach((e=>{if(null==e||!e.clippingFilter)return;const o=l.get(e.uid);if(!o)return;if(!o.get(d))return;let i=1;const{worldPointsSet:a,color:r}=o.get(d);for(let o=0;o<a.length;o++){const l=a[o].map((e=>n.worldToCanvas(e))),c={color:r,fillColor:r,fillOpacity:this.configuration.opacity,closePath:!0,lineWidth:2},d=e.uid+"#"+i;tv(t,s,d,l,c),i++}})),i=!0,i}))}}function hI(e,t){const n=t.getActors(),o=uI(t);n.forEach((t=>{if(null==t||!t.clippingFilter)return;let n=e.get(t.uid);if(n||(n=new Map,e.set(t.uid,n)),!n.get(o)){const e=Ou(t.clippingFilter.getOutputData());if(!e)return;const i=function(e){function t(e){let t=Math.floor(255*e).toString(16);return 1===t.length&&(t="0"+t),t}return"#"+t(e[0])+t(e[1])+t(e[2])}(t.actor.getProperty().getColor());n.set(o,{worldPointsSet:e,color:i})}}))}function uI(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return"".concat(e.id,"-").concat(xi(t),"-").concat(n)}re(dI,"toolName",void 0),dI.toolName="SegmentationIntersection";const gI=dI;function vI(e,t,n,o){const i=aa.vec3.create();aa.vec3.cross(i,t,e);const a=aa.vec3.fromValues(...n),r=aa.vec3.fromValues(...o),s=aa.vec3.create();aa.vec3.subtract(s,a,r);const l=aa.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const c=aa.vec3.dot(s,i)/(l*aa.vec3.length(i));return{worldWidth:Math.sqrt(1-c*c)*l,worldHeight:c*l}}const{transformWorldToIndex:mI}=ne.utilities;class pI extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,centerPointRadius:0,getTextLines:fI,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(n.canvas,(0,ne.getEnabledElement)(o)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},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:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,centerWorld:i,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=Kl(s.map((e=>a.worldToCanvas(e)))),[c,d]=l,h={left:Math.min(c[0],d[0])+o/2,top:Math.min(c[1],d[1])+o/2,width:Math.abs(c[0]-d[0])-o,height:Math.abs(c[1]-d[1])-o},u={left:Math.min(c[0],d[0])-o/2,top:Math.min(c[1],d[1])-o/2,width:Math.abs(c[0]-d[0])+o,height:Math.abs(c[1]-d[1])+o},g=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(u,n)||g)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s,l,c,d,h,u=!1;if(n.worldPosition)u=!0;else{const{points:e}=a.handles,{viewport:t}=(0,ne.getEnabledElement)(i),{worldToCanvas:o,canvasToWorld:u}=t;r=e.findIndex((e=>e===n));const g=e.map(o);h=g[r],c=Math.abs(g[2][0]-g[3][0]),d=Math.abs(g[0][1]-g[1][1]),s=[(g[2][0]+g[3][0])/2,(g[0][1]+g[1][1])/2],l=u(s)}const g=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:g,handleIndex:r,canvasWidth:c,canvasHeight:d,centerWorld:l,originalHandleCanvas:h,movingTextBox:u},this._activateModify(i),Dc(i);const v=(0,ne.getEnabledElement)(i),{renderingEngine:m}=v;Ua(m,g),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerWorld:h}=this.editData,u=s.worldToCanvas(h),{data:g}=c,v=Math.abs(i[0]-u[0]),m=Math.abs(i[1]-u[1]),p=[u[0],u[1]-m],f=[u[0],u[1]+m],I=[u[0]-v,u[1]],w=[u[0]+v,u[1]];g.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:o}=(0,ne.getEnabledElement)(n),{canvasToWorld:i,worldToCanvas:a}=o,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:c,centerWorld:d,originalHandleCanvas:h}=this.editData,u=o.worldToCanvas(d),{data:g}=r,{points:v}=g.handles,{currentPoints:m}=t,p=m.canvas;if(0===c||1===c){const e=Math.abs(p[1]-u[1]),t=[u[0],u[1]-e],n=[u[0],u[1]+e];v[0]=i(t),v[1]=i(n);const o=s/2+(p[0]-h[0]),a=[u[0]-o,u[1]],r=[u[0]+o,u[1]];v[2]=i(a),v[3]=i(r)}else{const e=Math.abs(p[0]-u[0]),t=[u[0]-e,u[1]],n=[u[0]+e,u[1]];v[2]=i(t),v[3]=i(n);const o=l/2+(p[1]-h[1]),a=[u[0],u[1]-o],r=[u[0],u[1]+o];v[0]=i(a),v[1]=i(r)}})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{handles:u}=h,{points:g,activeHandleIndex:v}=u;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e))),w=(Math.abs(a.getRotation()-(h.initialRotation||0)),Kl(I)),{centerPointRadius:E}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,a,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(o,a,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let C;if(!Ne(r))continue;ge(o)||this.editData||null===v||(C=[I[v]]),C&&Fc(t,r,"0",C,{color:m});const _="".concat(r,"-ellipse"),b="0";if(cf(t,r,b,I,{color:m,lineDash:f,lineWidth:p},_),E>0&&Math.min(Math.abs(w[0][0]-w[1][0])/2,Math.abs(w[0][1]-w[1][1])/2)>3*E){const e=this._getCanvasEllipseCenter(I);vc(t,r,"".concat(b,"-center"),e,E,{color:m,lineDash:f,lineWidth:p})}i=!0;const D=this.getLinkedTextBoxStyle(d,o);if(!D.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}const T=this.configuration.getTextLines(h,l);if(!T||0===T.length)continue;let S;h.handles.textBox.hasMoved||(S=hd(w),h.handles.textBox.worldPosition=a.canvasToWorld(S));const y=a.worldToCanvas(h.handles.textBox.worldPosition),M=ld(t,r,"1",T,y,I,{},D),{x,y:O,width:P,height:A}=M;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([x,O]),topRight:a.canvasToWorld([x+P,O]),bottomLeft:a.canvasToWorld([x,O+A]),bottomRight:a.canvasToWorld([x+P,O+A])}}return i})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const i=e.data,{element:a}=t,{points:r}=i.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:c}=t.getCamera(),[d,h]=Kl(s),u=t.canvasToWorld(d),g=t.canvasToWorld(h),{cachedStats:v}=i,m=Object.keys(v),p=u,f=g;for(let o=0;o<m.length;o++){const i=m[o],a=this.getTargetIdImage(i,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:d,hasPixelSpacing:h}=a,C=mI(s,p);C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]);const _=mI(s,f);if(_[0]=Math.floor(_[0]),_[1]=Math.floor(_[1]),_[2]=Math.floor(_[2]),this._isInsideVolume(C,_,r)){var I,w,E;this.isHandleOutsideImage=!1;const n=[[Math.min(C[0],_[0]),Math.max(C[0],_[0])],[Math.min(C[1],_[1]),Math.max(C[1],_[1])],[Math.min(C[2],_[2]),Math.max(C[2],_[2])]],o={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:h}=vI(l,c,p,f),m=0===r&&0===h,b=gr(a),D=Math.abs(Math.PI*(r/2)*(h/2))/b/b,T={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},S=gd(d.Modality,e.metadata.referencedImageId,T),y=yr(s,(e=>Yl(o,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),M=this.configuration.statsCalculator.getStatistics();v[i]={Modality:d.Modality,area:D,mean:null===(I=M.mean)||void 0===I?void 0:I.value,max:null===(w=M.max)||void 0===w?void 0:w.value,stdDev:null===(E=M.stdDev)||void 0===E?void 0:E.value,statsArray:M.array,pointsInShape:y,isEmptyArea:m,areaUnit:ur(null,a),modalityUnit:S}}else this.isHandleOutsideImage=!0,v[i]={Modality:d.Modality}}return e.invalidated=!1,Qe(e,a),v})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,o=e.height/2;if(n<=0||o<=0)return!1;const i=[e.left+n,e.top+o],a=[t[0]-i[0],t[1]-i[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(o*o)<=1}_getCanvasEllipseCenter(e){const[t,n,o,i]=e,a=[o[0],n[1]],r=[i[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function fI(e,t){const n=e.cachedStats[t],{area:o,mean:i,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:c}=n,d=[];if(o){const e=s?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(l);d.push(e)}return i&&d.push("Mean: ".concat(zu(i)," ").concat(c)),r&&d.push("Max: ".concat(zu(r)," ").concat(c)),a&&d.push("Std Dev: ".concat(zu(a)," ").concat(c)),d}re(pI,"toolName",void 0),pI.toolName="EllipticalROI";const II=pI;function wI(e){const[t,n]=e;return dh(t,n)}function EI(e){const[t,n]=e,o=dh(t,n);return[[t[0]-o,t[1]-o],[t[0]+o,t[1]+o]]}const{transformWorldToIndex:CI}=ne.utilities;class _I extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,centerPointRadius:0,getTextLines:bI,statsCalculator:Id}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},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:[[...i],[...i]],activeHandleIndex:null},cachedStats:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),c=wI(l),d=wI([l[0],n]);return Math.abs(d-c)<o/2})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d}=this.editData,{data:h}=c;h.handles.points=[h.handles.points[0],l(i)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{canvasToWorld:i,worldToCanvas:a}=o.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:c}=l.handles,d=c.map((e=>a(e))),{currentPoints:h}=t,u=h.canvas;if(0===s){const e=u[0]-d[0][0],t=u[1]-d[0][1],n=u,o=[d[1][0]+e,d[1][1]+t];c[0]=i(n),c[1]=i(o)}else c[1]=i(u)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{handles:u}=h,{points:g,activeHandleIndex:v}=u;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e))),w=I[0],E=wI(I),C=EI(I),{centerPointRadius:_}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(o.invalidated&&(this._throttledCalculateCachedStats(o,a,c,e),a instanceof ne.VolumeViewport)){const{referencedImageId:e}=o.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&c.getStackViewports().find((t=>{const n=ne.utilities.imageIdToURI(e),o=t.hasImageURI(n),i=ne.utilities.imageIdToURI(t.getCurrentImageId());return o&&i!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null,radius:null,radiusUnit:null,perimeter:null},this._calculateCachedStats(o,a,c,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let b;if(!Ne(r))continue;ge(o)||this.editData||null===v||(b=[I[v]]),b&&Fc(t,r,"0",b,{color:m});const D="".concat(r,"-circle"),T="0";vc(t,r,T,w,E,{color:m,lineDash:f,lineWidth:p},D),_>0&&E>3*_&&vc(t,r,"".concat(T,"-center"),w,_,{color:m,lineDash:f,lineWidth:p}),i=!0;const S=this.getLinkedTextBoxStyle(d,o);if(!S.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}const y=this.configuration.getTextLines(h,l);if(!y||0===y.length)continue;let M;h.handles.textBox.hasMoved||(M=hd(C),h.handles.textBox.worldPosition=a.canvasToWorld(M));const x=a.worldToCanvas(h.handles.textBox.worldPosition),O=ld(t,r,"1",y,x,I,{},S),{x:P,y:A,width:R,height:N}=O;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,A]),topRight:a.canvasToWorld([P+R,A]),bottomLeft:a.canvasToWorld([P,A+N]),bottomRight:a.canvasToWorld([P+R,A+N])}}return i})),re(this,"_calculateCachedStats",((e,t,n,o)=>{const i=e.data,{element:a}=t,{points:r}=i.handles,s=r.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:l,viewUp:c}=t.getCamera(),[d,h]=EI(s),u=t.canvasToWorld(d),g=t.canvasToWorld(h),{cachedStats:v}=i,m=Object.keys(v),p=u,f=g;for(let o=0;o<m.length;o++){const i=m[o],a=this.getTargetIdImage(i,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:d,hasPixelSpacing:h}=a,C=CI(s,p);C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]);const _=CI(s,f);if(_[0]=Math.floor(_[0]),_[1]=Math.floor(_[1]),_[2]=Math.floor(_[2]),this._isInsideVolume(C,_,r)){var I,w,E;const n=[[Math.min(C[0],_[0]),Math.max(C[0],_[0])],[Math.min(C[1],_[1]),Math.max(C[1],_[1])],[Math.min(C[2],_[2]),Math.max(C[2],_[2])]],o={center:[(u[0]+g[0])/2,(u[1]+g[1])/2,(u[2]+g[2])/2],xRadius:Math.abs(u[0]-g[0])/2,yRadius:Math.abs(u[1]-g[1])/2,zRadius:Math.abs(u[2]-g[2])/2},{worldWidth:r,worldHeight:h}=vI(l,c,p,f),m=0===r&&0===h,b=gr(a),D=pr(a),T=Math.abs(Math.PI*(r/b/2)*(h/D/b/2)),S={isPreScaled:vd(t,i),isSuvScaled:this.isSuvScaled(t,i,e.metadata.referencedImageId)},y=gd(d.Modality,e.metadata.referencedImageId,S),M=yr(s,(e=>Yl(o,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),x=this.configuration.statsCalculator.getStatistics();v[i]={Modality:d.Modality,area:T,mean:null===(I=x.mean)||void 0===I?void 0:I.value,max:null===(w=x.max)||void 0===w?void 0:w.value,stdDev:null===(E=x.stdDev)||void 0===E?void 0:E.value,statsArray:x.array,pointsInShape:M,isEmptyArea:m,areaUnit:ur(null,a),radius:r/2/b,radiusUnit:dr(null,a),perimeter:2*Math.PI*(r/2)/b,modalityUnit:y}}else this.isHandleOutsideImage=!0,v[i]={Modality:d.Modality}}return e.invalidated=!1,Qe(e,a),v})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}}function bI(e,t){const n=e.cachedStats[t],{radius:o,radiusUnit:i,area:a,mean:r,stdDev:s,max:l,isEmptyArea:c,areaUnit:d,modalityUnit:h}=n,u=[];if(o){const e=c?"Radius: Oblique not supported":"Radius: ".concat(zu(o)," ").concat(i);u.push(e)}if(a){const e=c?"Area: Oblique not supported":"Area: ".concat(zu(a)," ").concat(d);u.push(e)}return r&&u.push("Mean: ".concat(zu(r)," ").concat(h)),l&&u.push("Max: ".concat(zu(l)," ").concat(h)),s&&u.push("Std Dev: ".concat(zu(s)," ").concat(h)),u}re(_I,"toolName",void 0),_I.toolName="CircleROI";const DI=_I;class TI{constructor(e){var t,n,o;re(this,"_controlPoints",[]),re(this,"_resolution",void 0),re(this,"_fixedResolution",void 0),re(this,"_closed",void 0),re(this,"_invalidated",!1),re(this,"_curveSegments",void 0),re(this,"_aabb",void 0),re(this,"_length",0),this._controlPoints=[],this._resolution=null!==(t=null==e?void 0:e.resolution)&&void 0!==t?t:20,this._fixedResolution=null!==(n=null==e?void 0:e.fixedResolution)&&void 0!==n&&n,this._closed=null!==(o=null==e?void 0:e.closed)&&void 0!==o&&o,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((e=>this.addControlPoint(e)))}addControlPointAtU(e){const t=this._getLineSegmentAt(e),{start:n,end:o}=t.points,i=Math.floor(e),a=this._curveSegments[i],r=e-Math.floor(i),s=[n[0]+r*(o[0]-n[0]),n[1]+r*(o[1]-n[1])],l=this._controlPoints.indexOf(a.controlPoints.p1)+1;return this._controlPoints.splice(l,0,s),this.invalidated=!0,{index:l,point:s}}deleteControlPointByIndex(e){const t=this._closed?3:1;return e>=0&&e<this._controlPoints.length&&this._controlPoints.length>t&&(this._controlPoints.splice(e,1),this.invalidated=!0,!0)}clearControlPoints(){this._controlPoints=[],this.invalidated=!0}setControlPoints(e){this.clearControlPoints(),this.addControlPoints(e)}updateControlPoint(e,t){if(e<0||e>=this._controlPoints.length)throw new Error("Index out of bounds");this._controlPoints[e]=[...t],this.invalidated=!0}getControlPoints(){return this._controlPoints.map((e=>[e[0],e[1]]))}getClosestControlPoint(e){const t=this._controlPoints;let n=1/0,o=-1;for(let i=0,a=t.length;i<a;i++){const a=t[i],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,o=i)}return{index:o,point:-1===o?void 0:[...t[o]],distance:Math.sqrt(n)}}getClosestControlPointWithinDistance(e,t){const n=this.getClosestControlPoint(e);return n.distance<=t?n:void 0}getClosestPoint(e){this._update();const t=this._getCurveSegmmentsDistanceSquaredInfo(e);if(!t.length)return;let n;t.sort(((e,t)=>e.distanceSquared-t.distanceSquared));let o,i,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:c,curveSegment:d}=l,{lineSegments:h}=d;for(let t=0;t<h.length;t++){const s=h[t],{point:d,distanceSquared:u}=rs(s.points.start,s.points.end,e);u<r&&(i=s,a=c,o=l.curveSegment,n=d,r=u)}}return{point:n,uValue:a+(i.previousLineSegmentsLength+dh(i.points.start,n))/o.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,o=1/0,i=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=rs(i,r,e);l<o&&(n=s,o=l),i=r}return{point:n,distance:Math.sqrt(o)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),o=0===(null==n?void 0:n.index),i=this.getPreviewCurveSegments(e,o);return null!=i&&i.length?this._convertCurveSegmentsToPolyline(i):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),o=t*t;for(let t=0;t<n.length;t++){const{lineSegments:i}=n[t];for(let t=0;t<i.length;t++){const n=i[t];if(ss(n.points.start,n.points.end,e)<=o)return!0}}return!1}containsPoint(e){if(this._update(),this._controlPoints.length<3)return!1;const t=[...this._curveSegments],n=this._getClosingCurveSegmentWithStraightLineSegment();n&&t.push(n);let o=0;for(let n=0;n<t.length;n++){const i=t[n],{aabb:a}=i;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=i;for(let t=0;t<r.length;t++){const n=r[t],{aabb:i}=n;if(e[0]<=i.maxX&&e[1]>=i.minY&&e[1]<i.maxY){const{start:t,end:i}=n.points,a=t[0]===i[0],r=(e[1]-t[1])*(i[0]-t[0])/(i[1]-t[1])+t[0];o+=a||e[0]<=r?1:0}}}return o%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,o=1/0,i=-1/0,a=-1/0;for(let r=0,s=e.length;r<s;r++){const{aabb:s,length:l}=e[r];n=n<=s.minX?n:s.minX,o=o<=s.minY?o:s.minY,i=i>=s.maxX?i:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:o,maxX:i,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:o}=e;o.forEach(((e,o)=>{0===n&&0===o&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let o=0;o<n.length;o++){const i=n[o],a=lh(i.aabb,e);t.push({curveSegmentIndex:o,curveSegment:i,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(lh(this.aabb,e)>n)return[];const o=this._getCurveSegmmentsDistanceSquaredInfo(e),i=[];for(let e=0,t=o.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=o[e];a<=n&&i.push(t)}return i}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,o=this._curveSegments[t],{lineSegments:i}=o,a=o.length*n;for(let e=0;e<i.length;e++){const t=i[e],n=t.previousLineSegmentsLength+t.length;if(a>=t.previousLineSegmentsLength&&a<=n)return t}}_getClosingCurveSegmentWithStraightLineSegment(){if(this.closed)return;const e=this._controlPoints,t=e[0],n=e[e.length-1],o={points:{start:[...t],end:[...n]},aabb:{minX:Math.min(t[0],n[0]),minY:Math.min(t[1],n[1]),maxX:Math.max(t[0],n[0]),maxY:Math.max(t[1],n[1])}};return{aabb:{minX:o.aabb.minX,minY:o.aabb.minY,maxX:o.aabb.maxX,maxY:o.aabb.maxY},lineSegments:[o]}}}class SI extends TI{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,o=Math.max(0,n-2),i=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=o;e<=i;e++){const n=this._getCurveSegment(e,a,r,t);s.push(n)}return s}getSplineCurves(){const e=this._getNumCurveSegments(),t=new Array(e);if(e<=0)return[];const n=this.getTransformMatrix();let o=0;for(let i=0;i<e;i++){const e=this._getCurveSegment(i,n);e.previousCurveSegmentsLength=o,t[i]=e,o+=e.length}return t}_getNumCurveSegments(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.controlPoints;return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.closed)?e.length:Math.max(0,e.length-1)}_getPoint(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const i=this._getNumCurveSegments(n,o),a=Math.floor(e);let r=a%i;const s=e-a;if(r<0||r>=i){if(!this.closed)return;r=(i+r)%i}const{p0:l,p1:c,p2:d,p3:h}=this._getCurveSegmentPoints(r,n,o),u=s*s,g=u*s,v=aa.vec4.fromValues(1,s,u,g),m=aa.vec4.transformMat4(aa.vec4.create(),v,t);return[aa.vec4.dot(m,aa.vec4.fromValues(l[0],c[0],d[0],h[0])),aa.vec4.dot(m,aa.vec4.fromValues(l[1],c[1],d[1],h[1]))]}_getCurveSegmentPoints(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.controlPoints,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.closed;const o=this._getNumCurveSegments(t,n),i=e-1,a=n?(e+1)%o:e+1,r=a+1,s=t[e],l=t[a];let c,d;return c=i>=0?t[i]:n?t[t.length-1]:hh(l,s),d=r<t.length?t[r]:n?t[0]:hh(s,l),{p0:c,p1:s,p2:l,p3:d}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const i=this._getNumCurveSegments(n,o),a=this.resolution+1,r=1/a;let s=e+1;o||e!==i-1||(s-=1e-8);const l=[];let c,d,h=0;for(let i=0,u=e;i<=a;i++,u+=r){u=u>s?s:u;const e=this._getPoint(u,t,n,o);if(!i){c=e;continue}d=e;const a=d[0]-c[0],r=d[1]-c[1],g=Math.sqrt(a**2+r**2),v={minX:c[0]<=d[0]?c[0]:d[0],maxX:c[0]>=d[0]?c[0]:d[0],minY:c[1]<=d[1]?c[1]:d[1],maxY:c[1]>=d[1]?c[1]:d[1]};l.push({points:{start:c,end:d},aabb:v,length:g,previousLineSegmentsLength:h}),c=d,h+=g}return l}_getCurveSegment(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getTransformMatrix(),n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:i,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,o),l=this._getLineSegments(e,t,n,o);let c=0,d=1/0,h=1/0,u=-1/0,g=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;d=Math.min(d,t.minX),h=Math.min(h,t.minY),u=Math.max(u,t.maxX),g=Math.max(g,t.maxY),c+=n})),{controlPoints:{p0:i,p1:a,p2:r,p3:s},aabb:{minX:d,minY:h,maxX:u,maxY:g},length:c,previousCurveSegmentsLength:0,lineSegments:l}}}class yI extends SI{constructor(e){var t,n;super(e),re(this,"_scale",void 0),re(this,"_fixedScale",void 0),this._scale=null!==(t=null==e?void 0:e.scale)&&void 0!==t?t:.5,this._fixedScale=null!==(n=null==e?void 0:e.fixedScale)&&void 0!==n&&n}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,t=2*e;return[0,1,0,0,-e,0,e,0,t,e-3,3-t,-e,-e,2-e,e-2,e]}}class MI extends yI{constructor(){super({resolution:0,fixedResolution:!0,scale:0,fixedScale:!0})}}class xI extends yI{constructor(){super({scale:.5,fixedScale:!0})}}const OI=aa.mat4.multiplyScalar(aa.mat4.create(),aa.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class PI extends SI{getTransformMatrix(){return OI}}const AI={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var RI=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(RI||{}),NI=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(NI||{});class LI extends vv{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,calculateStats:!0,getTextLines:kI,contourHoleAdditionModifierKey:$u.Shift,decimate:{enabled:!1,epsilon:.1},spline:{configuration:{[RI.Cardinal]:{Class:yI,scale:.5},[RI.CatmullRom]:{Class:xI},[RI.Linear]:{Class:MI},[RI.BSpline]:{Class:PI,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:RI.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[NI.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:Zu.Primary,modifierKey:$u.Shift}]},[NI.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:Zu.Primary,modifierKey:$u.Ctrl}]}}}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"fireChangeOnUpdate",null),re(this,"isPointNearTool",((e,t,n,o)=>{const{instance:i}=t.data.spline;return i.isPointNearCurve(n,o)})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1};const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;this._activateModify(o),Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;if(n.worldPosition)s=!0;else{const{points:e}=a.handles;r=e.findIndex((e=>e===n))}const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,contourHoleProcessingEnabled:r}=this.editData,{data:s}=o;o.autoGenerated=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l,d=this.getTargetIdImage(this.getTargetId(l.viewport),l.renderingEngine),{imageData:h,dimensions:u}=d;this.isHandleOutsideImage=s.handles.points.map((e=>ne.utilities.transformWorldToIndex(h,e))).some((e=>!ne.utilities.indexWithinDimensions(e,u))),this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const g=a?je.Completed:je.HandlesUpdated;this.fireChangeOnUpdate?(this.fireChangeOnUpdate.annotationUID=o.annotationUID,this.fireChangeOnUpdate.changeType=g):this.fireChangeOnUpdate={annotationUID:o.annotationUID,changeType:g,contourHoleProcessingEnabled:r},Ua(c,i),this.editData=null,this.isDrawing=!1})),re(this,"_keyDownCallback",(e=>{var t;const n=e.detail,{element:o}=n,i=null!==(t=n.key)&&void 0!==t?t:"",{lastControlPointDeletionKeys:a}=this.configuration.spline;if(!a.includes(i))return;const{annotation:r}=this.editData,{data:s}=r;if(3!==s.handles.points.length){{const e=s.handles.points.length-1;this._deleteControlPointByIndex(o,r,e)}e.preventDefault()}else this.cancel(o)})),re(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:o}=(0,ne.getEnabledElement)(n),i=Qs(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,Ua(o,i),e.preventDefault()})),re(this,"_mouseDownCallback",(e=>{const t=e.type===ie.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:o}=this.editData,{data:i}=n;if(i.contour.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:c}=s,d=(0,ne.getEnabledElement)(r),{renderingEngine:h}=d;let u=i.handles.points.length>=2&&t,g=!0;if(i.handles.points.length>=3){const{instance:e}=i.spline,t=e.getClosestControlPointWithinDistance(l,10);0===(null==t?void 0:t.index)&&(g=!1,u=!0)}g&&i.handles.points.push(c),i.contour.closed=i.contour.closed||u,n.invalidated=!0,Ua(h,o),i.contour.closed&&this._endCallback(e),e.preventDefault()})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;this.moveAnnotation(o,n)}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"triggerAnnotationCompleted",((e,t)=>{const n=ie.ANNOTATION_COMPLETED,o={annotation:e,changeType:je.Completed,contourHoleProcessingEnabled:t};(0,ne.triggerEvent)(ne.eventTarget,n,o)})),re(this,"triggerAnnotationModified",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated;const{viewportId:o,renderingEngineId:i}=t,a=ie.ANNOTATION_MODIFIED,r={annotation:e,viewportId:o,renderingEngineId:i,changeType:n};(0,ne.triggerEvent)(ne.eventTarget,a,r)})),re(this,"triggerChangeEvent",(function(t,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated,i=arguments.length>3?arguments[3]:void 0;o===je.Completed?e.triggerAnnotationCompleted(t,i):e.triggerAnnotationModified(t,n,o)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.KEY_DOWN,this._keyDownCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.KEY_DOWN,this._keyDownCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_renderStats",((e,t,n,o)=>{var i;const a=e.data,r=this.getTargetId(t);if(!a.spline.instance.closed||!o.visibility)return;const s=this.configuration.getTextLines(a,r);if(!s||0===s.length)return;const l=a.handles.points.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=hd(l);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const c=t.worldToCanvas(a.handles.textBox.worldPosition),d=ld(n,null!==(i=e.annotationUID)&&void 0!==i?i:"","textBox",s,c,l,{},o),{x:h,y:u,width:g,height:v}=d;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([h,u]),topRight:t.canvasToWorld([h+g,u]),bottomLeft:t.canvasToWorld([h,u+v]),bottomRight:t.canvasToWorld([h+g,u+v])}})),re(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,o=n.spline.type,i=this._getSplineConfig(o),a=i.controlPointAdditionDistance;if(!1===i.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,ne.getEnabledElement)(s),{renderingEngine:c,viewport:d}=l,{canvasToWorld:h}=d,{instance:u}=n.spline,g=e.detail.currentPoints.canvas,v=u.getClosestPoint(g);if(v.distance>a)return;const{index:m,point:p}=u.addControlPointAtU(v.uValue);n.handles.points.splice(m,0,h(p)),t.invalidated=!0;const f=Qs(s,this.getToolName());Ua(c,f)})),re(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,o=this._getSplineConfig(n),i=o.controlPointDeletionDistance;if(!1===o.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:c}=t.data.spline,d=c.getClosestControlPointWithinDistance(l,i);d&&this._deleteControlPointByIndex(r,t,d.index)})),re(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.contour.closed)return;const o=(0,ne.getEnabledElement)(t),{viewport:i,renderingEngine:a}=o,{cachedStats:r}=n,{polyline:s}=n.contour,l=Object.keys(r);for(let e=0;e<l.length;e++){const t=l[e],n=this.getTargetIdImage(t,a);if(!n)continue;const{metadata:o}=n,c=s.map((e=>i.worldToCanvas(e))),d=c[0],h=i.canvasToWorld(d),u=i.canvasToWorld([d[0]+1,d[1]]),g=i.canvasToWorld([d[0],d[1]+1]),v=aa.vec3.distance(h,u),m=aa.vec3.distance(h,g),p=gr(n);let f=uh(c)/p/p;f*=v*m,r[t]={Modality:o.Modality,area:f,areaUnit:ur(null,n)}}return this.triggerAnnotationModified(e,o,je.StatsUpdated),r})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{canvas:i}=n,a=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey,r=(0,ne.getEnabledElement)(o),{renderingEngine:s}=r,l=this.createAnnotation(e);this.isDrawing=!0,this.addAnnotation(l,o);const c=Qs(o,this.getToolName());return this.editData={annotation:l,viewportIdsToRender:c,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:i,contourHoleProcessingEnabled:a},this._activateDraw(o),e.preventDefault(),Ua(s,c),l}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData;o&&mt(t.annotationUID),super.cancelAnnotation(t);const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,t.annotationUID}isContourSegmentationTool(){return!1}renderAnnotationInstance(e){var t,n,o;const{enabledElement:i,targetId:a,svgDrawingHelper:r,annotationStyle:s}=e,{viewport:l}=i,{worldToCanvas:c}=l,{element:d}=l,h=e.annotation,{annotationUID:u,data:g,highlighted:v}=h,{handles:m}=g,{points:p,activeHandleIndex:f}=m,I=null===(t=this.editData)||void 0===t?void 0:t.newAnnotation,{lineWidth:w,lineDash:E,color:C,locked:_}=s,b=p.map((e=>c(e))),{drawPreviewEnabled:D}=this.configuration.spline,T=h.data.spline.type,S=this._getSplineConfig(T),y=h.data.spline.instance,M=ut(h);if(-1!==M.findIndex((e=>!e)))throw new Error("Can't find annotation for child ".concat(h.childAnnotationUIDs.join()));let x;if([h,...M].filter((e=>this._isSplineROIAnnotation(e))).forEach((e=>{const t=this._updateSplineInstance(d,e).getPolylinePoints();this.updateContourPolyline(e,{points:t,closed:g.contour.closed,targetWindingDirection:rl.Clockwise},l)})),super.renderAnnotationInstance(e),g.cachedStats[a]&&null!=g.cachedStats[a].areaUnit?h.invalidated&&this._throttledCalculateCachedStats(h,d):(g.cachedStats[a]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(h,d)),_||this.editData||null===f||(x=[b[f]]),(x||I||v)&&Fc(r,u,"0",b,{color:C,lineWidth:Math.max(1,w),handleRadius:"3"}),D&&y.numControlPoints>1&&null!==(n=this.editData)&&void 0!==n&&n.lastCanvasPoint&&!y.closed){const{lastCanvasPoint:e}=this.editData;nv(r,u,"previewSplineChange",y.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:E,lineWidth:1})}if(S.showControlPointsConnectors){const e=[...b];y.closed&&e.push(b[0]),nv(r,u,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineWidth:1})}return this._renderStats(h,l,r,s.textbox),(null===(o=this.fireChangeOnUpdate)||void 0===o?void 0:o.annotationUID)===u&&(this.triggerChangeEvent(h,i,this.fireChangeOnUpdate.changeType,this.fireChangeOnUpdate.contourHoleProcessingEnabled),this.fireChangeOnUpdate=null),h.invalidated=!1,!0}createInterpolatedSplineControl(e){var t;if(null!==(t=e.data.handles.points)&&void 0!==t&&t.length)return;const{polyline:n}=e.data.contour;if(!n||!n.length)return;e.data.handles.points=[];const{points:o}=e.data.handles,i=Math.max(10,Math.floor(n.length/20));for(let e=0;e<n.length-i;e+=i)o.push(n[e]);o.push(n[n.length-1])}createAnnotation(e){var t;const n=super.createAnnotation(e),{world:o}=e.detail.currentPoints,{type:i}=this.configuration.spline,a=this._getSplineConfig(i),r=new a.Class,s=()=>({type:a.type,instance:r,resolution:a.resolution});let l;return null!==(t=this.configuration.interpolation)&&void 0!==t&&t.enabled&&(l=e=>{var t;(t=e.data).spline||(t.spline=s()),this.createInterpolatedSplineControl(e)}),ne.utilities.deepMerge(n,{data:{handles:{points:[[...o]]},spline:s(),cachedStats:{}},onInterpolationComplete:l})}_deleteControlPointByIndex(e,t,n){const o=(0,ne.getEnabledElement)(e),{points:i}=t.data.handles;3===i.length?mt(t.annotationUID):i.splice(n,1);const{renderingEngine:a}=o,r=Qs(e,this.getToolName());t.invalidated=!0,Ua(a,r)}_isSplineROIAnnotation(e){var t;return!(null===(t=e.data)||void 0===t||!t.spline)}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},AI,n[e])}_updateSplineInstance(e,t){const n=(0,ne.getEnabledElement)(e),{viewport:o}=n,{worldToCanvas:i}=o,{data:a}=t,{type:r,instance:s}=t.data.spline,l=this._getSplineConfig(r),c=a.handles.points.map(i),d=void 0!==l.resolution?parseInt(l.resolution):void 0,h=void 0!==l.scale?parseFloat(l.scale):void 0;return s.setControlPoints(c),s.closed=!!a.contour.closed,s.fixedResolution||void 0===d||s.resolution===d||(s.resolution=d,t.invalidated=!0),s instanceof yI&&!s.fixedScale&&void 0!==h&&s.scale!==h&&(s.scale=h,t.invalidated=!0),s}}function kI(e,t){const n=e.cachedStats[t],{area:o,isEmptyArea:i,areaUnit:a}=n,r=[];if(o){const e=i?"Area: Oblique not supported":"Area: ".concat(zu(o)," ").concat(a);r.push(e)}return r}re(LI,"toolName",void 0),re(LI,"SplineTypes",RI),re(LI,"Actions",NI),LI.toolName="SplineROI";const UI=LI;class VI extends UI{constructor(e){super(ne.utilities.deepMerge({configuration:{calculateStats:!1}},e))}isContourSegmentationTool(){return!0}}re(VI,"toolName",void 0),VI.toolName="SplineContourSegmentationTool";const WI=VI;class HI{constructor(e){let{numBits:t,getPriority:n,areEqual:o}=e;re(this,"_bucketCount",void 0),re(this,"_mask",void 0),re(this,"_size",void 0),re(this,"_currentBucketIndex",void 0),re(this,"_getPriority",void 0),re(this,"_areEqual",void 0),re(this,"_buckets",void 0),this._bucketCount=1<<t,this._mask=this._bucketCount-1,this._size=0,this._currentBucketIndex=0,this._buckets=this._buildArray(this._bucketCount),this._getPriority=void 0!==n?n:e=>e,this._areEqual="function"==typeof o?o:(e,t)=>e===t}push(e){const t=this._getBucketIndex(e),n={value:e,next:this._buckets[t]};this._buckets[t]=n,this._size++}pop(){if(0===this._size)throw new Error("Cannot pop because the queue is empty.");for(;null===this._buckets[this._currentBucketIndex];)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 t=this._getBucketIndex(e),n=this._buckets[t];let o,i=n;for(;null!==i&&!this._areEqual(e,i.value);)o=i,i=i.next;return null!==i&&(i===n?this._buckets[t]=i.next:o.next=i.next,this._size--,!0)}isEmpty(){return 0===this._size}_getBucketIndex(e){return this._getPriority(e)&this._mask}_buildArray(e){const t=new Array(e);return t.fill(null),t}}const{isEqual:BI}=ne.utilities,FI=4294967295,GI=2/(3*Math.PI);class qI{constructor(e,t,n){re(this,"searchGranularityBits",void 0),re(this,"searchGranularity",void 0),re(this,"width",void 0),re(this,"height",void 0),re(this,"grayscalePixelData",void 0),re(this,"laplace",void 0),re(this,"gradMagnitude",void 0),re(this,"gradXNew",void 0),re(this,"gradYNew",void 0),re(this,"startPoint",void 0),re(this,"visited",void 0),re(this,"parents",void 0),re(this,"costs",void 0),re(this,"priorityQueueNew",void 0),re(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),re(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),re(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const o=e.length;this.searchGranularityBits=8,this.searchGranularity=1<<this.searchGranularityBits,this.width=t,this.height=n,this.grayscalePixelData=e,this.laplace=null,this.gradXNew=null,this.gradYNew=null,this.laplace=this._computeLaplace(),this.gradMagnitude=this._computeGradient(),this.gradXNew=this._computeGradientX(),this.gradYNew=this._computeGradientY(),this.visited=new Array(o),this.parents=new Uint32Array(o),this.costs=new Float32Array(o)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(FI),this.costs.fill(1/0),this.priorityQueueNew=new HI({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findMinNearby(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;const[n,o]=e,{costs:i}=this,a=[Math.max(0,n-t),Math.min(n+t+1,this.width)],r=[Math.max(0,o-t),Math.min(o+t+1,this.height)];let s=.8*i[this._getPointIndex(o,n)],l=e;for(let n=a[0];n<a[1];n++)for(let o=r[0];o<r[1];o++){const a=1-(Math.abs(n-e[0])+Math.abs(o-e[1]))/t/2,r=.8*i[this._getPointIndex(o,n)]+.2*a;r<s&&(l=[n,o],s=r)}return l}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:o}=this,i=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:c}=this;if(a===i)return[];for(;!c.isEmpty()&&s[a]===FI;){const e=c.pop();if(r[e])continue;const t=o(e),i=this._getNeighborPoints(t);r[e]=!0;for(let o=0,a=i.length;o<a;o++){const a=i[o],r=n(a[1],a[0]),d=this._getWeightedDistance(t,a),h=l[e]+d;h<l[r]&&(l[r]!==1/0&&c.remove(r),l[r]=h,s[r]=e,c.push(r))}}const d=[];let h=a;for(;h!==FI;)d.push(o(h)),h=s[h];return d.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:o}=this;let i=this._getPointIndex(t,e);return e+1===o&&i--,n[i+1]-n[i]}_getDeltaY(e,t){const{grayscalePixelData:n,width:o,height:i}=this;let a=this._getPointIndex(t,e);return t+1===i&&(a-=o),n[a]-n[a+o]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),o=this._getDeltaY(e,t);return Math.sqrt(n*n+o*o)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:o}=this;let i=n[o(t-2,e)];return i+=n[o(t-1,e-1)]+2*n[o(t-1,e)]+n[o(t-1,e+1)],i+=n[o(t,e-2)]+2*n[o(t,e-1)]-16*n[o(t,e)]+2*n[o(t,e+1)]+n[o(t,e+2)],i+=n[o(t+1,e-1)]+2*n[o(t+1,e)]+n[o(t+1,e+1)],i+=n[o(t+2,e)],i}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0,i=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[o]=this._getGradientMagnitude(a,r),i=Math.max(n[o],i),o++;n[o]=n[o-1],o++}for(let t=n.length;o<t;o++)n[o]=n[o-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/i;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,o=new Float32Array(e*t);o.fill(1,0,n(2,0));for(let i=2;i<t-2;i++){o[n(i,0)]=1,o[n(i,1)]=1;for(let t=2;t<e-2;t++)o[n(i,t)]=this._getLaplace(t,i)>.33?0:1;o[n(i,e-2)]=1,o[n(i,e-1)]=1}return o.fill(1,n(t-2,0)),o}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0;for(let i=0;i<t;i++)for(let t=0;t<e;t++)n[o++]=this._getDeltaX(t,i);return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let o=0;for(let i=0;i<t;i++)for(let t=0;t<e;t++)n[o++]=this._getDeltaY(t,i);return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:o,_getPointIndex:i}=this,a=n[i(t,e)],r=o[i(t,e)];let s=Math.sqrt(a*a+r*r);return s=Math.max(s,1e-100),[a/s,r/s]}_getGradientDirection(e,t,n,o){const i=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,o);let r=i[1]*(n-e)-i[0]*(o-t),s=a[1]*(n-e)-a[0]*(o-t);r<0&&(r=-r,s=-s),e!==n&&t!==o&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),s=Math.min(Math.max(s,-1),1);const l=GI*(Math.acos(Math.min(r,1))+Math.acos(s));return isNaN(l)||!isFinite(l)?(console.warn("Found non-direction:",e,t,n,o,r,s,l),1):l}getCost(e,t){return this._getWeightedDistance(e,t)}_getWeightedDistance(e,t){const{_getPointIndex:n,width:o,height:i}=this,[a,r]=e,[s,l]=t;if(s<0||s>=o||l<0||l>=i)return 1;if(a<0||r<0||a>=o||r>=i)return 0;const c=n(l,s);let d=this.gradMagnitude[c];return a!==s&&r!==l||(d*=Math.SQRT1_2),.43*d+.43*this.laplace[c]+.11*this._getGradientDirection(a,r,s,l)}_getNeighborPoints(e){const{width:t,height:n}=this,o=[],i=Math.max(e[0]-1,0),a=Math.max(e[1]-1,0),r=Math.min(e[0]+1,t-1),s=Math.min(e[1]+1,n-1);for(let t=a;t<=s;t++)for(let n=i;n<=r;n++)n===e[0]&&t===e[1]||o.push([n,t]);return o}static createInstanceFromRawPixelData(e,t,n,o){const i=e.length,a=new Float32Array(i),{lower:r,upper:s}=o,l=s-r;for(let t=0,n=e.length;t<n;t++)a[t]=Math.max(0,Math.min(1,(e[t]-r)/l));return new qI(a,t,n)}}class jI{constructor(e,t){re(this,"pointArray",void 0),re(this,"_controlPointIndexes",void 0),this.pointArray=e?e.slice():[],this._controlPointIndexes=t?t.slice():[]}getPoint(e){return this.pointArray[e]}getLastPoint(){return this.pointArray[this.pointArray.length-1]}isControlPoint(e){const t=this.pointArray.indexOf(e);if(-1!==t)return-1!==this._controlPointIndexes.indexOf(t);throw new Error("Error: isControlPoint called with not in list point.")}addPoint(e){this.pointArray.push(e)}addControlPoint(e){const t=this.pointArray.indexOf(e);if(-1===t)throw new Error("Cannot mark a non registered point as control point.");this._controlPointIndexes.push(t)}getControlPoints(){return this._controlPointIndexes.map((e=>this.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 t=e.pointArray.length,n=[];this.pointArray=e.pointArray.concat(this.pointArray);for(let e=0;e<this._controlPointIndexes.length;++e)n[e]=this._controlPointIndexes[e]+t;this._controlPointIndexes=e._controlPointIndexes.concat(n)}appendPath(e){this.addPoints(e.pointArray),e._controlPointIndexes.forEach((e=>this._controlPointIndexes.push(e)))}}class zI extends vv{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{preventHandleOutsideImage:!1,contourHoleAdditionModifierKey:$u.Shift,snapHandleNearby:2,interpolation:{enabled:!1,nearestEdge:2,showInterpolationPolyline:!1},decimate:{enabled:!1,epsilon:.1},actions:{undo:{method:"undo",bindings:[{key:"Escape"}]}}}}),e=this,re(this,"scissors",void 0),re(this,"scissorsRight",void 0),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,r=o*o,s=t.data.contour.polyline.map((e=>a.worldToCanvas(e)));let l=s[s.length-1];for(let e=0;e<s.length;e++){const t=s[e];if(ss(l,t,n)<=r)return!0;l=t}return!1})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i};const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;this._activateModify(o),Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(function(t){let n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const o=t.detail,{element:i}=o,{annotation:a,viewportIdsToRender:r,newAnnotation:s,contourHoleProcessingEnabled:l}=e.editData,{data:c}=a;c.handles.activeHandleIndex=null,e._deactivateModify(i),e._deactivateDraw(i),bc(i);const d=(0,ne.getEnabledElement)(i),{renderingEngine:h}=d;if(e.isHandleOutsideImage&&e.configuration.preventHandleOutsideImage||n)return mt(a.annotationUID),e.clearEditData(),void Ua(h,r);Ua(h,r);const u=s?je.Completed:je.HandlesUpdated;e.triggerChangeEvent(a,d,u,l),e.clearEditData()})),re(this,"triggerChangeEvent",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:je.StatsUpdated,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];n===je.Completed?tt(e,o):Qe(e,t.viewport.element,n)})),re(this,"_mouseDownCallback",(e=>{const t=e.type===ie.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:o,worldToSlice:i,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:c,world:d}=l;let h=d;const u=(0,ne.getEnabledElement)(s),{viewport:g,renderingEngine:v}=u,m=this.editData.currentPath.getControlPoints();let p=m.length>=2&&t;if(m.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=m.length;t<n;t++){const n=a(m[t]),o=as(c,g.worldToCanvas(n));o<=100&&o<e.distSquared&&(e.distSquared=o,e.index=t)}0===e.index&&(p=!0)}const{snapHandleNearby:f}=this.configuration;if(f&&!this.editData.closed){const e=new jI,t=this.scissors.findMinNearby(i(d),1),n=this.scissors.findPathToPoint(t);e.addPoints(n),e.prependPath(this.editData.confirmedPath),h=a(t),this.editData.currentPath=e}this.editData.closed=this.editData.closed||p,this.editData.confirmedPath=this.editData.currentPath;const I=this.editData.currentPath.getLastPoint();this.editData.confirmedPath.addControlPoint(I),n.data.handles.points.push(a(I)),this.scissors.startSearch(i(h)),n.invalidated=!0,Ua(v,o),this.editData.closed&&(this.updateAnnotation(this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),re(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:o,canvas:i}=n,{renderingEngine:a}=(0,ne.getEnabledElement)(t),r=Qs(t,this.getToolName());this.editData.lastCanvasPoint=i;const{width:s,height:l}=this.scissors,{worldToSlice:c}=this.editData,d=c(o);if(d[0]<0||d[1]<0||d[0]>=s||d[1]>=l)return;const h=this.scissors.findPathToPoint(d),u=new jI;u.addPoints(h),u.prependPath(this.editData.confirmedPath),this.editData.currentPath=u,Ua(a,r),e.preventDefault()})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData;if(void 0===a)console.warn("No drag implemented for livewire");else{const{currentPoints:e}=t,i=e.world;this.editHandle(i,n,o,a)}const r=(0,ne.getEnabledElement)(n),{renderingEngine:s}=r;Ua(s,i)})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData;o&&mt(t.annotationUID);const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,this.scissors=null,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(ie.TOUCH_TAP,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(ie.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(ie.TOUCH_TAP,this._mouseDownCallback)}))}setupBaseEditData(e,t,n,o,i){var a,r,s;const l=(0,ne.getEnabledElement)(t),{viewport:c}=l;this.isDrawing=!0;const d=c.getImageData(),{imageData:h}=d;let u,g,v,m,{scalarData:p}=d;if(c instanceof ne.VolumeViewport||!p){if(!(c instanceof ne.VolumeViewport))throw new Error("Viewport not supported");{const e=ne.utilities.getCurrentVolumeViewportSlice(c),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;u=e=>{const t=ne.utilities.transformWorldToIndex(h,e),o=aa.vec3.transformMat4([0,0,0],t,n);return[o[0],o[1]]},g=e=>{const n=aa.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return ne.utilities.transformIndexToWorld(h,n)},p=e.scalarData,v=e.width,m=e.height}}else v=d.dimensions[0],m=d.dimensions[1],u=e=>{const t=ne.utilities.transformWorldToIndex(h,e);return[t[0],t[1]]},g=e=>ne.utilities.transformIndexToWorld(h,[e[0],e[1],0]);p=ne.utilities.convertToGrayscale(p,v,m);const{voiRange:f}=c.getProperties(),I=u(e);this.scissors=qI.createInstanceFromRawPixelData(p,v,m,f),o&&(this.scissorsRight=qI.createInstanceFromRawPixelData(p,v,m,f),this.scissorsRight.startSearch(u(o))),this.scissors.startSearch(I);const w=!o,E=new jI,C=new jI,_=w?void 0:new jI;E.addPoint(I),E.addControlPoint(I);const b=Qs(t,this.getToolName()),D=c.worldToCanvas(e);this.editData={annotation:n,viewportIdsToRender:b,newAnnotation:w,hasMoved:!1,lastCanvasPoint:D,confirmedPath:E,currentPath:C,confirmedPathRight:_,closed:!1,handleIndex:null!==(a=null===(r=this.editData)||void 0===r?void 0:r.handleIndex)&&void 0!==a?a:null===(s=n.handles)||void 0===s?void 0:s.activeHandleIndex,worldToSlice:u,sliceToWorld:g,contourHoleProcessingEnabled:i}}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:o}=t,{world:i}=n,{renderingEngine:a}=(0,ne.getEnabledElement)(o),r=this.createAnnotation(e),s=Qu(e.detail.event)===this.configuration.contourHoleAdditionModifierKey;return this.setupBaseEditData(i,o,r,void 0,s),this.addAnnotation(r,o),this._activateDraw(o),e.preventDefault(),Ua(a,this.editData.viewportIdsToRender),r}clearEditData(){this.editData=null,this.scissors=null,this.scissorsRight=null,this.isDrawing=!1}editHandle(e,t,n,o){var i;const{data:a}=n,{points:r}=a.handles,{length:s}=r,l=r[(o-1+s)%s],c=r[(o+1)%s];if(null===(i=this.editData)||void 0===i||!i.confirmedPathRight){this.setupBaseEditData(l,t,n,c);const{polyline:e}=a.contour,i=new jI,r=new jI,{worldToSlice:s}=this.editData,d=Pl(n,o-1),h=Pl(n,o+1);if(-1===h||-1===d)throw new Error("Can't find handle index ".concat(-1===h&&c," ").concat(-1===d&&l));if(0===o)r.addPoints(e.slice(h+1,d).map(s));else{if(h<d)throw new Error("Expected right index after left index, but were: ".concat(d," ").concat(h));i.addPoints(e.slice(0,d+1).map(s)),r.addPoints(e.slice(h,e.length).map(s))}this.editData.confirmedPath=i,this.editData.confirmedPathRight=r}const{editData:d,scissors:h}=this,{worldToSlice:u,sliceToWorld:g}=d,{activeHandleIndex:v}=a.handles;if(null==v)a.handles.activeHandleIndex=o;else if(v!==o)throw new Error("Trying to edit a different handle than the one currently being edited ".concat(o,"!==").concat(a.handles.activeHandleIndex));const m=u(e);if(m[0]<0||m[0]>=h.width||m[1]<0||m[1]>=h.height)return;r[o]=g(m);const p=h.findPathToPoint(m),f=this.scissorsRight.findPathToPoint(m),I=new jI;I.prependPath(d.confirmedPath),0!==o&&I.addPoints(p),I.addPoints(f.reverse()),I.appendPath(d.confirmedPathRight),0===o&&I.addPoints(p),d.currentPath=I,n.invalidated=!0,d.hasMoved=!0}renderAnnotation(e,t){var n;return this.updateAnnotation(null===(n=this.editData)||void 0===n?void 0:n.currentPath),super.renderAnnotation(e,t)}isContourSegmentationTool(){return!1}createAnnotation(e){const t=super.createAnnotation(e),{world:n}=e.detail.currentPoints;return ne.utilities.deepMerge(t,{data:{handles:{points:[[...n]]}}})}undo(e,t,n){this.editData&&this._endCallback(n,!0)}renderAnnotationInstance(e){var t,n;const{annotation:o,enabledElement:i,svgDrawingHelper:a,annotationStyle:r}=e,{viewport:s}=i,{worldToCanvas:l}=s,{annotationUID:c,data:d,highlighted:h}=o,{handles:u}=d,g=null===(t=this.editData)||void 0===t?void 0:t.newAnnotation,{lineWidth:v,lineDash:m,color:p}=r;if(h||g&&o.annotationUID===(null===(n=this.editData)||void 0===n||null===(n=n.annotation)||void 0===n?void 0:n.annotationUID)){const e="0",t=u.points.map(l);Fc(a,c,e,t,{color:p,lineDash:m,lineWidth:v})}return super.renderAnnotationInstance(e),!0}updateAnnotation(e){if(!this.editData||!e)return;const{annotation:t,sliceToWorld:n}=this.editData;let{pointArray:o}=e;o.length>1&&(o=[...o,o[0]]),this.updateContourPolyline(t,{points:o,closed:t.data.contour.closed,targetWindingDirection:rl.Clockwise},{canvasToWorld:n})}}re(zI,"toolName",void 0),zI.toolName="LivewireContour";const KI=zI;class YI extends KI{updateInterpolatedAnnotation(e,t){!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:o}=t.viewport;this.setupBaseEditData(n[0],o,e);const{length:i}=n,{scissors:a}=this,{nearestEdge:r,repeatInterpolation:s}=this.configuration.interpolation;e.data.handles.originalPoints=n;const{worldToSlice:l,sliceToWorld:c}=this.editData,d=[];if(r){let e=l(n[n.length-1]);n.forEach(((t,o)=>{const i=l(t);e=i,d.push(i),a.startSearch(e),a.findPathToPoint(i),a.findPathToPoint(l(n[(o+3)%n.length]));const s=a.findMinNearby(i,r);ne.utilities.isEqual(i,s)||(d[o]=s,e=s,n[o]=c(s))}))}const h=new jI;for(let e=0;e<i;e++){a.startSearch(l(n[e]));const t=a.findPathToPoint(l(n[(e+1)%i]));h.addPoints(t)}this.updateAnnotation(h),this.scissors=null,this.scissorsRight=null,this.editData=null,e.data.handles.interpolationSources=null,s&&Qe(e,t.viewport.element,je.InterpolationUpdated)})))}renderAnnotationInstance(e){var t;const{enabledElement:n,svgDrawingHelper:o}=e,i=e.annotation,{annotationUID:a}=i,{viewport:r}=n,{worldToCanvas:s}=r,{showInterpolationPolyline:l}=this.configuration.interpolation||{};null===(t=this.updateInterpolatedAnnotation)||void 0===t||t.call(this,i,n);const{originalPolyline:c}=i.data.contour,d=super.renderAnnotationInstance(e);if(l&&c&&i.autoGenerated){const e=c.map(s);e.push(e[0]),nv(o,a,"interpolationContour-0",e,{color:"#70ffff",lineWidth:1,fillOpacity:0})}return d}isContourSegmentationTool(){return!0}}re(YI,"toolName",void 0),YI.toolName="LivewireContourSegmentationTool";const XI=YI;class JI extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,getTextCallback:ZI,changeTextCallback:$I,preventHandleOutsideImage:!1,arrowFirst:!0}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),{arrowFirst:u}=this.configuration,g=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:g,referencedImageId:h},data:{text:"",handles:{points:[[...i],[...i]],activeHandleIndex:null,arrowFirst:u,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:""}};gt(v,o);const m=Qs(o,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,m),v})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l]=r.handles.points,c=a.worldToCanvas(s),d=a.worldToCanvas(l),h={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}};return cd([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const{renderingEngine:l}=(0,ne.getEnabledElement)(n);this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),a?this.configuration.getTextCallback((e=>{if(!e)return mt(o.annotationUID),Ua(l,i),this.editData=null,void(this.isDrawing=!1);o.data.text=e,et(o),Ua(l,i)})):Qe(o,n),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),re(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:o}=n;let i=st(this.getToolName(),o);if(i=this.filterInteractableAnnotationsForElement(o,i),null===(t=i)||void 0===t||!t.length)return;const a=i.find((e=>this.isPointNearTool(o,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,o,r)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const{renderingEngine:a}=(0,ne.getEnabledElement)(e);return Ua(a,n),o&&et(t),this.editData=null,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o,data:r}=n,{handles:c,text:d}=r,{points:h,activeHandleIndex:u}=c;l.annotationUID=o;const{color:g,lineWidth:v,lineDash:m}=this.getAnnotationStyle({annotation:n,styleSpecifier:l}),p=h.map((e=>a.worldToCanvas(e)));let f;ge(n)||this.editData||null===u||(f=[p[u]]),f&&Fc(t,o,"0",p,{color:g,lineWidth:v});const I="1";if(this.configuration.arrowFirst?hf(t,o,I,p[1],p[0],{color:g,width:v,lineDash:m}):hf(t,o,I,p[0],p[1],{color:g,width:v,lineDash:m}),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;if(!d)continue;const w=this.getLinkedTextBoxStyle(l,n);if(!w.visibility){r.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(!r.handles.textBox.hasMoved){const e=p[1];r.handles.textBox.worldPosition=a.canvasToWorld(e)}const E=a.worldToCanvas(r.handles.textBox.worldPosition),C=ld(t,o,"1",[d],E,p,{},w),{x:_,y:b,width:D,height:T}=C;r.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([_,b]),topRight:a.canvasToWorld([_+D,b]),bottomLeft:a.canvasToWorld([_,b+T]),bottomRight:a.canvasToWorld([_+D,b+T])}}return i}))}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o,a=Qs(e,this.getToolName());Ua(i,a),Qe(t,e)}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function ZI(e){return e(prompt("Enter your annotation:"))}function $I(e,t,n){return n(prompt("Enter your annotation:"))}re(JI,"toolName",void 0),JI.toolName="ArrowAnnotate";const QI=JI;class ew extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:tw}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"angleStartedNotYetCompleted",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,[s,l,c]=r.handles.points,d=a.worldToCanvas(s),h=a.worldToCanvas(l),u={start:{x:d[0],y:d[1]},end:{x:h[0],y:h[1]}};if(cd([u.start.x,u.start.y],[u.end.x,u.end.y],[n[0],n[1]])<=o)return!0;if(!c)return!1;const g=a.worldToCanvas(c),v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}};return cd([v.start.x,v.start.y],[v.end.x,v.end.y],[n[0],n[1]])<=o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i,movingTextBox:!1},this._activateModify(o),Dc(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&2===s.handles.points.length)return void(this.editData.handleIndex=2);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const o=s[n],{annotationUID:r,data:u}=o,{points:g,activeHandleIndex:v}=u.handles;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e)));let w;if(u.cachedStats[l]&&null!=u.cachedStats[l].angle?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(u.cachedStats[l]={angle:null},this._calculateCachedStats(o,c,e)),ge(o)||this.editData||null===v||(w=[I[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;w&&Fc(t,r,"0",I,{color:m,lineDash:f,lineWidth:p});let E="1";if(rd(t,r,E,I[0],I[1],{color:m,width:p,lineDash:f}),i=!0,3!==I.length)return i;if(E="2",rd(t,r,E,I[1],I[2],{color:m,width:p,lineDash:f}),null===(h=u.cachedStats[l])||void 0===h||!h.angle)continue;const C=this.getLinkedTextBoxStyle(d,o);if(!C.visibility){u.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 _=this.configuration.getTextLines(u,l);if(!u.handles.textBox.hasMoved){const e=I[1];u.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(u.handles.textBox.worldPosition),D=ld(t,r,"1",_,b,I,{},C),{x:T,y:S,width:y,height:M}=D;u.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([T,S]),topRight:a.canvasToWorld([T+y,S]),bottomLeft:a.canvasToWorld([T,S+M]),bottomRight:a.canvasToWorld([T+y,S+M])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport;if(3!==o.handles.points.length)return;const a=o.handles.points[0],r=o.handles.points[1],s=o.handles.points[2],{cachedStats:l}=o,c=Object.keys(l);for(let e=0;e<c.length;e++){const n=c[e],o=Lf([a,r],[r,s]),{dimensions:i,imageData:d}=this.getTargetIdImage(n,t);this.isHandleOutsideImage=[a,r,s].map((e=>ne.utilities.transformWorldToIndex(d,e))).some((e=>!ne.utilities.indexWithinDimensions(e,i))),l[n]={angle:isNaN(o)?"Incomplete Angle":o}}return e.invalidated=!1,Qe(e,i),l}}function tw(e,t){const n=e.cachedStats[t],{angle:o}=n;if(void 0!==o)return isNaN(o)?["".concat(o)]:["".concat(zu(o)," ").concat(String.fromCharCode(176))]}re(ew,"toolName",void 0),ew.toolName="Angle";const nw=ew,ow=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const o=2===t[0].length?[0,0]:[0,0,0],i=t.length;for(const e of t)o[0]+=e[0]/i,o[1]+=e[1]/i,3===o.length&&(o[2]+=e[2]/i);return o};class iw extends nd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:aw,showArcLines:!1}}),e=this,re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"angleStartedNotYetCompleted",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:o});return s<=o||l<=o})),re(this,"toolSelectedCallback",(function(t,n,o,i){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Qs(s,e.getToolName()),c=(0,ne.getEnabledElement)(s),{renderingEngine:d,viewport:h}=c,{isNearFirstLine:u,isNearSecondLine:g}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:i,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:u,isNearSecondLine:g},e._activateModify(s),Dc(s),Ua(d,l),t.preventDefault()})),re(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return bc(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,o=e.detail,{element:i,currentPoints:a}=o,r=a.world,{data:s}=t;return 1===n?(s.handles.points[1]=r,void(this.editData.hasMoved=s.handles.points[1][0]!==s.handles.points[0][0]||s.handles.points[1][1]!==s.handles.points[0][0])):3===n?(s.handles.points[3]=r,this.editData.hasMoved=s.handles.points[3][0]!==s.handles.points[2][0]||s.handles.points[3][1]!==s.handles.points[2][0],void(this.angleStartedNotYetCompleted=!1)):(this.editData.hasMoved=!1,Dc(i),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),re(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:c}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=c.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,i=c.handles.points;s?[i[0],i[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[i[2],i[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;c.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const d=(0,ne.getEnabledElement)(n),{renderingEngine:h}=d;Ua(h,i)})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;i.handles.points.length<4&&mt(t.annotationUID),t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DOWN,this._mouseDownCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DOWN,this._mouseDownCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const o=s[n],{annotationUID:r,data:u}=o,{points:g,activeHandleIndex:v}=u.handles;d.annotationUID=r;const{color:m,lineWidth:p,lineDash:f}=this.getAnnotationStyle({annotation:o,styleSpecifier:d}),I=g.map((e=>a.worldToCanvas(e)));let w;if(u.cachedStats[l]&&null!=u.cachedStats[l].angle?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(u.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(o,c,e)),ge(o)||this.editData||null===v||(w=[I[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;w&&Fc(t,r,"0",I,{color:m,lineDash:f,lineWidth:p});const E=[I[0],I[1]],C=[I[2],I[3]];let _="line1";if(rd(t,r,_,E[0],E[1],{color:m,width:p,lineDash:f}),i=!0,I.length<4)return i;_="line2",rd(t,r,_,C[0],C[1],{color:m,width:p,lineDash:f}),_="linkLine",rd(t,r,_,ow(E[0],E[1]),ow(C[0],C[1]),{color:m,lineWidth:"1",lineDash:"1,4"});const{arc1Start:b,arc1End:D,arc2End:T,arc2Start:S}=u.cachedStats[l].points.canvas,{arc1Angle:y,arc2Angle:M}=u.cachedStats[l];if(this.configuration.showArcLines&&(_="arc1",rd(t,r,_,b,D,{color:m,lineWidth:"1"}),_="arc2",rd(t,r,_,S,T,{color:m,lineWidth:"1"})),null===(h=u.cachedStats[l])||void 0===h||!h.angle)continue;const x=this.getLinkedTextBoxStyle(d,o);if(!x.visibility){u.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 O=this.configuration.getTextLines(u,l);if(!u.handles.textBox.hasMoved){const e=hd(I);u.handles.textBox.worldPosition=a.canvasToWorld(e)}const P=a.worldToCanvas(u.handles.textBox.worldPosition),A=ld(t,r,"cobbAngleText",O,P,I,{},x),{x:R,y:N,width:L,height:k}=A;if(u.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,N]),topRight:a.canvasToWorld([R+L,N]),bottomLeft:a.canvasToWorld([R,N+k]),bottomRight:a.canvasToWorld([R+L,N+k])},this.configuration.showArcLines){const e="arcAngle1",n=["".concat(y.toFixed(2)," ").concat(String.fromCharCode(176))],o=ow(b,D);ad(t,r,e,n,o,{...x,padding:3});const i="arcAngle2",a=["".concat(M.toFixed(2)," ").concat(String.fromCharCode(176))],s=ow(S,T);ad(t,r,i,a,s,{...x,padding:3})}}return i})),re(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:o,proximity:i}=e;const[a,r,s,l]=n,c=t.worldToCanvas(a),d=t.worldToCanvas(r),h=t.worldToCanvas(s),u=t.worldToCanvas(l),g={start:{x:c[0],y:c[1]},end:{x:d[0],y:d[1]}},v={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}},m=cd([g.start.x,g.start.y],[g.end.x,g.end.y],[o[0],o[1]]),p=cd([v.start.x,v.start.y],[v.end.x,v.end.y],[o[0],o[1]]);let f=!1,I=!1;return m<=i?f=!0:p<=i&&(I=!0),{distanceToPoint:m,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:I}})),re(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:o,mid2:i}=e;const a=[o,i],r=Lf(t,a),s=Lf(n,a),l=r>90?1:0,c=s>90?0:1,d=ow(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),u=.1,g=ow(t[0],t[1]),v=ow(n[0],n[1]),m=[t[l][0]-g[0],t[l][1]-g[1]],p=Math.sqrt(m[0]**2+m[1]**2),f=[m[0]/p,m[1]/p],I=[g[0]+f[0]*h*u,g[1]+f[1]*h*u],w=[d[0]-o[0],d[1]-o[1]],E=Math.sqrt(w[0]**2+w[1]**2),C=[w[0]/E,w[1]/E],_=[o[0]+C[0]*h*u,o[1]+C[1]*h*u],b=[n[c][0]-v[0],n[c][1]-v[1]],D=Math.sqrt(b[0]**2+b[1]**2),T=[b[0]/D,b[1]/D],S=[v[0]+T[0]*h*u,v[1]+T[1]*h*u],y=[d[0]-i[0],d[1]-i[1]],M=Math.sqrt(y[0]**2+y[1]**2),x=[y[0]/M,y[1]/M];return{arc1Start:I,arc1End:_,arc2Start:S,arc2End:[i[0]+x[0]*h*u,i[1]+x[1]*h*u],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data;if(4!==o.handles.points.length)return;const i=[null,null],a=[null,null];let r=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=aa.vec3.distance(o.handles.points[e],o.handles.points[t]);n<r&&(r=n,i[1]=o.handles.points[e],i[0]=o.handles.points[(e+1)%2],a[0]=o.handles.points[t],a[1]=o.handles.points[2+(t-1)%2])}const{viewport:s}=n,{element:l}=s,c=o.handles.points.map((e=>s.worldToCanvas(e))),d=[c[0],c[1]],h=[c[2],c[3]],u=ow(d[0],d[1]),g=ow(h[0],h[1]),{arc1Start:v,arc1End:m,arc2End:p,arc2Start:f,arc1Angle:I,arc2Angle:w}=this.getArcsStartEndPoints({firstLine:d,secondLine:h,mid1:u,mid2:g}),{cachedStats:E}=o,C=Object.keys(E);for(let e=0;e<C.length;e++)E[C[e]]={angle:Lf(i,a),arc1Angle:I,arc2Angle:w,points:{canvas:{arc1Start:v,arc1End:m,arc2End:p,arc2Start:f},world:{arc1Start:s.canvasToWorld(v),arc1End:s.canvasToWorld(m),arc2End:s.canvasToWorld(p),arc2Start:s.canvasToWorld(f)}}};return e.invalidated=!1,Qe(e,l),E}}function aw(e,t){const n=e.cachedStats[t],{angle:o}=n;if(void 0!==o)return["".concat(o.toFixed(2)," ").concat(String.fromCharCode(176))]}re(iw,"toolName",void 0),iw.toolName="CobbAngle";const rw=iw,{transformWorldToIndex:sw}=ne.utilities;class lw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,getTextLines:cw,displayBothAxesDistances:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"startedDrawing",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;if(!(r instanceof ne.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");Dc(o),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=r.getFrameOfReferenceUID(),g={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:u,referencedImageId:h},data:{handles:{points:[[...i],[...i]],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:{}}};gt(g,o);const v=Qs(o,this.getToolName());return this.editData={annotation:g,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),e.preventDefault(),Ua(s,v),g})),re(this,"isPointNearTool",((e,t,n,o)=>!1)),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;if(this.startedDrawing&&1===s.handles.points.length)return void(this.editData.handleIndex=1);this.startedDrawing=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i),a&&et(o),this.editData=null,this.isDrawing=!1})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=o;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:o}=s.handles,{worldPosition:i}=o;i[0]+=n[0],i[1]+=n[1],i[2]+=n[2],o.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world;s.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],o.invalidated=!0}this.editData.hasMoved=!0;const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;Ua(c,i)})),re(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,this.startedDrawing=!1,t.annotationUID}})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l=this.getTargetId(a),c=a.getRenderingEngine(),d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const o=s[n],{annotationUID:r,data:h}=o,{points:u}=h.handles;d.annotationUID=r;const g=this.getStyle("color",d,o),v=u.map((e=>a.worldToCanvas(e)));if(h.cachedStats[l]&&null!=h.cachedStats[l].xValues?o.invalidated&&this._throttledCalculateCachedStats(o,c,e):(h.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(o,c,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;let m="0";if(Bc(t,r,m,v[0],{color:g},0),i=!0,2!==v.length)return i;if(m="1",Bc(t,r,m,v[1],{color:g},1),h.cachedStats[l].isUnitless){const e="".concat(r,"-line-1");rd(t,r,"1",v[0],v[1],{color:g,width:1,shadow:this.configuration.shadow},e)}else{const e=v[0],n=v[1],o=n[1]-e[1],i=n[0]-e[0];let a=[0,0];a=h.cachedStats[l].isHorizontal?[e[0]+i,e[1]]:[e[0],e[1]+o];let s="".concat(r,"-line-1"),c="1";rd(t,r,c,v[0],a,{color:g,width:1,shadow:this.configuration.shadow},s),s="".concat(r,"-line-2"),c="2",rd(t,r,c,v[1],a,{color:g,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(d,o);if(!p.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}const f=this.configuration.getTextLines(h,l,this.configuration);if(!h.handles.textBox.hasMoved){const e=v[1];h.handles.textBox.worldPosition=a.canvasToWorld(e)}const I=a.worldToCanvas(h.handles.textBox.worldPosition),w=ld(t,r,"1",f,I,v,{},p),{x:E,y:C,width:_,height:b}=w;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([E,C]),topRight:a.canvasToWorld([E+_,C]),bottomLeft:a.canvasToWorld([E,C+b]),bottomRight:a.canvasToWorld([E+_,C+b])}}return i})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,o){}handleSelectedCallback(e,t,n){const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const r=Qs(i,this.getToolName());let s,l=!1;n.worldPosition||(s=a.handles.points.findIndex((e=>e===n))),this.editData={handleIndex:s,annotation:t,viewportIdsToRender:r},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,r),e.preventDefault()}_calculateCachedStats(e,t,n){const o=e.data,{element:i}=n.viewport;if(2!==o.handles.points.length)return;const{cachedStats:a}=o,r=Object.keys(a);for(let e=0;e<r.length;e++){const i=r[e],s=this.getTargetIdImage(i,t);if(!s)continue;const{imageData:l}=s,c=o.handles.points[0],d=o.handles.points[1],h=sw(l,c),u=sw(l,d),{values:g,units:v}=mr(s,[h]),{values:m,units:p}=mr(s,[u]);let f,I,w,E,C=!1;if(v[0]!==p[0]||v[1]!==p[1]||"raw"===v[0]&&"raw"===p[0]){const e=dh(c,d);f=[e,0],I=[e,0],w=["px"],C=!0}else{const e=n.viewport.worldToCanvas(c),t=n.viewport.worldToCanvas(d),o=t[1]-e[1],i=t[0]-e[0];E=Math.abs(i)>Math.abs(o),f=[g[0],m[0]],I=[g[1],m[1]],w=[v[0],v[1]]}a[i]={xValues:f,yValues:I,isHorizontal:E,units:w,isUnitless:C}}return e.invalidated=!1,Qe(e,i),a}}function cw(e,t,n){const o=e.cachedStats[t],{xValues:i,yValues:a,units:r,isUnitless:s,isHorizontal:l}=o;if(s)return["".concat(zu(i[0])," px")];if(n.displayBothAxesDistances){const e=Math.abs(i[1]-i[0]),t=Math.abs(a[1]-a[0]);return["".concat(zu(e)," ").concat(r[0]),"".concat(zu(t)," ").concat(r[1])]}if(l){const e=Math.abs(i[1]-i[0]);return["".concat(zu(e)," ").concat(r[0])]}{const e=Math.abs(a[1]-a[0]);return["".concat(zu(e)," ").concat(r[1])]}}re(lw,"toolName",void 0),lw.toolName="UltrasoundDirectionalTool";const dw=lw;class hw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{getTextCallback:uw,changeTextCallback:gw,canvasPosition:[10,10],canvasSize:10}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u=hw.createAnnotation({metadata:{...r.getViewReference(),referencedImageId:h}});gt(u,o);const g=Qs(o,this.getToolName());return e.preventDefault(),Ua(s,g),this.configuration.getTextCallback((e=>{if(!e)return mt(u.annotationUID),Ua(s,g),void(this.isDrawing=!1);u.data.text=e,et(u),Ua(s,g)})),u})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{canvasPosition:s,canvasSize:l}=this.configuration;return!(null==s||!s.length)&&Math.abs(n[0]-s[0]+l/2)<=l/2&&Math.abs(n[1]-s[1]+l/2)<=l/2})),re(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),bc(n)})),re(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:o}=n;let i=st(this.getToolName(),o);if(i=this.filterInteractableAnnotationsForElement(o,i),null===(t=i)||void 0===t||!t.length)return;const a=i.find((e=>this.isPointNearTool(o,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,o,r)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a}=e,{element:r}=a;let s=st(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return i;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(o=s)||void 0===o||!o.length)return i;const l={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<s.length;e++){const n=s[e],{annotationUID:o}=n;l.annotationUID=o;const{color:r}=this.getAnnotationStyle({annotation:n,styleSpecifier:l}),{canvasPosition:c,canvasSize:d}=this.configuration;if(null!=c&&c.length&&hf(t,o,"1",c.map((e=>e+d)),c,{color:r,width:1}),i=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i}return i}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const o=(0,ne.getEnabledElement)(e),{renderingEngine:i}=o,a=Qs(e,this.getToolName());Ua(i,a),Qe(t,e)}_isInsideVolume(e,t,n){return ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n)}}function uw(e){return e(prompt("Enter your annotation:"))}function gw(e,t,n){return n(prompt("Enter your annotation:"))}re(hw,"toolName",void 0),hw.toolName="KeyImage";const vw=hw,mw="magnify-viewport";class pw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{magnifySize:10,magnifyWidth:250,magnifyHeight:250}}),re(this,"_bounds",void 0),re(this,"editData",void 0),re(this,"_hasBeenRemoved",!1),re(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:o}=t,i=(0,ne.getEnabledElement)(n),{viewport:a,renderingEngine:r}=i;if(!(a instanceof ne.StackViewport))throw new Error("MagnifyTool only works on StackViewports");const s=this._getReferencedImageId(a);if(!s)throw new Error("MagnifyTool: No referenced image id found, reconstructed planes not supported yet");const l=Qs(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:i,renderingEngine:r,currentPoints:o},this._createMagnificationViewport(),this._activateDraw(n),Dc(n),e.preventDefault(),Ua(r,l),!0})),re(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),re(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:o,currentPoints:i}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:c}=i;let d;if(d=r.querySelector(".magnifyTool"),null===d){const e=document.createElement("div");e.classList.add("magnifyTool"),e.style.display="block",e.style.width="".concat(this.configuration.magnifyWidth,"px"),e.style.height="".concat(this.configuration.magnifyHeight,"px"),e.style.position="absolute",d=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:mw,type:ne.Enums.ViewportType.STACK,element:d};o.enableElement(t)}d.style.top="".concat(l[1]-this.configuration.magnifyHeight/2,"px"),d.style.left="".concat(l[0]-this.configuration.magnifyWidth/2,"px");const h=o.getViewport(mw);h.setStack([t]).then((()=>{if(this._hasBeenRemoved)return;h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:o}=h.getCamera(),i=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[c[0],c[1],c[2]],l=[r[0]+i*o[0],r[1]+i*o[1],r[2]+i*o[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),d.style.display="block",Ua(o,n)})),re(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:o,currentPoints:i}=t,a=n.world,r=i.canvas,s=(0,ne.getEnabledElement)(o),{renderingEngine:l}=s,c=l.getViewport(mw),d=o.querySelector(".magnifyTool");if(!d)return;d.style.top="".concat(r[1]-this.configuration.magnifyHeight/2,"px"),d.style.left="".concat(r[0]-this.configuration.magnifyWidth/2,"px");const{focalPoint:h,position:u}=c.getCamera(),g=[u[0]+a[0],u[1]+a[1],u[2]+a[2]],v=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];c.setCamera({focalPoint:v,position:g}),c.render()})),re(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,ne.getEnabledElement)(t),{renderingEngine:o}=n;o.disableElement(mw);const i=t.querySelector(".viewport-element"),a=i.querySelector(".magnifyTool");i.removeChild(a),this._deactivateDraw(t),bc(t),this._hasBeenRemoved=!0})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,this._hasBeenRemoved=!1,e.addEventListener(ie.MOUSE_UP,this._dragEndCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(ie.TOUCH_END,this._dragEndCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._dragEndCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(ie.TOUCH_END,this._dragEndCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof ne.StackViewport&&(n=t.split("imageId:")[1]),n}}re(pw,"toolName",void 0),pw.toolName="Magnify";const fw=pw,Iw=125,ww=e=>e.uid!==e.referenceId;class Ew{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:o=Iw,position:i=[0,0],zoomFactor:a,autoPan:r}=e;re(this,"_viewportId",void 0),re(this,"_sourceEnabledElement",void 0),re(this,"_enabledElement",null),re(this,"_sourceToolGroup",null),re(this,"_magnifyToolGroup",null),re(this,"_isViewportReady",!1),re(this,"_radius",0),re(this,"_resized",!1),re(this,"_resizeViewportAsync",void 0),re(this,"_canAutoPan",!1),re(this,"_autoPan",void 0),re(this,"position",void 0),re(this,"zoomFactor",void 0),re(this,"visible",void 0),this._viewportId=null!=t?t:ne.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=o,this.position=i,this.zoomFactor=a,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=Gi(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:t,visible:n}=this,{viewport:o}=this._enabledElement,{element:i}=o,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(i.style,{display:n?"block":"hidden",width:"".concat(a,"px"),height:"".concat(a,"px"),left:"".concat(-e,"px"),top:"".concat(-e,"px"),transform:"translate(".concat(r,"px, ").concat(s,"px)")}),this._isViewportReady&&(this._syncViewports(),o.render())}dispose(){const{viewport:e}=this._enabledElement,{element:t}=e,n=e.getRenderingEngine();this._removeEventListeners(t),n.disableElement(e.id),t.parentNode&&t.parentNode.removeChild(t)}_handleToolModeChanged(e){var t;const{_magnifyToolGroup:n}=this,{toolGroupId:o,toolName:i,mode:a,toolBindingsOptions:r}=e.detail;if((null===(t=this._sourceToolGroup)||void 0===t?void 0:t.id)===o)switch(a){case Je.Active:n.setToolActive(i,r);break;case Je.Passive:n.setToolPassive(i);break;case Je.Enabled:n.setToolEnabled(i);break;case Je.Disabled:n.setToolDisabled(i);break;default:throw new Error("Unknow tool mode (".concat(a,")"))}}_inheritBorderRadius(e){const t=e.querySelector(".viewport-element"),n=e.querySelector(".cornerstone-canvas");t.style.borderRadius="inherit",n.style.borderRadius="inherit"}_createViewportNode(){const e=document.createElement("div"),{radius:t}=this,n=2*t;return e.classList.add("advancedMagnifyTool"),Object.assign(e.style,{display:"block",width:"".concat(n,"px"),height:"".concat(n,"px"),position:"absolute",overflow:"hidden",borderRadius:"50%",boxSizing:"border-box",left:"".concat(-t,"px"),top:"".concat(-t,"px"),transform:"translate(-1000px, -1000px)"}),e}_convertZoomFactorToParalellScale(e,t,n){const{parallelScale:o}=e.getCamera();return o*(1/n)*(t.canvas.offsetWidth/e.canvas.offsetWidth)}_isStackViewport(e){return"setStack"in e}_isVolumeViewport(e){return"addVolumes"in e}_cloneToolGroups(e,t){const n=e.getActors(),o="".concat(t.id,"-toolGroup"),i=Qo(e.id,e.renderingEngineId),a=i.clone(o,(e=>{const t=i.getToolInstance(e);return t instanceof nd&&!(t instanceof Tw)||e===xv.toolName}));return a.addViewport(t.id,t.renderingEngineId),n.filter(ww).forEach((e=>{Va(o,[{segmentationId:e.referenceId,type:Et.Labelmap}])})),{sourceToolGroup:i,magnifyToolGroup:a}}_cloneStack(e,t){const n=e.getImageIds();t.setStack(n).then((()=>{this._isViewportReady=!0,this.update()}))}_cloneVolumes(e,t){const n=e.getActors().filter((e=>!ww(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,o=e.getRenderingEngine(),{options:i}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...i}};o.enableElement(a);const r=o.getViewport(n);this._isStackViewport(e)?this._cloneStack(e,r):this._isVolumeViewport(e)&&this._cloneVolumes(e,r),this._inheritBorderRadius(t);const s=this._cloneToolGroups(e,r);this._sourceToolGroup=s.sourceToolGroup,this._magnifyToolGroup=s.magnifyToolGroup}_cancelMouseEventCallback(e){e.stopPropagation(),e.preventDefault()}_browserMouseUpCallback(e){const{element:t}=this._enabledElement.viewport;document.removeEventListener("mouseup",this._browserMouseUpCallback),t.addEventListener("mouseup",this._cancelMouseEventCallback),t.addEventListener("mousemove",this._cancelMouseEventCallback)}_browserMouseDownCallback(e){var t;const{element:n}=this._enabledElement.viewport;this._canAutoPan=!(null===(t=e.target)||void 0===t||!t.closest(".advancedMagnifyTool")),document.addEventListener("mouseup",this._browserMouseUpCallback),n.removeEventListener("mouseup",this._cancelMouseEventCallback),n.removeEventListener("mousemove",this._cancelMouseEventCallback)}_mouseDragCallback(e){if(!Ye.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:o}=this._enabledElement,{canvasToWorld:i}=o,{canvas:a}=n,{radius:r}=this,s=[r,r],l=dh(s,a),c=r-t.padding;if(l<=c)return;const d=l-c,h=aa.vec2.sub(aa.vec2.create(),a,s);aa.vec2.normalize(h,h),aa.vec2.scale(h,h,d);const u=aa.vec2.add(aa.vec2.create(),this.position,h),g=i(this.position),v=i(u),m=aa.vec3.sub(aa.vec3.create(),v,g),p={points:{currentPosition:{canvas:this.position,world:g},newPosition:{canvas:u,world:v}},delta:{canvas:h,world:m}};t.callback(p)}_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){ne.eventTarget.addEventListener(ie.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){ne.eventTarget.removeEventListener(ie.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,o=this._createViewportNode();n.parentNode.appendChild(o),this._addEventListeners(o),this._cloneViewport(t,o),this._enabledElement=(0,ne.getEnabledElement)(o)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),o=this._convertZoomFactorToParalellScale(e,t,this.zoomFactor),{focalPoint:i,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)+Math.pow(i[2]-a[2],2)),l=[n[0],n[1],n[2]],c=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:o,focalPoint:l,position:c})}_syncStackViewports(e,t){t.setImageIdIndex(e.getCurrentImageIdIndex())}_syncViewports(){const{viewport:e}=this._sourceEnabledElement,{viewport:t}=this._enabledElement,n=e.getProperties();t.setProperties(n),this._syncViewportsCameras(e,t),this._isStackViewport(e)&&this._syncStackViewports(e,t)}_resizeViewport(){const{viewport:e}=this._enabledElement;e.getRenderingEngine().resize()}}const Cw=1-ne.CONSTANTS.EPSILON,{Events:_w}=ne.Enums;class bw{constructor(){re(this,"_magnifyViewportsMap",void 0),re(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:o,position:i,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=o,{element:c}=l,d=new Ew({magnifyViewportId:n,sourceEnabledElement:o,radius:a,position:i,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(c),this._magnifyViewportsMap.set(d.viewportId,{annotation:e,magnifyViewport:d}),d})),re(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this._destroyViewport(t.data.magnifyViewportId)})),re(this,"_newStackImageCallback",(e=>{const{viewportId:t,imageId:n}=e.detail;this._getMagnifyViewportsMapEntriesBySourceViewportId(t).forEach((e=>{let{annotation:t}=e;t.metadata.referencedImageId=n,t.invalidated=!0}))})),re(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,o=(0,ne.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:i}=o.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(aa.vec3.dot(n,i))>Cw))return;const{handles:a}=t.data,r=o.canvasToWorld([0,0]),s=aa.vec3.sub(aa.vec3.create(),r,a.points[0]),l=aa.vec3.dot(s,i),c=aa.vec3.scale(aa.vec3.create(),i,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=c[0],t[1]+=c[1],t[2]+=c[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){var e;return bw._singleton=null!==(e=bw._singleton)&&void 0!==e?e:new bw,bw._singleton}getViewport(e){var t;return null===(t=this._magnifyViewportsMap.get(e))||void 0===t?void 0:t.magnifyViewport}dispose(){this._removeEventListeners(),this._destroyViewports()}_destroyViewport(e){const t=this._magnifyViewportsMap.get(e);if(t){const{magnifyViewport:n}=t,{viewport:o}=n.sourceEnabledElement,{element:i}=o;this._removeSourceElementEventListener(i),n.dispose(),this._magnifyViewportsMap.delete(e)}}_destroyViewports(){Array.from(this._magnifyViewportsMap.keys()).forEach((e=>this._destroyViewport(e)))}_getMagnifyViewportsMapEntriesBySourceViewportId(e){return Array.from(this._magnifyViewportsMap.values()).filter((t=>{let{magnifyViewport:n}=t;const{viewport:o}=n.sourceEnabledElement;return o.id===e}))}_addEventListeners(){ne.eventTarget.addEventListener(ie.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){ne.eventTarget.removeEventListener(ie.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(_w.STACK_NEW_IMAGE,this._newStackImageCallback),e.addEventListener(_w.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_removeSourceElementEventListener(e){e.removeEventListener(_w.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(_w.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_initialize(){this._addEventListeners()}}re(bw,"_singleton",void 0);var Dw=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(Dw||{});class Tw extends nd{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,magnifyingGlass:{radius:125,zoomFactor:2.5,zoomFactorList:[2.5,3,3.5,4,4.5,5],autoPan:{enabled:!0,padding:10}},actions:{showZoomFactorsList:{method:"showZoomFactorsList",bindings:[{mouseButton:Zu.Secondary,modifierKey:$u.Shift}]}}}}),re(this,"magnifyViewportManager",void 0),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=(0,ne.getEnabledElement)(o),{viewport:a,renderingEngine:r}=i,s=n.world,l=n.canvas,{magnifyingGlass:c}=this.configuration,{radius:d,zoomFactor:h,autoPan:u}=c,g=this._getWorldHandlesPoints(a,l,d),v=a.getCamera(),{viewPlaneNormal:m,viewUp:p}=v,f=this.getReferencedImageId(a,s,m,p),I=ne.utilities.uuidv4(),w=ne.utilities.uuidv4(),E=a.getFrameOfReferenceUID(),C={annotationUID:I,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...p],FrameOfReferenceUID:E,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:w,zoomFactor:h,handles:{points:g,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(C,{magnifyViewportId:w,sourceEnabledElement:i,position:l,radius:d,zoomFactor:h,autoPan:{enabled:u.enabled,padding:u.padding,callback:e=>{const t=C.data.handles.points,{world:n}=e.delta;for(let e=0,o=t.length;e<o;e++)t[e][0]+=n[0],t[e][1]+=n[1],t[e][2]+=n[2]}}}),gt(C,o);const _=Qs(o,this.getToolName());return e.preventDefault(),Ua(r,_),C})),re(this,"onSetToolDisabled",(()=>{this.magnifyViewportManager.dispose(),lt().forEach((e=>{e.metadata.toolName===this.getToolName()&&mt(e.annotationUID)}))})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),c=l[0],d=l[2],h=l[3],u=.5*Math.abs(d[1]-c[1]),g=wI([[h[0]+u,c[1]+u],n]);return Math.abs(g-u)<1.5*o})),re(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:o}=n;t.highlighted=!0;const i=Qs(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:i},Dc(o),this._activateModify(o);const a=(0,ne.getEnabledElement)(o),{renderingEngine:r}=a;Ua(r,i),e.preventDefault()})),re(this,"handleSelectedCallback",((e,t,n)=>{const o=e.detail,{element:i}=o,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qs(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(i),Dc(i);const c=(0,ne.getEnabledElement)(i),{renderingEngine:d}=c;Ua(d,l),e.preventDefault()})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a}=this.editData,{data:r}=o;r.handles.activeHandleIndex=null,this._deactivateModify(n),bc(n);const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;this.editData=null,this.isDrawing=!1,Ua(l,i),a&&et(o)})),re(this,"_dragDrawCallback",(e=>{var t;this.isDrawing=!0;const n=e.detail,{element:o,deltaPoints:i}=n,a=null!==(t=null==i?void 0:i.world)&&void 0!==t?t:[0,0,0],r=(0,ne.getEnabledElement)(o),{renderingEngine:s}=r,{annotation:l,viewportIdsToRender:c}=this.editData,{points:d}=l.data.handles;d.forEach((e=>{e[0]+=a[0],e[1]+=a[1],e[2]+=a[2]})),l.invalidated=!0,this.editData.hasMoved=!0,Ua(s,c)})),re(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData,{data:r}=o;if(void 0===a){const{deltaPoints:e}=t,n=e.world;r.handles.points.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),o.invalidated=!0}else this._dragHandle(e),o.invalidated=!0;const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;Ua(l,i)})),re(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,o=(0,ne.getEnabledElement)(n),{viewport:i}=o,{worldToCanvas:a}=i,{annotation:r}=this.editData,{data:s}=r,{points:l}=s.handles,c=l.map((e=>a(e))),d=c[0],h=c[2],u=c[3],g=.5*Math.abs(h[1]-d[1]),v=[u[0]+g,d[1]+g],{currentPoints:m}=t,p=wI([v,m.canvas]),f=this._getWorldHandlesPoints(i,v,p);l[0]=f[0],l[1]=f[1],l[2]=f[2],l[3]=f[3]})),re(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),bc(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:o}=this.editData,{data:i}=t;t.highlighted=!1,i.handles.activeHandleIndex=null;const a=(0,ne.getEnabledElement)(e),{renderingEngine:r}=a;return Ua(r,n),o&&et(t),this.editData=null,t.annotationUID})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o,i;let a=!1;const{viewport:r}=e,{element:s}=r;let l=st(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return a;if(l=this.filterInteractableAnnotationsForElement(s,l),l=null===(o=l)||void 0===o?void 0:o.filter((e=>e.data.sourceViewportId===r.id)),null===(i=l)||void 0===i||!i.length)return a;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:o,data:i}=n,{magnifyViewportId:s,zoomFactor:d,handles:h}=i,{points:u,activeHandleIndex:g}=h;c.annotationUID=o,this.getStyle("lineWidth",c,n),this.getStyle("lineDash",c,n);const v=this.getStyle("color",c,n),m=u.map((e=>r.worldToCanvas(e))),p=m[0],f=m[2],I=m[3],w=.5*Math.abs(f[1]-p[1]),E=[I[0]+w,p[1]+w];if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let C;if(!Ne(o))continue;ge(n)||this.editData||null===g||(C=[m[g]]),C&&Fc(t,o,"0",C,{color:v});const _="".concat(o,"-advancedMagnify");vc(t,o,"0",E,w,{color:v,lineWidth:5},_);const b=this.magnifyViewportManager.getViewport(s);b.position=E,b.radius=w,b.zoomFactor=d,b.update(),a=!0}return a})),re(this,"_getWorldHandlesPoints",((e,t,n)=>[[t[0],t[1]-n],[t[0]+n,t[1]],[t[0],t[1]+n],[t[0]-n,t[1]]].map((t=>e.canvasToWorld(t))))),this.magnifyViewportManager=bw.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:o}=e.detail,i=(0,ne.getEnabledElement)(n),{viewport:a}=i,{canvas:r}=o,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,c=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),c.parentElement.removeChild(c),a.render()}));Object.assign(c.style,{left:"".concat(r[0],"px"),top:"".concat(r[1],"px")}),s.appendChild(c),c.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,o=document.createElement("select");return o.size=5,Object.assign(o.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{o.addEventListener(e,(e=>e.stopPropagation()))})),o.addEventListener("change",(e=>{e.stopPropagation(),t(o.value)})),o.addEventListener("keydown",(e=>{var n,o;((null!==(n=e.keyCode)&&void 0!==n?n:27===e.which)||"escape"===(null===(o=e.key)||void 0===o?void 0:o.toLowerCase()))&&(e.stopPropagation(),t())})),n.forEach((t=>{const n=document.createElement("option");n.label=t,n.title="Zoom factor ".concat(t.toFixed(1)),n.value=t,n.defaultSelected=t===e,o.add(n)})),o}}re(Tw,"toolName",void 0),re(Tw,"Actions",Dw),Tw.toolName="AdvancedMagnify";class Sw extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1,displayThreshold:5,positionSync:!0,disableCursor:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"isDrawing",!1),re(this,"isHandleOutsideImage",!1),re(this,"_elementWithCursor",null),re(this,"_currentCursorWorldPosition",null),re(this,"_currentCanvasPosition",null),re(this,"_disableCursorEnabled",!1),re(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:o}=t;this._currentCursorWorldPosition=o.world,this._currentCanvasPosition=o.canvas,this._elementWithCursor=n;const i=this.getActiveAnnotation(n);return null===i?(this.createInitialAnnotation(o.world,n),!1):(this.updateAnnotationPosition(n,i),!1)})),re(this,"createInitialAnnotation",((e,t)=>{const n=(0,ne.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:o,renderingEngine:i}=n;this.isDrawing=!0;const a=o.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(o,e,r,s),c=o.getFrameOfReferenceUID(),d={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:c,referencedImageId:l},data:{label:"",handles:{points:[[...e]],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(st(this.getToolName(),t).length>0)return null;if(null===gt(d,t))return;const h=Qs(t,this.getToolName(),!1);Ua(i,h)})),re(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:o,camera:i}=t,a=(0,ne.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=o.focalPoint,s=i.viewPlaneNormal,l=i.focalPoint,c=[0,0,0];if(yh().subtract(l,r,c),0===c.reduce(((e,t)=>e+t),0))return;const d=yh().dot(c,s);if(Math.abs(d)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),re(this,"renderAnnotation",((e,t)=>{var n,o;let i=!1;const{viewport:a,FrameOfReferenceUID:r}=e,s=this._elementWithCursor===a.element;this.configuration.positionSync&&!s&&this.updateViewportImage(a);const{element:l}=a;let c=st(this.getToolName(),l);if(null===(n=c)||void 0===n||!n.length)return i;if(c=this.filterInteractableAnnotationsForElement(l,c),null===(o=c)||void 0===o||!o.length)return i;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<c.length;e++){const n=c[e],{annotationUID:o,data:r}=n,{handles:l}=r,{points:h}=l;if(!o)return i;d.annotationUID=o;const u=parseFloat(this.getStyle("lineWidth",d,n)),g=this.getStyle("lineDash",d,n),v=this.getStyle("color",d,n);if(h[0].some((e=>isNaN(e))))return i;const m=h.map((e=>a.worldToCanvas(e)));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),i;if(!Ne(o))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,I]=m[0],w=s?20:7,E=s?5:7;rd(t,o,p.upper,[f,I-(w/2+E)],[f,I-w/2],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.lower,[f,I+(w/2+E)],[f,I+w/2],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.right,[f+(w/2+E),I],[f+w/2,I],{color:v,lineDash:g,lineWidth:u}),rd(t,o,p.left,[f-(w/2+E),I],[f-w/2,I],{color:v,lineDash:g,lineWidth:u}),i=!0}return i})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=ei(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&Dc(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=ei(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&bc(e.viewport.element)}))}getActiveAnnotation(e){const t=st(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){var n;const o=this._currentCursorWorldPosition;if(!o)return;if(null===(n=t.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return;t.data.handles.points=[[...o]],t.invalidated=!0;const i=Qs(e,this.getToolName(),!1),a=(0,ne.getEnabledElement)(e);if(!a)return;const{renderingEngine:r}=a;Ua(r,i)}filterInteractableAnnotationsForElement(e,t){var n,o;if(!(t instanceof Array)||0===t.length)return[];const i=t[0],a=null===(n=(0,ne.getEnabledElement)(e))||void 0===n?void 0:n.viewport;if(!a)return[];const r=a.getCamera(),{viewPlaneNormal:s,focalPoint:l}=r;if(!s||!l)return[];const c=null===(o=i.data)||void 0===o||null===(o=o.handles)||void 0===o?void 0:o.points;if(!(c instanceof Array)||1!==c.length)return[];const d=c[0],h=ne.utilities.planar.planeEquation(s,l);return ne.utilities.planar.planeDistanceToPoint(h,d)<this.configuration.displayThreshold?[i]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof ne.StackViewport){const n=ne.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof ne.VolumeViewport){const{focalPoint:n,viewPlaneNormal:o}=e.getCamera();if(!n||!o)return;const i=ne.utilities.planar.planeEquation(o,n),a=ne.utilities.planar.planeDistanceToPoint(i,t,!0);if(Math.abs(a)<.5)return;const r=aa.vec3.normalize(aa.vec3.create(),aa.vec3.fromValues(...o)),s=aa.vec3.scale(aa.vec3.create(),r,a),l=aa.vec3.add(aa.vec3.create(),aa.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}re(Sw,"toolName",void 0),Sw.toolName="ReferenceCursors";const yw=Sw,Mw=[];class xw extends ed{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",{}),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"_init",(()=>{const e=(0,ne.getRenderingEngines)()[0];if(!e)return;const t=ei(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,ne.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:o}=n[0];const{FrameOfReferenceUID:i}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(o=e.viewport)})),!o)return;const{viewUp:a,viewPlaneNormal:r}=o.getCamera(),s=ne.utilities.getViewportImageCornersInWorld(o);let l=this.editData.annotation;const c=st(this.getToolName(),o.element);if(c.length&&(l=c.filter((e=>e.data.viewportId==o.id))[0]),Mw.includes(o.id))this.editData.annotation&&this.editData.annotation.data.viewportId==o.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=o.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:i,referencedImageId:null},data:{handles:{points:s},viewportId:o.id}};Mw.push(o.id),gt(e,o.element),l=e}this.editData={viewport:o,renderingEngine:e,annotation:l}})),re(this,"onSetToolEnabled",(()=>{this._init()})),re(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),re(this,"computeScaleSize",((e,t,n)=>{const o=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let i;return i="top"==n||"bottom"==n?o.filter((t=>t<.6*e&&t>.2*e)):o.filter((e=>e<.6*t&&e>.2*t)),i[0]})),re(this,"computeEndScaleTicks",((e,t)=>{const n={bottom:[[0,-10],[0,-10]],top:[[0,10],[0,10]],left:[[0,0],[10,0]],right:[[0,0],[-10,0]]};return{endTick1:[[e[1][0]+n[t][0][0],e[1][1]+n[t][0][0]],[e[1][0]+n[t][1][0],e[1][1]+n[t][1][1]]],endTick2:[[e[0][0]+n[t][0][0],e[0][1]+n[t][0][0]],[e[0][0]+n[t][1][0],e[0][1]+n[t][1][1]]]}})),re(this,"computeInnerScaleTicks",((e,t,n,o,i)=>{let a;"bottom"==t||"top"==t?a=i[0][0]-o[0][0]:"left"!=t&&"right"!=t||(a=i[0][1]-o[0][1]);const r=[],s=[],l=[];let c=e;e>=50&&(c=e/10);const d=a/c;for(let e=0;e<c-1;e++){const i={bottom:[[d*(e+1),0],[d*(e+1),5]],top:[[d*(e+1),0],[d*(e+1),-5]],left:[[0,d*(e+1)],[-5,d*(e+1)]],right:[[0,d*(e+1)],[5,d*(e+1)]]};r.push("".concat(n,"-tick").concat(e)),s.push("tick".concat(e)),(e+1)%5==0?l.push([[o[0][0]+i[t][0][0],o[0][1]+i[t][0][1]],[o[1][0]+i[t][0][0],o[1][1]+i[t][0][1]]]):l.push([[o[0][0]+i[t][0][0],o[0][1]+i[t][0][1]],[o[1][0]+i[t][1][0],o[1][1]+i[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),re(this,"computeWorldScaleCoordinates",((e,t,n)=>{let o,i=aa.vec3.subtract(aa.vec3.create(),n[0],n[1]);i=aa.vec3.normalize(aa.vec3.create(),i);let a=aa.vec3.subtract(aa.vec3.create(),n[2],n[0]);a=aa.vec3.normalize(aa.vec3.create(),a);const r={bottom:[n[1],n[2]],top:[n[0],n[3]],right:[n[2],n[3]],left:[n[0],n[1]]},s=aa.vec3.add(aa.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(i[0],2)+Math.pow(i[1],2)+Math.pow(i[2],2));return"top"==t||"bottom"==t?o=[aa.vec3.subtract(aa.vec3.create(),s,a.map((e=>e*l))),aa.vec3.add(aa.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(o=[aa.vec3.add(aa.vec3.create(),s,i.map((e=>e*l))),aa.vec3.subtract(aa.vec3.create(),s,i.map((e=>e*l)))]),o})),re(this,"computeCanvasScaleCoordinates",((e,t,n,o,i)=>{let a;if("top"==i||"bottom"==i){const o=t[0][0]-t[1][0];a=[[e.width/2-o/2,n.height],[e.width/2+o/2,n.height]]}else if("left"==i||"right"==i){const n=t[0][1]-t[1][1];a=[[o.width,e.height/2-n/2],[o.width,e.height/2+n/2]]}return a})),re(this,"computeScaleBounds",((e,t,n,o)=>{const i=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-i],top:[a,i],left:[a,i],right:[-a,-i]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[o][0]+r[o][0],width:s[o][1]+r[o][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:o}=e,i=st(this.getToolName(),o.element).filter((e=>e.data.viewportId==o.id))[0],a=e.viewport.canvas;if(!o)return!1;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s={width:a.width,height:a.height},l=i.data.handles.points[0],c=i.data.handles.points[1],d=i.data.handles.points[2],h=i.data.handles.points[3],u=[l,d,c,h],g=aa.vec3.distance(d,h),v=aa.vec3.distance(l,d),m=this.computeScaleBounds(s,.05,.05,n),p=this.computeScaleBounds(s,.05,.05,n),f=this.computeScaleSize(g,v,n),I=this.computeWorldScaleCoordinates(f,n,u).map((e=>o.worldToCanvas(e))),w=this.computeCanvasScaleCoordinates(s,I,p,m,n),E=this.computeEndScaleTicks(w,n),{annotationUID:C}=i;r.annotationUID=C;const _=this.getStyle("lineWidth",r,i),b=this.getStyle("lineDash",r,i),D=this.getStyle("color",r,i),T=this.getStyle("shadow",r,i),S="".concat(C,"-scaleline");rd(t,C,"1",w[0],w[1],{color:D,width:_,lineDash:b,shadow:T},S);const y="".concat(C,"-left");rd(t,C,"2",E.endTick1[0],E.endTick1[1],{color:D,width:_,lineDash:b,shadow:T},y);const M="".concat(C,"-right");rd(t,C,"3",E.endTick2[0],E.endTick2[1],{color:D,width:_,lineDash:b,shadow:T},M);const x={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},O=[w[0][0]+x[n][0],w[0][1]+x[n][1]],P=this._getTextLines(f),{tickIds:A,tickUIDs:R,tickCoordinates:N}=this.computeInnerScaleTicks(f,n,C,E.endTick1,E.endTick2);for(let e=0;e<R.length;e++)rd(t,C,R[e],N[e][0],N[e][1],{color:D,width:_,lineDash:b,shadow:T},A[e]);return ad(t,C,"text0",P,[O[0],O[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:D}),!1}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}re(xw,"toolName",void 0),xw.toolName="ScaleOverlay";const Ow=xw;class Pw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),re(this,"preMouseDownCallback",(e=>this._deleteNearbyAnnotations(e,"mouse"))),re(this,"preTouchStartCallback",(e=>this._deleteNearbyAnnotations(e,"touch")))}_deleteNearbyAnnotations(e,t){const{renderingEngineId:n,viewportId:o,element:i,currentPoints:a}=e.detail,r=Qo(o,n);if(!r)return!1;const s=r._toolInstances,l=[];for(const e in s){const n=s[e];if("function"!=typeof n.isPointNearTool||"function"!=typeof n.filterInteractableAnnotationsForElement)continue;const o=st(e,i);if(!o)continue;const r=n.filterInteractableAnnotationsForElement(i,o);for(const e of r)n.isPointNearTool(i,e,a.canvas,10,t)&&l.push(e.annotationUID)}for(const e of l)_e(e),mt(e);return e.preventDefault(),!0}}re(Pw,"toolName",void 0),Pw.toolName="Eraser";const Aw=Pw,{transformWorldToIndex:Rw}=ne.utilities;function Nw(e,t){!function(e,t){const{points:n,segmentsLocked:o,segmentIndex:i,segmentationId:a}=t,{viewport:r}=e,s=Fl({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationScalarData:c}=s;let d=n.map((e=>Rw(l,e)));d=d.map((e=>e.map((e=>Math.round(e)))));const h=Or(d,l.getDimensions()),u=r instanceof ne.StackViewport||ou(d),g=l.getDirection(),v=l.getSpacing(),{viewPlaneNormal:m}=r.getCamera(),p=ne.utilities.getSpacingInNormalDirection({direction:g,spacing:v},m),f=Pr(n);let[[I,w],[E,C],[_,b]]=f;I-=p,w+=p,E-=p,C+=p,_-=p,b+=p,yr(l,u?()=>!0:e=>{const[t,n,o]=e;return t>=I&&t<=w&&n>=E&&n<=C&&o>=_&&o<=b},(e=>{let{value:t,index:n}=e;o.includes(t)||(c[n]=i)}),h),Vt(a)}(e,t)}function Lw(e,t){!function(e,t){Nw(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class kw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:Nw,ERASE_INSIDE:Lw},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.toolGroupId,u=Sc(h);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:g,segmentationId:v,type:m}=u,p=Nc(v),f=Pc(v),I=Zi(h,g,p),{representationData:w}=Bt(v),E=w[Et.Labelmap],C={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:I},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null}}},_=Qs(o,this.getToolName());if(this.editData={annotation:C,segmentIndex:p,segmentationId:v,segmentsLocked:f,segmentColor:I,viewportIdsToRender:_,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:g},Ot(E,r)){const{volumeId:e}=E,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=E;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,_),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,handleIndex:a}=this.editData,{data:r}=o,{currentPoints:s}=t,l=(0,ne.getEnabledElement)(n),{worldToCanvas:c,canvasToWorld:d}=l.viewport,h=s.world,{points:u}=r.handles;let g,v,m,p,f,I,w,E;switch(u[a]=[...h],a){case 0:case 3:g=c(u[0]),p=c(u[3]),v=[p[0],g[1]],m=[g[0],p[1]],I=d(v),w=d(m),u[1]=I,u[2]=w;break;case 1:case 2:v=c(u[1]),m=c(u[2]),g=[m[0],v[1]],p=[v[0],m[1]],f=d(g),E=d(p),u[0]=f,u[3]=E}o.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:C}=l;Ua(C,i)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a}=this.editData,{data:r}=o;if(i&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const s=(0,ne.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{annotation:i}=this.editData,a=i.metadata,r=i.annotationUID,s=i.data,{points:l}=s.handles,c=l.map((e=>o.worldToCanvas(e))),d="rgb(".concat(a.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(Gc(t,r,"0",c[0],c[3],{color:d}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(kw,"toolName",void 0),kw.toolName="RectangleScissor";const Uw=kw;class Vw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:nc,ERASE_INSIDE:dc},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:d,viewUp:h}=c,u=this.toolGroupId,g=Sc(u);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m,type:p}=g,f=Nc(m),I=Pc(m),w=Zi(u,v,f),{representationData:E}=Bt(m),C=E[p];if(!C)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const _={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:w},data:{handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},b=[s.id];if(this.editData={annotation:_,centerCanvas:a,segmentIndex:f,segmentationId:m,segmentsLocked:I,segmentColor:w,viewportIdsToRender:b,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:v},Ot(C,s)){const{volumeId:e}=C,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=C;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(l,b),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:u}=c,g=Math.abs(i[0]-h[0]),v=Math.abs(i[1]-h[1]),m=Math.sqrt(g*g+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],I=[h[0]-m,h[1]],w=[h[0]+m,h[1]];u.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a}=this.editData,{data:r}=o,{viewPlaneNormal:s,viewUp:l}=o.metadata;if(i&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const c=(0,ne.getEnabledElement)(n),d={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(c,d)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback),e.addEventListener(ie.TOUCH_END,this._endCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{viewportIdsToRender:i}=this.editData;if(!i.includes(o.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:c}=l.handles,d=c.map((e=>o.worldToCanvas(e))),h=d[0],u=d[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(vc(t,s,"0",g,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(Vw,"toolName",void 0),Vw.toolName="CircleScissor";const Ww=Vw;class Hw extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{strategies:{FILL_INSIDE:sc,ERASE_INSIDE:cc},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=n.canvas,r=(0,ne.getEnabledElement)(o),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const c=s.getCamera(),{viewPlaneNormal:d,viewUp:h}=c,u=this.toolGroupId,g=Sc(u);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m}=g,p=Nc(m),f=Pc(m),I=Zi(u,v,p);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...d],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:I},data:{invalidated:!0,handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},E=[s.id];this.editData={annotation:w,centerCanvas:a,segmentationRepresentationUID:v,segmentIndex:p,segmentationId:m,segmentsLocked:f,segmentColor:I,toolGroupId:u,viewportIdsToRender:E,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1};const{representationData:C}=Bt(m),_=C[Et.Labelmap];if(Ot(_,s)){const{volumeId:e}=_,t=ne.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=_;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(o),Dc(o),e.preventDefault(),Ua(l,E),!0})),re(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:o}=t,i=o.canvas,a=(0,ne.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:c,viewportIdsToRender:d,centerCanvas:h}=this.editData,{data:u}=c,g=Math.abs(i[0]-h[0]),v=Math.abs(i[1]-h[1]),m=Math.sqrt(g*g+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],I=[h[0]-m,h[1]],w=[h[0]+m,h[1]];u.handles.points=[l(p),l(f),l(I),l(w)],c.invalidated=!0,this.editData.hasMoved=!0,Ua(r,d)})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,newAnnotation:i,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:c}=o,{viewPlaneNormal:d,viewUp:h}=o.metadata;if(i&&!a)return;o.highlighted=!1,c.handles.activeHandleIndex=null,this._deactivateDraw(n),bc(n);const u=(0,ne.getEnabledElement)(n),g={...this.editData,points:c.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:d,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(u,g)})),re(this,"_activateDraw",(e=>{e.addEventListener(ie.MOUSE_UP,this._endCallback),e.addEventListener(ie.MOUSE_DRAG,this._dragCallback),e.addEventListener(ie.MOUSE_CLICK,this._endCallback),e.addEventListener(ie.MOUSE_MOVE,this._dragCallback),e.addEventListener(ie.TOUCH_END,this._endCallback),e.addEventListener(ie.TOUCH_TAP,this._endCallback),e.addEventListener(ie.TOUCH_DRAG,this._dragCallback)})),re(this,"_deactivateDraw",(e=>{e.removeEventListener(ie.MOUSE_UP,this._endCallback),e.removeEventListener(ie.MOUSE_DRAG,this._dragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._endCallback),e.removeEventListener(ie.MOUSE_MOVE,this._dragCallback),e.removeEventListener(ie.TOUCH_END,this._endCallback),e.removeEventListener(ie.TOUCH_DRAG,this._dragCallback),e.removeEventListener(ie.TOUCH_TAP,this._endCallback)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:o}=e,{viewportIdsToRender:i}=this.editData;if(!i.includes(o.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:c}=l.handles,d=c.map((e=>o.worldToCanvas(e))),h=d[0],u=d[1],g=[Math.floor((h[0]+u[0])/2),Math.floor((h[1]+u[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+u[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return o.getRenderingEngine()?(vc(t,s,"0",g,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}re(Hw,"toolName",void 0),Hw.toolName="SphereScissor";const Bw=Hw,{transformWorldToIndex:Fw}=ne.utilities;class Gw extends DI{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{numSlicesToPropagate:10,calculatePointsInsideVolume:!1}}),re(this,"touchDragCallback",void 0),re(this,"mouseDragCallback",void 0),re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",!1),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l;let h,u,g;if(r instanceof ne.StackViewport)throw new Error("Stack Viewport Not implemented");{const e=this.getTargetId(r);g=ne.utilities.getVolumeId(e),u=ne.cache.getVolume(g),h=ne.utilities.getClosestImageId(u,i,c)}const v=ne.utilities.getSpacingInNormalDirection(u,c),m=this._getStartSliceIndex(u,i,v,c),p=this._getEndSliceIndex(u,i,v,c),f=r.getFrameOfReferenceUID(),I={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...d],FrameOfReferenceUID:f,referencedImageId:h,volumeId:g,spacingInNormal:v,enabledElement:a},data:{label:"",startSlice:m,endSlice:p,handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...i],[...i]],activeHandleIndex:null},cachedStats:{pointsInVolume:[],projectionPoints:[]},labelmapUID:null}};gt(I,o);const w=Qs(o,this.getToolName());return this.editData={annotation:I,viewportIdsToRender:w,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,w),I})),re(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportIdsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;o.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n);this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID);const c=this.getTargetId(l.viewport),d=ne.cache.getVolume(c.split(/volumeId:|\?/)[1]);this.configuration.calculatePointsInsideVolume&&this._computePointsInsideVolume(o,d,l),Ua(l.renderingEngine,i),a&&et(o)})),re(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:o}=e,i=st(this.getToolName(),o.element);if(null==i||!i.length)return n;const a=o.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<i.length;s++){const l=i[s],{annotationUID:c,data:d}=l,{startSlice:h,endSlice:u}=d,{points:g,activeHandleIndex:v}=d.handles;r.annotationUID=c;const m=this.getStyle("lineWidth",r,l),p=this.getStyle("lineDash",r,l),f=this.getStyle("color",r,l),I=g.map((e=>o.worldToCanvas(e))),w=I[0],E=wI(I),{centerPointRadius:C}=this.configuration;if(a<Math.min(h,u)||a>Math.max(h,u))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let _,b=!1;if(a===Math.round((h+u)/2)&&(b=!0),!o.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Ne(c))continue;ge(l)||this.editData||null===v||!b||(_=[I[v]]),_&&Fc(t,c,"0",_,{color:f});let D=m;b&&(D=3);const T="0";vc(t,c,T,w,E,{color:f,lineDash:p,lineWidth:D}),C>0&&E>3*C&&vc(t,c,"".concat(T,"-center"),w,C,{color:f,lineDash:p,lineWidth:m}),n=!0}return n})),this._throttledCalculateCachedStats=Er(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:o}=e,{viewPlaneNormal:i,spacingInNormal:a}=o,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:c}=n.handles,d=Fw(r,c[0]);if(d[2]=s,d[2]!==s)throw new Error("Start slice does not match");const h=aa.vec3.fromValues(d[0],d[1],l),u=aa.vec3.create();r.indexToWorldVec3(d,u);const g=aa.vec3.create();r.indexToWorldVec3(h,g);const v=aa.vec3.distance(u,g),m=[];for(let e=0;e<v;e+=a)m.push(c.map((t=>{const n=aa.vec3.create();return aa.vec3.scaleAndAdd(n,t,i,e),Array.from(n)})));n.cachedStats.projectionPoints=m}_computePointsInsideVolume(e,t,n){const{data:o}=e,{viewport:i}=n,a=o.cachedStats.projectionPoints,r=[[]];for(let e=0;e<a.length;e++){if(!t)continue;const n=a[e][0],o=a[e].map((e=>i.worldToCanvas(e))),[s,l]=EI(o),c=i.canvasToWorld(s),d=i.canvasToWorld(l),h=c,u=d,{dimensions:g,imageData:v}=t,m=Fw(v,h),p=Fw(v,n);m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(p[2]);const f=Fw(v,u);if(f[0]=Math.floor(f[0]),f[1]=Math.floor(f[1]),f[2]=Math.floor(p[2]),this._isInsideVolume(m,f,g)){const e=[[Math.min(m[0],f[0]),Math.max(m[0],f[0])],[Math.min(m[1],f[1]),Math.max(m[1],f[1])],[Math.min(m[2],f[2]),Math.max(m[2],f[2])]],t={center:n,xRadius:Math.abs(c[0]-d[0])/2,yRadius:Math.abs(c[1]-d[1])/2,zRadius:Math.abs(c[2]-d[2])/2},o=yr(v,(e=>Yl(t,e)),null,e);r.push(o)}}o.cachedStats.pointsInVolume=r}_calculateCachedStatsTool(e,t){const n=e.data,{viewportId:o,renderingEngineId:i,viewport:a}=t,{cachedStats:r}=n,s=this.getTargetId(a),l=ne.cache.getVolume(s.split(/volumeId:|\?/)[1]);this._computeProjectionPoints(e,l),e.invalidated=!1;const c=ie.ANNOTATION_MODIFIED,d={annotation:e,viewportId:o,renderingEngineId:i};return(0,ne.triggerEvent)(ne.eventTarget,c,d),r}_getStartSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=Math.round(i/2),r=aa.vec3.create();return aa.vec3.scaleAndAdd(r,t,o,a*-n),this._getImageIdIndex(e,r,n,o)}_getEndSliceIndex(e,t,n,o){const i=this.configuration.numSlicesToPropagate,a=Math.round(i/2),r=aa.vec3.create();return aa.vec3.scaleAndAdd(r,t,o,a*n),this._getImageIdIndex(e,r,n,o)}_getImageIdIndex(e,t,n,o){const i=n/2,{imageIds:a}=e;let r;for(let e=0;e<a.length;e++){const n=a[e],{imagePositionPatient:s}=ne.metaData.get("imagePlaneModule",n),l=aa.vec3.create();aa.vec3.sub(l,t,s);const c=aa.vec3.dot(l,o);Math.abs(c)<i&&(r=e)}return r}}re(Gw,"toolName",void 0),Gw.toolName="CircleROIStartEndThreshold";const qw=Gw;var jw=C(518),zw=C.n(jw),Kw=C(744),Yw=C.n(Kw),Xw=C(424),Jw=C.n(Xw),Zw=C(614),$w=C.n(Zw);const Qw={ANNOTATED_CUBE:1,AXES:2,CUSTOM:3};class eE extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{orientationWidget:{enabled:!0,viewportCorner:zw().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:eE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[eE.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE]:{faceProperties:{xPlus:{text:"R",faceColor:"#ffff00",faceRotation:90},xMinus:{text:"L",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:e=>e/2,faceColor:"#0000ff",edgeThickness:.1,edgeColor:"black",resolution:400}},[eE.OVERLAY_MARKER_TYPES.AXES]:{},[eE.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),re(this,"orientationMarkers",void 0),re(this,"polyDataURL",void 0),re(this,"configuration_invalidated",!0),re(this,"onSetToolEnabled",(()=>{this.initViewports(),this.configuration_invalidated=!0})),re(this,"onSetToolActive",(()=>{this.initViewports()})),re(this,"onSetToolDisabled",(()=>{this.cleanUpData()})),this.orientationMarkers={},this.configuration_invalidated=!0}cleanUpData(){(0,ne.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:o}=t;null==o||o.setEnabled(!1),null==o||o.delete(),null==n||n.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,ne.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Js(t,this.getToolName()),t.forEach((e=>this.addAxisActorInViewport(e)))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,o=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:o}=this.orientationMarkers[t];e.getRenderer().removeActor(n),o.setEnabled(!1)}let i;1===n?i=this.createAnnotationCube(o):2===n?i=Jw().newInstance():3===n&&(i=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:c,minPixelSize:d,maxPixelSize:h}=this.configuration.orientationWidget,u=zw().newInstance({actor:i,interactor:r.getInteractor(),parentRenderer:a});u.setEnabled(s),u.setViewportCorner(l),u.setViewportSize(c),u.setMinPixelSize(d),u.setMaxPixelSize(h),u.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:u,actor:i},r.render(),e.getRenderingEngine().render(),this.configuration_invalidated=!1}async createCustomActor(){const e=this.configuration.overlayConfiguration[Qw.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),o=$w().newInstance();o.parseAsArrayBuffer(n),o.update();const i=Di().newInstance();i.shallowCopy(o.getOutputData()),i.getPointData().setActiveScalars("Color");const a=Ei().newInstance();a.setInputData(i),a.setColorModeToDirectScalars();const r=_i().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=Yw().newInstance();return t.setDefaultStyle({...e.defaultStyle}),t.setXPlusFaceProperty({...e.faceProperties.xPlus}),t.setXMinusFaceProperty({...e.faceProperties.xMinus}),t.setYPlusFaceProperty({...e.faceProperties.yPlus}),t.setYMinusFaceProperty({...e.faceProperties.yMinus}),t.setZPlusFaceProperty({...e.faceProperties.zPlus}),t.setZMinusFaceProperty({...e.faceProperties.zMinus}),t}async createAnnotatedCubeActor(){const e=Yw().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const o="set".concat(n.charAt(0).toUpperCase()+n.slice(1),"FaceProperty");e[o](t[n])})),e}}re(eE,"toolName",void 0),re(eE,"CUBE",1),re(eE,"AXIS",2),re(eE,"VTPFILE",3),re(eE,"OVERLAY_MARKER_TYPES",Qw),eE.toolName="OrientationMarker";const tE=eE;class nE extends fi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"],configuration:{hoverTimeout:100,mode:nE.SelectMode.Border,searchRadius:6}}),re(this,"hoverTimer",void 0),re(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),re(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),re(this,"onSetToolActive",(()=>{this.hoverTimer=null})),re(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Ye.isInteractingWithTool)return;const{element:t,currentPoints:n}=e.detail,o=n.world,i=(0,ne.getEnabledElement)(t);if(!i)return;const{viewport:a}=i,r=Sc(this.toolGroupId);r&&([Et.Labelmap,Et.Contour].includes(r.type)?this._setActiveSegmentForType(r,o,a):console.warn("SegmentSelectTool does not support the current segmentation type."))}_setActiveSegmentForType(e,t,n){if(!n.getImageData())return;const{segmentationId:o,type:i}=e;let a;if(this.configuration.mode===nE.SelectMode.Inside)a=ih(o,t,{viewport:n});else switch(i){case Et.Labelmap:a=ah(o,t,{viewport:n,searchRadius:this.configuration.searchRadius});break;case Et.Contour:a=sh(o)}if(!a||0===a)return;Rc(o,a);const r=n.getRenderingEngine(),s=r.getViewports().map((e=>e.id));Ut(o),Ua(r,s)}}re(nE,"toolName",void 0),re(nE,"SelectMode",{Inside:"Inside",Border:"Border"}),nE.toolName="SegmentSelectTool";const oE=nE,{transformWorldToIndex:iE,isEqual:aE}=ne.utilities;class rE extends fi{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),e=this,re(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,c=Sc(this.toolGroupId);if(!c)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:d,type:h}=c,u=Nc(d),g=Pc(d),{representationData:v}=Bt(d),m=v[Et.Labelmap];let p,f,I,w;if(Ot(m,r)){const{volumeId:e}=v[h],t=ne.cache.getVolume(e);({dimensions:p,direction:f}=t),I=t.getScalarData(),w=iE(t.imageData,i)}else{const{imageIdReferenceMap:e}=m,t=a.viewport.getCurrentImageId(),n=e.get(t);if(!n)throw new Error("No active segmentation imageId detected, create one before using scissors tool");const o=ne.cache.getImage(n);I=o.getPixelData();const{imageData:s}=r.getImageData();p=s.getDimensions(),f=s.getDirection(),w=iE(s,i)}const E=this.getFixedDimension(l,f);if(void 0===E)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:C,getLabelValue:_,getScalarDataPositionFromPlane:b,inPlaneSeedPoint:D,fixedDimensionValue:T}=this.generateHelpers(I,p,w,E);if(w[0]<0||w[0]>=p[0]||w[1]<0||w[1]>=p[1]||w[2]<0||w[2]>=p[2])return;const S=_(w[0],w[1],w[2]);if(g.includes(S))return;const y=Wl(C,D),{flooded:M}=y;return M.forEach((e=>{const t=b(e[0],e[1]);I[t]=u})),Vt(d,this.getFramesModified(E,T,y)),!0})),re(this,"getFramesModified",((e,t,n)=>{const{boundaries:o}=n;if(2===e)return[t];let i=1/0,a=-1/0;for(let e=0;e<o.length;e++){const t=o[e][1];t<i&&(i=t),t>a&&(a=t)}const r=[];for(let e=i;e<=a;e++)r.push(e);return r})),re(this,"generateHelpers",(function(t,n,o){let i,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:i=o[0],a=[o[1],o[2]];break;case 1:i=o[1],a=[o[0],o[2]];break;case 2:i=o[2],a=[o[0],o[1]];break;default:throw new Error("Invalid fixedDimension: ".concat(r))}const s=(e,t,o)=>o*n[1]*n[0]+t*n[0]+e,l=(e,n,o)=>t[s(e,n,o)],c=e.generateFloodFillGetter(n,r,i,l);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(s,r,i),getLabelValue:l,floodFillGetter:c,inPlaneSeedPoint:a,fixedDimensionValue:i}})),re(this,"generateFloodFillGetter",((e,t,n,o)=>{let i;switch(t){case 0:i=(t,i)=>{if(!(t>=e[1]||t<0||i>=e[2]||i<0))return o(n,t,i)};break;case 1:i=(t,i)=>{if(!(t>=e[0]||t<0||i>=e[2]||i<0))return o(t,n,i)};break;case 2:i=(t,i)=>{if(!(t>=e[0]||t<0||i>=e[1]||i<0))return o(t,i,n)};break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return i})),re(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let o;switch(t){case 0:o=(t,o)=>e(n,t,o);break;case 1:o=(t,o)=>e(t,n,o);break;case 2:o=(t,o)=>e(t,o,n);break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return o}))}getFixedDimension(e,t){const n=t.slice(0,3),o=t.slice(3,6),i=t.slice(6,9),a=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])],r=[Math.abs(n[0]),Math.abs(n[1]),Math.abs(n[2])];if(aE(a,r))return 0;const s=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];if(aE(a,s))return 1;const l=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];return aE(a,l)?2:void 0}}re(rE,"toolName",void 0),rE.toolName="PaintFill";const sE=rE;class lE extends nd{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,re(this,"_throttledCalculateCachedStats",void 0),re(this,"editData",void 0),re(this,"_configuration",void 0),re(this,"isDrawing",void 0),re(this,"isHandleOutsideImage",void 0),re(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:o}=t,i=n.world,a=(0,ne.getEnabledElement)(o),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:c,viewUp:d}=l,h=this.getReferencedImageId(r,i,c,d),u={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...i],[...i],[...i],[...i]],activeHandleIndex:null},cachedStats:{},active:!0}};gt(u,o);const g=Qs(o,this.getToolName(),!1);return this.editData={annotation:u,viewportUIDsToRender:g,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(o),Dc(o),e.preventDefault(),Ua(s,g),u})),re(this,"getHandleNearImagePoint",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],i=a.worldToCanvas(t);if(!0==aa.vec2.distance(n,i)<o)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),re(this,"isPointNearTool",((e,t,n,o)=>{const i=(0,ne.getEnabledElement)(e),{viewport:a}=i,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),c=a.worldToCanvas(s[3]),d=this._getRectangleImageCoordinates([l,c]),h=[n[0],n[1]],{left:u,top:g,width:v,height:m}=d;if(dd([u,g,v,m],h)<=o)return!0})),re(this,"toolSelectedCallback",(function(t,n){const o=t.detail,{element:i}=o,{data:a}=n;a.active=!0;const r=Qs(i,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(i),Dc(i);const s=(0,ne.getEnabledElement)(i),{renderingEngine:l}=s;Ua(l,r),t.preventDefault()})),re(this,"handleSelectedCallback",(function(t,n,o){const i=t.detail,{element:a}=i,{data:r}=n;r.active=!0;let s,l=!1;o.worldPosition||(s=r.handles.points.findIndex((e=>e===o)));const c=Qs(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:c,handleIndex:s},e._activateModify(a),Dc(a);const d=(0,ne.getEnabledElement)(a),{renderingEngine:h}=d;Ua(h,c),t.preventDefault()})),re(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:o,viewportUIDsToRender:i,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=o;if(a&&!r)return;s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),bc(n);const l=(0,ne.getEnabledElement)(n),{renderingEngine:c}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&mt(o.annotationUID),Ua(c,i)})),re(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:o,viewportUIDsToRender:i,handleIndex:a}=this.editData,{data:r}=o;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=r.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,o=(0,ne.getEnabledElement)(n),{worldToCanvas:i,canvasToWorld:s}=o.viewport,l=e.world,{points:c}=r.handles;let d,h,u,g,v,m,p,f;switch(c[a]=[...l],a){case 0:case 3:d=i(c[0]),g=i(c[3]),h=[g[0],d[1]],u=[d[0],g[1]],m=s(h),p=s(u),c[1]=m,c[2]=p;break;case 1:case 2:h=i(c[1]),u=i(c[2]),d=[u[0],h[1]],g=[h[0],u[1]],v=s(d),f=s(g),c[0]=v,c[3]=f}r.invalidated=!0}this.editData.hasMoved=!0;const s=(0,ne.getEnabledElement)(n),{renderingEngine:l}=s;Ua(l,i)})),re(this,"_activateDraw",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.TOUCH_END,this._mouseUpCallback),e.addEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_deactivateDraw",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_END,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_activateModify",(e=>{Ye.isInteractingWithTool=!0,e.addEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.addEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(ie.TOUCH_END,this._mouseUpCallback),e.addEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"_deactivateModify",(e=>{Ye.isInteractingWithTool=!1,e.removeEventListener(ie.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(ie.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(ie.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_END,this._mouseUpCallback),e.removeEventListener(ie.TOUCH_DRAG,this._mouseDragCallback)})),re(this,"renderAnnotation",((e,t)=>{var n,o;const{viewport:i}=e,{element:a}=i;let r=st(this.getToolName(),a);if(null===(n=r)||void 0===n||!n.length)return!1;if(r=this.filterInteractableAnnotationsForElement(a,r),null===(o=r)||void 0===o||!o.length)return!1;this.getTargetId(i),i.getRenderingEngine();const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<r.length;e++){const n=r[e],{annotationUID:o}=n,a=(n.metadata,n.data),{points:l,activeHandleIndex:c}=a.handles,d=l.map((e=>i.worldToCanvas(e))),h=this.getStyle("lineWidth",s,n),u=this.getStyle("lineDash",s,n),g=this.getStyle("color",s,n);if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let v;this.editData||null===c||(v=[d[c]]),v&&Fc(t,o,"0",v,{color:g}),uf(t,o,"0",d[0],d[3],{color:"black",lineDash:u,lineWidth:h})}})),re(this,"_getRectangleImageCoordinates",(e=>{const[t,n]=e;return{left:Math.min(t[0],n[0]),top:Math.min(t[1],n[1]),width:Math.abs(t[0]-n[0]),height:Math.abs(t[1]-n[1])}})),re(this,"_calculateCachedStats",((e,t,n,o,i)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=i,c=a.handles.points[0],d=a.handles.points[3],{cachedStats:h}=a,u=Object.keys(h);for(let e=0;e<u.length;e++){const i=u[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(i,o),{dimensions:r,scalarData:s,vtkImageData:l,metadata:g}=a,v=aa.vec3.fromValues(0,0,0),m=aa.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(c,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),l.worldToIndexVec3(d,m),m[0]=Math.floor(m[0]),m[1]=Math.floor(m[1]),m[2]=Math.floor(m[2]),this._isInsideVolume(v,m,r)){this.isHandleOutsideImage=!1;const e=Math.min(v[0],m[0]),o=Math.max(v[0],m[0]),a=Math.min(v[1],m[1]),l=Math.max(v[1],m[1]),u=Math.min(v[2],m[2]),p=Math.max(v[2],m[2]),{worldWidth:f,worldHeight:I}=vI(t,n,c,d),w=f*I;let E=0,C=0,_=0;const b=r[0],D=r[0]*r[1];for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let i=e;i<=o;i++)E++,C+=s[t*D+n*b+i];C/=E;for(let t=u;t<=p;t++)for(let n=a;n<=l;n++)for(let i=e;i<=o;i++){const e=s[t*D+n*b+i]-C;_+=e*e}_/=E,_=Math.sqrt(_),h[i]={Modality:g.Modality,area:w,mean:C,stdDev:_}}else this.isHandleOutsideImage=!0,h[i]={Modality:g.Modality}}a.invalidated=!1;const g=ie.ANNOTATION_MODIFIED,v={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,ne.triggerEvent)(ne.eventTarget,g,v),h})),re(this,"_isInsideVolume",((e,t,n)=>ne.utilities.indexWithinDimensions(e,n)&&ne.utilities.indexWithinDimensions(t,n))),re(this,"_getTargetVolumeUID",(e=>{if(this.configuration.volumeUID)return this.configuration.volumeUID;const t=e.getVolumeActors();return t||t.length?t[0].uid:void 0})),this._throttledCalculateCachedStats=Er(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),bc(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:o}=t;o.active=!1,o.handles.activeHandleIndex=null;const i=(0,ne.getEnabledElement)(e),{renderingEngine:a}=i;return Ua(a,n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const o=e.indexOf(":"),i=e.substring(o+1);n=t.getViewport(i).getImageData()}else n=ne.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return"stackTarget:".concat(e.uid)}}lE.toolName="VideoRedaction";const cE=lE})(),_})()));
2
2
  //# sourceMappingURL=index.js.map