@cornerstonejs/tools 1.43.1 → 1.43.3

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,3 +1,3 @@
1
1
  /*! For license information please see index.js.LICENSE.txt */
2
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),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/Common/Core/DataArray"),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/Filters/General/ClipClosedSurface"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),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/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/Common/Core/DataArray","@kitware/vtk.js/Filters/General/AppendPolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Filters/General/ClipClosedSurface","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@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/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/Common/Core/DataArray"),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/Filters/General/ClipClosedSurface"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),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/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/Common/Core/DataArray"],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/Filters/General/ClipClosedSurface"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],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,i,o,a,r,s,l,d,c,h,g,u,v,m,p,f,E,w)=>(()=>{var I={907:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",d="[object GeneratorFunction]",c="[object Map]",h="[object Number]",g="[object Object]",u="[object Promise]",v="[object RegExp]",m="[object Set]",p="[object String]",f="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",I="[object DataView]",_="[object Float32Array]",C="[object Float64Array]",b="[object Int8Array]",T="[object Int16Array]",D="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",M="[object Uint16Array]",O="[object Uint32Array]",x=/\w*$/,P=/^\[object .+?Constructor\]$/,N=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[w]=R[I]=R[r]=R[s]=R[_]=R[C]=R[b]=R[T]=R[D]=R[c]=R[h]=R[g]=R[v]=R[m]=R[p]=R[f]=R[S]=R[y]=R[M]=R[O]=!0,R["[object Error]"]=R[l]=R[E]=!1;var A="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,k="object"==typeof self&&self&&self.Object===Object&&self,L=A||k||Function("return this")(),U=t&&!t.nodeType&&t,V=U&&e&&!e.nodeType&&e,W=V&&V.exports===U;function F(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function B(e,t,n,i){var o=-1,a=e?e.length:0;for(i&&a&&(n=e[++o]);++o<a;)n=t(n,e[o],o,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,i){n[++t]=[i,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=L["__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.*?")+"$"),ie=W?L.Buffer:void 0,oe=L.Symbol,ae=L.Uint8Array,re=j(Object.getPrototypeOf,Object),se=Object.create,le=J.propertyIsEnumerable,de=Y.splice,ce=Object.getOwnPropertySymbols,he=ie?ie.isBuffer:void 0,ge=j(Object.keys,Object),ue=Le(L,"DataView"),ve=Le(L,"Map"),me=Le(L,"Promise"),pe=Le(L,"Set"),fe=Le(L,"WeakMap"),Ee=Le(Object,"create"),we=He(ue),Ie=He(ve),_e=He(me),Ce=He(pe),be=He(fe),Te=oe?oe.prototype:void 0,De=Te?Te.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Me(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Oe(e){this.__data__=new ye(e)}function xe(e,t,n){var i=e[t];ee.call(e,t)&&Be(i,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Be(e[n][0],t))return n;return-1}function Ne(e,t,n,i,o,u,E){var P;if(i&&(P=u?i(e,o,u,E):i(e)),void 0!==P)return P;if(!Ke(e))return e;var N=Ge(e);if(N){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,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}(e,P)}else{var A=Ve(e),k=A==l||A==d;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(A==g||A==a||k&&!u){if(G(e))return u?e:{};if(P=function(e){return"function"!=typeof e.constructor||Fe(e)?{}:Ke(t=re(e))?se(t):{};var t}(k?{}:e),!t)return function(e,t){return Ae(e,Ue(e),t)}(e,function(e,t){return e&&Ae(t,Ye(t),e)}(P,e))}else{if(!R[A])return u?e:{};P=function(e,t,n,i){var o,a=e.constructor;switch(t){case w:return Re(e);case r:case s:return new a(+e);case I:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,i);case _:case C:case b:case T:case D:case S:case y:case M:case O:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,i);case c:return function(e,t,n){return B(t?n(q(e),!0):q(e),F,new e.constructor)}(e,i,n);case h:case p:return new a(e);case v:return function(e){var t=new e.constructor(e.source,x.exec(e));return t.lastIndex=e.lastIndex,t}(e);case m:return function(e,t,n){return B(t?n(z(e),!0):z(e),H,new e.constructor)}(e,i,n);case f:return o=e,De?Object(De.call(o)):{}}}(e,A,Ne,t)}}E||(E=new Oe);var L=E.get(e);if(L)return L;if(E.set(e,P),!N)var U=n?function(e){return function(e,t,n){var i=t(e);return Ge(e)?i:function(e,t){for(var n=-1,i=t.length,o=e.length;++n<i;)e[o+n]=t[n];return e}(i,n(e))}(e,Ye,Ue)}(e):Ye(e);return function(e,t){for(var n=-1,i=e?e.length:0;++n<i&&!1!==t(e[n],n););}(U||e,(function(o,a){U&&(o=e[a=o]),xe(P,a,Ne(o,t,n,i,a,e,E))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Ae(e,t,n,i){n||(n={});for(var o=-1,a=t.length;++o<a;){var r=t[o],s=i?i(n[r],e[r],r,n,e):void 0;xe(n,r,void 0===s?e[r]:s)}return n}function ke(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function Le(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(He(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=Ee?Ee(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(Ee){var n=t[e];return n===i?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return Ee?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=Ee&&void 0===t?i: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():de.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__,i=Pe(n,e);return i<0?n.push([e,t]):n[i][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 ke(this,e).delete(e)},Me.prototype.get=function(e){return ke(this,e).get(e)},Me.prototype.has=function(e){return ke(this,e).has(e)},Me.prototype.set=function(e,t){return ke(this,e).set(e,t),this},Oe.prototype.clear=function(){this.__data__=new ye},Oe.prototype.delete=function(e){return this.__data__.delete(e)},Oe.prototype.get=function(e){return this.__data__.get(e)},Oe.prototype.has=function(e){return this.__data__.has(e)},Oe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var i=n.__data__;if(!ve||i.length<199)return i.push([e,t]),this;n=this.__data__=new Me(i)}return n.set(e,t),this};var Ue=ce?j(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?o:t)&&("number"==typeof e||N.test(e))&&e>-1&&e%1==0&&e<t}function Fe(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||J)}function He(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Be(e,t){return e===t||e!=e&&t!=t}(ue&&Ve(new ue(new ArrayBuffer(1)))!=I||ve&&Ve(new ve)!=c||me&&Ve(me.resolve())!=u||pe&&Ve(new pe)!=m||fe&&Ve(new fe)!=E)&&(Ve=function(e){var t=te.call(e),n=t==g?e.constructor:void 0,i=n?He(n):void 0;if(i)switch(i){case we:return I;case Ie:return c;case _e:return u;case Ce:return m;case be:return E}return t});var Ge=Array.isArray;function qe(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=o}(e.length)&&!ze(e)}var je=he||function(){return!1};function ze(e){var t=Ke(e)?te.call(e):"";return t==l||t==d}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,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],i=n.length,o=!!i;for(var r in e)!t&&!ee.call(e,r)||o&&("length"==r||We(r,i))||n.push(r);return n}(e):function(e){if(!Fe(e))return ge(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 Ne(e,!0,!0)}},485:(e,t,n)=>{var i,o="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,h=/^\./,g=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/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")(),E=Array.prototype,w=Function.prototype,I=Object.prototype,_=f["__core-js_shared__"],C=(i=/[^.]+$/.exec(_&&_.keys&&_.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",b=w.toString,T=I.hasOwnProperty,D=I.toString,S=RegExp("^"+b.call(T).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,M=E.splice,O=V(f,"Map"),x=V(Object,"create"),P=y?y.prototype:void 0,N=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function A(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function k(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function L(e,t){for(var n,i,o=e.length;o--;)if((n=e[o][0])===(i=t)||n!=n&&i!=i)return o;return-1}function U(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.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)||C&&C in e)return!1;var t=function(e){var t=G(e)?D.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__=x?x(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(x){var n=t[e];return n===o?void 0:n}return T.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return x?void 0!==t[e]:T.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=x&&void 0===t?o:t,this},A.prototype.clear=function(){this.__data__=[]},A.prototype.delete=function(e){var t=this.__data__,n=L(t,e);return!(n<0||(n==t.length-1?t.pop():M.call(t,n,1),0))},A.prototype.get=function(e){var t=this.__data__,n=L(t,e);return n<0?void 0:t[n][1]},A.prototype.has=function(e){return L(this.__data__,e)>-1},A.prototype.set=function(e,t){var n=this.__data__,i=L(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},k.prototype.clear=function(){this.__data__={hash:new R,map:new(O||A),string:new R}},k.prototype.delete=function(e){return U(this,e).delete(e)},k.prototype.get=function(e){return U(this,e).get(e)},k.prototype.has=function(e){return U(this,e).has(e)},k.prototype.set=function(e,t){return U(this,e).set(e,t),this};var W=H((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return N?N.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(g,(function(e,t,i,o){n.push(i?o.replace(u,"$1"):t||e)})),n}));function F(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function H(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var i=arguments,o=t?t.apply(this,i):i[0],a=n.cache;if(a.has(o))return a.get(o);var r=e.apply(this,i);return n.cache=a.set(o,r),r};return n.cache=new(H.Cache||k),n}H.Cache=k;var B=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)&&D.call(e)==l}e.exports=function(e,t,n){var i=null==e?void 0:function(e,t){var n;t=function(e,t){if(B(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!q(e))||c.test(e)||!d.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:B(n=t)?n:W(n);for(var i=0,o=t.length;null!=e&&i<o;)e=e[F(t[i++])];return i&&i==o?e:void 0}(e,t);return void 0===i?n:i}},396:e=>{"use strict";e.exports=o},785:e=>{"use strict";e.exports=s},807:e=>{"use strict";e.exports=u},847:e=>{"use strict";e.exports=m},348:e=>{"use strict";e.exports=a},283:e=>{"use strict";e.exports=g},441:e=>{"use strict";e.exports=n},70:e=>{"use strict";e.exports=r},127:e=>{"use strict";e.exports=l},448:e=>{"use strict";e.exports=h},543:e=>{"use strict";e.exports=v},614:e=>{"use strict";e.exports=w},518:e=>{"use strict";e.exports=p},474:e=>{"use strict";e.exports=d},744:e=>{"use strict";e.exports=f},424:e=>{"use strict";e.exports=E},795:e=>{"use strict";e.exports=i},610:e=>{"use strict";e.exports=c},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},_={};function C(e){var t=_[e];if(void 0!==t)return t.exports;var n=_[e]={id:e,loaded:!1,exports:{}};return I[e](n,n.exports,C),n.loaded=!0,n.exports}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.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 b={};return(()=>{"use strict";C.r(b),C.d(b,{AdvancedMagnifyTool:()=>Mp,AngleTool:()=>ap,AnnotationDisplayTool:()=>sc,AnnotationTool:()=>dc,ArrowAnnotateTool:()=>np,BaseTool:()=>zi,BidirectionalTool:()=>ih,BrushTool:()=>Hd,CONSTANTS:()=>h,CircleROITool:()=>Nm,CircleScissorsTool:()=>Fp,CobbAngleTool:()=>dp,CrosshairsTool:()=>hm,DragProbeTool:()=>Lv,EllipticalROITool:()=>Sm,Enums:()=>$,KeyImageTool:()=>fp,LengthTool:()=>nm,LivewireContourTool:()=>$m,MIPJumpToClickTool:()=>$v,MagnifyTool:()=>Ip,OrientationMarkerTool:()=>Qp,OverlayGridTool:()=>fm,PaintFillTool:()=>rf,PanTool:()=>yv,PlanarFreehandROITool:()=>_u,PlanarRotateTool:()=>jv,ProbeTool:()=>Rv,RectangleROIStartEndThresholdTool:()=>Nc,RectangleROIThresholdTool:()=>Oc,RectangleROITool:()=>yc,RectangleScissorsTool:()=>Vp,ReferenceCursors:()=>xp,ReferenceLines:()=>vm,ReferenceLinesTool:()=>vm,ScaleOverlayTool:()=>Rp,SegmentSelectTool:()=>tf,SegmentationDisplayTool:()=>Ro,SegmentationIntersectionTool:()=>_m,SphereScissorsTool:()=>Bp,SplineROITool:()=>jm,StackScrollMouseWheelTool:()=>Kv,StackScrollTool:()=>Bv,Synchronizer:()=>Tr,SynchronizerManager:()=>l,ToolGroupManager:()=>c,TrackballRotateTool:()=>Ov,Types:()=>K,UltrasoundDirectionalTool:()=>up,VideoRedactionTool:()=>lf,VolumeRotateMouseWheelTool:()=>Jv,WindowLevelTool:()=>Vv,ZoomTool:()=>Fv,addTool:()=>wr,annotation:()=>X,cancelActiveManipulations:()=>_r,cursors:()=>z,destroy:()=>pr,drawing:()=>u,init:()=>mr,removeTool:()=>Ir,segmentation:()=>Z,state:()=>Ge,synchronizers:()=>g,utilities:()=>j});var e={};C.r(e),C.d(e,{checkAndDefineIsLockedProperty:()=>ge,getAnnotationsLocked:()=>de,getAnnotationsLockedCount:()=>he,isAnnotationLocked:()=>ce,setAnnotationLocked:()=>se,unlockAllAnnotations:()=>le});var t={};C.r(t),C.d(t,{deselectAnnotation:()=>Ie,getAnnotationsSelected:()=>_e,getAnnotationsSelectedByToolName:()=>Ce,getAnnotationsSelectedCount:()=>Te,isAnnotationSelected:()=>be,setAnnotationSelected:()=>we});var n={};C.r(n),C.d(n,{checkAndDefineIsVisibleProperty:()=>Ne,isAnnotationVisible:()=>Pe,setAnnotationVisibility:()=>Oe,showAllAnnotations:()=>xe});var i={};C.r(i),C.d(i,{addAnnotation:()=>Qe,getAnnotation:()=>nt,getAnnotationManager:()=>Xe,getAnnotations:()=>$e,getNumberOfAnnotations:()=>et,removeAllAnnotations:()=>it,removeAnnotation:()=>tt,resetAnnotationManager:()=>Ze,setAnnotationManager:()=>Je});var o={};C.r(o),C.d(o,{triggerSegmentationDataModified:()=>ft,triggerSegmentationModified:()=>pt,triggerSegmentationRemoved:()=>ut,triggerSegmentationRepresentationModified:()=>mt,triggerSegmentationRepresentationRemoved:()=>vt});var a={};C.r(a),C.d(a,{addColorLUT:()=>Bt,addSegmentation:()=>Ct,addSegmentationRepresentation:()=>Nt,getAllSegmentationRepresentations:()=>Tt,getColorLUT:()=>Ft,getDefaultSegmentationStateManager:()=>wt,getGlobalConfig:()=>Rt,getNextColorLUTIndex:()=>Ht,getSegmentSpecificRepresentationConfig:()=>xt,getSegmentation:()=>It,getSegmentationRepresentationByUID:()=>kt,getSegmentationRepresentationSpecificConfig:()=>Ot,getSegmentationRepresentations:()=>bt,getSegmentations:()=>_t,getToolGroupIdsWithSegmentation:()=>Dt,getToolGroupSpecificConfig:()=>St,removeColorLUT:()=>Wt,removeSegmentation:()=>Lt,removeSegmentationRepresentation:()=>Ut,removeSegmentationRepresentations:()=>Vt,setGlobalConfig:()=>At,setSegmentSpecificRepresentationConfig:()=>Pt,setSegmentationRepresentationSpecificConfig:()=>Mt,setToolGroupSpecificConfig:()=>yt});var r={};C.r(r),C.d(r,{copyPoints:()=>Bn,copyPointsList:()=>Hn,getDeltaDistance:()=>Vn,getDeltaDistanceBetweenIPoints:()=>Fn,getDeltaPoints:()=>Un,getDeltaRotation:()=>Wn,getMeanPoints:()=>Gn,getMeanTouchPoints:()=>qn});var s={};C.r(s),C.d(s,{getSegmentationVisibility:()=>Bi,setSegmentVisibility:()=>qi,setSegmentationVisibility:()=>Hi,setSegmentsVisibility:()=>Gi});var l={};C.r(l),C.d(l,{createSynchronizer:()=>Dr,destroy:()=>Sr,destroySynchronizer:()=>Or,getAllSynchronizers:()=>Mr,getSynchronizer:()=>yr,getSynchronizersForViewport:()=>nr});var d={};C.r(d),C.d(d,{hideElementCursor:()=>ds,initElementCursor:()=>rs,resetElementCursor:()=>ls,setElementCursor:()=>ss});var c={};C.r(c),C.d(c,{createToolGroup:()=>ps,destroy:()=>ur,destroyToolGroup:()=>gr,getAllToolGroups:()=>fs,getToolGroup:()=>xi,getToolGroupForViewport:()=>Mi,getToolGroupsWithToolName:()=>Ke});var h={};C.r(h),C.d(h,{COLOR_LUT:()=>Es});var g={};C.r(g),C.d(g,{createCameraPositionSynchronizer:()=>_s,createImageSliceSynchronizer:()=>ks,createStackImageSynchronizer:()=>Ls,createVOISynchronizer:()=>bs,createZoomPanSynchronizer:()=>Ss});var u={};C.r(u),C.d(u,{draw:()=>Go,drawArrow:()=>Qs,drawCircle:()=>Fs,drawEllipse:()=>Bs,drawEllipseByCoordinates:()=>Hs,drawHandle:()=>Gs,drawHandles:()=>qs,drawLine:()=>js,drawLinkedTextBox:()=>Zs,drawPolyline:()=>zs,drawRect:()=>$s,drawRedactionRect:()=>el,drawTextBox:()=>Xs,setAttributesIfNecessary:()=>Vs,setNewAttributesIfValid:()=>Ws});var v={};C.r(v),C.d(v,{AnnotationToPointData:()=>Kl,contourFinder:()=>Rl,detectContourHoles:()=>Vl,generateContourSetsFromLabelmap:()=>Bl,mergePoints:()=>Ul});var m={};C.r(m),C.d(m,{addColorLUT:()=>nd,getColorForSegmentIndex:()=>od,setColorForSegmentIndex:()=>ad,setColorLUT:()=>id});var p={};C.r(p),C.d(p,{getActiveSegmentation:()=>Nd,getActiveSegmentationRepresentation:()=>Pd,setActiveSegmentationRepresentation:()=>Rd});var f={};C.r(f),C.d(f,{getLockedSegments:()=>Ld,isSegmentIndexLocked:()=>Ad,setSegmentIndexLocked:()=>kd});var E={};C.r(E),C.d(E,{getActiveSegmentIndex:()=>Wd,setActiveSegmentIndex:()=>Vd});var w={};C.r(w),C.d(w,{contourAndFindLargestBidirectional:()=>Jc,createBidirectionalToolData:()=>Zc,createImageIdReferenceMap:()=>jc,createLabelmapVolumeForViewport:()=>Wc,createMergedLabelmapForIndex:()=>Lc,floodFill:()=>td,getBrushSizeForToolGroup:()=>Hc,getBrushThresholdForToolGroup:()=>Gc,getDefaultRepresentationConfig:()=>Vc,invalidateBrushCursor:()=>Ud,isValidRepresentationConfig:()=>Uc,rectangleROIThresholdVolumeByRange:()=>kc,segmentContourAction:()=>oh,setBrushSizeForToolGroup:()=>Fc,setBrushThresholdForToolGroup:()=>Bc,thresholdSegmentationByRange:()=>qc,thresholdVolumeByRange:()=>jd,triggerSegmentationRender:()=>ko});var I={};C.r(I),C.d(I,{getTextBoxCoordsCanvas:()=>mc});var _={};C.r(_),C.d(_,{distanceToPoint:()=>sh,distanceToPointSquared:()=>rh});var T={};C.r(T),C.d(T,{BasicStatsCalculator:()=>Cc,Calculator:()=>Ic});var D={};C.r(D),C.d(D,{getCanvasEllipseCorners:()=>ud,pointInEllipse:()=>vd,precalculatePointInEllipse:()=>md});var S={};C.r(S),C.d(S,{distanceToPoint:()=>uc,distanceToPointSquared:()=>gc,distanceToPointSquaredInfo:()=>hc,intersectLine:()=>Qc});var y={};C.r(y),C.d(y,{distanceToPoint:()=>lh,distanceToPointSquared:()=>cc,mirror:()=>dh});var M={};C.r(M),C.d(M,{addCanvasPointsToArray:()=>Ih,calculateAreaOfPoints:()=>Ch,getClosestIntersectionWithPolyline:()=>gh,getFirstIntersectionWithPolyline:()=>hh,getSubPixelSpacingAndXYDirections:()=>Eh,pointCanProjectOnLine:()=>_h,pointsAreWithinCloseContourProximity:()=>wh});var O={};C.r(O),C.d(O,{distanceToPoint:()=>vc});var x={};C.r(x),C.d(x,{findClosestPoint:()=>Js,liangBarksyClip:()=>yh});var P={};C.r(P),C.d(P,{BasicStatsCalculator:()=>T,aabb:()=>_,ellipse:()=>D,lineSegment:()=>S,point:()=>y,polyline:()=>M,rectangle:()=>O,vec2:()=>x});var N={};C.r(N),C.d(N,{default:()=>Nh,filterAnnotationsForDisplay:()=>oc,filterAnnotationsWithinSlice:()=>nc,getPointInLineOfSightWithCriteria:()=>xh,getWorldWidthAndHeightFromCorners:()=>pc});var R={};C.r(R),C.d(R,{filterViewportsWithFrameOfReferenceUID:()=>zd,filterViewportsWithParallelNormals:()=>$d,filterViewportsWithToolEnabled:()=>Jd,getViewportIdsWithToolToRender:()=>Qd});var A={};C.r(A),C.d(A,{getOrientationStringLPS:()=>Rh,invertOrientationStringLPS:()=>Ah});var k={};C.r(k),C.d(k,{Events:()=>Lh,addToolState:()=>Vh,getToolState:()=>Wh,playClip:()=>jh,stopClip:()=>zh});var L={};C.r(L),C.d(L,{extend2DBoundingBoxInViewAxis:()=>Rc,getBoundingBoxAroundShape:()=>Dl,getBoundingBoxAroundShapeIJK:()=>Dl,getBoundingBoxAroundShapeWorld:()=>Sl});var U={};C.r(U),C.d(U,{default:()=>bu,interpolateAnnotation:()=>Cu});var V={};C.r(V),C.d(V,{getBoundsIJKFromRectangleAnnotations:()=>Ac,isAxisAlignedRectangle:()=>Su});var W={};C.r(W),C.d(W,{isViewportPreScaled:()=>Ec,jumpToSlice:()=>xs,jumpToWorld:()=>Yu});var F={};C.r(F),C.d(F,{generateImageFromTimeData:()=>Ju,getDataInTime:()=>Xu});var H={};C.r(H),C.d(H,{getPoint:()=>Zu,getPolyDataPointIndexes:()=>$u,getPolyDataPoints:()=>Qu});var B={};C.r(B),C.d(B,{ColorbarRangeTextPosition:()=>ev});var G={};C.r(G),C.d(G,{Colorbar:()=>hv,Enums:()=>B,ViewportColorbar:()=>vv});var q={};C.r(q),C.d(q,{colorbar:()=>G});var j={};C.r(j),C.d(j,{annotationFrameRange:()=>Ol,boundingBox:()=>L,calibrateImageSpacing:()=>ll,cine:()=>k,clip:()=>Ms,contours:()=>v,debounce:()=>al,drawing:()=>I,dynamicVolume:()=>F,getAnnotationNearPoint:()=>tl,getAnnotationNearPointOnEnabledElement:()=>nl,getCalibratedAreaUnits:()=>fl,getCalibratedLengthUnits:()=>ml,getCalibratedScale:()=>El,getSphereBoundsInfo:()=>Ml,isObject:()=>ol,jumpToSlice:()=>xs,math:()=>P,orientation:()=>A,planar:()=>N,planarFreehandROITool:()=>U,pointInShapeCallback:()=>Cl,pointToString:()=>oo,polyDataUtils:()=>H,rectangleROITool:()=>V,roundNumber:()=>mv,scroll:()=>Os,segmentation:()=>w,stackContextPrefetch:()=>Ku,stackPrefetch:()=>Hu,throttle:()=>rl,touch:()=>r,triggerAnnotationRender:()=>Xo,triggerAnnotationRenderForViewportIds:()=>or,triggerEvent:()=>Q.triggerEvent,viewport:()=>W,viewportFilters:()=>R,voi:()=>q});var z={};C.r(z),C.d(z,{CursorNames:()=>fv,CursorSVG:()=>Kr,ImageMouseCursor:()=>Wr,MouseCursor:()=>Ar,SVGMouseCursor:()=>ts,elementCursor:()=>d,registerCursor:()=>Xr,setCursorForElement:()=>pv});var K={};C.r(K);var Y={};C.r(Y),C.d(Y,{getFont:()=>Ev,getState:()=>ac,style:()=>Zr});var X={};C.r(X),C.d(X,{AnnotationGroup:()=>wv,FrameOfReferenceSpecificAnnotationManager:()=>Fe,config:()=>Y,locking:()=>e,selection:()=>t,state:()=>i,visibility:()=>n});var J={};C.r(J),C.d(J,{color:()=>m,getGlobalConfig:()=>Pi,getGlobalRepresentationConfig:()=>Ri,getSegmentSpecificConfig:()=>Wi,getSegmentationRepresentationSpecificConfig:()=>Ui,getToolGroupSpecificConfig:()=>ki,setGlobalConfig:()=>Ni,setGlobalRepresentationConfig:()=>Ai,setSegmentSpecificConfig:()=>Fi,setSegmentationRepresentationSpecificConfig:()=>Vi,setToolGroupSpecificConfig:()=>Li,visibility:()=>s});var Z={};C.r(Z),C.d(Z,{activeSegmentation:()=>p,addSegmentationRepresentations:()=>bv,addSegmentations:()=>_v,config:()=>J,convertStackToVolumeSegmentation:()=>Tv,convertVolumeToStackSegmentation:()=>Dv,removeSegmentationsFromToolGroup:()=>hr,segmentIndex:()=>E,segmentLocking:()=>f,state:()=>a,triggerSegmentationEvents:()=>o});var $={};C.r($),C.d($,{AnnotationStyleStates:()=>Vr,Events:()=>te,KeyboardBindings:()=>pa,MouseBindings:()=>ma,SegmentationRepresentations:()=>at,StrategyCallbacks:()=>Xl,Swipe:()=>kn,ToolModes:()=>je});var Q=C(953),ee=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.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}(ee||{});const te=ee;function ne(e){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ne(e)}function ie(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ne(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,"string");if("object"!==ne(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ne(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oe=C(907),ae=C.n(oe);const re=new Set;function se(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ue();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,re,n):ve(e,re,n)),me(n,re)}function le(){const e=ue();!function(e,t){e.forEach((n=>{ve(n,e,t)}))}(re,e),me(e,re)}function de(){return Array.from(re)}function ce(e){return re.has(e)}function he(){return re.size}function ge(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==pe||t.get!==fe):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:pe,get:fe}),se(e,t)}}function ue(){return Object.freeze({added:[],removed:[],locked:[]})}function ve(e,t,n){t.delete(e)&&n.removed.push(e)}function me(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_LOCK_CHANGE,e))}function pe(e){se(this,e)}function fe(){return ce(this)}const Ee=new Set;function we(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?Ie(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=De();t||Se(Ee,n),e&&!Ee.has(e)&&(Ee.add(e),n.added.push(e)),ye(n,Ee)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function Ie(e){const t=De();e?Ee.delete(e)&&t.removed.push(e):Se(Ee,t),ye(t,Ee)}function _e(){return Array.from(Ee)}function Ce(e){return _e().filter((t=>nt(t).metadata.toolName===e))}function be(e){return Ee.has(e)}function Te(){return Ee.size}function De(){return Object.freeze({added:[],removed:[],selection:[]})}function Se(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function ye(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_SELECTION_CHANGE,e))}const Me=new Set;function Oe(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=Re();e&&(t?Ae(e,Me,n):function(e,t,n){t.has(e)||(t.add(e),be(e)&&Ie(e),n.lastHidden.push(e))}(e,Me,n)),ke(n)}function xe(){const e=Re();Me.forEach((t=>{Ae(t,Me,e)})),ke(e)}function Pe(e){if(nt(e))return!Me.has(e)}function Ne(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!==Le||t.get!==Ue):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:Le,get:Ue}),Oe(e.annotationUID,n)}}function Re(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function Ae(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function ke(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Me.forEach((t=>{e.hidden.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_VISIBILITY_CHANGE,e))}function Le(e){Oe(this.annotationUID,e)}function Ue(){return Pe(this.annotationUID)}class Ve{constructor(e){ie(this,"annotations",void 0),ie(this,"uid",void 0),ie(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,Q.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})),ie(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,i=this.annotations[n];i&&Object.keys(i).forEach((e=>{i[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),ie(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),ie(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]:n[e]:[]})),ie(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const i=t[n];for(const t in i){const n=i[t];for(const t of n)if(e===t.annotationUID)return t}}})),ie(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let i=0;for(const e in n)i+=n[e].length;return i})),ie(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:i,toolName:o}=n;t=t||i;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[o];s||(r[o]=[],s=r[o]),s.push(e),ge(e),Ne(e)})),ie(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const i=t[n];for(const t in i){const n=i[t],o=n.findIndex((t=>t.annotationUID===e));-1!==o&&(n.splice(o,1),0===n.length&&delete i[t])}0===Object.keys(i).length&&delete t[n]}})),ie(this,"removeAnnotations",((e,t)=>{const n=this.annotations;n[e]&&(t?delete n[e][t]:delete n[e])})),ie(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const i=n[e];if(!i)return;const o=i[t];return ae()(o)}if(e){const t=n[e];return ae()(t)}return ae()(n)})),ie(this,"restoreAnnotations",((e,t,n)=>{const i=this.annotations;if(t&&n){let o=i[t];o||(i[t]={},o=i[t]),o[n]=e}else t?i[t]=e:this.annotations=ae()(e)})),ie(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const i=t[n];for(const t in i)e+=i[t].length}return e})),ie(this,"removeAllAnnotations",(()=>{this.annotations={}})),e||(e=Q.utilities.uuidv4()),this.annotations={},this.uid=e,Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const We=new Ve("DEFAULT"),Fe=Ve;let He={};const Be={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:He,enabledElements:[],handleRadius:6};let Ge={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:He,enabledElements:[],handleRadius:6};var qe=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(qe||{});const je=qe,ze=[je.Active,je.Passive,je.Enabled],Ke=function(e){return Ge.toolGroups.filter((t=>{let{toolOptions:n}=t;const i=Object.keys(n);for(let t=0;t<i.length;t++)if(e===i[t]&&n[e]&&ze.includes(n[e].mode))return!0;return!1}))};let Ye=We;function Xe(){return Ye}function Je(e){Ye=e}function Ze(){Ye=We}function $e(e,t){const n=Xe(),i=n.getGroupKey(t);return n.getAnnotations(i,e)}function Qe(e,t){e.annotationUID||(e.annotationUID=Q.utilities.uuidv4());const n=Xe(),i=n.getGroupKey(t);return n.addAnnotation(e,i),t instanceof HTMLDivElement?function(e,t){const n=(0,Q.getEnabledElement)(t),{renderingEngine:i,viewportId:o}=n,a=te.ANNOTATION_ADDED,r={annotation:e,viewportId:o,renderingEngineId:i.id};(0,Q.triggerEvent)(Q.eventTarget,a,r)}(e,t):function(e){const{toolName:t}=e.metadata,n=Ke(t);if(!n.length)return;const i=[];if(n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:o}=t,{FrameOfReferenceUID:a}=(0,Q.getEnabledElementByIds)(o,n);e.metadata.FrameOfReferenceUID===a&&i.push(t)}))})),!i.length)return;const o=te.ANNOTATION_ADDED;i.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const a={annotation:e,viewportId:i,renderingEngineId:n};(0,Q.triggerEvent)(Q.eventTarget,o,a)}))}(e),e.annotationUID}function et(e,t){const n=Xe(),i=n.getGroupKey(t);return n.getNumberOfAnnotations(i,e)}function tt(e){if(!e)return;const t=Xe(),n=t.getAnnotation(e);if(!n)return;t.removeAnnotation(e);const i=te.ANNOTATION_REMOVED,o={annotation:n,annotationManagerUID:t.uid};(0,Q.triggerEvent)(Q.eventTarget,i,o)}function nt(e){return Xe().getAnnotation(e)}function it(){Xe().removeAllAnnotations()}var ot=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(ot||{});const at=ot,rt={renderOutline:!0,outlineWidthActive:2,outlineWidthInactive:2,outlineOpacity:1,outlineOpacityInactive:.85,renderFill:!0,fillAlpha:1,fillAlphaInactive:0},st={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},lt=function(){return st},dt=lt(),ct=rt,ht={colorLUT:[],segmentations:[],globalConfig:{renderInactiveSegmentations:!0,representations:{[at.Labelmap]:dt,[at.Contour]:ct}},toolGroups:{}},gt=new class{constructor(e){ie(this,"state",void 0),ie(this,"uid",void 0),e||(e=Q.utilities.uuidv4()),this.state=ae()(ht),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=ae()(ht)}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,i]=t;e[n]=i.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){return this.getSegmentationRepresentations(e).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 i=n.findIndex((e=>e.segmentationRepresentationUID===t));-1===i&&console.warn("No viewport specific segmentation state data found for viewport ".concat(e," and segmentation data UID ").concat(t));const o=n[i];n.splice(i,1),this._handleActiveSegmentation(e,o)}setActiveSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No segmentation data found for toolGroupId: ".concat(e));const i=n.find((e=>e.segmentationRepresentationUID===t));if(!i)throw new Error("No segmentation data found for segmentation data UID ".concat(t));i.active=!0,this._handleActiveSegmentation(e,i)}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 i=this.getSegmentationRepresentationByUID(e,t);i&&(i.segmentationRepresentationSpecificConfig=n)}getSegmentSpecificConfig(e,t,n){const i=this.getSegmentationRepresentationByUID(e,t);if(i)return i.segmentSpecificConfig[n]}setSegmentSpecificConfig(e,t,n){const i=this.getSegmentationRepresentationByUID(e,t);i&&(i.segmentSpecificConfig=n)}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]=structuredClone(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 ut(e){const t={segmentationId:e};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REMOVED,t)}function vt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_REMOVED,n)}function mt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};t?(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_MODIFIED,n):(bt(e)||[]).forEach((t=>{const{segmentationRepresentationUID:n}=t,i={toolGroupId:e,segmentationRepresentationUID:n};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_MODIFIED,i)}))}function pt(e){let t;t=e?[e]:_t().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_MODIFIED,t)}))}function ft(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_DATA_MODIFIED,n)}const Et=function(e){const{segmentationId:t,representation:n}=e;return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...n.data}}}};function wt(){return gt}function It(e){return wt().getSegmentation(e)}function _t(){return wt().getState().segmentations}function Ct(e,t){const n=wt(),i=Et(e);n.addSegmentation(i),t||pt(i.segmentationId)}function bt(e){return wt().getSegmentationRepresentations(e)}function Tt(){return wt().getAllSegmentationRepresentations()}function Dt(e){if(!e)throw new Error("getToolGroupIdsWithSegmentation: segmentationId is empty");const t=wt(),n=t.getState(),i=Object.keys(n.toolGroups),o=[];return i.forEach((n=>{t.getSegmentationRepresentations(n).forEach((t=>{t.segmentationId===e&&o.push(n)}))})),o}function St(e){return wt().getToolGroupSpecificConfig(e)}function yt(e,t,n){wt().setSegmentationRepresentationConfig(e,t),n||mt(e)}function Mt(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];wt().setSegmentationRepresentationSpecificConfig(e,t,n),i||mt(e,t)}function Ot(e,t){return wt().getSegmentationRepresentationSpecificConfig(e,t)}function xt(e,t,n){return wt().getSegmentSpecificConfig(e,t,n)}function Pt(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];wt().setSegmentSpecificConfig(e,t,n),i||mt(e,t)}function Nt(e,t,n){wt().addSegmentationRepresentation(e,t),n||mt(e,t.segmentationRepresentationUID)}function Rt(){return wt().getGlobalConfig()}function At(e,t){wt().setGlobalConfig(e),t||pt()}function kt(e,t){return wt().getSegmentationRepresentationByUID(e,t)}function Lt(e){wt().removeSegmentation(e),ut(e)}function Ut(e,t){wt().removeSegmentationRepresentation(e,t),vt(e,t)}function Vt(e){(bt(e)||[]).forEach((t=>{Ut(e,t.segmentationRepresentationUID)}))}function Wt(e){wt().removeColorLUT(e)}function Ft(e){return wt().getColorLUT(e)}function Ht(){return wt().getNextColorLUTIndex()}function Bt(e,t){wt().addColorLUT(e,t)}function Gt(e,t){const n=t||e.currentTarget,{viewport:i}=(0,Q.getEnabledElement)(n),o=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:o,canvas:r,world:i.canvasToWorld(r)}}const qt=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:i}=(0,Q.getEnabledElement)(t),o=Gt(e,t),a={event:e,eventName:te.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:i,camera:{},element:t,startPoints:o,lastPoints:o,currentPoints:o,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,Q.triggerEvent)(t,te.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},jt=te.MOUSE_MOVE,zt=function(e){const t=e.currentTarget,n=(0,Q.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n,a={renderingEngineId:i,viewportId:o,camera:{},element:t,currentPoints:Gt(e),eventName:jt,event:e};!(0,Q.triggerEvent)(t,jt,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:Kt,MOUSE_DOWN_ACTIVATE:Yt,MOUSE_CLICK:Xt,MOUSE_UP:Jt,MOUSE_DRAG:Zt}=te,$t=3,Qt={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 en={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 tn={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function nn(e){const t=Gt(e,en.element),n=gn(en.element,en.lastPoints),i=un(t,n);if(tn.doubleClickTimeout){if(!rn(i.canvas))return;ln()}const o={event:e,eventName:Zt,mouseButton:en.mouseButton,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},element:en.element,startPoints:hn(en.startPoints),lastPoints:hn(n),currentPoints:t,deltaPoints:i};!(0,Q.triggerEvent)(en.element,Zt,o)&&(e.stopImmediatePropagation(),e.preventDefault()),en.lastPoints=hn(t)}function on(e){if(clearTimeout(en.preventClickTimeout),tn.doubleClickTimeout)tn.mouseUpEvent?cn():(tn.mouseUpEvent=e,en.element.addEventListener("mousemove",an));else{const t=en.isClickEvent?Xt:Jt,n=Gt(e,en.element),i=un(n,en.lastPoints),o={event:e,eventName:t,mouseButton:en.mouseButton,element:en.element,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},startPoints:hn(en.startPoints),lastPoints:hn(en.lastPoints),currentPoints:n,deltaPoints:i};(0,Q.triggerEvent)(o.element,t,o),cn()}document.removeEventListener("mousemove",nn)}function an(e){rn(un(Gt(e,en.element),gn(en.element,en.lastPoints)).canvas)&&(ln(),zt(e))}function rn(e){return Math.abs(e[0])+Math.abs(e[1])>$t}function sn(){en.isClickEvent=!1}function ln(){tn.ignoreDoubleClick=!0;const e=tn.mouseDownEvent,t=tn.mouseUpEvent;dn(),function(e){const t=un(en.startPoints,en.startPoints),n={event:e,eventName:Kt,element:en.element,mouseButton:en.mouseButton,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},startPoints:en.startPoints,lastPoints:en.startPoints,currentPoints:en.startPoints,deltaPoints:t};en.lastPoints=hn(n.lastPoints),(0,Q.triggerEvent)(n.element,Kt,n)&&(0,Q.triggerEvent)(n.element,Yt,n)}(e),t&&on(t)}function dn(){tn.doubleClickTimeout&&(clearTimeout(tn.doubleClickTimeout),tn.doubleClickTimeout=null),tn.mouseDownEvent=null,tn.mouseUpEvent=null}function cn(){var e,t;document.removeEventListener("mouseup",on),null===(e=en.element)||void 0===e||e.removeEventListener("mousemove",an),null===(t=en.element)||void 0===t||t.addEventListener("mousemove",zt),dn(),en=JSON.parse(JSON.stringify(Qt))}function hn(e){return JSON.parse(JSON.stringify(e))}function gn(e,t){const{viewport:n}=(0,Q.getEnabledElement)(e),i=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:i}}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,i=t.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])};var n,i}function vn(e,t){return[e[0]-t[0],e[1]-t[1]]}function mn(e){tn.ignoreDoubleClick?(tn.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):cn()}const pn=function(e){if(tn.doubleClickTimeout){if(e.buttons===tn.mouseDownEvent.buttons)return;return tn.mouseDownEvent=e,void ln()}tn.doubleClickTimeout=setTimeout(ln,1===e.buttons?400:150),tn.mouseDownEvent=e,tn.ignoreDoubleClick=!1,en.element=e.currentTarget,en.mouseButton=e.buttons;const t=(0,Q.getEnabledElement)(en.element),{renderingEngineId:n,viewportId:i}=t;en.renderingEngineId=n,en.viewportId=i,en.preventClickTimeout=setTimeout(sn,en.clickDelay),en.element.removeEventListener("mousemove",zt);const o=Gt(e,en.element);en.startPoints=hn(o),en.lastPoints=hn(o),document.addEventListener("mouseup",on),document.addEventListener("mousemove",nn)};function fn(e){e.removeEventListener("dblclick",qt),e.removeEventListener("mousedown",pn),e.removeEventListener("mousemove",zt),e.removeEventListener("dblclick",mn,{capture:!0})}const En={enable:function(e){fn(e),e.addEventListener("dblclick",qt),e.addEventListener("mousedown",pn),e.addEventListener("mousemove",zt),e.addEventListener("dblclick",mn,{capture:!0})},disable:fn},wn=function(e){const t=e.currentTarget,n=(0,Q.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=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,i=0,o=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),i=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||o)&&e.deltaMode&&(1===e.deltaMode?(i*=40,o*=40):(i*=800,o*=800)),i&&!t&&(t=i<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:o}}(e),d=r<0?-1:1,c={event:e,eventName:te.MOUSE_WHEEL,renderingEngineId:i,viewportId:o,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:d},points:Gt(e)};(0,Q.triggerEvent)(t,te.MOUSE_WHEEL,c)};function In(e){e.removeEventListener("wheel",wn)}const _n={enable:function(e){In(e),e.addEventListener("wheel",wn,{passive:!1})},disable:In},Cn=0,bn=1;let Tn,Dn;function Sn(e,t){const n=Date.now();if(e!==Tn){if(n-Dn<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Tn=e}Dn=n}const yn=Sn.bind(null,Cn),Mn=Sn.bind(null,bn);function On(e,t,n){const i=n?yn:Mn;t.forEach((function(t){e.addEventListener(t,i,{passive:!1})}))}function xn(e,t,n){const i=n?yn:Mn;t.forEach((function(t){e.removeEventListener(t,i)}))}const Pn=["mousedown","mouseup","mousemove"],Nn=["touchstart","touchend"];function Rn(e){xn(e,Pn,Cn),xn(e,Nn,bn)}const An={enable:function(e){Rn(e),On(e,Pn,Cn),On(e,Nn,bn)},disable:Rn};var kn=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(kn||{});function Ln(e,t){const n=t||e.currentTarget,i="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(i).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(i[e]),o=function(e){return[e.pageX,e.pageY]}(i[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,o),{viewport:r}=(0,Q.getEnabledElement)(n);return{page:o,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:i[e].radiusX,radiusY:i[e].radiusY,force:i[e].force,rotationAngle:i[e].rotationAngle}}}))}function Un(e,t){const n=Gn(e),i=Gn(t);return{page:jn(n.page,i.page),client:jn(n.client,i.client),canvas:jn(n.canvas,i.canvas),world:(o=n.world,a=i.world,[o[0]-a[0],o[1]-a[1],o[2]-a[2]])};var o,a}function Vn(e,t){const n=Gn(e),i=Gn(t);return{page:Kn(n.page,i.page),client:Kn(n.client,i.client),canvas:Kn(n.canvas,i.canvas),world:Yn(n.world,i.world)}}function Wn(e,t){}function Fn(e,t){const n=zn(e),i=zn(t);return{page:n.page-i.page,client:n.client-i.client,canvas:n.canvas-i.canvas,world:n.world-i.world}}function Hn(e){return JSON.parse(JSON.stringify(e))}function Bn(e){return JSON.parse(JSON.stringify(e))}function Gn(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 qn(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 jn(e,t){return[e[0]-t[0],e[1]-t[1]]}function zn(e){const t=[];for(let n=0;n<e.length;n++)for(let i=0;i<e.length;i++)n<i&&t.push({page:Kn(e[n].page,e[i].page),client:Kn(e[n].client,e[i].client),canvas:Kn(e[n].canvas,e[i].canvas),world:Yn(e[n].world,e[i].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 Kn(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function Yn(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))}Q.Settings.getRuntimeSettings();const{TOUCH_START:Xn,TOUCH_START_ACTIVATE:Jn,TOUCH_PRESS:Zn,TOUCH_DRAG:$n,TOUCH_END:Qn,TOUCH_TAP:ei,TOUCH_SWIPE:ti}=te,ni={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},ii={page:0,client:0,canvas:0,world:0},oi={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...ni,touch:null}],lastPointsList:[{...ni,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:ii,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},ai={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...ni,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let ri=JSON.parse(JSON.stringify(oi)),si=JSON.parse(JSON.stringify(ai));function li(e,t,n){return(0,Q.triggerEvent)(e,t,n)}function di(e){const t=Ln(e,ri.element),n=hi(ri.element,ri.lastPointsList),i=t.length===n.length?Un(t,n):ni,o=t.length===n.length?Fn(t,n):ii,a=t.length===n.length?Vn(t,ri.lastPointsList):ii;ri.accumulatedDistance={page:ri.accumulatedDistance.page+a.page,client:ri.accumulatedDistance.client+a.client,canvas:ri.accumulatedDistance.canvas+a.canvas,world:ri.accumulatedDistance.world+a.world};const r={event:e,eventName:$n,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,startPoints:qn(ri.startPointsList),lastPoints:qn(n),currentPoints:qn(t),startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(n),currentPointsList:t,deltaPoints:i,deltaDistance:o};li(ri.element,$n,r),function(e,t){const n=(new Date).getTime(),i=ri.startTime.getTime();if(ri.swiped||n-i>ri.swipeToleranceMs)return;const[o,a]=t.canvas,r={event:e,eventName:ti,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,swipe:null};Math.abs(o)>ri.swipeDistanceThreshold&&(r.swipe=o>0?kn.RIGHT:kn.LEFT,li(r.element,ti,r),ri.swiped=!0),Math.abs(a)>ri.swipeDistanceThreshold&&(r.swipe=a>0?kn.DOWN:kn.UP,li(r.element,ti,r),ri.swiped=!0)}(e,i),ri.lastPointsList=Hn(t)}function ci(e){clearTimeout(ri.pressTimeout);const t=Ln(e,ri.element),n=hi(ri.element,ri.lastPointsList),i=t.length===n.length?Un(t,n):Un(t,t),o=t.length===n.length?Fn(t,n):Fn(t,t),a={event:e,eventName:Qn,element:ri.element,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(n),currentPointsList:t,startPoints:qn(ri.startPointsList),lastPoints:qn(n),currentPoints:qn(t),deltaPoints:i,deltaDistance:o};li(a.element,Qn,a),function(e){if((new Date).getTime()-ri.startTime.getTime()>si.tapToleranceMs)return;if(0===si.taps&&(si.element=ri.element,si.renderingEngineId=ri.renderingEngineId,si.viewportId=ri.viewportId,si.startPointsList=ri.startPointsList),si.taps>0&&(si.element!=ri.element||si.renderingEngineId!=ri.renderingEngineId||si.viewportId!=ri.viewportId))return;const t=Ln(e,si.element);Vn(t,si.startPointsList).canvas>si.tapMaxDistance||(clearTimeout(si.tapTimeout),si.taps+=1,si.tapTimeout=setTimeout((()=>{const n={event:e,eventName:ei,element:si.element,renderingEngineId:si.renderingEngineId,viewportId:si.viewportId,camera:{},currentPointsList:t,currentPoints:qn(t),taps:si.taps};li(n.element,ei,n),si=JSON.parse(JSON.stringify(ai))}),si.tapToleranceMs))}(e),ri=JSON.parse(JSON.stringify(oi)),document.removeEventListener("touchmove",di),document.removeEventListener("touchend",ci)}function hi(e,t){const{viewport:n}=(0,Q.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 gi=function(e){ri.element=e.currentTarget;const t=(0,Q.getEnabledElement)(ri.element),{renderingEngineId:n,viewportId:i}=t;ri.renderingEngineId=n,ri.viewportId=i,ri.isTouchStart||(clearTimeout(ri.pressTimeout),ri.pressTimeout=setTimeout((()=>function(e){if(ri.accumulatedDistance.canvas>ri.pressMaxDistance)return;const t={event:e,eventName:Zn,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(ri.lastPointsList),startPoints:Bn(qn(ri.startPointsList)),lastPoints:Bn(qn(ri.lastPointsList))};li(t.element,Zn,t)}(e)),ri.pressDelay),function(e){ri.isTouchStart=!0,ri.startTime=new Date;const t=Ln(e,ri.element),n=qn(t),i=ni,o=ii,a={event:e,eventName:Xn,element:ri.element,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:i,deltaDistance:o};ri.startPointsList=Hn(a.startPointsList),ri.lastPointsList=Hn(a.lastPointsList),li(a.element,Xn,a)&&li(a.element,Jn,a)}(e),document.addEventListener("touchmove",di),document.addEventListener("touchend",ci))};function ui(e){An.disable(e),e.removeEventListener("touchstart",gi)}const vi={enable:function(e){ui(e),An.enable(e),e.addEventListener("touchstart",gi,{passive:!1})},disable:ui},mi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let pi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function fi(e){pi.element=e.currentTarget;const t=(0,Q.getEnabledElement)(pi.element),{renderingEngineId:n,viewportId:i}=t;pi.renderingEngineId=n,pi.viewportId=i,pi.key=e.key,pi.keyCode=e.keyCode,e.preventDefault();const o={renderingEngineId:pi.renderingEngineId,viewportId:pi.viewportId,element:pi.element,key:pi.key,keyCode:pi.keyCode};(0,Q.triggerEvent)(o.element,te.KEY_DOWN,o),document.addEventListener("keyup",wi),document.addEventListener("visibilitychange",Ei),pi.element.removeEventListener("keydown",fi)}function Ei(){document.removeEventListener("visibilitychange",Ei),"hidden"===document.visibilityState&&Ii()}function wi(e){const t={renderingEngineId:pi.renderingEngineId,viewportId:pi.viewportId,element:pi.element,key:pi.key,keyCode:pi.keyCode};document.removeEventListener("keyup",wi),document.removeEventListener("visibilitychange",Ei),pi.element.addEventListener("keydown",fi),pi=ae()(mi),(0,Q.triggerEvent)(t.element,te.KEY_UP,t)}function Ii(){pi.keyCode=void 0}const _i=fi;function Ci(e){e.removeEventListener("keydown",_i)}const bi={enable:function(e){Ci(e),e.addEventListener("keydown",_i)},disable:Ci,getModifierKey:function(){return pi.keyCode}};var Ti=C(785),Di=C.n(Ti),Si=C(283),yi=C.n(Si);const Mi=function(e,t){const n=Ge.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(n.length){if(n.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 n[0]}};function Oi(e){return void 0!==(null==e?void 0:e.volumeId)}const xi=function(e){return Ge.toolGroups.find((t=>t.id===e))};function Pi(){return Rt()}function Ni(e){At(e)}function Ri(e){return Pi().representations[e]}function Ai(e,t){const n=Pi();Ni({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function ki(e){return St(e)}function Li(e,t){yt(e,t)}function Ui(e,t){return Ot(e,t)}function Vi(e,t,n){Mt(e,t,n)}function Wi(e,t,n){return xt(e,t,n)}function Fi(e,t,n){Pt(e,t,n)}function Hi(e,t,n){const i=bt(e);if(!i)return;const o=i.find((e=>e.segmentationRepresentationUID===t));if(!o)return;const{segmentsHidden:a,segmentationId:r}=o,s=function(e){const t=It(e);if(t.type===at.Labelmap){const t=Q.cache.getVolume(e).getScalarData(),n={};for(let e=0;e<t.length;e++){const i=t[e];0===i||n[i]||(n[i]=!0)}return Object.keys(n).map((e=>parseInt(e,10)))}if(t.type===at.Contour){var n;const i=null===(n=t.representationData.CONTOUR)||void 0===n?void 0:n.geometryIds;if(!i)throw new Error("No geometryIds found for segmentationId ".concat(e));return i.map((e=>Q.cache.getGeometry(e).data.getSegmentIndex()))}}(r);n?a.clear():s.forEach((e=>{a.add(e)})),mt(e,o.segmentationRepresentationUID)}function Bi(e,t){const n=bt(e).find((e=>e.segmentationRepresentationUID===t));if(!n)return;const{segmentsHidden:i}=n;return 0===i.size}function Gi(e,t,n,i){const o=kt(e,t);o&&(n.forEach((e=>{i?o.segmentsHidden.delete(e):o.segmentsHidden.add(e)})),mt(e,t))}function qi(e,t,n,i){const o=kt(e,t);o&&(i?o.segmentsHidden.delete(n):o.segmentsHidden.add(n),mt(e,t))}class ji{constructor(e,t){ie(this,"supportedInteractionTypes",void 0),ie(this,"configuration",void 0),ie(this,"toolGroupId",void 0),ie(this,"mode",void 0);const n=Q.utilities.deepMerge(t,e),{configuration:i={},supportedInteractionTypes:o,toolGroupId:a}=n;i.strategies||(i.strategies={},i.defaultStrategy=void 0,i.activeStrategy=void 0,i.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=o||[],this.configuration=Object.assign({},i),this.mode=je.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){var n;const{strategies:i,activeStrategy:o}=this.configuration;return null===(n=i[o])||void 0===n?void 0:n.call(this,e,t)}applyActiveStrategyCallback(e,t,n){var i;const{strategies:o,activeStrategy:a}=this.configuration;return null===(i=o[a][n])||void 0===i?void 0:i.call(this,e,t)}setConfiguration(e){this.configuration=Q.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],i=Q.utilities.imageIdToURI(n);let o=Q.utilities.getViewportsWithImageURI(i,t.id);if(!o||!o.length)return;if(o=o.filter((e=>e.getCurrentImageId()===n)),!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("volumeId:")){const n=e.split("volumeId:")[1],i=Q.utilities.getViewportsWithVolumeId(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("videoId:")){const n=Q.utilities.imageIdToURI(e),i=Q.utilities.getViewportsWithImageURI(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){if(e instanceof Q.StackViewport)return"imageId:".concat(e.getCurrentImageId());if(e instanceof Q.BaseVolumeViewport)return"volumeId:".concat(this.getTargetVolumeId(e));if(e instanceof Q.VideoViewport)return"videoId:".concat(e.getCurrentImageId());throw new Error("getTargetId: viewport must be a StackViewport or VolumeViewport")}}ie(ji,"toolName",void 0),ji.toolName="BaseTool";const zi=ji,Ki=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);i.removeActors(o)};var Yi=C(610),Xi=C.n(Yi),Ji=C(474),Zi=C.n(Ji),$i=C(448),Qi=C.n($i),eo=C(70),to=C.n(eo),no=C(396),io=C.n(no);function oo(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)+","}const ao=new Map;function ro(e){const{actorEntry:t,vtkPlanes:n,viewport:i}=e.detail;if(null==t||!t.clippingFilter)return;const o=t.actor.getMapper(),{viewPlaneNormal:a}=i.getCamera(),r=i.getCurrentImageIdIndex(),s="".concat(i.id,"-").concat(oo(a),"-").concat(r);let l=ao.get(t.uid);l||(l=new Map,ao.set(t.uid,l));let d=l.get(s);if(!d){const e=t.clippingFilter;e.setClippingPlanes(n);try{e.update(),d=e.getOutputData(),l.set(s,d)}catch(e){console.error("Error clipping surface",e)}}o.setInputData(d)}const so={render:async function(e,t,n){const{colorLUTIndex:i,active:o,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s}=t,l=It(a).representationData[at.Surface],{geometryId:d}=l;d||console.warn("No Surfaces found for segmentationId ".concat(a,". Skipping render."));const c=Q.cache.getGeometry(d);if(!c)throw new Error("No Surfaces found for geometryId ".concat(d));if(c.type!==Q.Enums.GeometryType.SURFACE)throw new Error("Geometry type ".concat(c.type," not supported for rendering."));if(!c.data)return void console.warn("No Surfaces found for geometryId ".concat(d,". Skipping render."));const h=c.data;!function(e,t,n){const i=n;if(e.getActor(i))throw new Error("Not implemented yet. (Update surface)");!function(e,t,n){const i=(0,Q.getEnabledElement)(e),{viewport:o}=i,a=t.getPoints(),r=t.getPolys(),s=t.getColor(),l=to().newInstance();l.getPoints().setData(a,3);const d=io().newInstance({values:Float32Array.from(r)});l.setPolys(d);const c=Xi().newInstance({});let h;if(o instanceof Q.VolumeViewport3D)c.setInputData(l);else{h=Qi().newInstance({clippingPlanes:[],activePlaneId:2,passPointData:!1}),h.setInputData(l),h.setGenerateOutline(!0),h.setGenerateFaces(!1),h.update();const e=h.getOutputData();c.setInputData(e)}const g=Zi().newInstance();g.setMapper(c),g.getProperty().setColor(s[0]/255,s[1]/255,s[2]/255),o.addActor({actor:g,uid:n,clippingFilter:h}),e.addEventListener(Q.Enums.Events.CLIPPING_PLANES_UPDATED,ro)}(e.element,t,i)}(e,h,"".concat(r,"_").concat(h.id,"}")),e.resetCamera(),e.render()},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);Ki(o.viewport.element,t)}})(e,t),Ut(e,t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};var lo=C(127),co=C.n(lo),ho=C(348),go=C.n(ho);function uo(e,t,n){var i;let o=null===(i=e.segmentSpecificConfig)||void 0===i?void 0:i[t];var a;return o||(o=null===(a=e.segmentSpecificConfig)||void 0===a?void 0:a[n]),o?o.CONTOUR:null}const vo=new Map;function mo(e){return vo.get(e)}function po(e,t){vo.set(e,t)}function fo(e,t,n,i,o){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=co().newInstance(),l=new Map,d=new Map;t.forEach((e=>{const t=Q.cache.getGeometry(e);if(!t)return void console.warn("No geometry found for geometryId ".concat(e,". Skipping render."));const i=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!==Q.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 o=uo(n,e,i),a=t.data,c=function(e){const t=[],n=go().newInstance(),i=io().newInstance();let o=0;e.getContours().forEach((e=>{const n=e.getPoints(),a=e.getFlatPointsArray(),r=e.getType(),s=n.map(((e,t)=>t+o));r===Q.Enums.ContourType.CLOSED_PLANAR&&s.push(s[0]);const l=Float32Array.from(a);t.push(...l),i.insertNextCell([...s]),o+=n.length})),n.setData(t,3);const a=to().newInstance();return a.setPoints(n),a.setLines(i),a}(a),h=a.getColor(),g=c.getPoints().getNumberOfPoints(),u=Di().newInstance({size:4*g,numberOfComponents:4,dataType:"Uint8Array"});for(let e=0;e<g;++e)u.setTuple(e,[...h,255]);c.getPointData().setScalars(u),o&&d.set(i,o),l.set(i,[...h,r.has(i)?0:255]),0===i?s.setInputData(c):s.addInputData(c)}));const c=s.getOutputData(),h=i.representations.CONTOUR.outlineWidthActive,g=Xi().newInstance();g.setInputData(c);const u=Zi().newInstance();u.setMapper(g),u.getProperty().setLineWidth(h),po(a,Object.assign({},mo(a),{segmentsHidden:new Set(r),segmentSpecificMap:d,outlineWidthActive:h})),u.setForceOpaque(!0),e.addActor({uid:o,actor:u}),e.resetCamera(),e.render()}function Eo(e,t,n,i,o){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=i.representations.CONTOUR,l=mo(a),d=e.getActor(o);if(!d)return void console.warn("No contour actor found for actorUID ".concat(o,". Skipping render."));const{actor:c}=d,h=s.outlineWidthActive;(null==l?void 0:l.outlineWidthActive)!==h&&(c.getProperty().setLineWidth(h),po(a,Object.assign({},l,{outlineWidthActive:h})));const g=c.getMapper(),u=g.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:E}=t.reduce(((e,t)=>{const i=Q.cache.getGeometry(t),{data:o}=i,a=o.getSegmentIndex(),r=uo(n,t,a);return e.contourSets.push(o),e.segmentSpecificConfigs[a]=null!=r?r:{},e}),{contourSets:[],segmentSpecificConfigs:{}}),w=[...p,...m],I=Object.values(E).some((e=>Object.keys(e).length>0));let _=!1;if(w.length||I){const e=g.getInputData(),t=e.getPointData().getScalars().getData();let n=0;f.forEach((e=>{var i;const o=e.getSegmentIndex(),a=e.getTotalNumberOfPoints();if(w.includes(o)||null!==(i=E[o])&&void 0!==i&&i.fillAlpha){const i=e.getColor();let r=p.includes(o)?0:255;const s=E[o];void 0!==s.fillAlpha&&(r=255*s.fillAlpha);for(let e=0;e<a;++e)t[n+4*e]=i[0],t[n+4*e+1]=i[1],t[n+4*e+2]=i[2],t[n+4*e+3]=r;_=!0}n+=4*a})),_&&e.modified(),po(a,Object.assign({},l,{segmentsHidden:new Set(r)})),g.setLookupTable(u)}e.render()}const wo=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.includes(t)?n:void 0})).filter(Boolean);i.removeActors(o)},Io={render:async function(e,t,n){const{segmentationId:i}=t,o=It(i).representationData[at.Contour],{geometryIds:a}=o;e instanceof Q.StackViewport||(null!=a&&a.length||console.warn("No contours found for segmentationId ".concat(i,". Skipping render.")),function(e,t,n,i){const{segmentationRepresentationUID:o}=n,a="CONTOUR_".concat(o);(e.getActor(a)?Eo:fo)(e,t,n,i,a)}(e,a,t,n))},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);wo(o.viewport.element,t)}})(e,t),Ut(e,t),function(e){vo.delete(e)}(t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};var _o=C(441),Co=C.n(_o),bo=C(795),To=C.n(bo);const Do=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;i instanceof Q.StackViewport||i.removeVolumeActors([t])},So=new Map;function yo(){const e=To().newInstance(),t=Co().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}function Mo(e,t,n,i){const o={...e,...t,...i||{}};return{fillAlpha:n?o.fillAlpha:o.fillAlphaInactive,outlineWidth:n?o.outlineWidthActive:o.outlineWidthInactive,renderFill:n?o.renderFill:o.renderFillInactive,renderOutline:o.renderOutline,outlineOpacity:n?o.outlineOpacity:o.outlineOpacityInactive}}function Oo(e,t,n,i){let{fillAlpha:o,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l,segmentsHidden:d}=i;const c="".concat(e,"-").concat(t,"-").concat(n),h=So.get(c);if(!h)return So.set(c,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(d)}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:g,renderFill:u,renderOutline:v,outlineWidth:m,segmentColor:p,segmentsHidden:f}=h,E=p[0]!==s[0]||p[1]!==s[1]||p[2]!==s[2],w=p[3]!==s[3]||g!==o||u!==a||v!==r||m!==l||f.has(n)!==d.has(n);return So.set(c,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(d)}),{forceOpacityUpdate:w,forceColorUpdate:E}}async function xo(e,t,n){await async function(e,t,n){const i=(0,Q.getEnabledElement)(e),{renderingEngine:o,viewport:a}=i,{id:r}=a;if(Oi(t)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:Q.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,Q.addVolumesToViewports)(o,e,[r],!1,!0)}else{const e=[{imageId:t.imageIdReferenceMap.get(a.getCurrentImageId()),actorUID:n}];await(0,Q.addImageSlicesToViewports)(o,e,[r],!1,!0)}}(e.element,t,n)}const Po={getRepresentationRenderingConfig:yo,render:async function(e,t,n){const{colorLUTIndex:i,active:o,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s,config:l}=t,d=It(a);if(!d)return void console.warn("No segmentation found for segmentationId: ",a);const c=d.representationData[at.Labelmap];let h=e.getActor(r);if(Oi(c)){if(e instanceof Q.StackViewport)return;const{volumeId:t}=c;if(!Q.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:i}=n,o=Q.cache.getVolume(i);if(o){const e=Q.cache.getVolume(t);if(e&&o.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,null==c?void 0:c.referencedVolumeId))return;h||await xo(e,c,r),h=e.getActor(r)}else{if(e instanceof Q.VolumeViewport)return;const t=e.getCurrentImageId(),{imageIdReferenceMap:n}=c;if(!n.has(t))return;h||await xo(e,c,r),h=e.getActor(r)}if(!h)return;const{cfun:g,ofun:u}=l,v=n.renderInactiveSegmentations;!function(e,t,n,i,o,a,r,s,l,d){const{segmentSpecificConfig:c,segmentationRepresentationSpecificConfig:h}=r,g=h[at.Labelmap],u=Ft(o),v=Math.min(256,u.length),{uid:m}=t,{outlineWidth:p,renderOutline:f,outlineOpacity:E}=Mo(a,g,s);for(let t=0;t<v;t++){var w;const o=t,r=u[o],l=null===(w=c[o])||void 0===w?void 0:w[at.Labelmap],{fillAlpha:h,outlineWidth:v,renderFill:p,renderOutline:f}=Mo(a,g,s,l),{forceOpacityUpdate:E,forceColorUpdate:I}=Oo(e,m,o,{fillAlpha:h,renderFill:p,renderOutline:f,segmentColor:r,outlineWidth:v,segmentsHidden:d});if(I&&n.addRGBPoint(o,r[0]/255,r[1]/255,r[2]/255),E)if(p){const e=d.has(o)?0:r[3]/255*h;i.removePoint(o),i.addPointLong(o,e,.5,1)}else i.addPointLong(o,.01,.5,1)}const I=t.actor;I.getProperty().setRGBTransferFunction(0,n),i.setClamping(!1),I.getProperty().setScalarOpacity(0,i),I.getProperty().setInterpolationTypeToNearest(),I.getProperty().setUseLabelOutline(f),I.getProperty().setLabelOutlineOpacity(E);const{activeSegmentIndex:_}=It(r.segmentationId),C=new Array(v-1);for(let e=1;e<v;e++)C[e-1]=e===_?p+a.activeSegmentOutlineWidthDelta:p;I.getProperty().setLabelOutlineThickness(C);const b=s||l;I.setVisibility(b)}(e.id,h,g,u,i,n.representations[at.Labelmap],t,o,v,s)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);Do(o.viewport.element,t)}})(e,t),Ut(e,t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};class No extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{}}),ie(this,"renderSegmentation",(e=>{const t=xi(e);if(!t)return;const n=bt(e);if(!n||0===n.length)return;const i=t.viewportsInfo.map((e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,Q.getEnabledElementByIds)(n,t);if(i)return i.viewport})),o=n.map((t=>{const n=this._getMergedRepresentationsConfig(e),o=[],a={[at.Labelmap]:Po,[at.Contour]:Io,[at.Surface]:so}[t.type];for(const e of i){const i=a.render(e,t,n);o.push(i)}return o}));Promise.allSettled(o).then((()=>{i.forEach((e=>{e.render()}))}))}))}onSetToolEnabled(){const e=this.toolGroupId,t=bt(e);t&&0!==t.length&&t.forEach((t=>{Hi(e,t.segmentationRepresentationUID,!0)}))}onSetToolDisabled(){const e=this.toolGroupId,t=bt(e);t&&0!==t.length&&t.forEach((t=>{Hi(e,t.segmentationRepresentationUID,!1)}))}_getMergedRepresentationsConfig(e){const t=ki(e),n=Pi();return Q.utilities.deepMerge(n,t)}}ie(No,"toolName",void 0),No.toolName="SegmentationDisplay";const Ro=No,Ao=new class{constructor(){ie(this,"_needsRender",new Set),ie(this,"_animationFrameSet",!1),ie(this,"_animationFrameHandle",null),ie(this,"hasBeenDestroyed",void 0),ie(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=xi(e);if(!t)return void console.warn("No tool group found with toolGroupId: ".concat(e));const{viewportsInfo:n}=t,i=n.map((e=>{let{viewportId:t,renderingEngineId:n}=e;const i=(0,Q.getRenderingEngine)(n);if(!i)return void console.warn("rendering Engine has been destroyed");return i.getViewport(t)||void 0})).filter(Boolean),o=t.getToolInstance(Ro.toolName);function a(e){const{element:t,viewportId:n,renderingEngineId:i}=e.detail;t.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,a);const o=Mi(n,i);if(!o)return void console.warn("toolGroup has been destroyed");const r={toolGroupId:o.id,viewportId:n};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_RENDERED,{...r})}o?(i.forEach((e=>{let{element:t}=e;t.addEventListener(Q.Enums.Events.IMAGE_RENDERED,a)})),o.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 ko(e){Ao.renderToolGroupSegmentations(e)}const Lo=ko;function Uo(e){var t;const n=e.detail,{viewportId:i,renderingEngineId:o}=n,{viewport:a}=(0,Q.getEnabledElementByIds)(i,o),r=Mi(i,o);if(!r)return;let s=bt(r.id)||[];if(s=s.filter((e=>e.type===at.Labelmap)),null===(t=s)||void 0===t||!t.length)return;const l={};s.forEach((e=>{const t=It(e.segmentationId);if(!t)return;const n=t.representationData[at.Labelmap];if(Oi(n))return;const{imageIdReferenceMap:i}=n;l[e.segmentationRepresentationUID]={imageIdReferenceMap:i}}));const d=Object.keys(l),c=a.getCurrentImageId(),h=a.getActors();h.find((e=>!!d.includes(e.uid)))?h.forEach((t=>{if(!d.includes(t.uid))return;const n=t.actor,{imageIdReferenceMap:i}=l[t.uid],o=i.get(c),s=n.getMapper().getInputData();if(!o){const e=Di().newInstance({name:"Pixels",numberOfComponents:1,values:new Uint8Array(s.getNumberOfPoints())}),t=yi().newInstance();return t.getPointData().setScalars(e),void n.getMapper().setInputData(t)}const h=Q.cache.getImage(o),{dimensions:g,spacing:u,direction:v}=a.getImageDataMetadata(h),m=Q.cache.getImage(c),{origin:p}=a.getImageDataMetadata(m),f=p;if(s.setOrigin(f),s.modified(),s.getDimensions()[0]!==g[0]||s.getDimensions()[1]!==g[1])return a.removeActors([t.uid]),a.addImages([{imageId:o,actorUID:t.uid,callback:e=>{let{imageActor:t}=e;const n=Di().newInstance({name:"Pixels",numberOfComponents:1,values:[...h.getPixelData()]}),i=yi().newInstance();i.setDimensions(g[0],g[1],1),i.setSpacing(u),i.setDirection(v),i.setOrigin(f),i.getPointData().setScalars(n),t.getMapper().setInputData(i)}}],!0,!1),void Lo(r.id);Q.utilities.updateVTKImageDataWithCornerstoneImage(s,h),a.render(),e.type===Q.Enums.Events.IMAGE_RENDERED&&a.element.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo)})):Lo(r.id)}const Vo={enable:function(e){const{viewport:t}=(0,Q.getEnabledElement)(e);t instanceof Q.StackViewport&&(e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Uo),e.addEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo))},disable:function(e){const{viewport:t}=(0,Q.getEnabledElement)(e);t instanceof Q.StackViewport&&(e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Uo),e.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo))}};function Wo(e,t){if(Ge.svgNodeCache[e])return Ge.svgNodeCache[e][t]?Ge.svgNodeCache[e][t].domRef:void 0}function Fo(e,t,n,i){if(!Ge.svgNodeCache[t])return null;Ge.svgNodeCache[t][i]={touched:!0,domRef:n},e.appendChild(n)}function Ho(e,t){Ge.svgNodeCache[e]&&Ge.svgNodeCache[e][t]&&(Ge.svgNodeCache[e][t].touched=!0)}function Bo(e,t){Ge.svgNodeCache[t]&&Object.keys(Ge.svgNodeCache[t]).forEach((n=>{const i=Ge.svgNodeCache[t][n];!i.touched&&i.domRef&&(e.removeChild(i.domRef),delete Ge.svgNodeCache[t][n])}))}const Go=function(e,t){const n=function(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n,renderingEngineId:i}=t,o="".concat(n,":").concat(i),a=function(e){const t=".".concat("viewport-element");return e.querySelector(t).querySelector(":scope > .svg-layer")}(e);return Object.keys(Ge.svgNodeCache[o]).forEach((e=>{Ge.svgNodeCache[o][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:Ge.svgNodeCache,getSvgNode:Wo.bind(this,o),appendNode:Fo.bind(this,a,o),setNodeTouched:Ho.bind(this,o),clearUntouched:Bo.bind(this,a,o)}}(e);t(n),n.clearUntouched()};function qo(e,t){const n=(0,Q.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n];if(i&&t.includes(i.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:jo,Passive:zo,Enabled:Ko}=je,Yo=new class{constructor(){ie(this,"hasBeenDestroyed",void 0),ie(this,"_needsRender",new Set),ie(this,"_animationFrameSet",!1),ie(this,"_animationFrameHandle",null),ie(this,"_viewportElements",void 0),ie(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))return this._animationFrameSet=!1,void(this._animationFrameHandle=null)}})),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,Q.getEnabledElement)(e);if(!t)return void console.warn("Element has been disabled");if(!(0,Q.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=qo(e,[jo,zo,Ko]),{renderingEngineId:i,viewportId:o}=t,a={element:e,renderingEngineId:i,viewportId:o};Go(e,(i=>{let o=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,i);o=o||n}})),o&&(0,Q.triggerEvent)(e,te.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},Xo=function(e){Yo.renderViewport(e)},Jo=function(e){Xo(e.detail.element)},Zo={enable:function(e){e.addEventListener(Q.Enums.Events.IMAGE_RENDERED,Jo)},disable:function(e){e.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Jo)}};function $o(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.mouseButton===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:Qo,Passive:ea,Enabled:ta}=je,na=function(e){$o(e,[Qo,ea,ta]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},ia={enable:function(e){e.addEventListener(Q.Enums.Events.CAMERA_MODIFIED,na)},disable:function(e){e.removeEventListener(Q.Enums.Events.CAMERA_MODIFIED,na)}},{Active:oa,Passive:aa,Enabled:ra}=je,sa=function(e){$o(e,[oa,aa,ra]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},la={enable:function(e){e.addEventListener(Q.Enums.Events.IMAGE_SPACING_CALIBRATED,sa)},disable:function(e){e.removeEventListener(Q.Enums.Events.IMAGE_SPACING_CALIBRATED,sa)}},{Active:da}=je;function ca(e,t,n){if(Ge.isInteractingWithTool)return!1;const{renderingEngineId:i,viewportId:o}=n.detail,a=Mi(o,i);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n],o=a.getToolInstance(n);if(i.mode===da&&"function"==typeof o[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const ha=ca.bind(null,"Mouse","mouseClickCallback");function ga(e,t,n){const i="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,o=[];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,i);if(r){o.push({tool:a,annotation:t,handle:r});break}}})),o}function ua(e,t){const n=[];for(let o=0;o<t.length;o++){var i;const a=t[o];if(!a){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let r=$e(a.constructor.toolName,e);null!==(i=r)&&void 0!==i&&i.length&&("function"==typeof a.filterInteractableAnnotationsForElement&&(r=a.filterInteractableAnnotationsForElement(e,r)),r.length>0&&n.push({tool:a,annotations:r}))}return n}function va(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const o="touch"===i?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,o,i)){a.push({tool:r,annotation:t});break}})),a}var ma=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}(ma||{}),pa=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}(pa||{});const fa=e=>e.shiftKey?e.ctrlKey?pa.ShiftCtrl:e.altKey?pa.ShiftAlt:e.metaKey?pa.ShiftMeta:pa.Shift:e.ctrlKey?e.altKey?pa.CtrlAlt:e.metaKey?pa.CtrlMeta:pa.Ctrl:e.altKey?e.metaKey&&pa.AltMeta||pa.Alt:e.metaKey?pa.Meta:void 0,{Active:Ea}=je;function wa(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=fa(i)||bi.getModifierKey(),a=Mi(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===(i?i.buttons:s)&&e.modifierKey===o));if(n.mode===Ea&&l)return a.getToolInstance(t)}}const{Active:Ia,Passive:_a}=je;const{Active:Ca,Passive:ba}=je;function Ta(e){if(Ge.isInteractingWithTool)return;const t=wa(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,i=[...$o(e,[Ca],e.detail.event.buttons)||[],...(n?$o(e,[ba]):void 0)||[]];if(function(e){if(Ge.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{canvas:o}=t.currentPoints;if(!i)return!1;const a=function(e,t){var n;const i=new Map,{renderingEngineId:o,viewportId:a}=e.detail,r=Mi(a,o);if(!r)return i;const s=Object.keys(r.toolOptions),l=r.getDefaultMousePrimary(),d=e.detail.event,c=null!==(n=null==d?void 0:d.buttons)&&void 0!==n?n:l,h=fa(d)||bi.getModifierKey();for(let e=0;e<s.length;e++){var g,u;const n=s[e],o=r.getToolInstance(n),a=null!==(g=null===(u=o.configuration)||void 0===u?void 0:u.actions)&&void 0!==g?g:{},l=Object.values(a);if(null==l||!l.length||!t.includes(o.mode))continue;const d=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===c&&e.modifierKey===h))));d&&i.set(o,d)}return i}(e,[Ia,_a]),r=va(n,ua(n,Array.from(a.keys())),o);if(r.length>0){const{tool:t,annotation:n}=r[0],i=a.get(t);return("string"==typeof i.method?t[i.method]:i.method).call(t,e,n),!0}return!1}(e))return;const o=e.detail,{element:a}=o,r=ua(a,i),s=o.currentPoints.canvas,l=ga(a,r,s,"mouse"),d=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:i}=Da(l);return Sa(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Mouse")}const c=va(a,r,s,"mouse");if(c.length>0){const{tool:t,annotation:n}=Da(c);return Sa(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function Da(e){return e.length>1&&e.find((e=>!ce(e.annotation)&&Pe(e.annotation.annotationUID)))||e[0]}function Sa(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?be(e)?we(e,!1):we(e,!0,!0):we(e,!0,!1)}function ya(e){if(Ge.isInteractingWithTool)return;const t=wa(e);t&&!Ge.isMultiPartToolActive&&t.addNewAnnotation&&we(t.addNewAnnotation(e,"mouse").annotationUID)}const Ma=ca.bind(null,"Mouse","doubleClickCallback");function Oa(e){if(Ge.isInteractingWithTool)return;const t=wa(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:xa,Passive:Pa}=je;function Na(e){if(Ge.isInteractingWithTool||Ge.isMultiPartToolActive)return;const t=$o(e,[xa,Pa]),n=e.detail,{element:i}=n,o=ua(i,t),a=t.filter((e=>!o.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of o)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&Xo(i)}const Ra=ca.bind(null,"Mouse","mouseUpCallback"),Aa=ca.bind(null,"MouseWheel","mouseWheelCallback"),ka={enable:function(e){e.addEventListener(te.MOUSE_CLICK,ha),e.addEventListener(te.MOUSE_DOWN,Ta),e.addEventListener(te.MOUSE_DOWN_ACTIVATE,ya),e.addEventListener(te.MOUSE_DOUBLE_CLICK,Ma),e.addEventListener(te.MOUSE_DRAG,Oa),e.addEventListener(te.MOUSE_MOVE,Na),e.addEventListener(te.MOUSE_UP,Ra),e.addEventListener(te.MOUSE_WHEEL,Aa)},disable:function(e){e.removeEventListener(te.MOUSE_CLICK,ha),e.removeEventListener(te.MOUSE_DOWN,Ta),e.removeEventListener(te.MOUSE_DOWN_ACTIVATE,ya),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,Ma),e.removeEventListener(te.MOUSE_DRAG,Oa),e.removeEventListener(te.MOUSE_MOVE,Na),e.removeEventListener(te.MOUSE_UP,Ra),e.removeEventListener(te.MOUSE_WHEEL,Aa)}},{Active:La}=je;function Ua(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=en.mouseButton,o=bi.getModifierKey(),a=Mi(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===La&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(null!=i?i:s)&&e.modifierKey===o))))return a.getToolInstance(t)}}function Va(e){const t=Ua(e);if(t){const{renderingEngineId:n,viewportId:i}=e.detail,o=Mi(i,n),a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);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 i=r[e],o=a.getToolInstance(i),d=null===(l=o.configuration)||void 0===l?void 0:l.actions;if(!d)continue;const c=Object.values(d);if(null==c||!c.length||!t.includes(o.mode))continue;const h=c.find((e=>e.bindings.some((e=>e.key===s))));h&&n.set(o,h)}return n}(e,[je.Active]);if(null!=n&&n.size){const{element:t}=e.detail;for(const[e,i]of[...n.entries()])("function"==typeof i.method?i.method:e[i.method]).call(e,t,i)}}function Wa(e){const t=Ua(e);if(!t)return;const{renderingEngineId:n,viewportId:i}=e.detail,o=Mi(i,n);Ii();const a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const Fa={enable:function(e){e.addEventListener(te.KEY_DOWN,Va),e.addEventListener(te.KEY_UP,Wa)},disable:function(e){e.removeEventListener(te.KEY_DOWN,Va),e.removeEventListener(te.KEY_UP,Wa)}},{Active:Ha}=je;function Ba(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=Mi(n,t);if(!o)return null;const a=Object.keys(o.toolOptions),r=Object.keys(i.touches).length,s=fa(i)||bi.getModifierKey(),l=o.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=o.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Ha&&i)return o.getToolInstance(t)}}function Ga(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.numTouchPoints===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:qa,Passive:ja}=je;function za(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,i=[...Ga(e,[qa],Object.keys(e.detail.event.touches).length)||[],...(n?Ga(e,[ja]):void 0)||[],t],o=e.detail,{element:a}=o,r=ua(a,i),s=o.currentPoints.canvas,l=ga(a,r,s,"touch");if(l.length>0){const{tool:t,annotation:n,handle:i}=Ka(l);return Ya(n.annotationUID,!1),void t.handleSelectedCallback(e,n,i,"Touch")}const d=va(a,r,s,"touch");if(d.length>0){const{tool:t,annotation:n}=Ka(d);return Ya(n.annotationUID,!1),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Ka(e){return e.length>1&&e.find((e=>!ce(e.annotation)&&Pe(e.annotation.annotationUID)))||e[0]}function Ya(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?be(e)?we(e,!1):we(e,!0,!0):we(e,!0,!1)}function Xa(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);t&&!Ge.isMultiPartToolActive&&t.addNewAnnotation&&we(t.addNewAnnotation(e,"touch").annotationUID)}function Ja(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const Za=ca.bind(null,"Touch","touchEndCallback"),$a=ca.bind(null,"Touch","touchTapCallback"),Qa=ca.bind(null,"Touch","touchPressCallback"),er={enable:function(e){e.addEventListener(te.TOUCH_START,za),e.addEventListener(te.TOUCH_START_ACTIVATE,Xa),e.addEventListener(te.TOUCH_DRAG,Ja),e.addEventListener(te.TOUCH_END,Za),e.addEventListener(te.TOUCH_TAP,$a),e.addEventListener(te.TOUCH_PRESS,Qa)},disable:function(e){e.removeEventListener(te.TOUCH_START,za),e.removeEventListener(te.TOUCH_START_ACTIVATE,Xa),e.removeEventListener(te.TOUCH_DRAG,Ja),e.removeEventListener(te.TOUCH_END,Za),e.removeEventListener(te.TOUCH_PRESS,Qa)}};function tr(e){const{element:t,viewportId:n}=e.detail,i=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),i="svg-layer-".concat(e);n.classList.add("svg-layer"),n.setAttribute("id",i),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 o=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(i)),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),o.appendChild(a),n.appendChild(o),n}(n);var o;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i="".concat(t,":").concat(n);Ge.svgNodeCache[i]={}}(t),o=i,t.querySelector("div.viewport-element").appendChild(o),Yo.addViewportElement(n,t),En.enable(t),_n.enable(t),vi.enable(t),bi.enable(t),Vo.enable(t),Zo.enable(t),ia.enable(t),la.enable(t),ka.enable(t),Fa.enable(t),er.enable(t),Ge.enabledElements.push(t)}const nr=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let i=0;i<Ge.synchronizers.length;i++){const o=Ge.synchronizers[i],a=!o.isDisabled(),r=o.hasSourceViewport(t,e),s=o.hasTargetViewport(t,e);a&&(r||s)&&n.push(o)}return n},ir=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i="".concat(t,":").concat(n);delete Ge.svgNodeCache[i]}(t),function(e){const t=e.querySelector("div.".concat("viewport-element")),n=t.querySelector("svg");n&&t.removeChild(n)}(t),Yo.removeViewportElement(n,t),En.disable(t),_n.disable(t),vi.disable(t),bi.disable(t),Vo.disable(t),Zo.disable(t),ia.disable(t),la.disable(t),ka.disable(t),Fa.disable(t),er.disable(t),(e=>{const t=(0,Q.getEnabledElement)(e);nr(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,Q.getEnabledElement)(e),i=Mi(n,t);i&&i.removeViewports(t,n)})(t),function(e){const t=Ge.enabledElements.findIndex((t=>t===e));t>-1&&Ge.enabledElements.splice(t,1)}(t)},or=function(e,t){t.length&&t.forEach((t=>{const{element:n}=e.getViewport(t);Xo(n)}))},ar=function(e){const{viewportId:t,renderingEngineId:n}=e.detail,i=(0,Q.getRenderingEngine)(n);or(i,[t])},rr=function(e){e.detail.removed.length&&(0,Q.getRenderingEngines)().forEach((e=>{const t=e.getViewports().map((e=>e.id));or(e,t)}))},sr=function(e){const{segmentationId:t}=e.detail;Dt(t).forEach((e=>{bt(e).forEach((n=>{n.segmentationId===t&&mt(e,n.segmentationRepresentationUID)}))}))},lr=function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail,{representationData:i,type:o}=It(t),a=Dt(t);if(o!==at.Labelmap)throw new Error("onSegmentationDataModified: representationType ".concat(o," not supported yet"));if(Oi(i[o])){const e=Q.cache.getVolume(i[o].volumeId);if(!e)return void console.warn("segmentation not found in cache");const{imageData:t,vtkOpenGLTexture:a}=e;let r;if(n&&Array.isArray(n))r=n;else{const e=t.getDimensions()[2];r=[...Array(e).keys()]}r.forEach((e=>{a.setUpdatedFrame(e)})),t.modified()}else a.forEach((e=>{const n=bt(e),a=xi(e).getViewportsInfo();n.forEach((e=>{e.segmentationId===t&&a.forEach((t=>{let{viewportId:n,renderingEngineId:a}=t;const r=(0,Q.getEnabledElementByIds)(n,a).viewport,s=r.getActor(e.segmentationRepresentationUID);if(!s)return;const l=r.getCurrentImageId(),d=s.actor.getMapper().getInputData(),{imageIdReferenceMap:c}=i[o],h=c.get(l),g=Q.cache.getImage(h);d.modified(),Q.utilities.updateVTKImageDataWithCornerstoneImage(d,g)}))}))}));a.forEach((e=>{Lo(e)}))},dr=function(e){const{toolGroupId:t}=e.detail;Lo(t)},cr=function(e){const{toolGroupId:t,segmentationRepresentationUID:n}=e.detail;Lo(t)},hr=function(e,t,n){const i=bt(e);if(!i||0===i.length)return;const o=i.map((e=>e.segmentationRepresentationUID));let a=t;if(a){const e=t.filter((e=>!o.includes(e)));if(e.length>0)throw new Error("The following segmentationRepresentationUIDs are not part of the toolGroup: ".concat(JSON.stringify(e)))}else a=o;a.forEach((t=>{!function(e,t,n){const i=kt(e,t),{type:o}=i;if(o===at.Labelmap)Po.removeSegmentationRepresentation(e,t,n);else{if(o!==at.Contour)throw new Error("The representation ".concat(o," is not supported yet"));Io.removeSegmentationRepresentation(e,t,n)}}(e,t,n)}))},gr=function(e){const t=Ge.toolGroups.findIndex((t=>t.id===e));t>-1&&(Ao.removeToolGroup(e),hr(e),Ge.toolGroups.splice(t,1))},ur=function(){const e=[...Ge.toolGroups];for(const t of e)gr(t.id);Ge.toolGroups=[]};let vr=!1;function mr(){vr||(function(){fr();const e=Q.Enums.Events.ELEMENT_ENABLED,t=Q.Enums.Events.ELEMENT_DISABLED;Q.eventTarget.addEventListener(e,tr),Q.eventTarget.addEventListener(t,ir)}(),Er(),Q.eventTarget.addEventListener(te.ANNOTATION_MODIFIED,ar),Q.eventTarget.addEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.addEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.addEventListener(te.SEGMENTATION_MODIFIED,sr),Q.eventTarget.addEventListener(te.SEGMENTATION_DATA_MODIFIED,lr),Q.eventTarget.addEventListener(te.SEGMENTATION_REPRESENTATION_MODIFIED,dr),Q.eventTarget.addEventListener(te.SEGMENTATION_REPRESENTATION_REMOVED,cr),vr=!0)}function pr(){fr(),Er(),ur(),He={},Ge=ae()(Be);const e=Xe(),t=wt();e.restoreAnnotations({}),t.resetState(),vr=!1}function fr(){const e=Q.Enums.Events.ELEMENT_ENABLED,t=Q.Enums.Events.ELEMENT_DISABLED;Q.eventTarget.removeEventListener(e,tr),Q.eventTarget.removeEventListener(t,ir)}function Er(){Q.eventTarget.removeEventListener(te.ANNOTATION_MODIFIED,ar),Q.eventTarget.removeEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.removeEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.removeEventListener(te.SEGMENTATION_MODIFIED,sr),Q.eventTarget.removeEventListener(te.SEGMENTATION_DATA_MODIFIED,lr),Q.eventTarget.removeEventListener(te.SEGMENTATION_REPRESENTATION_MODIFIED,dr),Q.eventTarget.removeEventListener(te.SEGMENTATION_REPRESENTATION_REMOVED,cr)}function wr(e){const t=e.toolName,n=void 0!==Ge.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"));Ge.tools[t]={toolClass:e}}function Ir(e){const t=e.toolName;if(!t)throw new Error("No tool found for: ".concat(e.name));if(void 0===!Ge.tools[t])throw new Error("".concat(t," cannot be removed because it has not been added"));delete Ge.tools[t]}function _r(e){const t=ua(e,qo(e,[je.Active,je.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function Cr(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function br(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const Tr=class{constructor(e,t,n,i){ie(this,"_enabled",void 0),ie(this,"_eventName",void 0),ie(this,"_auxiliaryEventNames",void 0),ie(this,"_eventHandler",void 0),ie(this,"_ignoreFiredEvents",void 0),ie(this,"_sourceViewports",void 0),ie(this,"_targetViewports",void 0),ie(this,"_viewportOptions",{}),ie(this,"_options",void 0),ie(this,"id",void 0),ie(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=(0,Q.getEnabledElement)(e.currentTarget);if(!t)return;const{renderingEngineId:n,viewportId:i}=t;this._sourceViewports.find((e=>e.viewportId===i))&&this.fireEvent({renderingEngineId:n,viewportId:i},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},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}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(br(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,i=(0,Q.getRenderingEngine)(t).getViewport(n);if(!i)return void console.warn("Synchronizer.addSource: No viewport for ".concat(t," ").concat(n));const o=i.element;o.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{o.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){br(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=Cr(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,Q.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=Cr(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return br(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return br(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i<this._targetViewports.length;i++){const o=this._targetViewports[i];if(e.viewportId===o.viewportId)continue;const a=this._eventHandler(this,e,o,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=[],i=e.concat(t);for(let e=0;e<i.length;e++){const t=i[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,Q.getRenderingEngine)(e.renderingEngineId).getViewport(e.viewportId);if(!t)return;const{element:i}=t;i.removeEventListener(Q.Enums.Events.ELEMENT_DISABLED,n),i.addEventListener(Q.Enums.Events.ELEMENT_DISABLED,n)}))}},Dr=function(e,t,n,i){if(Ge.synchronizers.some((t=>t.id===e)))throw new Error("Synchronizer with id '".concat(e,"' already exists."));const o=new Tr(e,t,n,i);return Ge.synchronizers.push(o),o},Sr=function(){for(;Ge.synchronizers.length>0;)Ge.synchronizers.pop().destroy()},yr=function(e){return Ge.synchronizers.find((t=>t.id===e))},Mr=function(){return Ge.synchronizers},Or=function(e){const t=Ge.synchronizers.findIndex((t=>t.id===e));t>-1&&(Ge.synchronizers[t].destroy(),Ge.synchronizers.splice(t,1))};var xr=C(485),Pr=C.n(xr);const Nr=Symbol("DefinedCursors"),Rr=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 Ar{constructor(e,t){ie(this,"name",void 0),ie(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof Ar?"".concat(e,", ").concat(t.getStyleProperty()):e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=kr(Ar,Nr);let n=t.get(e);return n instanceof Ar?n:Rr.has(e)?(n=new Ar(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof Ar&&(kr(Ar,Nr).set(e,t),!0)}}function kr(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const Lr=Rr.values();var Ur=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e}(Ur||{});const Vr=Ur;class Wr extends Ar{constructor(e,t,n,i,o){super(i||Wr.getUniqueInstanceName("image-cursor"),o),ie(this,"url",void 0),ie(this,"x",void 0),ie(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 i="url('".concat(e,"')");return t>=0&&n>=0&&(t>0||n>0)&&(i+=" ".concat(t," ").concat(n)),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return"".concat(e,"-").concat(Q.utilities.getRuntimeId(Wr))}}const Fr={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 '},Hr={x:127,y:60},Br='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',Gr='\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',qr='<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)"/>',jr='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',zr='<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)"/>',Kr={Angle:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{iconContent:"".concat(qr," ").concat(Br),viewBox:Hr}),SegmentationFreeHandFillInside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Gr),viewBox:Hr}),SegmentationFreeHandEraseOutside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Br),viewBox:Hr}),SegmentationFreeHandFillOutside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Gr),viewBox:Hr}),SegmentationRectangleEraseInside:Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),RectangleScissor:Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.FILL_INSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.FILL_OUTSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.ERASE_OUTSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),"RectangleScissor.ERASE_INSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),CircleScissor:Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr}),"CircleScissor.FILL_INSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr}),"CircleScissor.ERASE_OUTSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Br),viewBox:Hr}),"CircleScissor.FILL_OUTSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr})};function Yr(e,t){return Object.assign(Object.create(e),t)}function Xr(e,t,n){Kr[e]=Yr(Fr,{iconContent:t,viewBox:n})}const Jr=Object.keys(Kr),Zr=new class{constructor(){ie(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:i,toolGroupId:o,toolName:a}=t;return this._getToolStyle(e,n,i,o,a)}_getToolStyle(e,t,n,i,o){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[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(i){const t=this.getToolGroupToolStyles(i);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[o]&&void 0!==a[o][e]?a[o][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 $r(e,t,n,i){const o=function(e,t,n){const i=["".concat(e)];return t&&i.push("".concat(i[0]).concat(t)),n&&i.push("".concat(i[i.length-1]).concat(n)),i}(e,n,i);for(let e=o.length-1;e>=0;--e){const n=Zr.getStyleProperty(o[e],t);if(void 0!==n)return n}}const Qr=Vr.Highlighted,es=je.Active;class ts extends Wr{constructor(e,t,n,i,o){super(e,t,n,i,o)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=$r("color",{},Qr,es));const i=function(e,t,n){return"".concat(t?"pointer":"cursor",":").concat(e,"/").concat(n)}(e,t,n);let o=super.getDefinedCursor(i);if(!o){const a=function(e){return Kr[e]}(e);a&&(o=function(e,t,n,i,o){const{x:a,y:r}=e.mousePoint;return new ts(function(e,t,n){return URL.createObjectURL(function(e,t,n){const i=(t?os:is)(e,n);return new Blob([i],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:i}),a,r,t,o)}(a,i,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(i,o))}return o}}function ns(e,t){const n=Object(t),i=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>i(t)?n[t]+"":""))}function is(e,t){const{iconContent:n,iconSize:i,viewBox:o}=e;return ns('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(i,'" height="').concat(i,'" viewBox="0 0\n ').concat(o.x," ").concat(o.y,'">\n ').concat(n,"\n </svg>"),t)}function os(e,t){const{iconContent:n,iconSize:i,viewBox:o,mousePointerGroupString:a}=e,r=i/Math.max(o.x,o.y,1),s=16+i;return ns('\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 as=Symbol("ElementCursorsMap");function rs(e,t){cs(e)[0]=t,ss(e,t)}function ss(e,t){const n=cs(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof Ar?t:Ar.getDefinedCursor("auto")).getStyleProperty()}function ls(e){ss(e,cs(e)[1])}function ds(e){ss(e,Ar.getDefinedCursor("none"))}function cs(e){let t=cs[as];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(cs,as,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}const{Active:hs,Passive:gs,Enabled:us,Disabled:vs}=je;class ms{constructor(e){ie(this,"id",void 0),ie(this,"viewportsInfo",[]),ie(this,"toolOptions",{}),ie(this,"restoreToolOptions",{}),ie(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,")."))}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ge.tools[e],i=void 0!==e&&""!==e,o=this.toolOptions[e];if(!i)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(o)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 i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=null===(n=Ge.tools[e])||void 0===n?void 0:n.toolClass;if(!o){const n=Ge.tools[t].toolClass;class i extends n{}i.toolName=e,o=i,Ge.tools[e]={toolClass:i}}this.addTool(o.toolName,i)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,Q.getRenderingEngines)();if(!t&&n.length>1)throw new Error("You must specify a renderingEngineId when there are multiple rendering engines.");const i=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:i});const o=this.getActivePrimaryMouseButtonTool();Q.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(o)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((i,o)=>{let a=!1;i.renderingEngineId===e&&(a=!0,t&&i.viewportId!==t&&(a=!1)),a&&n.push(o)})),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 i={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,i=void 0!==t.mouseButton;return e.some((e=>{return i=t,(n=e).mouseButton===i.mouseButton&&n.modifierKey===i.modifierKey;var n,i}))||!n&&!i||e.push(t),e}),[]),mode:hs};this.toolOptions[e]=i,this._toolInstances[e].mode=hs;const o=Q.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&o)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&o){const e=Ar.getDefinedCursor("default");this._setCursorForViewports(e)}"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,Q.triggerEvent)(Q.eventTarget,te.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,hs,t)}setToolPassive(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=this.getToolOptions(e),i=Object.assign({bindings:n?n.bindings:[]},n,{mode:gs}),o=this.getDefaultMousePrimary();i.bindings=i.bindings.filter((e=>e.mouseButton!==o||e.modifierKey));let a=gs;0!==i.bindings.length&&(a=hs,i.mode=a),this.toolOptions[e]=i,t.mode=a,"function"==typeof t.onSetToolPassive&&t.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,gs)}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:us};this.toolOptions[e]=n,t.mode=us,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,us)}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:vs};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=vs,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,vs)}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===hs&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,i;return t&&(n="".concat(e,".").concat(t),i=ts.getDefinedCursor(n,!0),i)?i:(n="".concat(e),i=ts.getDefinedCursor(n,!0),i||(n=e,i=ts.getDefinedCursor(n,!0),i||Ar.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const o=(0,Q.getEnabledElementByIds)(i,n);if(!o)return;const{viewport:a}=o;rs(a.element,e)}))}setToolConfiguration(e,t,n){if(void 0===this._toolInstances[e])return console.warn("Tool ".concat(e," not present, can't set tool configuration.")),!1;let i;return i=n?t:Object.assign(this._toolInstances[e].configuration,t),this._toolInstances[e].configuration=i,this._renderViewports(),!0}getDefaultMousePrimary(){return ma.Primary}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=Pr()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return ae()(n)}clone(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=xi(e);return i?(console.warn("ToolGroup ".concat(e," already exists")),i):(i=ps(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],o=this.toolOptions[e],a=n.mode;i.addTool(e),i.setToolMode(e,a,{bindings:null!==(t=o.bindings)&&void 0!==t?t:[]})})),i)}_hasMousePrimaryButtonBinding(e){var t;const n=this.getDefaultMousePrimary();return null==e||null===(t=e.bindings)||void 0===t?void 0:t.some((e=>e.mouseButton===n&&void 0===e.modifierKey))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,Q.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const i={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,Q.triggerEvent)(Q.eventTarget,te.TOOL_MODE_CHANGED,i)}}const ps=function(e){if(Ge.toolGroups.some((t=>t.id===e)))return void console.warn("'".concat(e,"' already exists."));const t=new ms(e);return Ge.toolGroups.push(t),t},fs=function(){return Ge.toolGroups},Es=[[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 ws(e,t,n,i){const{camera:o}=i.detail,a=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId);r.setCamera(o),r.render()}const{CAMERA_MODIFIED:Is}=Q.Enums.Events;function _s(e){return Dr(e,Is,ws)}function Cs(e,t,n,i,o){const a=i.detail,{volumeId:r,range:s,invertStateChanged:l,invert:d}=a,c=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!c)throw new Error("Rendering Engine does not exist: ".concat(n.renderingEngineId));const h=c.getViewport(n.viewportId),g={voiRange:s};if(null!=o&&o.syncInvertState&&l&&(g.invert=d),h instanceof Q.BaseVolumeViewport)h.setProperties(g,r);else{if(!(h instanceof Q.StackViewport))throw new Error("Viewport type not supported.");h.setProperties(g)}h.render()}function bs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{syncInvertState:!0};return Dr(e,Q.Enums.Events.VOI_MODIFIED,Cs,t)}function Ts(e,t,n){const i=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const o=e.getOptions(n.viewportId),a=i.getViewport(n.viewportId),r=i.getViewport(t.viewportId);if(!1!==(null==o?void 0:o.syncZoom)){const e=r.getZoom();a.setZoom(e)}if(!1!==(null==o?void 0:o.syncPan)){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:Ds}=Q.Enums.Events;function Ss(e){return Dr(e,Ds,Ts)}var ys=C(976);const Ms=function(e,t,n){return Math.min(Math.max(t,e),n)};function Os(e,t){if(!(0,Q.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof Q.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{type:n}=e,{volumeId:i,delta:o,scrollSlabs:a}=t;if(e instanceof Q.StackViewport)e.scroll(o,t.debounceLoading,t.loop);else if(e instanceof Q.VolumeViewport)!function(e,t,n){const i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:r}=Q.utilities.getVolumeViewportScrollInfo(e,t,i);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:d}=r,{focalPoint:c,viewPlaneNormal:h,position:g}=d,{newFocalPoint:u,newPosition:v}=Q.utilities.snapFocalPointToSlice(c,g,s,h,l,n);e.setCamera({focalPoint:u,position:v}),e.render();const m=a+n;if((m>o||m<0)&&e.getCurrentImageId()){const i={volumeId:t,viewport:e,delta:n,desiredStepIndex:m,currentStepIndex:a,numScrollSteps:o,currentImageId:e.getCurrentImageId()};Q.utilities.triggerEvent(Q.eventTarget,Q.EVENTS.VOLUME_SCROLL_OUT_OF_BOUNDS,i)}}(e,i,o,a);else{if(!(e instanceof Q.VideoViewport))throw new Error("Not implemented for Viewport Type: ".concat(n));e.scroll(o)}}const xs=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:i,volumeId:o}=t,a=(0,Q.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 Q.StackViewport)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};if(e instanceof Q.VolumeViewport)return Q.utilities.getImageSliceDataForVolumeViewport(e);throw new Error("Unsupported viewport type")}(r,i),d=function(e,t){return Ms(t,0,e-1)}(l,n);Os(r,{delta:d-s,debounceLoading:i,volumeId:o})},Ps=(e,t)=>Q.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function Ns(e,t,n){const i=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const o=i.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(null!=a&&a.disabled)return;const r=i.getViewport(n.viewportId),s=o.getCurrentImageId(),l=Q.metaData.get("imagePlaneModule",s).imagePositionPatient,d=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:i}=t.getCamera(),o=ys.vec3.dot(n,i);return Math.abs(o)>.9}(o,r))return;let c=Ps(n.viewportId,t.viewportId);if(!c&&(o.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==(null==a?void 0:a.useInitialPosition)?c=ys.mat4.identity(ys.mat4.create()):(Q.utilities.calculateViewportsSpatialRegistration(o,r),c=Ps(n.viewportId,t.viewportId)),!c))return;const h=ys.vec3.transformMat4(ys.vec3.create(),l,c),g=(u=h,d.reduce(((e,t,n)=>{const{imagePositionPatient:i}=Q.metaData.get("imagePlaneModule",t),o=ys.vec3.distance(i,u);return o<e.distance?{distance:o,index:n}:e}),{distance:1/0,index:-1}));var u;let v=g.index;r instanceof Q.VolumeViewport&&(v=d.length-g.index-1),-1!==g.index&&r.getCurrentImageIdIndex()!==g.index&&await xs(r.element,{imageIndex:v})}const{STACK_NEW_IMAGE:Rs,VOLUME_NEW_IMAGE:As}=Q.Enums.Events;function ks(e){return Dr(e,Rs,Ns,{auxiliaryEventNames:[As]})}const Ls=ks,Us=function(e,t,n){return"".concat(e,"::").concat(t,"::").concat(n)},Vs=function(e,t){Object.keys(e).forEach((n=>{const i=t.getAttribute(n),o=e[n];void 0===o||""===o?t.removeAttribute(n):i!==o&&t.setAttribute(n,o)}))},Ws=function(e,t){Object.keys(e).forEach((n=>{const i=e[n];void 0!==i&&""!==i&&t.setAttribute(n,i)}))},Fs=function(e,t,n,i,o){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:d,lineWidth:c,lineDash:h,fillOpacity:g,strokeOpacity:u}=Object.assign({color:"dodgerblue",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),v=c||d,m=Us(t,"circle",n),p=e.getSvgNode(m),f={cx:"".concat(i[0]),cy:"".concat(i[1]),r:"".concat(o),stroke:s,fill:l,"stroke-width":v,"stroke-dasharray":h,"fill-opacity":g,"stroke-opacity":u};if(p)Vs(f,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),Ws(f,t),e.appendNode(t,m)}},Hs=function(e,t,n,i){let o=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:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=Us(t,"ellipse",n),g=e.getSvgNode(h),[u,v,m,p]=i,f=Math.hypot(m[0]-p[0],m[1]-p[1]),E=Math.hypot(v[0]-u[0],v[1]-u[1]),w=180*Math.atan2(m[1]-p[1],m[0]-p[0])/Math.PI,I=[(m[0]+p[0])/2,(v[1]+u[1])/2],_=f/2,C=E/2,b={cx:"".concat(I[0]),cy:"".concat(I[1]),rx:"".concat(_),ry:"".concat(C),stroke:r,fill:"transparent",transform:"rotate(".concat(w," ").concat(I[0]," ").concat(I[1],")"),"stroke-width":c,"stroke-dasharray":d};if(g)Vs(b,g),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),Ws(b,t),e.appendNode(t,h)}},Bs=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(i[0]+o[0])/2,i[1]],l=[(i[0]+o[0])/2,o[1]],d=[i[0],(i[1]+o[1])/2],c=[o[0],(i[1]+o[1])/2];Hs(e,t,n,[l,s,d,c],a={},r="")},Gs=function(e,t,n,i){let o=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:d,fill:c,type:h,opacity:g}=Object.assign({color:"dodgerblue",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},o),u=d||l,v=Us(t,"handle","hg-".concat(n,"-index-").concat(a));let m;if("circle"===h)m={cx:"".concat(i[0]),cy:"".concat(i[1]),r:s,stroke:r,fill:c,"stroke-width":u,opacity:g};else{if("rect"!==h)throw new Error("Unsupported handle type: ".concat(h));{const e=1.5*parseFloat(s),t=i[0]-.5*e,n=i[1]-.5*e;m={x:"".concat(t),y:"".concat(n),width:"".concat(e),height:"".concat(e),stroke:r,fill:c,"stroke-width":u,rx:"".concat(.1*e),opacity:g}}}const p=e.getSvgNode(v);if(p)Vs(m,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);Ws(m,t),e.appendNode(t,v)}},qs=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};i.forEach(((i,a)=>{Gs(e,t,n,i,o,a)}))};function js(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:s,width:l,lineWidth:d,lineDash:c,shadow:h}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),g=d||l,u=Us(t,"line",n),v=e.getSvgNode(u),m=h?"filter:url(#shadow-".concat(e.svgLayerElement.id,");"):"",p={x1:"".concat(i[0]),y1:"".concat(i[1]),x2:"".concat(o[0]),y2:"".concat(o[1]),stroke:s,style:m,"stroke-width":g,"stroke-dasharray":c};if(v)Vs(p,v),e.setNodeTouched(u);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),Ws(p,t),e.appendNode(t,u)}}function zs(e,t,n,i,o){if(i.length<2)return;const{fillColor:a,fillOpacity:r,color:s,width:l,lineWidth:d,lineDash:c}=Object.assign({color:"dodgerblue",width:"2",fillColor:"none",fillOpacity:0,lineWidth:void 0,lineDash:void 0,connectLastToFirst:!1},o),h=d||l,g=Us(t,"polyline",n),u=e.getSvgNode(g);let v="";for(const e of i)v+="".concat(e[0],", ").concat(e[1]," ");if(o.connectLastToFirst){const e=i[0];v+="".concat(e[0],", ").concat(e[1])}const m={points:v,stroke:s,fill:a,"fill-opacity":r,"stroke-width":h,"stroke-dasharray":c};if(u)Vs(m,u),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");Ws(m,t),e.appendNode(t,g)}}function Ks(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 Ys(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 i=e.getBBox(),o={x:"".concat(i.x),y:"".concat(i.y),width:"".concat(i.width),height:"".concat(i.height),fill:t};return Vs(o,n),i}const Xs=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],o=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:d,background:c}=a;let h;const[g,u]=[o[0]+r,o[1]+r],v=Us(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],o=i[e]||"";t.textContent=o}if(i.length>n.length){for(let e=0;e<i.length-n.length;e++){const o=Ks(i[e+n.length]);t.appendChild(o)}m.appendChild(t),e.appendNode(m,v)}const o={fill:s,"font-size":d,"font-family":l},a={transform:"translate(".concat(g," ").concat(u,")")};Vs(o,t),Vs(a,m),h=Ys(m,c),e.setNodeTouched(v)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform","translate(".concat(g," ").concat(u,")"));const n=function(e,t){const{color:n,fontFamily:i,fontSize:o}=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",i),a.setAttribute("font-size",o),a.setAttribute("style",s),a}(e,a);for(let e=0;e<i.length;e++){const t=Ks(i[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,v),h=Ys(t,c)}return Object.assign({},h,{x:g,y:u,height:h.height+r,width:h.width+r})}(e,t,n,i,o,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function Js(e,t){let n=[0,0],i=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const o=function(e,t){const[n,i]=e,[o,a]=t;return Math.sqrt(Math.pow(n-o,2)+Math.pow(i-a,2))}(t,e);o<i&&(i=o,n=[...e])})),n}const Zs=function(e,t,n,i,o,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),d=Xs(e,t,n,i,o,l);return function(e,t,n,i,o,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=i.length>0?Js(i,o):o,l=Js(function(e){const{x:t,y:n,height:i,width:o}=e,a=o/2,r=i/2;return[[t+a,n],[t,n+r],[t+a,n+i],[t+o,n+r]]}(a),s),d=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r);js(e,t,"link-".concat(n),s,l,d)}(e,t,n,a,o,d,l),d};function $s(e,t,n,i,o){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:d,lineDash:c}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a),h=d||l,g=Us(t,"rect",n),u=e.getSvgNode(g),v=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],m=Math.abs(i[0]-o[0]),p=Math.abs(i[1]-o[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":c};if(u)Vs(f,u),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==r&&t.setAttribute("data-id",r),Ws(f,t),e.appendNode(t,g)}}function Qs(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a);js(e,t,n,i,o,{color:r,width:s,lineWidth:l,lineDash:d});const c=Math.atan2(o[1]-i[1],o[0]-i[0]),h={start:[o[0]-10*Math.cos(c-Math.PI/7),o[1]-10*Math.sin(c-Math.PI/7)],end:o},g={start:[o[0]-10*Math.cos(c+Math.PI/7),o[1]-10*Math.sin(c+Math.PI/7)],end:o};js(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),js(e,t,"3",g.start,g.end,{color:r,width:s,lineWidth:l})}function el(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a),c=l||s,h=Us(t,"rect",n),g=e.getSvgNode(h),u=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],v=Math.abs(i[0]-o[0]),m=Math.abs(i[1]-o[1]),p={x:"".concat(u[0]),y:"".concat(u[1]),width:"".concat(v),height:"".concat(m),stroke:r,fill:"black","stroke-width":c,"stroke-dasharray":d};if(g)Vs(p,g),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");Ws(p,t),e.appendNode(t,h)}}function tl(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const i=(0,Q.getEnabledElement)(e);if(!i)throw new Error("getAnnotationNearPoint: enabledElement not found");return nl(i,t,n)}function nl(e,t,n){const{renderingEngineId:i,viewportId:o}=e,a=Mi(o,i);if(!a)return null;const{_toolInstances:r}=a;for(const i in r){const o=il(r[i],e,t,n);if(o)return o}return null}function il(e,t,n,i){var o;const{viewport:a}=t,r=$e(e.constructor.toolName,null==a?void 0:a.element),s=null==a||null===(o=a.getCurrentImageId)||void 0===o?void 0:o.call(a);if(null!=r&&r.length){const{element:o}=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(o,t,n,i,"")||e.getHandleNearImagePoint(o,t,n,i)))return t}}return null}const ol=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},al=function(e,t,n){let i,o,a,r,s,l,d=0,c=!1,h=!1,g=!0;const u=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const n=i,a=o;return i=o=void 0,d=t,r=e.apply(a,n),r}function m(e,t){return u?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-d>=a}function f(){const e=Date.now();if(p(e))return E(e);s=m(f,function(e){const n=e-d,i=t-(e-l);return h?Math.min(i,a-n):i}(e))}function E(e){return s=void 0,g&&i?v(e):(i=o=void 0,r)}function w(){const e=Date.now(),n=p(e);for(var a=arguments.length,g=new Array(a),u=0;u<a;u++)g[u]=arguments[u];if(i=g,o=this,l=e,n){if(void 0===s)return function(e){return d=e,s=m(f,t),c?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,ol(n)&&(c=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,g="trailing"in n?Boolean(n.trailing):g),w.cancel=function(){void 0!==s&&function(e){if(u)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),d=0,i=l=o=s=void 0},w.flush=function(){return void 0===s?r:E(Date.now())},w.pending=function(){return void 0!==s},w},rl=function(e,t,n){let i=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return ol(n)&&(i="leading"in n?Boolean(n.leading):i,o="trailing"in n?Boolean(n.trailing):o),al(e,t,{leading:i,trailing:o,maxWait:t})},{calibratedPixelSpacingMetadataProvider:sl}=Q.utilities;function ll(e,t,n){"number"==typeof n&&(n={type:Q.Enums.CalibrationTypes.USER,scale:n}),sl.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}const{CalibrationTypes:dl}=Q.Enums,cl="px",hl=[1],gl=["3,3"],ul=["4,3"],vl={3:"cm",4:"seconds"},ml=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=t,o=i?"mm":cl;return n&&(n.type||n.sequenceOfUltrasoundRegions)?n.type===dl.UNCALIBRATED?cl:n.sequenceOfUltrasoundRegions?"US Region":"".concat(o," ").concat(n.type):o},pl="²",fl=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=t,o=(i?"mm":cl)+pl;return n&&n.type?n.sequenceOfUltrasoundRegions?"US Region":"".concat(o," ").concat(n.type):o},El=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},wl=(e,t)=>{const[n,i]=t,{calibration:o,hasPixelSpacing:a}=e;let r=a?"mm":cl;const s=r+pl;let l=1,d="";if(!o||!o.type&&!o.sequenceOfUltrasoundRegions)return{units:r,areaUnits:s,scale:l};if(o.type===dl.UNCALIBRATED)return{units:cl,areaUnits:cl+pl,scale:l};if(o.sequenceOfUltrasoundRegions){var c;let e=o.sequenceOfUltrasoundRegions.filter((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1&&i[0]>=e.regionLocationMinX0&&i[0]<=e.regionLocationMaxX1&&i[1]>=e.regionLocationMinY0&&i[1]<=e.regionLocationMaxY1));if(null===(c=e)||void 0===c||!c.length)return{units:r,areaUnits:s,scale:l};if(e=e.filter((e=>hl.includes(e.regionDataType)&&gl.includes("".concat(e.physicalUnitXDirection,",").concat(e.physicalUnitYDirection)))),!e.length)return{units:cl,areaUnits:cl+pl,scale:l};const t=e[0],a=Math.abs(t.physicalDeltaX),h=Math.abs(t.physicalDeltaY);if(!Q.utilities.isEqual(a,h,.001))return{units:cl,areaUnits:cl+pl,scale:l};l=1/(a*h*100),d="US Region",r="mm"}else o.scale&&(l=o.scale);return{units:r+(d?" ".concat(d):""),areaUnits:s+(d?" ".concat(d):""),scale:l}},Il=(e,t)=>{const[n]=t,{calibration:i}=e;let o=["raw"],a=[null],r="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:o,values:a};if(i.sequenceOfUltrasoundRegions){const e=i.sequenceOfUltrasoundRegions.filter((e=>hl.includes(e.regionDataType)&&ul.includes("".concat(e.physicalUnitXDirection,",").concat(e.physicalUnitYDirection))));if(null==e||!e.length)return{units:o,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:o,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:d,physicalDeltaY:c}=t,h=(n[1]-t.regionLocationMinY0-l)*c;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*d,h],o=[vl[t.physicalUnitXDirection],vl[t.physicalUnitYDirection]]}return{units:o,values:a,calibrationType:r}},_l=e=>{var t;return(null===(t=e.calibration)||void 0===t?void 0:t.aspect)||1};function Cl(e,t,n,i){let o,a,r,s,l,d,c;c=e.getScalarData?e.getScalarData():e.getPointData().getScalars().getData();const h=e.getDimensions();i?[[o,a],[r,s],[l,d]]=i:(o=0,a=h[0],r=0,s=h[1],l=0,d=h[2]);const g=ys.vec3.fromValues(o,r,l),u=e.getDirection(),v=u.slice(0,3),m=u.slice(3,6),p=u.slice(6,9),f=e.getSpacing(),[E,w,I]=f,_=e.indexToWorld(g),C=ys.vec3.fromValues(v[0]*E,v[1]*E,v[2]*E),b=ys.vec3.fromValues(m[0]*w,m[1]*w,m[2]*w),T=ys.vec3.fromValues(p[0]*I,p[1]*I,p[2]*I),D=c.length/h[2]/h[1]/h[0],S=h[0]*D,y=h[1]*S,M=[],O=ys.vec3.clone(_);for(let e=l;e<=d;e++){const i=ys.vec3.clone(O);for(let i=r;i<=s;i++){const r=ys.vec3.clone(O);for(let r=o;r<=a;r++){const o=[r,i,e];if(t(O,o)){const t=e*y+i*S+r*D;let a;a=D>2?[c[t],c[t+1],c[t+2]]:c[t],M.push({value:a,index:t,pointIJK:o,pointLPS:O}),n&&n({value:a,index:t,pointIJK:o,pointLPS:O})}ys.vec3.add(O,O,C)}ys.vec3.copy(O,r),ys.vec3.add(O,O,b)}ys.vec3.copy(O,i),ys.vec3.add(O,O,T)}return M}const{EPSILON:bl}=Q.CONSTANTS;function Tl(e,t){var n;let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=1/0,a=i?-1/0:0,r=1/0,s=i?-1/0:0,l=1/0,d=i?-1/0:0;const c=3===(null===(n=e[0])||void 0===n?void 0:n.length);return e.forEach((e=>{var t,n;o=Math.min(e[0],o),a=Math.max(e[0],a),r=Math.min(e[1],r),s=Math.max(e[1],s),c&&(l=Math.min(null!==(t=e[2])&&void 0!==t?t:l,l),d=Math.max(null!==(n=e[2])&&void 0!==n?n:d,d))})),t?(o=Math.max(i?t[0]+bl:0,o),a=Math.min(i?t[0]-bl:t[0]-1,a),r=Math.max(i?t[1]+bl:0,r),s=Math.min(i?t[1]-bl:t[1]-1,s),c&&3===t.length&&(l=Math.max(i?t[2]+bl:0,l),d=Math.min(i?t[2]-bl:t[2]-1,d))):i||(o=Math.max(0,o),a=Math.min(1/0,a),r=Math.max(0,r),s=Math.min(1/0,s),c&&(l=Math.max(0,l),d=Math.min(1/0,d))),c?[[o,a],[r,s],[l,d]]:[[o,a],[r,s],null]}function Dl(e,t){return Tl(e,t,!1)}function Sl(e,t){return Tl(e,t,!0)}const{transformWorldToIndex:yl}=Q.utilities;function Ml(e,t,n){const[i,o]=e,a=ys.vec3.fromValues((i[0]+o[0])/2,(i[1]+o[1])/2,(i[2]+o[2])/2),r=ys.vec3.distance(i,o)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=function(e,t,n,i,o){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),d=ys.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),c=ys.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=ys.vec3.create();ys.vec3.cross(h,d,c);const g=ys.vec3.create(),u=ys.vec3.create();ys.vec3.scaleAndAdd(g,r,c,o),ys.vec3.scaleAndAdd(u,a,c,-o),ys.vec3.scaleAndAdd(g,g,h,-o),ys.vec3.scaleAndAdd(u,u,h,o);return{boundsIJK:Dl([yl(e,g),yl(e,u),...n.map((t=>yl(e,t)))],s),topLeftWorld:g,bottomRightWorld:u}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:d}}class Ol{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 i=this.framesToString(t);return e.replace(this.frameRangeExtractor,"".concat(n[1]).concat(i))}static setFrameRange(e,t,n){const{referencedImageId:i}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(i,t);const o={...n,annotation:e};(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_MODIFIED,o)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}function xl(e,t,n){let i=-1;if(t.forEach(((t,n)=>{i>=0||t.a==e.b&&(i=n)})),i>=0){const e=t[i];return t.splice(i,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:xl(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Pl(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const i=xl(n,e,t);if(0==i.remainingLines.length)return[{type:i.type,contourPoints:i.contourPoints}];{const e=Pl(i.remainingLines);return e.push({type:i.type,contourPoints:i.contourPoints}),e}}function Nl(e){return Pl(e)}ie(Ol,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const Rl={findContours:Pl,findContoursFromReducedSet:Nl};function Al(e,t){let n=-1;for(let a=0;a<e.length;a++)i=t,o=e[a],i[0]==o[0]&&i[1]==o[1]&&i[2]==o[2]&&(n=a);var i,o;return n}function kl(e,t,n){for(let i=0;i<e.length;i++){const o=e[i];o.a==t?o.a=n:o.b==t&&(o.b=n)}}function Ll(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),i=e.getLines(),o=[];for(let e=0;e<n.getNumberOfPoints();e++){const t=n.getPoint(e).slice();o.push(t)}const a=[];for(let e=0;e<i.getNumberOfCells();e++){const t=i.getCell(3*e).slice(),n={a:t[0],b:t[1]};a.push(n)}if(t)return{points:o,lines:a};const r=[];for(let e=0;e<o.length;e++){const t=o[e];let n=Al(r,t);n>=0||(n=r.length,r.push(t)),kl(a,e,n)}const s=[];return a.forEach((e=>{e.a!=e.b&&s.push(e)})),{points:r,lines:s}}const Ul={removeDuplicatePoints:Ll},Vl={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=e.filter((e=>"CLOSED_PLANAR"!==e.type)),o=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return o.forEach(((e,n)=>{const i=[];o.forEach(((o,a)=>{n!=a&&function(e,t,n){const i=[];e.contourPoints.forEach((e=>{i.push([n[e][0],n[e][1]])}));let o=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],i=e[1];let o=!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],d=t[a][1];s>i!=d>i&&n<(l-r)*(i-s)/(d-s)+r&&(o=!o)}return o})([n[e][0],n[e][1]],i)||o++})),0===o}(e,o,t)&&i.push(a)})),i.length>0?a.push({contour:e,holes:i}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",i.push(e.contour),e.holes.forEach((e=>{o[e].type="CLOSEDPLANAR_XOR",i.push(o[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{i.push(o[e])}))),i}};var Wl=C(543),Fl=C.n(Wl);const{Labelmap:Hl}=at;function Bl(e){let{segmentations:t}=e;const{representationData:n,segments:i=[0,1]}=t,{volumeId:o}=n[Hl],a=Q.cache.getVolume(o);if(!a)return void console.warn("No volume found for ".concat(o));const r=a.dimensions[2],s=Q.cache.getVolume(a.referencedVolumeId);if(!s)return void console.warn("No volume found for ".concat(a.referencedVolumeId));const l=a.imageData.getPointData().getScalars().getData(),d=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*d;l[n]=0,l[n+a.dimensions[0]-1]=0}const c=[],{FrameOfReferenceUID:h}=s.metadata,g=i.length;for(let e=0;e<g;e++){const t=i[e];if(!t)continue;const n=[],o=Di().newInstance({name:"Scalars",numberOfComponents:1,size:d*r,dataType:"Uint8Array"}),{containedSegmentIndices:g}=t;for(let t=0;t<r;t++){if(Gl(t,l,d,e))continue;const i=t*d;try{var u;for(let t=0;t<d;t++){const n=l[t+i];n===e||null!=g&&g.has(n)?o.setValue(t+i,1):o.setValue(t,0)}const r=Fl().newInstance({slice:t}),c=yi().newInstance();c.shallowCopy(a.imageData),c.getPointData().setScalars(o),r.setInputData(c);const v=[1];r.setContourValues(v),r.setMergePoints(!1);const m=Ll(r.getOutputData());if(null!==(u=m.points)&&void 0!==u&&u.length){const e=Nl(m.lines);n.push({referencedImageId:s.imageIds[t],contours:e,polyData:m,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:h})}}catch(e){console.warn(t),console.warn(e)}}const v={referencedImageId:s.imageIds[0],FrameOfReferenceUID:h},m={label:t.label,color:t.color,metadata:v,sliceContours:n};c.push(m)}return c}function Gl(e,t,n,i){const o=e*n,a=o+n;for(let e=o;e<a;e++)if(t[e]===i)return!1;return!0}class ql{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map(((e,n)=>{const i=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}}(o[n],t);return{NumberOfContourPoints:i.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:i}}))}}ie(ql,"toolName",void 0),ql.toolName="RectangleROIStartEndThreshold";const jl=ql;class zl{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:i}=e.metadata,o=zl.TOOL_NAMES[i];if(!o)throw new Error("Unknown tool type: ".concat(i,", cannot convert to RTSSReport"));const a=o.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){zl.TOOL_NAMES[e.toolName]=e}}ie(zl,"TOOL_NAMES",{}),zl.register(jl);const Kl=zl;var Yl=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}(Yl||{});const Xl=Yl,Jl={[Xl.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[Xl.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:i,centerIJK:o,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(null==a||!a.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let d=!1,c=!1;if(Cl(s,r.isInObject,(e=>{let{value:i}=e;d||(d=i===t),c||(c=i===n)}),i.boundsIJK),!d&&!c)return;let h=i.getAtIJKPoint(o);if(h===n){if(!l)return;h=l.segmentIndex}else c&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},Zl={[Xl.Initialize]:e=>{const{centerIJK:t,strategySpecificConfiguration:n,segmentationVoxelManager:i,imageVoxelManager:o,segmentIndex:a}=e,{THRESHOLD:r}=n;if(null==r||!r.isDynamic||!t||!a)return;const{boundsIJK:s}=i,{threshold:l,dynamicRadius:d=0}=r,c=l?0:d,h=s.map(((e,n)=>{const[i,o]=e;return[Math.max(i,t[n]-c),Math.min(o,t[n]+c)]})),g=l||[1/0,-1/0];o.forEach((e=>{let{value:t}=e;g[0]=Math.min(t,g[0]),g[1]=Math.max(t,g[1])}),{boundsIJK:h}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[Xl.OnInteractionStart]:e=>{var t;const{strategySpecificConfiguration:n,preview:i}=e;(null!=n&&null!==(t=n.THRESHOLD)&&void 0!==t&&t.isDynamic||i)&&(n.THRESHOLD.threshold=null)}},$l={[Xl.Initialize]:e=>{e.segmentIndex=0}};function Ql(e,t){return e===t}function ed(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const td=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=n.onFlood,o=n.onBoundary,a=n.equals||Ql,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 i=0;i<Math.pow(3,e);i+=1){const o=ed(i.toString(3),"0",e);t.push(n(o))}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)})),d=[],c=[],h={},g={};for(d.push({currentArgs:t});d.length>0;)u(d.pop());return{flooded:c,boundaries:function(){const e=[];for(const t in g)void 0!==g[t]&&e.unshift(g[t]);return e}()};function u(e){const t=e.currentArgs,n=e.previousArgs;!0!==h[t]&&(h[t]=!0,function(e){const t=m(v,[e]);return m(a,[t,s])}(t)?(function(e){c.push(e),i&&i(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],i=e.slice(0);for(let t=0;t<e.length;t+=1)i[t]+=n[t];d.push({currentArgs:i,previousArgs:e})}}(t)):function(e){g[e]=e,o&&o(...e)}(n))}function v(t){return e(...t)}function m(e,t){try{return e(...t)}catch(e){return}}};function nd(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");Q.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])),Bt(e,t)}function id(e,t,n){const i=kt(e,t);if(!i)throw new Error("setColorLUT: could not find segmentation representation with UID ".concat(t));if(!Ft(n))throw new Error("setColorLUT: could not find colorLUT with index ".concat(n));i.colorLUTIndex=n,mt(e,t)}function od(e,t,n){const i=kt(e,t);if(!i)throw new Error("segmentation representation with UID ".concat(t," does not exist for tool group ").concat(e));const{colorLUTIndex:o}=i,a=Ft(o);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 ad(e,t,n,i){const o=od(e,t,n);for(let e=0;e<i.length;e++)o[e]=i[e];mt(e,t)}const rd={determineSegmentIndex:Jl,dynamicThreshold:Zl,erase:$l,islandRemoval:{[Xl.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:i,previewSegmentIndex:o,segmentIndex:a}=e;if(!i.THRESHOLD||null===a)return;const r=t.getPoints();if(null==r||!r.length)return;if(void 0===o)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,d=(e,t,i)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||i<s[2][0]||i>s[2][1])return-1;const r=n.toIndex([e,t,i]);if(l.has(r))return-2;const d=n.getAtIndex(r),c=d===o||d===a?1:0;return c||n.addPoint(r),c};let c=0;const h=(e,i,a)=>{const r=n.toIndex([e,i,a]);l.has(r)||(t.setAtIJK(e,i,a,o),l.add(r),c++)};r.forEach(((e,t)=>{1===d(...e)&&td(d,e,{onFlood:h,diagonals:!0})}));let g=0,u=0;t.forEach((e=>{let{index:i,pointIJK:r,value:s}=e;const d=n.getAtIndex(i);if(l.has(i)){u++;const e=s===a?a:o;t.setAtIJKPoint(r,e)}else if(d===o){g++;const e=null!=s?s:0;t.setAtIJKPoint(r,e)}}),{}),c-u!=0&&console.warn("There were flooded=",c,"cleared=",g,"preview count=",u,"not handled",c-u);const v=new Set(n.points||[]);l.clear();for(const e of v.keys()){if(l.has(e))continue;let n=!0;const i=new Set,a=(e,o,a)=>{const r=t.toIndex([e,o,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||o!==s[1][0]&&o!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&i.add(r)},r=t.toIJK(e);if(0===d(...r)&&(td(d,r,{onFlood:a,diagonals:!1}),n))for(const e of i)t.setAtIndex(e,o)}ft(e.segmentationId,t.getArrayOfSlices())}},preview:{[Xl.Preview]:function(e){var t;const{previewColors:n,strategySpecificConfiguration:i,enabledElement:o}=e;if(!n||!i)return;e.preview&&delete e.preview,delete i.centerSegmentIndex,null===(t=this.onInteractionStart)||void 0===t||t.call(this,o,e);const a=this.fill(o,e);var r;return a&&(a.isPreviewFromHover=!0,e.preview=a,null===(r=this.onInteractionEnd)||void 0===r||r.call(this,o,e)),a},[Xl.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:i,previewSegmentIndex:o,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!o)return;const s=null==a?void 0:a[n],l=od(t,i,n);(s||l)&&ad(t,i,o,s||l.map((e=>.9*e)))},[Xl.AcceptPreview]:e=>{var t;const{segmentationVoxelManager:n,previewVoxelManager:i,previewSegmentIndex:o,preview:a}=e;if(void 0===o)return;const r=null!==(t=null==a?void 0:a.segmentIndex)&&void 0!==t?t:e.segmentIndex,s=i;s&&0!==s.modifiedSlices.size&&(s.forEach((e=>{let{index:t}=e;n.getAtIndex(t)===o&&n.setAtIndex(t,r)}),{}),ft(e.segmentationId,s.getArrayOfSlices()),s.clear())},[Xl.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:i}=e;n.setAtIndex(t,i)})),ft(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[Xl.Fill]:e=>{var t;const{segmentsLocked:n,segmentationImageData:i,segmentationVoxelManager:o,previewVoxelManager:a,imageVoxelManager:r,brushStrategy:s,centerIJK:l}=e,d=null===(t=s.createIsInThreshold)||void 0===t?void 0:t.call(s,e),{setValue:c}=s,h=d?t=>{const{value:i,index:o}=t;!n.includes(i)&&d(o)&&c(e,t)}:t=>c(e,t);Cl(i,r.isInObject,h,o.boundsIJK),a.addPoint(l)}},setValue:{[Xl.INTERNAL_setValue]:(e,t)=>{let{value:n,index:i}=t;const{segmentsLocked:o,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,d=l.getAtIndex(i);if(null===a){const e=r.getAtIndex(i);return void(void 0!==e&&r.setAtIndex(i,e))}if(d===a||o.includes(n))return;if(d===s){if(void 0!==r.getAtIndex(i))return;l.setAtIndex(i,a)}const c=null!=s?s:a;r.setAtIndex(i,c)}},threshold:{[Xl.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:i}=e;if(n&&i)return e=>{const{THRESHOLD:i,THRESHOLD_INSIDE_CIRCLE:o}=n,a=t.getAtIndex(e),{threshold:r}=i||o||{};return null==r||!r.length||r[0]<=a&&a<=r[1]}}}},{VoxelManager:sd}=Q.utilities;function ld(e){let t,n,i,o,{operationData:a,viewport:r}=e;if(Oi(a)){const{volumeId:e,referencedVolumeId:r}=a,s=Q.cache.getVolume(e),l=Q.cache.getVolume(r);if(!s||!l)return;({imageData:t}=s),n=s.getScalarData(),i=l.getScalarData(),o=l.dimensions}else{const{imageIdReferenceMap:e,segmentationRepresentationUID:s}=a;if(!e)return;const l=r.getCurrentImageId();if(!l)return;t=r.getActor(s).actor.getMapper().getInputData();const d=e.get(l);n=Q.cache.getImage(d).getPixelData();const c=Q.cache.getImage(l);i=c.getPixelData(),o=[c.columns,c.rows,1]}return{segmentationImageData:t,segmentationScalarData:n,segmentationVoxelManager:sd.createVolumeVoxelManager(o,n),imageScalarData:i,imageVoxelManager:sd.createVolumeVoxelManager(o,i)}}const{VoxelManager:dd}=Q.utilities;class cd{constructor(e){ie(this,"compositions",void 0),ie(this,"strategyFunction",void 0),ie(this,"configurationName",void 0),ie(this,"_initialize",[]),ie(this,"_fill",[]),ie(this,"_acceptPreview",void 0),ie(this,"_onInteractionStart",[]),ie(this,"fill",((e,t)=>{const n=this.initialize(e,t),{strategySpecificConfiguration:i={},centerIJK:o}=n;if(Q.utilities.isEqual(o,i.centerIJK))return t.preview;i.centerIJK=o,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return ft(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),ie(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(null!=n&&n.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const i=this.initialize(e,t);this._onInteractionStart.forEach((e=>e.call(this,i)))})),ie(this,"onInteractionEnd",void 0),ie(this,"rejectPreview",void 0),ie(this,"acceptPreview",void 0),ie(this,"preview",void 0),ie(this,"setValue",void 0),ie(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!cd.childFunctions[e])throw new Error("Didn't find ".concat(e," as a brush strategy"));cd.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(cd.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t){var n;const{viewport:i}=e,o=ld({operationData:t,viewport:i});if(!o)return console.warn("No data found for BrushStrategy"),t.preview;if(Oi(t)){const{referencedVolumeId:e,volumeId:n}=t,i=Q.cache.getVolume(e),o=Q.cache.getVolume(n);if(!Q.utilities.isEqual(o.dimensions,i.dimensions)||!Q.utilities.isEqual(o.direction,i.direction))throw new Error("Only source data the same dimensions/size/orientation as the segmentation currently supported.")}const{imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s}=o,l=(null===(n=t.preview)||void 0===n?void 0:n.previewVoxelManager)||dd.createHistoryVoxelManager(r),d={previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s,previewVoxelManager:l,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function hd(e,t){const n="_".concat(e);return(i,o)=>{i[n]||(i[n]=[]),i[n].push(o),i[e]||(i[e]=t?(e,o)=>{const a=i[t](e,o);i[n].forEach((e=>e.call(i,a)))}:e=>{i[n].forEach((t=>t.call(i,e)))})}}function gd(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,i)=>{if(n[e])throw new Error("The singleton method ".concat(e," already exists"));n[e]=t?i:(e,t)=>(t.enabledElement=e,i.call(n,t))}}function ud(e){const[t,n,i,o]=e;return[[i[0],n[1]],[o[0],t[1]]]}function vd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||md(e,n),n.precalculated(t)}ie(cd,"COMPOSITIONS",rd),ie(cd,"childFunctions",{[Xl.OnInteractionStart]:hd(Xl.OnInteractionStart,Xl.Initialize),[Xl.OnInteractionEnd]:hd(Xl.OnInteractionEnd,Xl.Initialize),[Xl.Fill]:hd(Xl.Fill),[Xl.Initialize]:hd(Xl.Initialize),[Xl.CreateIsInThreshold]:gd(Xl.CreateIsInThreshold),[Xl.AcceptPreview]:hd(Xl.AcceptPreview,Xl.Initialize),[Xl.RejectPreview]:hd(Xl.RejectPreview,Xl.Initialize),[Xl.INTERNAL_setValue]:gd(Xl.INTERNAL_setValue),[Xl.Preview]:gd(Xl.Preview,!1),compositions:null});const md=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:i,zRadius:o}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==i?1/i**2:0,t.invZRadiusSq=0!==o?1/o**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[d,c,h]=l;return t.precalculated=e=>{const t=e[0]-d;let n=t*t*a;if(n>1)return!1;const i=e[1]-c;if(n+=i*i*r,n>1)return!1;const o=e[2]-h;return n+=o*o*s,n<=1},t},{transformWorldToIndex:pd,isEqual:fd}=Q.utilities,Ed={[Xl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=ys.vec3.fromValues(0,0,0);t.forEach((e=>{ys.vec3.add(r,r,e)})),ys.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=pd(o,r);const s=t.map((e=>i.worldToCanvas(e))),[l,d]=ud(s),c=i.canvasToWorld(l),h=i.canvasToWorld(d),g=Dl(t.map((e=>pd(o,e))),o.getDimensions());a.boundsIJK=g,n.isInObject=wd({topLeftWorld:c,bottomRightWorld:h,center:r})}};function wd(e){const{topLeftWorld:t,bottomRightWorld:n,center:i}=e,o=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(o,a,r);if(fd(o,s)&&fd(a,s)&&fd(r,s)){const e={center:i,radius:s,radius2:s*s};return t=>function(e,t){const{center:n,radius:i}=e,o=e.radius2||i*i;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])<=o}(e,t)}const l={center:i,xRadius:o,yRadius:a,zRadius:r},{precalculated:d}=md(l,{});return d}const Id=new cd("Circle",rd.regionFill,rd.setValue,Ed,rd.determineSegmentIndex,rd.preview),_d=new cd("CircleThreshold",rd.regionFill,rd.setValue,Ed,rd.determineSegmentIndex,rd.dynamicThreshold,rd.threshold,rd.preview,rd.islandRemoval),Cd=Id.strategyFunction,bd=_d.strategyFunction,{transformWorldToIndex:Td}=Q.utilities,Dd={[Xl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=ys.vec3.fromValues(0,0,0);t.forEach((e=>{ys.vec3.add(r,r,e)})),ys.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Td(o,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=Ml(t.slice(0,2),o,i);a.boundsIJK=s,n.isInObject=wd({topLeftWorld:l,bottomRightWorld:d,center:r})}},Sd=new cd("Sphere",rd.regionFill,rd.setValue,Dd,rd.determineSegmentIndex,rd.preview),yd=Sd.strategyFunction,Md=new cd("SphereThreshold",...Sd.compositions,rd.dynamicThreshold,rd.threshold,rd.islandRemoval).strategyFunction,Od=new cd("EraseSphere",rd.erase,...Sd.compositions).strategyFunction,xd=new cd("EraseCircle",rd.erase,...Id.compositions).strategyFunction;function Pd(e){const t=wt().getSegmentationRepresentations(e);if(t)return t.find((e=>e.active))}function Nd(e){const t=Pd(e);if(t)return It(t.segmentationId)}function Rd(e,t){wt().setActiveSegmentationRepresentation(e,t),mt(e,t)}function Ad(e,t){const n=It(e);if(!n)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:i}=n;return i.has(t)}function kd(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=It(e);if(!i)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:o}=i;n?o.add(t):o.delete(t),pt(e)}function Ld(e){const t=It(e);if(!t)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:n}=t;return Array.from(n)}function Ud(e){const t=xi(e);if(void 0===t)return;Bd(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo(),i=Object.keys(n).map((e=>n[e]));if(!i.length)return;const{renderingEngineId:o}=i[0],a=t.getViewportIds(),r=(0,Q.getRenderingEngine)(o);or(r,a)}function Vd(e,t){const n=It(e);(null==n?void 0:n.activeSegmentIndex)!==t&&(n.activeSegmentIndex=t,pt(e)),Dt(e).forEach((e=>{Ud(e)}))}function Wd(e){const t=It(e);if(t)return t.activeSegmentIndex}class Fd extends zi{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:Cd,ERASE_INSIDE_CIRCLE:xd,FILL_INSIDE_SPHERE:yd,ERASE_INSIDE_SPHERE:Od,THRESHOLD_INSIDE_CIRCLE:bd,THRESHOLD_INSIDE_SPHERE:Md},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70]}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},centerRadius:2,actions:{[Xl.AcceptPreview]:{method:Xl.AcceptPreview,bindings:[{key:"Enter"}]},[Xl.RejectPreview]:{method:Xl.RejectPreview,bindings:[{key:"Escape"}]}}}}),ie(this,"_editData",void 0),ie(this,"_hoverData",void 0),ie(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),ie(this,"onSetToolPassive",(e=>{this.disableCursor()})),ie(this,"onSetToolEnabled",(()=>{this.disableCursor()})),ie(this,"onSetToolDisabled",(e=>{this.disableCursor()})),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i;this._editData=this.createEditData(n),this._activateDraw(n),ds(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const a=this._hoverData||this.createHoverData(n);return or(o,a.viewportIdsToRender),this.applyActiveStrategyCallback(i,this.getOperationData(n),Xl.OnInteractionStart),!0})),ie(this,"mouseMoveCallback",(e=>{if(this.mode===je.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:o,element:a}=e.detail,{canvas:r}=o,{preview:s,startPoint:l,timer:d,timerStart:c,isDrag:h}=this._previewData,g=ys.vec2.distance(r,l),u=Date.now()-c;if((g>n||u>t&&g>i)&&(d&&(window.clearTimeout(d),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})}}})),ie(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,Q.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),Xl.Preview))})),ie(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,Q.getEnabledElement)(n),{renderingEngine:a}=o;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;or(a,r);const s=ys.vec2.distance(i.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:d}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<d||(this._previewData.preview=this.applyActiveStrategy(o,this.getOperationData()),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=i.canvas)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),o=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(i,o),this._deactivateDraw(n),ls(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(i,o,Xl.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,Q.getEnabledElement)(e),{viewport:n}=t,i=Pd(this.toolGroupId);if(!i)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:o,type:a,segmentationRepresentationUID:r}=i;if(a===at.Contour)throw new Error("Not implemented yet");const s=Ld(o),{representationData:l}=It(o),d=l[at.Labelmap];if(Oi(d)){const{volumeId:e}=l[a];return{volumeId:e,referencedVolumeId:n.getActors()[0].uid,segmentsLocked:s,segmentationRepresentationUID:r}}{const{imageIdReferenceMap:e}=d,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,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:r}=o,s=[i.id],{segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h}=this.getActiveSegmentationData()||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(){const e=this.toolGroupId,t=Pd(e);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationRepresentationUID:n,segmentationId:i}=t,o=Wd(i);return{segmentIndex:o,segmentationId:i,segmentationRepresentationUID:n,segmentColor:od(e,n,o)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&or((0,Q.getEnabledElement)(n).renderingEngine,this._hoverData.viewportIdsToRender)}getOperationData(e){var t,n;const i=this._editData||this.createEditData(e),{segmentIndex:o,segmentationId:a,segmentationRepresentationUID:r,brushCursor:s}=this._hoverData||this.createHoverData(e),{data:l,metadata:d={}}=s||{},{viewPlaneNormal:c,viewUp:h}=d;return{...i,points:null==l||null===(t=l.handles)||void 0===t?void 0:t.points,segmentIndex:o,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:c,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,Q.getEnabledElement)(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:r}=this.configuration,s=ys.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=ys.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),d=ys.vec3.create();ys.vec3.cross(d,s,l);const c=o([t[0],t[1]]),h=ys.vec3.create(),g=ys.vec3.create(),u=ys.vec3.create(),v=ys.vec3.create();for(let e=0;e<=2;e++)h[e]=c[e]-s[e]*r,g[e]=c[e]+s[e]*r,u[e]=c[e]-d[e]*r,v[e]=c[e]+d[e]*r;if(!this._hoverData)return;const{brushCursor:m}=this._hoverData,{data:p}=m;void 0===p.handles&&(p.handles={}),p.handles.points=[h,g,u,v],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,Q.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Xl.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,Q.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Xl.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:i}=e;if(!this._hoverData.viewportIdsToRender.includes(i.id))return;const o=this._hoverData.brushCursor;if(!0===o.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=i;this._calculateCursor(t,e)}const a=o.metadata;if(!a)return;const r=a.brushCursorUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c=d[0],h=d[1],g=[Math.floor((c[0]+h[0])/2),Math.floor((c[1]+h[1])/2)],u=Math.abs(c[1]-Math.floor((c[1]+h[1])/2)),v="rgb(".concat((null===(n=a.segmentColor)||void 0===n?void 0:n.slice(0,3))||[0,0,0],")");if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");Fs(t,r,"0",g,u,{color:v});const{centerRadius:m}=this.configuration;m>=0&&Fs(t,r,"1",g,2,{color:v})}}ie(Fd,"toolName",void 0),Fd.toolName="Brush";const Hd=Fd;function Bd(e,t){const n=xi(e);if(void 0===n)return;const i=n._toolInstances;return Object.keys(i).length?t&&i[t]?[i[t]]:Object.values(i).filter((e=>e instanceof Hd)):void 0}function Gd(e,t,n,i){const o=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...i];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,o.push(r)}return Dl(o.map((t=>Q.utilities.transformWorldToIndex(e,t))),t)}function qd(e,t){const{spacing:n}=e,i=e.getScalarData(),o=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:d,dimensions:c}=t[e].volume,h=t[e].volume.getScalarData().length;h===i.length&&(r=d,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const g=l.getPointData().getScalars().getData(),u=t[e].lower,v=t[e].upper;o.push({imageData:l,referenceValues:g,lower:u,upper:v,spacing:d,dimensions:c,volumeSize:h})}var r,s;return{volumeInfoList:o,baseVolumeIdx:a}}const jd=function(e,t,n){const{imageData:i}=e,o=e.getScalarData(),{overwrite:a,boundsIJK:r}=n,s=(null==n?void 0:n.overlapType)||0;if(a)for(let e=0;e<o.length;e++)o[e]=0;const{baseVolumeIdx:l,volumeInfoList:d}=qd(e,t);let c,h,g;const u=(e,t,n)=>{const{imageData:i,dimensions:o,lower:a,upper:r}=e,l=Gd(i,o,t,n);h=0,c=0,g={lower:a,upper:r};let d=!1;return Cl(i,(()=>!0),(e=>{let{value:t}=e;h+=1,t>=g.lower&&t<=g.upper&&(c+=1)}),l),0===s?d=c>0:1==s&&(d=c===h),d},v=(e,t)=>{const{imageData:n,referenceValues:i,lower:o,upper:a}=e,r=i[n.computeOffsetIndex(t)];return!(r<=o||r>=a)};return Cl(i,(()=>!0),(e=>{let{index:t,pointIJK:n,pointLPS:i}=e,a=d.length>0;for(let e=0;e<d.length&&(a=d[e].volumeSize===o.length?v(d[e],n):u(d[e],d[l].spacing,i),a);e++);a&&(o[t]=1)}),r),ft(e.volumeId),e};function zd(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o];n.getFrameOfReferenceUID()===t&&i.push(n)}return i}const{Active:Kd,Passive:Yd,Enabled:Xd}=je;function Jd(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o],a=Mi(n.id,n.renderingEngineId);a&&(Zd(a,t)&&i.push(n))}return i}function Zd(e,t){const{toolOptions:n}=e,i=n[t];if(!i)return!1;const o=i.mode;return o===Kd||o===Yd||o===Xd}const $d=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const i=e.getCamera();return Math.abs(ys.vec3.dot(i.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Qd(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=(0,Q.getEnabledElement)(e),{renderingEngine:o,FrameOfReferenceUID:a}=i;let r=o.getViewports();r=zd(r,a),r=Jd(r,t);const s=o.getViewport(i.viewportId);return n&&(r=$d(r,s.getCamera())),r.map((e=>e.id))}const{EPSILON:ec}=Q.CONSTANTS,tc=1-ec;function nc(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=Q.metaData.get("imagePlaneModule",n),o=ys.vec3.fromValues(i[0],i[1],i[2]),a=ys.vec3.fromValues(i[3],i[4],i[5]);t=ys.vec3.create(),ys.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(ys.vec3.dot(i,t))>tc;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=ys.vec3.create();ys.vec3.sub(n,r,t);const o=ys.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}const ic=/(videoId:|imageId:|volumeId:)([a-zA-Z]*:)/;function oc(e,t){if(e instanceof Q.StackViewport){const n=e.getCurrentImageId(),i=n.indexOf(":"),o=n.substring(i+1);return t.filter((e=>{if(!e.isVisible)return!1;const t=e.metadata.referencedImageId;if(void 0===t)return!1;const n=t.indexOf(":");return t.substring(n+1)===o}))}if(e instanceof Q.VideoViewport){const n=e.getFrameOfReferenceUID();return t.filter((t=>{if(!t.isVisible)return!1;if(t.metadata.FrameOfReferenceUID!==n)return!1;const i=t.metadata.referencedImageId.replace(ic,"");if(!e.hasImageURI(i))return!1;const o=Ol.getFrameRange(t),a=e.getFrameNumber();return Array.isArray(o)?a>=o[0]&&a<=o[1]:Math.abs(a-o)<=5}))}if(e instanceof Q.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:i}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return nc(t,n,i)}throw new Error("Viewport Type ".concat(e.type," not supported"))}const ac=function(e){if(e){if(e.data&&e.highlighted)return Vr.Highlighted;if(be(e.annotationUID))return Vr.Selected;if(ce(e))return Vr.Locked}return Vr.Default};class rc extends zi{constructor(){super(...arguments),ie(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,i=Q.utilities.imageIdToURI(n),o=Xe();o.getFramesOfReference().forEach((e=>{const n=o.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{var t;null!==(t=e.metadata)&&void 0!==t&&t.referencedImageId&&Q.utilities.imageIdToURI(e.metadata.referencedImageId)===i&&(e.invalidated=!0,e.data.cachedStats={})})),Xo(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;return oc(i,t)}getReferencedImageId(e,t,n,i){const o=this.getTargetId(e);let a;if(e instanceof Q.StackViewport)a=o.split("imageId:")[1];else if(e instanceof Q.VideoViewport)a=o.split("videoId:")[1];else{const e=o.split("volumeId:")[1],i=Q.cache.getVolume(e);a=Q.utilities.getClosestImageId(i,t,n)}return a}getStyle(e,t,n){return $r(e,t,ac(n),this.mode)}}ie(rc,"toolName",void 0),rc.toolName="AnnotationDisplayTool";const sc=rc;class lc extends sc{constructor(e,t){var n,i;super(e,t),ie(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(const e of t){if(ce(e)||!Pe(e.annotationUID))continue;const{data:t}=e,i=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,o,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==i&&(a=!0)}return a})),null!==(n=e.configuration)&&void 0!==n&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),null!==(i=e.configuration)&&void 0!==i&&i.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{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<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==ys.vec2.distance(n,o)<i)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 Q.BaseVolumeViewport){var i;const e=t.split("volumeId:")[1];return void 0!==(null===(i=Q.cache.getVolume(e).scaling)||void 0===i?void 0:i.PT)}const o=n&&Q.metaData.get("scalingModule",n);return"number"==typeof(null==o?void 0:o.suvbw)}_imagePointNearToolOrHandle(e,t,n,i){return!!this.getHandleNearImagePoint(e,t,n,i)||(!!this.isPointNearTool(e,t,n,i,"mouse")||void 0)}}ie(lc,"toolName",void 0),lc.toolName="AnnotationTool";const dc=lc;function cc(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,i,o=0]=e,[a,r,s=0]=t;return Math.pow(n-a,2)+Math.pow(i-r,2)+Math.pow(o-s,2)}function hc(e,t,n){let i;const o=cc(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(i=e),!i){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/o;i=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...i],distanceSquared:cc(n,i)}}function gc(e,t,n){return hc(e,t,n).distanceSquared}function uc(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(gc(e,t,n))}function vc(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,i,o,a]=e;let r=655535;const s=function(e,t,n,i){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+i]],bottom:[[e+n,t+i],[e,t+i]],left:[[e,t+i],[e,t]]}}(n,i,o,a);return Object.keys(s).forEach((e=>{const[n,i]=s[e],o=uc(n,i,t);o<r&&(r=o)})),r}function mc(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})),i=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:i}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function pc(e,t,n,i){const o=ys.vec3.create();ys.vec3.cross(o,t,e);const a=ys.vec3.fromValues(...n),r=ys.vec3.fromValues(...i),s=ys.vec3.create();ys.vec3.subtract(s,a,r);const l=ys.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=ys.vec3.dot(s,o)/(l*ys.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}function fc(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=Q.metaData.get("generalSeriesModule",e);if("PT"===(null==n?void 0:n.modality)){const t=Q.metaData.get("petSeriesModule",e);return(null==t?void 0:t.units)||"unitless"}}(t,n):""}function Ec(e,t){if(e instanceof Q.BaseVolumeViewport){const e=t.split("volumeId:"),n=e.length>1?e[1]:e[0],i=Q.cache.getVolume(n);return!(null==i||!i.scaling)&&Object.keys(i.scaling).length>0}if(e instanceof Q.StackViewport){const{preScale:t}=e.getImageData()||{};return!(null==t||!t.scaled)}return!1}class wc{}ie(wc,"run",void 0),ie(wc,"getStatistics",void 0);const Ic=wc;var _c;class Cc extends Ic{}function bc(e){return 1===e.length?e[0]:e}_c=Cc,ie(Cc,"max",[-1/0]),ie(Cc,"sum",[0]),ie(Cc,"sumSquares",[0]),ie(Cc,"squaredDiffSum",[0]),ie(Cc,"count",0),ie(Cc,"statsCallback",(e=>{let{value:t}=e;Array.isArray(t)&&t.length>1&&1===_c.max.length&&(_c.max.push(_c.max[0],_c.max[0]),_c.sum.push(_c.sum[0],_c.sum[0]),_c.sumSquares.push(_c.sumSquares[0],_c.sumSquares[0]),_c.squaredDiffSum.push(_c.squaredDiffSum[0],_c.squaredDiffSum[0]));const n=Array.isArray(t)?t:[t];_c.count+=1,_c.max.forEach(((e,t)=>_c.max[t]=Math.max(e,n[t]))),_c.sum.map(((e,t)=>_c.sum[t]+=n[t])),_c.sumSquares.map(((e,t)=>_c.sumSquares[t]+=n[t]**2)),_c.squaredDiffSum.map(((e,t)=>_c.squaredDiffSum[t]+=Math.pow(n[t]-_c.sum[t]/_c.count,2)))})),ie(Cc,"getStatistics",(()=>{const e=_c.sum.map((e=>e/_c.count)),t=_c.squaredDiffSum.map((e=>Math.sqrt(e/_c.count))),n=_c.sumSquares.map(((t,n)=>Math.sqrt(_c.sumSquares[n]/_c.count-e[n]**2))),i=_c.max;return _c.max=[-1/0],_c.sum=[0],_c.sumSquares=[0],_c.squaredDiffSum=[0],_c.count=0,[{name:"max",value:bc(i),unit:null},{name:"mean",value:bc(e),unit:null},{name:"stdDev",value:bc(t),unit:null},{name:"stdDevWithSumSquare",value:bc(n),unit:null}]}));const{transformWorldToIndex:Tc}=Q.utilities;class Dc extends dc{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:Sc,statsCalculator:Cc}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{label:"",handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:g,top:u,width:v,height:m}=c;return vc([g,u,v,m],h)<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=s.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,o=(0,Q.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=o.viewport,d=e.world,{points:c}=s.handles;let h,g,u,v,m,p,f,E;switch(c[a]=[...d],a){case 0:case 3:h=r(c[0]),v=r(c[3]),g=[v[0],h[1]],u=[h[0],v[1]],p=l(g),f=l(u),c[1]=p,c[2]=f;break;case 1:case 2:g=r(c[1]),u=r(c[2]),h=[u[0],g[1]],v=[g[0],u[1]],m=l(h),E=l(v),c[0]=m,c[3]=E}i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles,v=g.map((e=>a.worldToCanvas(e)));c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),{viewPlaneNormal:E,viewUp:w}=a.getCamera();if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,E,w,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(i,E,w,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let I;if(!Pe(r))continue;ce(i)||this.editData||null===u||(I=[v[u]]),I&&qs(t,r,"0",I,{color:f});const _="".concat(r,"-rect");$s(t,r,"0",v[0],v[3],{color:f,lineDash:p,lineWidth:m},_),o=!0;const C=this.getLinkedTextBoxStyle(c,i);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 b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;if(!h.handles.textBox.hasMoved){const e=mc(v);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const T=a.worldToCanvas(h.handles.textBox.worldPosition),D=Zs(t,r,"1",b,T,v,{},C),{x:S,y,width:M,height:O}=D;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([S,y]),topRight:a.canvasToWorld([S+M,y]),bottomLeft:a.canvasToWorld([S,y+O]),bottomRight:a.canvasToWorld([S+M,y+O])}}return o})),ie(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])}})),ie(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportId:r,renderingEngineId:s,viewport:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,g=Object.keys(h);for(let o=0;o<g.length;o++){const a=g[o],r=this.getTargetIdImage(a,i);if(!r)continue;const{dimensions:s,imageData:p,metadata:f}=r,E=("getScalarData"in r?r.getScalarData():r.scalarData,Tc(p,d));E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]);const w=Tc(p,c);if(w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]),this._isInsideVolume(E,w,s)){var u,v,m;this.isHandleOutsideImage=!1;const i=[[Math.min(E[0],w[0]),Math.max(E[0],w[0])],[Math.min(E[1],w[1]),Math.max(E[1],w[1])],[Math.min(E[2],w[2]),Math.max(E[2],w[2])]],{worldWidth:o,worldHeight:s}=pc(t,n,d,c),g=El(r),I=Math.abs(o*s)/(g*g),_={isPreScaled:Ec(l,a),isSuvScaled:this.isSuvScaled(l,a,e.metadata.referencedImageId)},C=fc(f.Modality,e.metadata.referencedImageId,_),b=Cl(p,(()=>!0),this.configuration.statsCalculator.statsCallback,i),T=this.configuration.statsCalculator.getStatistics();h[a]={Modality:f.Modality,area:I,mean:null===(u=T[1])||void 0===u?void 0:u.value,stdDev:null===(v=T[2])||void 0===v?void 0:v.value,max:null===(m=T[0])||void 0===m?void 0:m.value,statsArray:T,pointsInShape:b,areaUnit:fl(null,r),modalityUnit:C}}else this.isHandleOutsideImage=!0,h[a]={Modality:f.Modality}}e.invalidated=!1;const p=te.ANNOTATION_MODIFIED,f={annotation:e,viewportId:r,renderingEngineId:s};return(0,Q.triggerEvent)(Q.eventTarget,p,f),h})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}}function Sc(e,t){const n=e.cachedStats[t],{area:i,mean:o,max:a,stdDev:r,areaUnit:s,modalityUnit:l}=n;if(void 0===o)return;const d=[];return d.push("Area: ".concat(mv(i)," ").concat(s)),d.push("Mean: ".concat(mv(o)," ").concat(l)),d.push("Max: ".concat(mv(a)," ").concat(l)),d.push("Std Dev: ".concat(mv(r)," ").concat(l)),d}ie(Dc,"toolName",void 0),Dc.toolName="RectangleROI";const yc=Dc;class Mc extends yc{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}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getTargetId(r);let g,u;if(r instanceof Q.StackViewport)g=h.split("imageId:")[1];else{u=h.split("volumeId:")[1];const e=Q.cache.getVolume(u);g=Q.utilities.getClosestImageId(e,o,d)}const v=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:v,referencedImageId:g,toolName:this.getToolName(),volumeId:u},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},segmentationId:null}};Qe(m,i);const p=Qd(i,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,p),m})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,renderingEngineId:r}=e,{element:s}=a;let l=$e(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return o;if(l=this.filterInteractableAnnotationsForElement(s,l),null===(i=l)||void 0===i||!i.length)return o;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:i,data:s}=n,{points:c,activeHandleIndex:h}=s.handles,g=c.map((e=>a.worldToCanvas(e)));d.annotationUID=i;const u=this.getStyle("lineWidth",d,n),v=this.getStyle("lineDash",d,n),m=this.getStyle("color",d,n);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const p=te.ANNOTATION_MODIFIED,f={annotation:n,viewportId:a.id,renderingEngineId:r};let E;((0,Q.triggerEvent)(Q.eventTarget,p,f),Pe(i))&&(ce(n)||this.editData||null===h||(E=[g[h]]),E&&qs(t,i,"0",E,{color:m}),$s(t,i,"0",g[0],g[3],{color:m,lineDash:v,lineWidth:u}),o=!0)}return o}))}}ie(Mc,"toolName",void 0),Mc.toolName="RectangleROIThreshold";const Oc=Mc,{transformWorldToIndex:xc}=Q.utilities;class Pc extends yc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{numSlicesToPropagate:10}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,g,u;if(r instanceof Q.StackViewport)throw new Error("Stack Viewport Not implemented");if(u=this.getTargetId(r).split("volumeId:")[1],g=Q.cache.getVolume(u),h=Q.utilities.getClosestImageId(g,o,d),!h)throw new Error("This tool does not work on non-acquisition planes");const v=r.getCurrentImageIdIndex(),m=Q.utilities.getSpacingInNormalDirection(g,d),p=this._getEndSliceIndex(g,o,m,d),f=r.getFrameOfReferenceUID(),E={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:u,spacingInNormal:m},data:{label:"",startSlice:v,endSlice:p,cachedStats:{projectionPoints:[],projectionPointsImageIds:[h]},handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(E,g),Qe(E,i);const w=Qd(i,this.getToolName());return this.editData={annotation:E,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,w),E})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,o=$e(this.getToolName(),i.element);if(null==o||!o.length)return n;const a=i.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<o.length;s++){const l=o[s],{annotationUID:d,data:c}=l,{startSlice:h,endSlice:g}=c,{points:u,activeHandleIndex:v}=c.handles,m=u.map((e=>i.worldToCanvas(e)));r.annotationUID=d;const p=this.getStyle("lineWidth",r,l),f=this.getStyle("lineDash",r,l),E=this.getStyle("color",r,l);if(a<Math.min(h,g)||a>Math.max(h,g))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let w,I=!1;if(a!==h&&a!==g||(I=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Pe(d))continue;ce(l)||this.editData||null===v||!I||(w=[m[v]]),w&&qs(t,d,"0",w,{color:E});let _=f;I||(_=2),$s(t,d,"0",m[0],m[3],{color:E,lineDash:_,lineWidth:p}),n=!0}return n})),this._throttledCalculateCachedStats=rl(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:d}=n.handles,c=xc(r,d[0]);if(c[2]!==s)throw new Error("Start slice does not match");const h=ys.vec3.fromValues(c[0],c[1],l),g=ys.vec3.create();r.indexToWorldVec3(c,g);const u=ys.vec3.create();r.indexToWorldVec3(h,u);const v=ys.vec3.distance(g,u),m=[];for(let e=0;e<v;e+=a)m.push(d.map((t=>{const n=ys.vec3.create();return ys.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=m;const p=[];for(const e of m){const n=Q.utilities.getClosestImageId(t,e[0],o);p.push(n)}n.cachedStats.projectionPointsImageIds=p}_calculateCachedStatsTool(e,t){const n=e.data,{viewportId:i,renderingEngineId:o,viewport:a}=t,{cachedStats:r}=n,s=this.getTargetId(a),l=Q.cache.getVolume(s.split("volumeId:")[1]);this._computeProjectionPoints(e,l),e.invalidated=!1;const d=te.ANNOTATION_MODIFIED,c={annotation:e,viewportId:i,renderingEngineId:o};return(0,Q.triggerEvent)(Q.eventTarget,d,c),r}_getEndSliceIndex(e,t,n,i){const o=this.configuration.numSlicesToPropagate,a=ys.vec3.create();ys.vec3.scaleAndAdd(a,t,i,o*n);const r=n/2,{imageIds:s}=e;let l;for(let e=0;e<s.length;e++){const t=s[e],{imagePositionPatient:n}=Q.metaData.get("imagePlaneModule",t),o=ys.vec3.create();ys.vec3.sub(o,a,n);const d=ys.vec3.dot(o,i);Math.abs(d)<r&&(l=e)}return l}}ie(Pc,"toolName",void 0),Pc.toolName="RectangleROIStartEndThreshold";const Nc=Pc,Rc=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},Ac=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=[];return e.forEach((e=>{var o,a;const{data:r}=e,{points:s}=r.handles,{imageData:l,dimensions:d}=t;let c=s;if(null!==(o=r.cachedStats)&&void 0!==o&&o.projectionPoints){const{projectionPoints:e}=r.cachedStats;c=[].concat(...e)}let h=Dl(c.map((e=>Q.utilities.transformWorldToIndex(l,e))),d);!n.numSlicesToProject||null!==(a=r.cachedStats)&&void 0!==a&&a.projectionPoints||(h=Rc(h,n.numSlicesToProject)),i.push(h)})),1===i.length?i[0]:i.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})},kc=function(e,t,n,i){const o=e.map((e=>nt(e)));let a;!function(e){const t=[Oc.toolName,Nc.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")}}(o);for(let e=0;e<n.length;e++)n[e].volume.getScalarData().length!==t.getScalarData().length&&0!==e||(a=Ac(o,n[e].volume,i));return jd(t,n,{...i,boundsIJK:a})},Lc=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:i,origin:o,spacing:a}=t;if(!(Q.utilities.isEqual(i,e[0].dimensions)&&Q.utilities.isEqual(n,e[0].direction)&&Q.utilities.isEqual(a,e[0].spacing)&&Q.utilities.isEqual(o,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const i=e[0],o=new(0,i.getScalarData().constructor)(i.getScalarData().length);e.forEach((e=>{const n=e.getScalarData();for(let e=0;e<n.length;e++)n[e]===t&&(o[e]=t)}));const a={scalarData:o,metadata:i.metadata,spacing:i.spacing,origin:i.origin,direction:i.direction,dimensions:i.dimensions};return Q.volumeLoader.createLocalVolume(a,n,!0)};function Uc(e,t){if(e===at.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 Vc(e){const{type:t}=e;if(t===at.Labelmap)return lt();throw new Error("Unknown representation type: ".concat(t))}async function Wc(e){const{viewportId:t,renderingEngineId:n,options:i}=e;let{segmentationId:o}=e;const a=(0,Q.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof Q.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();var l;if(void 0===o&&(o="".concat(s,"-based-segmentation-").concat(null!==(l=null==i?void 0:i.volumeId)&&void 0!==l?l:Q.utilities.uuidv4().slice(0,8))),i){const e=(0,oe._cloneDeep)(i);await Q.volumeLoader.createLocalVolume(e,o)}else{const{uid:e}=r.getDefaultActor();await Q.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:o})}return o}function Fc(e,t,n){const i=xi(e);if(void 0===i)return;Bd(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const o=i.getViewportsInfo(),a=Object.keys(o).map((e=>o[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=i.getViewportIds(),l=(0,Q.getRenderingEngine)(r);or(l,s)}function Hc(e,t){const n=xi(e);if(void 0===n)return;const i=n._toolInstances;if(!Object.keys(i).length)return;const o=Bd(e,t)[0];return o?o.configuration.brushSize:void 0}function Bc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const i=xi(e);if(void 0===i)return;const o=Bd(e),a={...n,...void 0!==t&&{threshold:t}};o.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=i.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=i.getViewportIds(),d=(0,Q.getRenderingEngine)(s);or(d,l)}function Gc(e){const t=xi(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const i=Bd(e)[0];return i?i.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const qc=function(e,t,n,i){const o=e.getScalarData(),{baseVolumeIdx:a,volumeInfoList:r}=qd(e,n);return r.forEach((e=>{const{volumeSize:n}=e;n===o.length?function(e,t,n){const{referenceValues:i,lower:o,upper:a}=n;for(let n=0;n<e.length;n++)if(e[n]===t){const r=i[n];e[n]=r>=o&&r<=a?t:0}}(o,t,e):function(e,t,n,i,o,a){const{imageData:r,lower:s,upper:l,dimensions:d}=n;let c,h,g;for(let n=0;n<e.length;n++)if(e[n]===t){const u=Gd(r,d,i[o].spacing,i[o].imageData.getPoint(n)),v=e=>{let{value:t}=e;c+=1,t>=g.lower&&t<=g.upper&&(h+=1)};c=0,h=0,g={lower:s,upper:l};let m=!1;Cl(r,(()=>!0),v,u),m=0===a?h>0:h===c,e[n]=m?t:0}}(o,t,e,r,a,i)})),ft(e.volumeId),e};function jc(e,t){return new Map(e.map(((e,n)=>[e,t[n]])))}function zc(e,t,n){const i=n.toIJK(e),o=n.toIJK(t),a=ys.vec3.create(),{testIJK:r}=n,s=ys.vec3.sub(ys.vec3.create(),i,o),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const d=ys.vec3.scale(ys.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(ys.vec3.scaleAndAdd(a,o,d,e),!r(a))return!1;return!0}const Kc=.01;function Yc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:i}=e.polyData,{maxMinor:o,maxMajor:a}=n;let r,s=a*a,l=o*o;for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],d=ys.vec3.sqrDist(o,a);d<s||d-Kc<s+Kc&&r||t.testCenter(o,a)&&zc(o,a,t)&&(s=d-Kc,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+Kc);const d=i[r[0]],c=i[r[1]],h=ys.vec3.sub(ys.vec3.create(),d,c);let g;ys.vec3.scale(h,h,1/s);for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],r=ys.vec3.sqrDist(o,a);if(r<=l)continue;const s=ys.vec3.sub(ys.vec3.create(),o,a);Math.abs(ys.vec3.dot(s,h))/Math.sqrt(r)>Kc||t.testCenter(o,a)&&zc(o,a,t)&&(l=r,g=[e,n])}return g?(l=Math.sqrt(l),{majorAxis:[d,c],minorAxis:[i[g[0]],i[g[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:Xc}=at;function Jc(e){const t=Bl({segmentations:e});if(null==t||!t.length||!t[0].sliceContours.length)return;const{representationData:n,segments:i=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:o}=n[Xc],a=i.findIndex((e=>!!e));return-1!==a?(i[a].segmentIndex=a,function(e,t,n){const{sliceContours:i}=e,{segmentIndex:o,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const i=Q.cache.getVolume(e);if(!i)return void console.warn("No volume found for ".concat(e));const o=i.imageData.getPointData().getScalars().getData(),a=i.dimensions[0],r=a*i.dimensions[1];return{testCenter:(e,s)=>{const l=ys.vec3.add(ys.vec3.create(),e,s).map((e=>e/2)),d=i.imageData.worldToIndex(l).map(Math.round),[c,h,g]=d,u=o[c+h*a+g*r];return u===t||(null==n?void 0:n.has(u))},toIJK:e=>i.imageData.worldToIndex(e),testIJK:e=>{const[i,s,l]=e,d=Math.round(i)+Math.round(s)*a+Math.round(l)*r,c=o[d];return c===t||(null==n?void 0:n.has(c))}}}(t,o,a);for(const e of i){const t=Yc(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],o,i[a])):void 0}function Zc(e,t){const{majorAxis:n,minorAxis:i,label:o="",FrameOfReferenceUID:a,referencedImageId:r}=e,[s,l]=n,[d,c]=i,{viewUp:h,viewPlaneNormal:g}=t.getCamera();return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",viewPlaneNormal:g,viewUp:h,FrameOfReferenceUID:a,referencedImageId:r},data:{handles:{points:[s,l,d,c],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:o,cachedStats:{}},isLocked:!1,isVisible:!0}}function $c(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function Qc(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,g=s-a,u=o-r,v=r*a-o*s,m=g*l+u*d+v,p=g*c+u*h+v;if(0!==m&&0!==p&&$c(m)===$c(p))return;const f=h-d,E=l-c,w=c*d-l*h,I=f*o+E*a+w,_=f*r+E*s+w;if(0!==I&&0!==_&&$c(I)===$c(_))return;const C=g*E-f*u;let b;b=u*w-E*v;const T=b/C;return b=f*v-g*w,[T,b/C]}const{transformWorldToIndex:eh}=Q.utilities;class th extends dc{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:nh}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preventHandleOutsideImage",void 0),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[1]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=uc([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]);return h<=i||(l=a.worldToCanvas(s[2]),d=a.worldToCanvas(s[3]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=uc([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]),h<=i)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),ds(i),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());ds(o),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=ys.vec3.distance(e[0],e[1]);if(ys.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],i=[...e[1]],o=ys.vec2.create();ys.vec2.set(o,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=ys.vec2.create();ys.vec2.set(a,-o[1],o[0]);const r=ys.vec2.create();let l;ys.vec2.set(r,i[0]-n[0],i[1]-n[0]),l=ys.vec2.dot(r,a)>0?[n,i]:[i,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:d,handleIndex:c}=this.editData,{data:h}=l,g=n.world;h.handles.points[c]=[...g];const u=h.handles.points.map(s),v={x:u[0][0],y:u[0][1]},m={x:u[1][0],y:u[1][1]},p=(u[2][0],u[2][1],u[3][0],u[3][1],ys.vec2.distance(u[0],u[1])/3),f=v.x-m.x,E=v.y-m.y,w=Math.sqrt(f*f+E*E),I=f/w,_=E/w,C=(v.x+m.x)/2,b=(v.y+m.y)/2,T=C+p*_,D=b-p*I,S=C-p*_,y=b+p*I;h.handles.points[2]=r.canvasToWorld([T,D]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,or(a,d),this.editData.hasMoved=!0})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:d}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;d.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;or(o,r)})),ie(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{viewport:a}=o,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,d=n.world,c=[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:c[0][0],y:c[0][1]},end:{x:c[1][0],y:c[1][1]}},g={start:{x:c[2][0],y:c[2][1]},end:{x:c[3][0],y:c[3][1]}},u=[...d],v=a.worldToCanvas(u);if(0===s||1===s){const e=c[0===s?1:0],t=ys.vec2.set(ys.vec2.create(),v[0]-e[0],v[1]-e[1]),n=ys.vec2.set(ys.vec2.create(),c[s][0]-e[0],c[s][1]-e[1]);ys.vec2.normalize(t,t),ys.vec2.normalize(n,n);const i={start:{x:e[0],y:e[1]},end:{x:v[0],y:v[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(i,g))return;const o=e,r=this._getSignedAngle(n,t);let d=c[2][0],h=c[2][1],m=c[3][0],p=c[3][1];d-=o[0],h-=o[1],m-=o[0],p-=o[1];const f=d*Math.cos(r)-h*Math.sin(r),E=d*Math.sin(r)+h*Math.cos(r),w=m*Math.cos(r)-p*Math.sin(r),I=m*Math.sin(r)+p*Math.cos(r);d=f+o[0],h=E+o[1],m=w+o[0],p=I+o[1];const _=a.canvasToWorld([d,h]),C=a.canvasToWorld([m,p]);l.handles.points[s]=u,l.handles.points[2]=_,l.handles.points[3]=C}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:g.start,end:g.end}},n=ys.vec2.subtract(ys.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),i=ys.vec2.normalize(ys.vec2.create(),n),o=ys.vec2.subtract(ys.vec2.create(),[v[0],v[1]],[c[s][0],c[s][1]]),r=ys.vec2.length(o),d=this._getSignedAngle(i,o),m=Math.cos(d)*r,p=ys.vec2.scaleAndAdd(ys.vec2.create(),[c[e][0],c[e][1]],i,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(!Qc([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]=u}})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!0;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles,v=g.map((e=>a.worldToCanvas(e)));c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=this.getStyle("shadow",c,i);if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(i,d,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let w;if(!Pe(r))continue;ce(i)||this.editData||null===u||(w=[v[u]]),w&&qs(t,r,"0",w,{color:f});const I="".concat(r,"-line-1"),_="".concat(r,"-line-2");js(t,r,"0",v[0],v[1],{color:f,lineDash:p,lineWidth:m,shadow:E},I),js(t,r,"1",v[2],v[3],{color:f,lineDash:p,lineWidth:m,shadow:E},_),o=!0;const C=this.getLinkedTextBoxStyle(c,i);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 b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;let T;h.handles.textBox.hasMoved||(T=mc(v),h.handles.textBox.worldPosition=a.canvasToWorld(T));const D=a.worldToCanvas(h.handles.textBox.worldPosition),S=Zs(t,r,"1",b,D,v,{},C),{x:y,y:M,width:O,height:x}=S;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([y,M]),topRight:a.canvasToWorld([y+O,M]),bottomLeft:a.canvasToWorld([y,M+x]),bottomRight:a.canvasToWorld([y+O,M+x])}}return o})),ie(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=ys.vec2.create();ys.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),ys.vec2.normalize(n,n);const i={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!Qc([i.start.x,i.start.y],[i.end.x,i.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),ie(this,"_calculateCachedStats",((e,t,n)=>{const{data:i}=e,{viewportId:o,renderingEngineId:a}=n,r=i.handles.points[0],s=i.handles.points[1],l=i.handles.points[2],d=i.handles.points[3],{cachedStats:c}=i,h=Object.keys(c);for(let e=0;e<h.length;e++){const n=h[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:a}=i,g=El(i),u=this._calculateLength(r,s)/g,v=this._calculateLength(l,d)/g,m=u>v?u:v,p=u>v?v:u,f=eh(o,r),E=eh(o,s),w=eh(o,l),I=eh(o,d);this._isInsideVolume(f,E,w,I,a)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,c[n]={length:m,width:p,unit:ml(null,i)}}e.invalidated=!1;const g=te.ANNOTATION_MODIFIED,u={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,g,u),c})),ie(this,"_isInsideVolume",((e,t,n,i,o)=>Q.utilities.indexWithinDimensions(e,o)&&Q.utilities.indexWithinDimensions(t,o)&&Q.utilities.indexWithinDimensions(n,o)&&Q.utilities.indexWithinDimensions(i,o))),ie(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}}function nh(e,t){const{cachedStats:n,label:i}=e,{length:o,width:a,unit:r}=n[t],s=[];return i&&s.push(i),void 0===o||s.push("L: ".concat(mv(o)," ").concat(r),"W: ".concat(mv(a)," ").concat(r)),s}ie(th,"toolName",void 0),th.toolName="Bidirectional";const ih=th;function oh(e,t){const{data:n}=t,i=(0,Q.getEnabledElement)(e),o=(n.getSegment||ah)(i,n);if(!o)return;const a=i.viewport.getFrameOfReferenceUID(),r=_t(),{segmentIndex:s,segmentationId:l}=o,d=$e(this.toolName||ih.toolName,a);let c=!1;const h=d.filter((e=>{const{segment:t}=e.data;if(t)return t.segmentationId===l&&t.segmentIndex===s&&(c=!0,e.data.segment=t),!!t}));let g;if(c||h.push({data:{segment:o}}),h.forEach((e=>{const t=[],{segment:n}=e.data,{segmentIndex:s,segmentationId:l}=n;t[s]=n,tt(e.annotationUID);const d=Jc({...r.find((e=>e.segmentationId===l)),segments:t});if(!d)return;const c=Zc(d,i.viewport);c.annotationUID=e.annotationUID,c.data.segment=n;const h=Qe(c,a);if(n.segmentIndex===o.segmentIndex&&n.segmentationId===o.segmentationId){g=d;const{style:e}=o;e&&Zr.setAnnotationStyles(h,e)}})),g){const{referencedImageId:t}=g,n=i.viewport.getImageIds(),o=n.findIndex((e=>e===t));xs(e,{imageIndex:n.length-1-o}),i.viewport.render()}else console.warn("No bidirectional found");return g}function ah(e,t){var n,i;const o=_t();if(!o.length)return;const a=t.segmentationId||o[0].segmentationId,r=null!==(n=t.segmentIndex)&&void 0!==n?n:Wd(a);if(!r)return;const s=null===(i=t.segmentData)||void 0===i?void 0:i.get(r);return{label:"Segment ".concat(r),segmentIndex:r,segmentationId:a,...s}}function rh(e,t){const n=e.maxX-e.minX,i=e.maxY-e.minY,o=[n,i],a=[e.minX+n/2,e.minY+i/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*o[0],l=r[1]-.5*o[1];if(s>0&&l>0)return s*s+l*l;const d=Math.max(s,0)+Math.max(l,0);return d*d}function sh(e,t){return Math.sqrt(rh(e,t))}function lh(e,t){return Math.sqrt(cc(e,t))}function dh(e,t){const[n,i]=e,[o,a]=t;return[2*o-n,2*a-i]}function ch(e,t,n){const i=[],o=function(e,t,n){let i,o;const a=[];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let r=i;r<e.length;r++)uh(t,n,e[o],e[r])&&a.push([o,r]),o=r;return a}(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<o.length;a++){const r=ph(t,n,e[o[a][0]],e[o[a][1]]);i.push(r)}return i}function hh(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let a=i;a<e.length;a++){if(uh(t,n,e[o],e[a]))return[o,a];o=a}}function gh(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);const a=[];for(let r=i;r<e.length;r++){const i=e[o],s=e[r];uh(t,n,i,s)&&a.push([o,r]),o=r}if(0===a.length)return;const r=[];a.forEach((n=>{const i=[e[n[0]],e[n[1]]],o=[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];r.push(ys.vec2.distance(o,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}function uh(e,t,n,i){let o=!1;const a=[vh(e,t,n),vh(e,t,i),vh(n,i,e),vh(n,i,t)];return a[0]!==a[1]&&a[2]!==a[3]||((0===a[0]&&mh(e,n,t)||0===a[1]&&mh(e,i,t)||0===a[2]&&mh(n,e,i)||0===a[3]&&mh(n,t,i))&&(o=!0),o)}function vh(e,t,n){const i=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===i?0:i>0?1:2}function mh(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 ph(e,t,n,i){const o=(i[1]-n[1])*(t[0]-e[0])-(i[0]-n[0])*(t[1]-e[1]);if(0==o)return;let a=e[1]-n[1],r=e[0]-n[0];const s=(i[0]-n[0])*a-(i[1]-n[1])*r,l=(t[0]-e[0])*a-(t[1]-e[1])*r;return a=s/o,r=l/o,[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}const fh=.001,Eh=(e,t)=>{let n,i,o;if(e instanceof Q.StackViewport){const t=e.getImageData();i=t.direction.slice(0,3),o=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),d=a.slice(0,3),c=a.slice(3,6),h=a.slice(6,9),g=ys.vec3.create();ys.vec3.cross(g,l,s);const u=Math.abs(ys.vec3.dot(g,d)),v=Math.abs(ys.vec3.dot(g,c)),m=Math.abs(ys.vec3.dot(g,h));let p;if(Math.abs(1-u)<fh)p=r[0],i=d;else if(Math.abs(1-v)<fh)p=r[1],i=c;else{if(!(Math.abs(1-m)<fh))throw new Error("No support yet for oblique plane planar contours");p=r[2],i=h}const f=Math.abs(ys.vec3.dot(l,d)),E=Math.abs(ys.vec3.dot(l,c)),w=Math.abs(ys.vec3.dot(l,h));let I;if(Math.abs(1-f)<fh)I=r[0],o=d;else if(Math.abs(1-E)<fh)I=r[1],o=c;else{if(!(Math.abs(1-w)<fh))throw new Error("No support yet for oblique plane planar contours");I=r[2],o=h}n=[p,I]}return{spacing:[n[0]/t,n[1]/t],xDir:i,yDir:o}},wh=(e,t,n)=>ys.vec2.dist(e,t)<n,Ih=(e,t,n,i)=>{const{xDir:o,yDir:a,spacing:r}=i,s=(0,Q.getEnabledElement)(e),{viewport:l}=s,d=l.canvasToWorld(t[t.length-1]),c=l.canvasToWorld(n),h=ys.vec3.create();ys.vec3.subtract(h,c,d);const g=Math.abs(ys.vec3.dot(h,o)),u=Math.abs(ys.vec3.dot(h,a)),v=Math.max(Math.floor(g/r[0]),Math.floor(u/r[0]));if(v>1){const e=t[t.length-1],i=ys.vec2.dist(e,n),o=ys.vec2.create();ys.vec2.subtract(o,n,e),ys.vec2.set(o,o[0]/i,o[1]/i);const a=i/v;for(let n=1;n<=v;n++)t.push([e[0]+a*o[0]*n,e[1]+a*o[1]*n])}else t.push(n);return v},_h=(e,t,n,i)=>{const o=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=o[0]*a[0]+o[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,d=[a[0]/s,a[1]/s],c=[d[0]*l,d[1]*l],h=[t[0]+c[0],t[1]+c[1]];return!(ys.vec2.distance(e,h)>i||ys.vec2.distance(t,h)>ys.vec2.distance(t,n))};function Ch(e){const t=e.length;let n=0,i=t-1;for(let o=0;o<t;o++)n+=(e[i][0]+e[o][0])*(e[i][1]-e[o][1]),i=o;return Math.abs(n/2)}const bh=1e-6,Th=1,Dh=0;function Sh(e,t,n){const[i,o]=n;if(Math.abs(t)<bh)return e<0;const a=e/t;if(t>0){if(a>o)return 0;a>i&&(n[0]=a)}else{if(a<i)return 0;a<o&&(n[1]=a)}return 1}function yh(e,t,n,i,o){const[a,r]=e,[s,l]=t,d=s-a,c=l-r;if(void 0===i||void 0===o?(i=e,o=t):(i[0]=e[0],i[1]=e[1],o[0]=t[0],o[1]=t[1]),Math.abs(d)<bh&&Math.abs(c)<bh&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return Th;const h=[0,1];if(Sh(n[0]-a,d,h)&&Sh(a-n[2],-d,h)&&Sh(n[1]-r,c,h)&&Sh(r-n[3],-c,h)){const[e,t]=h;return t<1&&(o[0]=a+t*d,o[1]=r+t*c),e>0&&(i[0]+=e*d,i[1]+=e*c),Th}return Dh}var Mh=C(807),Oh=C.n(Mh);function xh(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*o,d=e.getBounds(),c=d[0],h=d[1],g=[0,0,0];let u,v=[0,0,0];Oh().subtract(t,r,g);for(let t=c;t<=h;t+=l){v=[t,0,0];const n=(t-r[0])/g[0];if(v[1]=n*g[1]+r[1],v[2]=n*g[2]+r[2],Ph(v,d)){const t=i(e.getIntensityFromWorld(v),v);t&&(u=t)}}return u}const Ph=function(e,t){const[n,i,o,a,r,s]=t;return e[0]>n&&e[0]<i&&e[1]>o&&e[1]<a&&e[2]>r&&e[2]<s},Nh={filterAnnotationsWithinSlice:nc,getWorldWidthAndHeightFromCorners:pc,filterAnnotationsForDisplay:oc,getPointInLineOfSightWithCriteria:xh};function Rh(e){let t="";const n=e[0]<0?"R":"L",i=e[1]<0?"A":"P",o=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+=i,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=o,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+i,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+o,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=i+o,a[1]=0,a[2]=0}return t}function Ah(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 kh=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}(kh||{});const Lh=kh,Uh={};function Vh(e,t){const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;Uh[i]=t}function Wh(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n}=t;return Uh[n]}const{ViewportStatus:Fh}=Q.Enums,{triggerEvent:Hh}=Q.utilities,Bh=!0,Gh=!0,qh=new Map;function jh(e,t){var n;let i,o;if(void 0===e)throw new Error("playClip: element must not be undefined");const a=(0,Q.getEnabledElement)(e);if(!a)throw new Error("playClip: element must be a valid Cornerstone enabled element");t.dynamicCineEnabled=null===(n=t.dynamicCineEnabled)||void 0===n||n;const{viewport:r}=a,s=Xh(r),l=function(e,t){var n;if(e instanceof Q.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!==Fh.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,Os(e,{delta:n,debounceLoading:Bh}))}}}(e,null!==(n=t.waitForRendered)&&void 0!==n?n:30);if(e instanceof Q.VolumeViewport){const n=Xh(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,i={viewPlaneNormal:ys.vec3.create(),scrollInfo:null},o=()=>{const t=e.getCamera();if(!i.scrollInfo||!ys.vec3.equals(t.viewPlaneNormal,i.viewPlaneNormal)){const o=Q.utilities.getVolumeViewportScrollInfo(e,n);i.viewPlaneNormal=t.viewPlaneNormal,i.scrollInfo=o}return i.scrollInfo};return{get numScrollSteps(){return o().numScrollSteps},get currentStepIndex(){return o().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),i=t.direction.slice(6,9).map((e=>-e)),o=ys.vec3.dot(i,n.viewPlaneNormal);return ys.glMatrix.equals(o,1)},scroll(t){o().currentStepIndex+=t,Os(e,{delta:t})}}}(e,n)}throw new Error("Unknown viewport type")}(r,t);let d=Wh(e);const c=t.dynamicCineEnabled&&(null==s?void 0:s.isDynamicVolume());var h,g,u,v;if(c&&Yh(e),d?Kh(e,c):(d={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!==(g=t.frameTimeVectorSpeedMultiplier)&&void 0!==g?g:1,reverse:null!==(u=t.reverse)&&void 0!==u&&u,loop:null===(v=t.loop)||void 0===v||v},Vh(e,d)),d.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(d.framesPerSecond=Number(t.framesPerSecond),d.reverse=d.framesPerSecond<0,d.ignoreFrameTimeVector=!0),!0!==d.ignoreFrameTimeVector&&d.frameTimeVector&&d.frameTimeVector.length===l.numScrollSteps&&l.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,i,o,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)o=Number(e[n])/t|0,s.push(o),1===n?i=o:o!==i&&(l=!0),a+=o;return s.length>0&&(o=l?a/s.length|0:s[0],s.push(o)),{timeouts:s,isTimeVarying:l}}(d.frameTimeVector,d.speed);i=e,o=t}const m=()=>{const{numScrollSteps:t,currentStepIndex:n}=l;let i=n+(d.reverse?-1:1);if(!Gh&&(i<0||i>=t)){Kh(e,c);const t={element:e};return void Hh(e,Lh.CLIP_STOPPED,t)}i>=t?i=0:i<0&&(i=t-1);const o=i-n;o&&l.scroll(o)};c&&qh.set(s.volumeId,e),i&&i.length>0&&o?(d.usingFrameTimeVector=!0,d.intervalId=window.setTimeout((function e(){d.intervalId=window.setTimeout(e,i[l.currentStepIndex]),m()}),0)):(d.usingFrameTimeVector=!1,d.intervalId=window.setInterval(m,1e3/Math.abs(d.framesPerSecond)));const p={element:e};Hh(e,Lh.CLIP_STARTED,p)}function zh(e){Kh(e,!0)}function Kh(e,t){const n=(0,Q.getEnabledElement)(e);if(!n)return;const{viewport:i}=n,o=Wh(i.element);o&&function(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}(o),t&&i instanceof Q.BaseVolumeViewport&&Yh(e)}function Yh(e){const{viewport:t}=(0,Q.getEnabledElement)(e),n=Xh(t);if(null!=n&&n.isDynamicVolume()){const t=qh.get(n.volumeId);qh.delete(n.volumeId),t&&t!==e&&zh(t)}}function Xh(e){const t=function(e){return e.getActors().map((e=>Q.cache.getVolume(e.uid))).filter((e=>!!e))}(e),n=t.find((e=>e.isDynamicVolume()));return null!=n?n:t[0]}function Jh(e){var t=e.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[i],a=e[i+1],r=i>0?e[i-1]:2*o-a,s=i<t-1?e[i+2]:2*a-o;return function(e,t,n,i,o){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)*i+r*o)/6}((n-i/t)*t,r,o,a,s)}}function Zh(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}function $h(e){return e.length}function Qh(){return function(e){if(!(o=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 i=-1;for(let o of e)null!=(o=t(o,++i,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}(e,$h),i=new Array(n);++t<n;)for(var o,a=-1,r=i[t]=new Array(o);++a<o;)r[a]=e[a][t];return i}(arguments)}function eg(e,t,n,i){var o,a;const r=n-t+1,s=null!==(o=Math.floor(i/100*r))&&void 0!==o?o: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 d=Math.max(0,t),c=Math.min(e.length-1,n),h=e.slice(0,d),g=e.slice(c+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,i=Jh(t.map((t=>e[t][0]))),o=Jh(t.map((t=>e[t][1])));if(3===(null===(a=e[0])||void 0===a?void 0:a.length)){const a=Jh(t.map((t=>e[t][2])));return Qh(Zh(i,n),Zh(o,n),Zh(a,n))}return Qh(Zh(i,n),Zh(o,n));var a}(e,function(e,t){const n=[],[i,o]=t,a=o-i+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+i;for(;l<=o;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+i;return n}(l,[d,c])),...g]}function tg(e){var t,n;return!0===(null==e||null===(t=e.interpolation)||void 0===t?void 0:t.interpolateOnAdd)||!0===(null==e||null===(n=e.interpolation)||void 0===n?void 0:n.interpolateOnEdit)}function ng(e,t,n){return(e+t+n)%t}function ig(e,t,n,i){const[,o,a]=e,[,r,s]=t,l=a.length,d=s.length;let c=e[0],h=t[0];if(!(a[c]&&s[h]&&a[o]&&s[r]))return[void 0,void 0];for(;c!==o&&h!==r;){if(n(s[h],a[c]))return[c,h];c=ng(c,l,i),h=ng(h,d,i)}return[void 0,void 0]}function og(e,t,n){const{interpolation:i}=e,o=t;if(i){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:o,interpolateOnAdd:a=!1,interpolateOnEdit:r=!1}=i,s=n?o:e;if(n?r:a){const[e,i]=n?function(e,t){const[n,i]=function(e,t){for(let n=0;n<e.length;n++)for(let i=0;i<t.length;i++)if(0===lh(e[n],t[i]))return[n,i]}(e,t)||[],o=(e,t)=>!1===function(e,t){return lh(e,t)<.001}(e,t),[a,r]=ig([ng(n,e.length,1),n,e],[ng(i,t.length,1),i,t],o,1),[s]=ig([ng(a,e.length,-1),a,e],[ng(r,t.length,-1),r,t],o,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[i]?eg(t,e,i,s):t}}return o}function ag(e,t){const n=e[0],i=e[e.length-1],o=ys.vec2.create();ys.vec2.set(o,i[0]-n[0],i[1]-n[1]),ys.vec2.normalize(o,o);const a=ys.vec2.create(),r=ys.vec2.create();ys.vec2.set(a,-o[1],o[0]),ys.vec2.set(r,o[1],-o[0]);const s=[(n[0]+i[0])/2,(n[1]+i[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],i=ys.vec2.dist(n,s);i>l.dist&&(l.dist=i,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}const{addCanvasPointsToArray:rg,pointsAreWithinCloseContourProximity:sg,getFirstIntersectionWithPolyline:lg,getSubPixelSpacingAndXYDirections:dg}=M;function cg(e,t,n){this.isDrawing=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,{spacing:d,xDir:c,yDir:h}=dg(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:c,yDir:h,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ds(a)}function hg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ls(e)}function gg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{annotation:d,viewportIdsToRender:c,xDir:h,yDir:g,spacing:u,movingTextBox:v}=this.commonData,{polylineIndex:m,canvasPoints:p}=this.drawData,f=p[p.length-1],E=l.canvasToWorld(f),w=ys.vec3.create();ys.vec3.subtract(w,o,E);const I=Math.abs(ys.vec3.dot(w,h)),_=Math.abs(ys.vec3.dot(w,g));if(!(I<=u[0]&&_<=u[1])){if(v){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.data.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=rg(i,p,a,this.commonData);this.drawData.polylineIndex=m+e}}or(s,c)}}function ug(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n}=this.drawData,i=n[0],o=n[n.length-1],a=e.detail,{element:r}=a;t&&!sg(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(r):this.completeDrawClosedContour(r)}function vg(e){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:t}=this.drawData;if(this.haltDrawing(e,t))return!1;const{annotation:n,viewportIdsToRender:i}=this.commonData,o=(0,Q.getEnabledElement)(e),{viewport:a,renderingEngine:r}=o;rg(e,t,t[0],this.commonData),t.pop();const s=(tg(this.configuration)?og(this.configuration,t):t).map((e=>a.canvasToWorld(e)));n.data.polyline=s,n.data.isOpenContour=!1;const{textBox:l}=n.data.handles;return l.hasMoved||this.triggerAnnotationCompleted(n),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(r,i),this.deactivateDraw(e),!0}function mg(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],i=e.slice(0,-1).slice(1),o=lg(i,n[0],n[1],!1);if(o){const t=o[1];this.drawData.canvasPoints=e.splice(0,t)}}function pg(e){const{canvasPoints:t}=this.drawData;if(this.haltDrawing(e,t))return!1;const{annotation:n,viewportIdsToRender:i}=this.commonData,o=(0,Q.getEnabledElement)(e),{viewport:a,renderingEngine:r}=o,s=(tg(this.configuration)?og(this.configuration,t):t).map((e=>a.canvasToWorld(e)));n.data.polyline=s,n.data.isOpenContour=!0;const{textBox:l}=n.data.handles;return n.data.handles.points=[s[0],s[s.length-1]],n.data.isOpenUShapeContour&&(n.data.openUShapeContourVectorToPeak=ag(t,a)),l.hasMoved||this.triggerAnnotationCompleted(n),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(r,i),this.deactivateDraw(e),!0}function fg(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=lg(s,o,a,!1);if(void 0!==l)return l[0]}function Eg(e,t){const n=e.detail,{element:i}=n,{canvasPoints:o}=this.drawData,{annotation:a,viewportIdsToRender:r}=this.commonData;rg(i,o,o[t],this.commonData),o.pop();for(let e=0;e<t;e++)o.shift();this.completeDrawClosedContour(i)&&this.activateClosedContourEdit(e,a,r)}function wg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n}=this.drawData,i=n[0],o=n[n.length-1];t&&!sg(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e):this.completeDrawClosedContour(e)}function Ig(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,i=(0,Q.getEnabledElement)(e),{renderingEngine:o}=i;return tt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(o,n),this.deactivateDraw(e),!0}return!1}const _g=function(e){e.activateDraw=cg.bind(e),e.deactivateDraw=hg.bind(e),e.applyCreateOnCross=Eg.bind(e),e.findCrossingIndexDuringCreate=fg.bind(e),e.completeDrawOpenContour=pg.bind(e),e.removeCrossedLinesOnCompleteDraw=mg.bind(e),e.mouseDragDrawCallback=gg.bind(e),e.mouseUpDrawCallback=ug.bind(e),e.completeDrawClosedContour=vg.bind(e),e.cancelDrawing=wg.bind(e),e.haltDrawing=Ig.bind(e)},{addCanvasPointsToArray:Cg,getFirstIntersectionWithPolyline:bg}=M;function Tg(e,t){const n=e.detail,{element:i,currentPoints:o,lastPoints:a}=n,r=o.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:d}=this.editData,c=bg(d,r,s,t);if(c)this.editData.startCrossingIndex=c[0],this.removePointsUpUntilFirstCrossing(t);else if(d.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<d.length;n++){const i=d[n],o=ys.vec2.distance(i,e);t.push({distance:o,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],i=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=i}else{const e=ys.vec2.create();ys.vec2.subtract(e,l[1],l[0]),ys.vec2.normalize(e,e);const n=6,o=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=bg(d,o,l[0],t);if(a){const e=[o];Cg(i,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Dg(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let i=0;for(let o=0;o<t.length-1;o++){const a=[t[o],t[o+1]];if(i++,bg(n,a[0],a[1],e))break}t.splice(0,i),this.editData.editIndex=t.length-1}function Sg(e,t){const n=e.detail,{currentPoints:i,lastPoints:o}=n,a=i.canvas,r=o.canvas,{prevCanvasPoints:s}=this.editData;return!!bg(s,a,r,t)}function yg(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let i=n.length-1;i>0;i--){const o=[n[i],n[i-1]],a=!!bg(t,o[0],o[1],e);if(n.pop(),a)break}}function Mg(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const i=e[e.length-1],o=[];for(let e=0;e<t.length;e++){const n=t[e],a=ys.vec2.distance(n,i);o.push({distance:a,index:e})}o.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<o.length;n++){const{index:i}=o[n],r=t[i],s=e[e.length-1];if(!bg(a,r,s,!1))return i}return-1}function Og(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=bg(s,o,a,!1);if(!l)return;const d=l[0],c=r.length-d;for(let e=0;e<c;e++)r.pop()}const xg=function(e){e.checkForFirstCrossing=Tg.bind(e),e.removePointsUpUntilFirstCrossing=Dg.bind(e),e.checkForSecondCrossing=Sg.bind(e),e.findSnapIndex=Mg.bind(e),e.removePointsAfterSecondCrossing=yg.bind(e),e.checkAndRemoveCrossesOnEditLine=Og.bind(e)},{getSubPixelSpacingAndXYDirections:Pg,addCanvasPointsToArray:Ng,calculateAreaOfPoints:Rg}=M;function Ag(e,t,n){this.isEditingClosed=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,d=t.data.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:g}=Pg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:g,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(te.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpClosedContourEditCallback),ds(a)}function kg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpClosedContourEditCallback),ls(e)}function Lg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:g}=this.commonData,{editIndex:u,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),E=ys.vec3.create();ys.vec3.subtract(E,o,f);const w=Math.abs(ys.vec3.dot(E,c)),I=Math.abs(ys.vec3.dot(E,h));if(w<=g[0]&&I<=g[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const _=u+Ng(i,v,a,this.commonData);this.editData.editIndex=_,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)),or(s,d)):this.finishEditAndStartNewEdit(e)}function Ug(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData,c=l.map((e=>o.canvasToWorld(e)));r.data.polyline=c,r.data.isOpenContour=!1,this.triggerAnnotationModified(r,i);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},or(a,s)}function Vg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Ng(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=ys.vec2.distance(t[l],s[0]),h=ys.vec2.distance(t[l],s[s.length-1]),g=ys.vec2.distance(t[d],s[0]),u=ys.vec2.distance(t[d],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}let m=c+u,p=h+g;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=d;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}const f=[];for(let e=l;e<d;e++){const n=t[e];f.push([n[0],n[1]])}if(m=g+h,p=u+c,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 Rg(v)>Rg(f)?v:f}function Wg(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function Fg(e){const t=(0,Q.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const e=(tg(this.configuration)?og(this.configuration,r,s):r).map((e=>n.canvasToWorld(e)));o.data.polyline=e,o.data.isOpenContour=!1,o.invalidated=!0,this.triggerAnnotationModified(o,t)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,or(i,a),this.deactivateClosedContourEdit(e)}function Hg(e){this.completeClosedContourEdit(e)}const Bg=function(e){e.activateClosedContourEdit=Ag.bind(e),e.deactivateClosedContourEdit=kg.bind(e),e.mouseDragClosedContourEditCallback=Lg.bind(e),e.mouseUpClosedContourEditCallback=Wg.bind(e),e.finishEditAndStartNewEdit=Ug.bind(e),e.fuseEditPointsWithClosedContour=Vg.bind(e),e.cancelClosedContourEdit=Hg.bind(e),e.completeClosedContourEdit=Fg.bind(e)},{addCanvasPointsToArray:Gg,getSubPixelSpacingAndXYDirections:qg}=M;function jg(e,t,n){this.isEditingOpen=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,d=t.data.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:g}=qg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:g,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(te.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpOpenContourEditCallback),ds(a)}function zg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpOpenContourEditCallback),ls(e)}function Kg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:g}=this.commonData,{editIndex:u,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),E=ys.vec3.create();ys.vec3.subtract(E,o,f);const w=Math.abs(ys.vec3.dot(E,c)),I=Math.abs(ys.vec3.dot(E,h));if(w<=g[0]&&I<=g[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const _=u+Gg(i,v,a,this.commonData);this.editData.editIndex=_,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),or(s,d)}function Yg(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o}=i,{annotation:a,viewportIdsToRender:r}=this.commonData,s=this.fuseEditPointsForOpenContourEndEdit().map((e=>o.canvasToWorld(e)));a.data.polyline=s,a.data.isOpenContour=!0,a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,this.triggerAnnotationModified(a,i),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function Xg(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.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 d=o,c=a,h=s[r],g=ys.vec2.create(),u=ys.vec2.create();ys.vec2.set(g,d[0]-c[0],d[1]-c[1]),ys.vec2.set(u,d[0]-h[0],d[1]-h[1]);const v=ys.vec2.dot(g,u),m=Math.sqrt(g[0]*g[0]+g[1]*g[1]),p=Math.sqrt(u[0]*u[0]+u[1]*u[1]);return Math.acos(v/(m*p))<Math.PI/2}function Jg(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i}=this.editData,o=[];if(0===e)for(let e=t.length-1;e>=i;e--){const n=t[e];o.push([n[0],n[1]])}else for(let e=0;e<i;e++){const n=t[e];o.push([n[0],n[1]])}if(ys.vec2.distance(t[i],n[0])<ys.vec2.distance(t[i],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];o.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];o.push([t[0],t[1]])}return o}function Zg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Gg(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=ys.vec2.distance(t[l],s[0]),h=ys.vec2.distance(t[l],s[s.length-1]),g=ys.vec2.distance(t[d],s[0]),u=ys.vec2.distance(t[d],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}if(c+u<h+g)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=d;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}return v}function $g(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData,c=l.map((e=>o.canvasToWorld(e)));r.data.polyline=c,r.data.isOpenContour=!0,r.data.handles.points=[c[0],c[c.length-1]],this.triggerAnnotationModified(r,i);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},or(a,s)}function Qg(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function eu(e){const t=(0,Q.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const e=(tg(this.configuration)?og(this.configuration,r,s):r).map((e=>n.canvasToWorld(e)));o.data.polyline=e,o.data.isOpenContour=!0,o.data.handles.points=[e[0],e[e.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=ag(r,n)),o.invalidated=!0,this.triggerAnnotationModified(o,t)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,or(i,a),this.deactivateOpenContourEdit(e)}function tu(e){this.completeOpenContourEdit(e)}const nu=function(e){e.activateOpenContourEdit=jg.bind(e),e.deactivateOpenContourEdit=zg.bind(e),e.mouseDragOpenContourEditCallback=Kg.bind(e),e.mouseUpOpenContourEditCallback=Qg.bind(e),e.fuseEditPointsWithOpenContour=Zg.bind(e),e.finishEditOpenOnSecondCrossing=$g.bind(e),e.checkIfShouldOverwriteAnEnd=Xg.bind(e),e.fuseEditPointsForOpenContourEndEdit=Jg.bind(e),e.openContourEditOverwriteEnd=Yg.bind(e),e.cancelOpenContourEdit=tu.bind(e),e.completeOpenContourEdit=eu.bind(e)},{getSubPixelSpacingAndXYDirections:iu}=M;function ou(e,t,n,i){this.isDrawing=!0;const o=e.detail,{element:a}=o,r=(0,Q.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:d,yDir:c}=iu(s,this.configuration.subPixelResolution),h=t.data.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let g=!1;i.worldPosition&&(g=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:d,yDir:c,movingTextBox:g},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ds(a)}const au=function(e){e.activateOpenContourEndEdit=ou.bind(e)},{pointsAreWithinCloseContourProximity:ru}=M;function su(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},i=this.getStyle("lineWidth",n,t),o=this.getStyle("lineDash",n,t),a=this.getStyle("color",n,t);return{color:void 0===a?void 0:a,width:void 0===i?void 0:i,lineDash:void 0===o?void 0:o,connectLastToFirst:!t.data.isOpenContour}}function lu(e,t,n){var i;null!=e&&null!==(i=e.viewport)&&void 0!==i&&i.getImageData()&&(n.data.isOpenContour?n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return ag(t.data.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n):this.renderClosedContour(e,t,n))}function du(e,t,n){const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.polyline.map((e=>i.worldToCanvas(e)));zs(t,n.annotationUID,"1",a,o)}function cu(e,t,n){var i;const{viewport:o}=e,a=this._getRenderingOptions(e,n),r=n.data.polyline.map((e=>o.worldToCanvas(e)));zs(t,n.annotationUID,"1",r,a);const s=n.data.handles.activeHandleIndex;if(!0===(null===(i=this.configuration.alwaysRenderOpenContourHandles)||void 0===i?void 0:i.enabled)){const e=this.configuration.alwaysRenderOpenContourHandles.radius,i="0",o=[r[0],r[r.length-1]];0===s?o.shift():1===s&&o.pop(),qs(t,n.annotationUID,i,o,{color:a.color,handleRadius:e})}if(null!==s){const e="1",i=r[0===s?0:r.length-1];qs(t,n.annotationUID,e,[i],{color:a.color})}}function hu(e,t,n){const{viewport:i}=e,{polyline:o,openUShapeContourVectorToPeak:a}=n.data;if(this.renderOpenContour(e,t,n),!a)return;const r=i.worldToCanvas(o[0]),s=i.worldToCanvas(o[o.length-1]),l=[i.worldToCanvas(a[0]),i.worldToCanvas(a[1])],d=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"first-to-last",[r,s],{color:d.color,width:d.width,connectLastToFirst:!1,lineDash:"2,2"}),zs(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:d.color,width:d.width,connectLastToFirst:!1,lineDash:"2,2"})}function gu(e,t,n){const i=this._getRenderingOptions(e,n),{allowOpenContours:o}=this.configuration,{canvasPoints:a}=this.drawData;if(i.connectLastToFirst=!1,zs(t,n.annotationUID,"1",a,i),o){const e=a[0],o=a[a.length-1];if(ru(e,o,this.configuration.closeContourProximity))zs(t,n.annotationUID,"2",[o,e],i);else{const o="0";qs(t,n.annotationUID,o,[e],{color:i.color,handleRadius:2})}}}function uu(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderClosedContour(e,t,n);const o=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"preview-1",i,o)}function vu(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderOpenContour(e,t,n);const o=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"preview-1",i,o)}const mu=function(e){e.renderContour=lu.bind(e),e.renderClosedContour=du.bind(e),e.renderOpenContour=cu.bind(e),e.renderOpenUShapedContour=hu.bind(e),e.renderContourBeingDrawn=gu.bind(e),e.renderClosedContourBeingEdited=uu.bind(e),e.renderOpenContourBeingEdited=vu.bind(e),e._getRenderingOptions=su.bind(e)},{pointCanProjectOnLine:pu}=M,{EPSILON:fu}=Q.CONSTANTS,Eu=1-fu;class wu extends dc{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,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,subPixelResolution:4,interpolation:{interpolateOnAdd:!1,interpolateOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},calculateStats:!1,getTextLines:Iu,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"commonData",void 0),ie(this,"isDrawing",!1),ie(this,"isEditingClosed",!1),ie(this,"isEditingOpen",!1),ie(this,"activateDraw",void 0),ie(this,"activateClosedContourEdit",void 0),ie(this,"activateOpenContourEdit",void 0),ie(this,"activateOpenContourEndEdit",void 0),ie(this,"cancelDrawing",void 0),ie(this,"cancelClosedContourEdit",void 0),ie(this,"cancelOpenContourEdit",void 0),ie(this,"renderContour",void 0),ie(this,"renderContourBeingDrawn",void 0),ie(this,"renderClosedContourBeingEdited",void 0),ie(this,"renderOpenContourBeingEdited",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=Qd(i,this.getToolName()),u=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,toolName:this.getToolName()},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]}}},polyline:[[...o]],label:"",cachedStats:{}}};return Qe(v,i),this.activateDraw(e,v,g),e.preventDefault(),or(s,g),v})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=Qd(o,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n,o=Qd(i,this.getToolName());t.data.isOpenContour?this.activateOpenContourEdit(e,t,o):this.activateClosedContourEdit(e,t,o)})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,r=t.data.polyline;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,o=a.worldToCanvas(r[e]);if(!0===pu(n,t,o,i))return!0;s=o}if(t.data.isOpenContour)return!1;const l=a.worldToCanvas(r[0]),d=a.worldToCanvas(r[r.length-1]);return!0===pu(n,l,d,i)})),ie(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,i=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):i&&this.cancelClosedContourEdit(e)})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"triggerAnnotationCompleted",(e=>{const t=te.ANNOTATION_COMPLETED,n={annotation:e};(0,Q.triggerEvent)(Q.eventTarget,t,n)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,renderingEngine:r}=e,{element:s}=a,l=this.getTargetId(a);let d=$e(this.getToolName(),s);if(null===(n=d)||void 0===n||!n.length)return o;if(d=this.filterInteractableAnnotationsForElement(s,d),null===(i=d)||void 0===i||!i.length)return o;const c=this.isDrawing,h=this.isEditingOpen,g=this.isEditingClosed;if(c||h||g){const n=this.commonData.annotation.annotationUID;d.forEach((i=>{if(i.annotationUID===n)if(c)this.renderContourBeingDrawn(e,t,i);else if(g)this.renderClosedContourBeingEdited(e,t,i);else{if(!h)throw new Error("Unknown ".concat(this.getToolName()," annotation rendering state"));this.renderOpenContourBeingEdited(e,t,i)}else this.renderContour(e,t,i)})),o=!0}else d.forEach((n=>{this.renderContour(e,t,n)}));return this.configuration.calculateStats?(d.forEach((n=>{var i,o,s;const d=null===(i=this.commonData)||void 0===i?void 0:i.annotation.annotationUID;if(n.annotationUID!==d||null!==(o=this.commonData)&&void 0!==o&&o.movingTextBox){if(null===(s=this.commonData)||void 0===s||!s.movingTextBox){const{data:t}=n;t.cachedStats[l]&&null!=t.cachedStats[l].areaUnit?n.invalidated&&this._throttledCalculateCachedStats(n,a,r,e):(t.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(n,a,r,e))}this._renderStats(n,a,e,t)}})),o):void 0})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{cachedStats:a,polyline:r}=o,s=Object.keys(a);for(let i=0;i<s.length;i++){var l,d,c;const o=s[i],h=this.getTargetIdImage(o,n);if(!h)continue;const{imageData:g,metadata:u}=h,v=r.map((e=>t.worldToCanvas(e))),m=v[0],p=t.canvasToWorld(m),f=t.canvasToWorld([m[0]+1,m[1]]),E=t.canvasToWorld([m[0],m[1]+1]),w=ys.vec3.distance(p,f),I=ys.vec3.distance(p,E),_=El(h);let C=Ch(v)/_/_;C*=w*I;const b=Q.utilities.transformWorldToIndex(g,r[0]);b[0]=Math.floor(b[0]),b[1]=Math.floor(b[1]),b[2]=Math.floor(b[2]);let T=b[0],D=b[0],S=b[1],y=b[1],M=b[2],O=b[2];for(let e=1;e<r.length;e++){const t=Q.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]),D=Math.max(D,t[0]),S=Math.min(S,t[1]),y=Math.max(y,t[1]),M=Math.min(M,t[2]),O=Math.max(O,t[2])}const x=.01*(D-T),P=.01*(y-S),N=.01*(O-M);T=Math.floor(T-x),D=Math.ceil(D+x),S=Math.floor(S-P),y=Math.ceil(y+P),M=Math.floor(M-N),O=Math.ceil(O+N);const R=[[T,D],[S,y],[M,O]],A=g.indexToWorld([D,y,O]),k=t.worldToCanvas(A);let L=0,U=[],V=0;const W=Cl(g,((e,n)=>{let i=!0;const o=t.worldToCanvas(e);return o[1]!=L&&(V=0,L=o[1],U=ch(v,o,[k[0],o[1]]),U.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),U.length&&o[0]>U[0][0]&&(U.shift(),V++),V%2==0&&(i=!1),i}),this.configuration.statsCalculator.statsCallback,R),F={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},H=fc(u.Modality,e.metadata.referencedImageId,F),B=this.configuration.statsCalculator.getStatistics();a[o]={Modality:u.Modality,area:C,mean:null===(l=B[1])||void 0===l?void 0:l.value,max:null===(d=B[0])||void 0===d?void 0:d.value,stdDev:null===(c=B[3])||void 0===c?void 0:c.value,statsArray:B,pointsInShape:W,areaUnit:fl(null,h),modalityUnit:H}}return this.triggerAnnotationModified(e,i),e.invalidated=!1,a})),ie(this,"_renderStats",((e,t,n,i)=>{var o;const a=e.data,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 d=this.configuration.getTextLines(a,r);if(!d||0===d.length)return;const c=a.polyline.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=mc(c);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),g=Zs(i,null!==(o=e.annotationUID)&&void 0!==o?o:"","1",d,h,c,{},l),{x:u,y:v,width:m,height:p}=g;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,v]),topRight:t.canvasToWorld([u+m,v]),bottomLeft:t.canvasToWorld([u,v+p]),bottomRight:t.canvasToWorld([u+m,v+p])}})),_g(this),xg(this),Bg(this),nu(this),au(this),mu(this),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;let o;if(i instanceof Q.VolumeViewport){const e=i.getCamera(),{spacingInNormalDirection:n}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(i,e);o=this.filterAnnotationsWithinSlice(t,e,n)}else o=oc(i,t);return o}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(ys.vec3.dot(i,t))>Eu;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.polyline[0];if(!e.isVisible)continue;const n=ys.vec3.create();ys.vec3.sub(n,r,t);const o=ys.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}}function Iu(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(l);c.push(e)}return o&&c.push("Mean: ".concat(mv(o)," ").concat(d)),r&&c.push("Max: ".concat(mv(r)," ").concat(d)),a&&c.push("Std Dev: ".concat(mv(a)," ").concat(d)),c}ie(wu,"toolName",void 0),wu.toolName="PlanarFreehandROI";const _u=wu;function Cu(e,t,n){if(function(e,t,n){var i;if(null==t||null===(i=t.data)||void 0===i||!i.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:o,viewportId:a,FrameOfReferenceUID:r}=e,s=Mi(a,o);if(t.metadata.FrameOfReferenceUID!==r)return!0;if(!s)return!0;const l=s.getToolInstance(t.metadata.toolName);return!(l instanceof _u)||l.isDrawing||l.isEditingOpen||l.isEditingClosed}(e,t,n))return!1;const{viewport:i}=e,o=t.data.polyline.map(i.worldToCanvas),a=eg(o,0,o.length,n);return a!==o&&(t.data.polyline=a.map(i.canvasToWorld),!0)}const bu={interpolateAnnotation:Cu},{isEqual:Tu}=Q.utilities,Du=[ys.vec3.fromValues(1,0,0),ys.vec3.fromValues(0,1,0),ys.vec3.fromValues(0,0,1)];function Su(e){const t=ys.vec3.subtract(ys.vec3.create(),e[0],e[1]),n=ys.vec3.subtract(ys.vec3.create(),e[0],e[2]);return[...yu(t,Du),...yu(n,Du)].every((e=>Tu(e,0)||Tu(e,90)||Tu(e,180)||Tu(e,270)))}function yu(e,t){return t.map((t=>180*ys.vec3.angle(e,t)/Math.PI))}const Mu={};function Ou(e,t){const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;Mu[i]=t}function xu(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n}=t;return Mu[n]}const Pu=Q.Enums.RequestType.Prefetch,Nu=0;function Ru(e,t){e=Math.round(e)||0;const n=[];let i=(t=Math.round(t)||0)-e+1;if(i<=0)return n;for(;i--;)n[i]=t--;return n}function Au(e){const t=(0,Q.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof Q.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:(console.warn("stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented"),null)}function ku(e){return function(t){const n=t.detail;let i;try{i=Au(e)}catch(e){return}if(!i||!i.imageIds||0===i.imageIds.length)return;const o=i.imageIds.indexOf(n.imageId);if(o<0)return;const a=xu(e);a&&a.data&&a.data.length&&a.indicesToRequest.push(o)}}const Lu=e=>{const t=new Set(e.imageIds);return e=>e.type!==Pu||!t.has(e.additionalDetails.imageId)};let Uu,Vu={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function Wu(e){var t,n;const i=xu(e);if(!i)return;const o=i||{},a=Au(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(o.enabled&&(o.enabled=null===(n=o.indicesToRequest)||void 0===n?void 0:n.length),!1===o.enabled)return;if(i.indicesToRequest.sort(((e,t)=>e-t)),o.indicesToRequest.slice().forEach((function(e){const t=a.imageIds[e];t&&(Math.abs(r-e)<6?Q.cache.getImageLoadObject(t):Q.cache.isLoaded(t))&&function(e){const t=o.indicesToRequest.indexOf(e);t>-1&&o.indicesToRequest.splice(t,1)}(e)})),!o.indicesToRequest.length)return;Vu.preserveExistingPool||Q.imageLoadPoolManager.clearRequestStack(Pu);const s=function(e,t){let n=0,i=e.length-1;return e.forEach(((e,o)=>{e<t?n=Math.max(o,n):e>t&&(i=Math.min(o,i))})),{low:n,high:i}}(o.indicesToRequest,a.currentImageIdIndex);let l,d,c=s.low,h=s.high;const g=[];for(;c>=0||h<o.indicesToRequest.length;){const e=a.currentImageIdIndex,t=!(e-o.indicesToRequest[c]>Vu.maxImagesToPrefetch)&&c>=0,n=!(o.indicesToRequest[h]-e>Vu.maxImagesToPrefetch)&&h<o.indicesToRequest.length;if(!n&&!t)break;t&&(d=o.indicesToRequest[c--],l=a.imageIds[d],g.push(l)),n&&(d=o.indicesToRequest[h++],l=a.imageIds[d],g.push(l))}const u=(e,t)=>Q.imageLoader.loadAndCacheImage(e,t),{useNorm16Texture:v}=(0,Q.getConfiguration)().rendering;g.forEach((e=>{const t={targetBuffer:{type:v?void 0:"Float32Array"},preScale:{enabled:!0},requestType:Pu};Q.imageLoadPoolManager.addRequest(u.bind(null,e,t),Pu,{imageId:e},Nu)}))}function Fu(e){clearTimeout(Uu),Uu=setTimeout((function(){const t=e.target;try{Wu(t)}catch(e){return}}),10)}const Hu={enable:function(e){const t=Au(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:Ru(0,t.imageIds.length-1),enabled:!0,direction:1},i=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(i,1),Ou(e,n),Wu(e),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu),e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu);const o=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o),Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o)},disable:function(e){clearTimeout(Uu),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu);const t=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=xu(e);n&&n.indicesToRequest.length&&(n.enabled=!1,Q.imageLoadPoolManager.clearRequestStack(Pu))},getConfiguration:function(){return Vu},setConfiguration:function(e){Vu=e}};let Bu,Gu={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function qu(e){var t,n;const i=Au(e);if(null==i||null===(t=i.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const o=xu(e);if(!o)return;const a=o||{};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}=i;if(s.forEach((e=>{const t=i.imageIds[e];t&&(Math.abs(l-e)<6?Q.cache.getImageLoadObject(t):Q.cache.isLoaded(t))&&r(e)})),!a.indicesToRequest.length)return;Gu.preserveExistingPool||Q.imageLoadPoolManager.filterRequests(Lu(i));const d=(t,n)=>Q.imageLoader.loadAndCacheImage(t,n).then((()=>function(t){var n;r(i.imageIds.indexOf(t));const o=Q.cache.getCachedImageBasedOnImageURI(t),{stats:s}=a,l=(null==o||null===(n=o.image)||void 0===n?void 0:n.decodeTimeInMS)||0;if(l){var d;s.imageIds.set(t,l),s.decodeTimeInMS+=l;const e=(null==o||null===(d=o.image)||void 0===d?void 0:d.loadTimeInMS)||0;s.loadTimeInMS+=e}if(!a.indicesToRequest.length&&null!=o&&o.sizeInBytes){const{sizeInBytes:t}=o,n=Q.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",mv(s.fillTime/e),"ms","average load",mv(s.loadTimeInMS/e),"ms","average decode",mv(s.decodeTimeInMS/e),"ms")}}else s.initialTime=Date.now()-s.start,s.initialSize=s.imageIds.size,zu(e,n),qu(e)}}(t))),{useNorm16Texture:c}=(0,Q.getConfiguration)().rendering;s.forEach((e=>{const t=i.imageIds[e],n={targetBuffer:{type:c?void 0:"Float32Array"},preScale:{enabled:!0},requestType:Pu};Q.imageLoadPoolManager.addRequest(d.bind(null,t,n),Pu,{imageId:t},Nu)}))}function ju(e){clearTimeout(Bu),Bu=setTimeout((function(){const t=e.target;try{zu(t),qu(t)}catch(e){return}}),5)}const zu=(e,t)=>{const n=Au(e);if(!n||!n.imageIds||0===n.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:i}=n;let{maxAfter:o=2,minBefore:a=2}=Gu;const{directionExtraImages:r=10}=Gu,s=xu(e)||{indicesToRequest:[],currentImageIdIndex:i,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=i-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=i,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>o||!l)if(s.stackCount=0,t){const e=i/n.imageIds.length;a=Math.ceil(t*e),o=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,o=0):(o+=s.stackCount,a=0);const d=Math.max(0,i-a),c=Math.min(n.imageIds.length-1,i+o),h=[];for(let e=i+1;e<=c;e++)h.push(e);for(let e=i-1;e>=d;e--)h.push(e);s.indicesToRequest=h,Ou(e,s)},Ku={enable:e=>{const t=Au(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");zu(e),qu(e),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju),e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju);const n=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(Bu),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju);const t=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=xu(e);n&&n.data.length&&(n.enabled=!1)},getConfiguration:function(){return Gu},setConfiguration:function(e){Gu=e}};function Yu(e,t){if(!(e instanceof Q.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),i=[0,0,0];return ys.vec3.sub(i,t,n),function(e,t){const n=e.getCamera(),i=n.viewPlaneNormal,o=ys.vec3.dot(t,i),a=ys.vec3.fromValues(i[0],i[1],i[2]);if(ys.vec3.scale(a,a,o),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],i=[0,0,0];ys.vec3.add(t,n.focalPoint,a),ys.vec3.add(i,n.position,a),e.setCamera({focalPoint:t,position:i}),e.render()}}(e,i),!0}const Xu=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 i=Q.cache.getVolume(t.maskVolumeId),[o,a]=function(e,t,n){const{imageData:i}=n,o=n.getScalarData(),a=o.length,r=[];r.length=a;const s=[],l=n.dimensions;let d=0;for(let e=0,t=o.length;e<t;e++)0!==o[e]&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[d++]=e);r.length=d;const c=t.getScalarDataArrays(),h=[];if(c[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 i=c[e];n.push(i[r[t]])})),h.push(n)}return[h,s]}return Cl(i,(()=>!0),(n=>{let{pointLPS:i,value:o,pointIJK:a}=n;if(0===o)return;const r=Gd(t.imageData,t.dimensions,t.spacing,i);let l=0;const d=new Map;e.forEach((e=>d.set(e,0)));Cl(t.imageData,(()=>!0),(t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const i=c[t][n],o=e[t];d.set(o,d.get(o)+i)}l++}),r);const g=[];d.forEach((e=>{g.push(e/l)})),s.push(a),h.push(g)})),[h,s]}(n,e,i);return[o,a]}if(t.imageCoordinate){const i=function(e,t,n){const{dimensions:i,imageData:o}=n,a=o.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!Q.utilities.indexWithinDimensions(a,i))throw new Error("outside bounds");const r=i[0],s=i[0]*i[1],l=n.getScalarDataArrays(),d=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];d.push(t[n])})),d}(n,t.imageCoordinate,e);return i}},Ju=function(e,t,n){const i=n||[...Array(e.numTimePoints).keys()],o=i.length;if(i.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===Q.Enums.DynamicOperatorType.SUM){for(let e=0;e<o;e++){const t=a[i[e]];for(let e=0;e<r;e++)s[e]+=t[e]}return s}if(t===Q.Enums.DynamicOperatorType.SUBTRACT){if(i.length>2)throw new Error("Please provide only 2 time points for subtraction.");for(let e=0;e<r;e++)s[e]+=a[i[0]][e]-a[i[1]][e];return s}if(t===Q.Enums.DynamicOperatorType.AVERAGE){for(let e=0;e<o;e++){const t=a[i[e]];for(let e=0;e<r;e++)s[e]+=t[e]}for(let e=0;e<r;e++)s[e]=s[e]/o;return s}};function Zu(e,t){if(t<e.length/3)return[e[3*t],e[3*t+1],e[3*t+2]]}function $u(e){const t=e.getLines().getData();let n=0;const i=new Map;for(;n<t.length;){const e=t[n++],o=[];for(let i=0;i<e;i++)o.push(t[n+i]);i.set(o[0],o),n+=e}const o=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(i);for(;-1!==r;){const e=[r];for(;i.has(r);){const t=i.get(r)[1];i.has(t)&&e.push(t),i.delete(r),r=t}o.push(e),r=a(i)}return o.length?o:void 0}function Qu(e){const t=$u(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Zu(n,e)))))}let ev=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const tv=e=>e&&e.upper>e.lower,nv=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,iv=e=>!!e&&e.width>0&&e.height>0,ov=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:av}=Q.utilities;class rv{constructor(e){ie(this,"_canvas",void 0),ie(this,"_imageRange",void 0),ie(this,"_voiRange",void 0),ie(this,"_colormap",void 0),ie(this,"_showFullImageRange",void 0),rv.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=i,this._voiRange=o,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;iv(e)&&!ov(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){tv(e)&&!nv(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){tv(e)&&!nv(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:i}=e;if(t&&!iv(t))throw new Error('Invalid "size"');if(n&&!tv(n))throw new Error('Invalid "imageRange"');if(i&&!tv(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(i,"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,i=e=>{const i=4*e;if(!(e<0||e>=n))return{index:e,position:t[i],color:[t[i+1],t[i+2],t[i+3]]}},{width:o,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=o>a,l=s?o:a,{_voiRange:d}=this,c=this._showFullImageRange?this._imageRange:{...d},{windowWidth:h}=Q.utilities.windowLevel.toWindowLevel(d.lower,d.upper);let g,u=i(0);const v=(c.upper-c.lower)/(l-1);let m=c.lower;for(let e=0;e<l;e++){const t=(m-d.lower)/h;if(u)for(let e=u.index;e<n&&!(t<=u.position);e++)g=u,u=i(e+1);let l;if(g)if(u){const e=(t-g.position)/(u.position-g.position);p=g.color,f=u.color,E=e,l=[p[0]*(1-E)+f[0]*E,p[1]*(1-E)+f[1]*E,p[2]*(1-E)+f[2]*E]}else l=[...g.color];else l=[...u.color];const c=l.map((e=>av(Math.round(255*e),0,255)));r.fillStyle="rgb(".concat(c[0],", ").concat(c[1],", ").concat(c[2],")"),s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,o,1),m+=v}var p,f,E}}const sv={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 lv{constructor(e){var t,n,i,o,a,r;ie(this,"_canvas",void 0),ie(this,"_imageRange",void 0),ie(this,"_voiRange",void 0),ie(this,"_color",void 0),ie(this,"_tickSize",void 0),ie(this,"_tickWidth",void 0),ie(this,"_labelMargin",void 0),ie(this,"_maxNumTicks",void 0),ie(this,"_rangeTextPosition",void 0),ie(this,"_showFullPixelValueRange",void 0),ie(this,"_font",void 0),lv.validateProps(e);const{top:s=0,left:l=0,size:d={width:20,height:100},imageRange:c={lower:0,upper:1},voiRange:h={lower:0,upper:1},ticks:g,container:u,showFullPixelValueRange:v=!1}=e,{style:m,position:p}=null!=g?g:{};this._imageRange=c,this._voiRange=h,this._font=null!==(t=null==m?void 0:m.font)&&void 0!==t?t:sv.FONT,this._color=null!==(n=null==m?void 0:m.color)&&void 0!==n?n:sv.COLOR,this._tickSize=null!==(i=null==m?void 0:m.tickSize)&&void 0!==i?i:sv.TICK_SIZE,this._tickWidth=null!==(o=null==m?void 0:m.tickWidth)&&void 0!==o?o:sv.TICK_WIDTH,this._labelMargin=null!==(a=null==m?void 0:m.labelMargin)&&void 0!==a?a:sv.TICK_LABEL_MARGIN,this._maxNumTicks=null!==(r=null==m?void 0:m.maxNumTicks)&&void 0!==r?r:sv.MAX_NUM_TICKS,this._rangeTextPosition=null!=p?p:ev.Right,this._showFullPixelValueRange=v,this._canvas=this._createCanvasElement(d,s,l),u&&this.appendTo(u)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;iv(e)&&!ov(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){tv(e)&&!nv(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){tv(e)&&!nv(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:i}=e;if(t&&!iv(t))throw new Error('Invalid "size"');if(n&&!tv(n))throw new Error('Invalid "imageRange"');if(i&&!tv(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(i,"px")})}_createCanvasElement(e,t,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:"".concat(t,"px"),left:"".concat(n,"px")}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:t,upper:n}=e,i=(n-t)/(this._maxNumTicks-1),o=Math.pow(10,-Math.floor(Math.log10(Math.abs(i)))),a=i*o,r=sv.TICKS_STEPS.find((e=>e>=a))/o,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,d=Math.round((s-l)/r)+1,c=[];for(let e=0;e<d;e++)c.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:c}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:i}=this._canvas;return{labelPoint:[i-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[i-this._tickSize,t],end:[i,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,i=t>=n,o=i?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:d}=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,d.forEach((e=>{let t=Math.round(o*((e-s.lower)/l));if(i||(t=n-t),t<0||t>o)return;const r=e.toString(),d=a.measureText(r);let c;c=i?this._rangeTextPosition===ev.Top?this._getTopTickInfo({position:t,labelMeasure:d}):this._getBottomTickInfo({position:t,labelMeasure:d}):this._rangeTextPosition===ev.Left?this._getLeftTickInfo({position:t,labelMeasure:d}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:g}=c,{start:u,end:v}=g;return a.beginPath(),a.moveTo(u[0],u[1]),a.lineTo(v[0],v[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class dv{constructor(e){let{id:t,container:n}=e;ie(this,"_id",void 0),ie(this,"_rootElement",void 0),ie(this,"_containerSize",void 0),ie(this,"_containerResizeObserver",void 0),ie(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:i,contentBoxSize:o}=e[0];i?(t=i.width,n=i.height):null!=o&&o.length&&(t=o[0].inlineSize,n=o[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:i}=t;e&&e!==i&&(i&&n.unobserve(i),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 cv={MULTIPLIER:1,RANGE_TEXT_POSITION:ev.Right,TICKS_BAR_SIZE:50};class hv extends dv{constructor(e){var t,n;super(e),ie(this,"_colormaps",void 0),ie(this,"_activeColormapName",void 0),ie(this,"_eventListenersManager",void 0),ie(this,"_canvas",void 0),ie(this,"_ticksBar",void 0),ie(this,"_rangeTextPosition",void 0),ie(this,"_isMouseOver",!1),ie(this,"_isInteracting",!1),ie(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),ie(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),ie(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),ie(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),i=this._getPointsFromMouseEvent(e),{points:o,voiRange:a}=t,r=ys.vec2.sub(ys.vec2.create(),i.local,o.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:d,upper:c}=a;let{windowWidth:h,windowCenter:g}=Q.utilities.windowLevel.toWindowLevel(d,c);h=Math.max(h+s,1),g+=l;const u=Q.utilities.windowLevel.toLowHighRange(h,g);this.voiRange=u,e.stopPropagation(),e.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new Q.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=hv.getColormapsMap(e),this._activeColormapName=hv.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:cv.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;tv(e)&&!nv(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[cv.MULTIPLIER,cv.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:i}=e,o=this._colormaps.get(this._activeColormapName);return new rv({colormap:o,imageRange:t,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const t=e.ticks;return new lv({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=t.getBoundingClientRect();return{client:n,page:i,local:[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=t,a=o?e:cv.TICKS_BAR_SIZE,r=o?cv.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[ev.Top,ev.Bottom]:[ev.Left,ev.Right]).includes(n)}(e,t,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},o?(l=0,s=i===ev.Top?-r:t):(s=0,l=i===ev.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:gv}=Q.Enums,uv={lower:-1e3,upper:1e3};class vv extends hv{constructor(e){const{element:t,volumeId:n}=e,i=vv._getImageRange(t,n),o=vv._getVOIRange(t,n);super({...e,imageRange:i,voiRange:o}),ie(this,"_element",void 0),ie(this,"_volumeId",void 0),ie(this,"_hideTicksTime",void 0),ie(this,"_hideTicksTimeoutId",void 0),ie(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)})),ie(this,"_stackNewImageCallback",(()=>{this.imageRange=vv._getImageRange(this._element)})),ie(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail.imageVolume;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=vv._getImageRange(n,t)})),ie(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:i}=e.detail,{viewport:o}=this.enabledElement;t===o.id&&n===this._volumeId&&(this.voiRange=i,this.showAndAutoHideTicks())})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,Q.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t,n){if("PT"===Q.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:i}=e.element,o=5/Math.max(n,i),a=Ec(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:o;return a?[s,o]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof Q.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof Q.VolumeViewport){const{_volumeId:n}=this,i=Q.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),i.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o)return uv;const a=o.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?uv:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o||!Q.utilities.isImageActor(o))return uv;const a=o.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?uv:{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;Q.eventTarget.addEventListener(gv.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(gv.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(gv.VOI_MODIFIED,this._viewportVOIModifiedCallback)}}const mv=Q.utilities.roundNumber,pv=function(e,t){let n=ts.getDefinedCursor(t,!0);n||(n=Ar.getDefinedCursor(t)),n||(console.log("Cursor ".concat(t," is not defined either as SVG or as a standard cursor.")),n=Ar.getDefinedCursor(t)),ss(e,n)},fv=[...Jr,...Lr],Ev=function(e,t,n){const i=$r("textBoxFontSize",e,t,n),o=$r("textBoxFontFamily",e,t,n);return"".concat(i,"px ").concat(o)};class wv{constructor(){ie(this,"annotationUIDs",new Set),ie(this,"_isVisible",!0),ie(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((i=>{const o=nt(i);if(!o)return void this.annotationUIDs.delete(i);if(o.isVisible===e)return;if(!e&&!1===(null==n?void 0:n(i)))return;o.isVisible=e;const a={...t,annotation:o};(0,Q.triggerEvent)(Q.eventTarget,te.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 i=n.indexOf(e);return-1===i||i+t<0||i+t>=n.length?null:n[i+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 Iv=function(e){if(!e||!e.length)throw new Error("The segmentationInputArray is undefined or empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("The segmentationInput.segmentationId is undefined, please provide a valid segmentationId");if(void 0===e.representation)throw new Error("The segmentationInput.representation is undefined, please provide a valid representation");e.representation.type===at.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");const t=e.representation.data;if("volumeId"in t&&!Q.cache.getVolume(t.volumeId))throw new Error("volumeId of ".concat(t.volumeId," not found in cache, you should load and cache volume before adding segmentation"))}(e)}))},_v=function(e){Iv(e),e.map((e=>{Ct(ae()(e))}))};function Cv(e){const{type:t}=e;return t===at.Labelmap?yo():{}}const bv=async function(e,t,n){if(!xi(e))throw new Error("No tool group found for toolGroupId: ".concat(e));const i=t.map((t=>async function(e,t,n){const{segmentationId:i,options:o={}}=t,a=Q.utilities.uuidv4(),r=new Set,s=o.colorLUTOrIndex;let l;if("number"==typeof s)l=s;else{const e=Ht();Bt(Array.isArray(s)?s:Es,e),l=e}const d={segmentationId:i,segmentationRepresentationUID:a,type:t.type,segmentsHidden:r,colorLUTIndex:l,active:!0,segmentationRepresentationSpecificConfig:{},segmentSpecificConfig:{},config:Cv(t)};if(n){const t=ki(e),i=Q.utilities.deepMerge(t,n);Li(e,{renderInactiveSegmentations:i.renderInactiveSegmentations||!0,representations:{...i.representations}})}return Nt(e,d),a}(e,t,n)));return await Promise.all(i)};async function Tv(e){var t,n;let{segmentationId:i,options:o}=e;const a=It(i),{toolGroupId:r}=o,s=a.representationData.LABELMAP.imageIdReferenceMap,l=Array.from(s.values()),d={imageIdReferenceMap:s},c=null==o?void 0:o.volumeId;await Q.volumeLoader.createAndCacheVolumeFromImages(c,l,{additionalDetails:d});const h=null!==(t=null==o?void 0:o.newSegmentationId)&&void 0!==t?t:Q.utilities.uuidv4();(null===(n=null==o?void 0:o.removeOriginal)||void 0===n||n)&&Lt(i),await _v([{segmentationId:h,representation:{type:at.Labelmap,data:{volumeId:c}}}]),await bv(r,[{segmentationId:h,type:at.Labelmap}]),ko(r),Q.eventTarget.addEventListenerOnce(te.SEGMENTATION_RENDERED,(()=>ft(h)))}async function Dv(e){var t,n;let{segmentationId:i,options:o}=e;const a=It(i),{toolGroupId:r}=o,s=a.representationData.LABELMAP,l=function(e){var t,n;const i=e.imageIds;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 jc(e.referencedImageIds,i);{var o,a,r;const t=e.referencedVolumeId,n=Q.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!==(a=n.imageIds)&&void 0!==a&&a[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 i=n.imageIds;let s=e.imageIds;return null!==(r=s)&&void 0!==r&&r.length||(s=e.convertToImageSlicesAndCache()),jc(i,s)}}(Q.cache.getVolume(s.volumeId)),d=null!==(t=null==o?void 0:o.newSegmentationId)&&void 0!==t?t:Q.utilities.uuidv4();(null===(n=null==o?void 0:o.removeOriginal)||void 0===n||n)&&Lt(i),await _v([{segmentationId:d,representation:{type:at.Labelmap,data:{imageIdReferenceMap:l}}}]),await bv(r,[{segmentationId:d,type:at.Labelmap}]),ko(r),Q.eventTarget.addEventListenerOnce(te.SEGMENTATION_RENDERED,(()=>ft(d)))}class Sv extends zi{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,i=(0,Q.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ie(Sv,"toolName",void 0),Sv.toolName="Pan";const yv=Sv;class Mv extends zi{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"rotateCamera",((e,t,n,i)=>{const o=e.getVtkActiveCamera(),a=o.getViewUp(),r=o.getFocalPoint(),s=o.getPosition(),l=[0,0,0],d=[0,0,0],c=[0,0,0],h=ys.mat4.identity(new Float32Array(16));ys.mat4.translate(h,h,t),ys.mat4.rotate(h,h,i,n),ys.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),ys.vec3.transformMat4(l,s,h),ys.vec3.transformMat4(d,r,h),ys.mat4.identity(h),ys.mat4.rotate(h,h,i,n),ys.vec3.transformMat4(c,a,h),e.setCamera({position:l,viewUp:c,focalPoint:d})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,Q.getEnabledElement)(t),{viewport:l}=s,d=l.getCamera(),c=t.clientWidth,h=t.clientHeight,g=[o[0]/c,o[1]/h],u=[a[0]/c,a[1]/h],v=[.5*c,.5*h],m=l.canvasToWorld(v),p=(1+Math.abs(.5))**2,f=[u[0],0,0],E=[g[0],0,0],w=f[0]**2,I=E[0]**2,_=w>p?0:Math.sqrt(p-w),C=I>p?0:Math.sqrt(p-I),b=[f[0],0,_];Oh().normalize(b);const T=[E[0],0,C];Oh().normalize(T);const D=Oh().dot(b,T);if(Math.abs(D)>1e-4){const e=-2*Math.acos(Oh().clampValue(D,-1,1))*Math.sign(g[0]-u[0])*r,t=d.viewUp,n=d.viewPlaneNormal,i=[0,0,0],o=[0,0,0];Oh().cross(t,n,i),Oh().normalize(i),Oh().cross(n,i,o),Oh().normalize(o),Oh().normalize(t),this.rotateCamera(l,m,o,e);const a=(u[1]-g[1])*r;this.rotateCamera(l,m,i,a),l.render()}}}ie(Mv,"toolName",void 0),Mv.toolName="TrackballRotate";const Ov=Mv,{transformWorldToIndex:xv}=Q.utilities;class Pv extends dc{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:Nv}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"eventDispatchDetail",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,r=(0,Q.getEnabledElement)(n),{renderingEngine:s}=r,{viewportId:l}=r;if(this.eventDispatchDetail={viewportId:l,renderingEngineId:s.id},this._deactivateModify(n),ls(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(s,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...o],a.invalidated=!0;const l=(0,Q.getEnabledElement)(i),{renderingEngine:d}=l;or(d,r)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],r=i.annotationUID,h=i.data,g=h.handles.points[0],u=a.worldToCanvas(g);c.annotationUID=r;const v=this.getStyle("color",c,i);if(h.cachedStats[l]&&null!=h.cachedStats[l].value){if(i.invalidated&&(this._calculateCachedStats(i,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,index:null,value:null},this._calculateCachedStats(i,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;qs(t,r,"0",[u],{color:v}),o=!0;const m=this.getLinkedTextBoxStyle(c,i);if(!m.visibility)continue;const p=this.configuration.getTextLines(h,l);if(p){const e=[u[0]+6,u[1]-6];Xs(t,r,"0",p,[e[0],e[1]],m)}}return o}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==ys.vec2.distance(n,l)<i)return s}handleSelectedCallback(e,t){const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a,viewport:r}=n,s=i.handles.points[0],{cachedStats:l}=i,d=Object.keys(l);for(let n=0;n<d.length;n++){const i=d[n],c={isPreScaled:Ec(r,i),isSuvScaled:this.isSuvScaled(r,i,e.metadata.referencedImageId)},h=this.getTargetIdImage(i,t);if(!h)continue;const{dimensions:g,imageData:u,metadata:v}=h,m="getScalarData"in h?h.getScalarData():h.scalarData,p=v.Modality,f=xv(u,s);f[0]=Math.round(f[0]),f[1]=Math.round(f[1]),f[2]=Math.round(f[2]);const E=m.length/g[2]/g[1]/g[0];if(Q.utilities.indexWithinDimensions(f,g)){this.isHandleOutsideImage=!1;const t=g[0]*E,n=g[0]*g[1]*E,o=f[2]*n+f[1]*t+f[0]*E;let r,s=E>2?[m[o],m[o+1],m[o+2]]:m[o];if(i.startsWith("imageId:")){const e=i.split("imageId:")[1],t=Q.utilities.imageIdToURI(e),n=Q.utilities.getViewportsWithImageURI(t,a)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=Il(h,[f]),t=e.values.every((e=>null!==e));s=t?e.values:s,r=t?e.units:"raw"}else r=fc(p,e.metadata.referencedImageId,c);l[i]={index:f,value:s,Modality:p,modalityUnit:r}}else this.isHandleOutsideImage=!0,l[i]={index:f,Modality:p};e.invalidated=!1;const w=te.ANNOTATION_MODIFIED,I={annotation:e,viewportId:o,renderingEngineId:a};(0,Q.triggerEvent)(Q.eventTarget,w,I)}return l}}function Nv(e,t){const n=e.cachedStats[t],{index:i,value:o,modalityUnit:a}=n;if(void 0===o)return;const r=[];if(r.push("(".concat(i[0],", ").concat(i[1],", ").concat(i[2],")")),o instanceof Array&&a instanceof Array)for(let e=0;e<o.length;e++)r.push("".concat(mv(o[e])," ").concat(a[e]));else r.push("".concat(mv(o)," ").concat(a));return r}ie(Pv,"toolName",void 0),Pv.toolName="Probe";const Rv=Pv;class Av extends Rv{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:kv}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"eventDispatchDetail",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}},u=Qd(i,this.getToolName());return this.editData={annotation:g,newAnnotation:!0,viewportIdsToRender:u},this._activateModify(i),ds(i),e.preventDefault(),or(s,u),g})),ie(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;if(!this.editData)return n;const o=this.filterInteractableAnnotationsForElement(i.element,[this.editData.annotation]);if(null==o||!o.length)return n;const a=this.getTargetId(i),r=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,d=l.annotationUID,c=l.data,h=c.handles.points[0],g=i.worldToCanvas(h);s.annotationUID=d;const u=this.getStyle("color",s,l);if(Ec(i,a),this.isSuvScaled(i,a,l.metadata.referencedImageId),c.cachedStats[a]&&null!=c.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(c.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;qs(t,d,"0",[g],{color:u}),n=!0;const v=this.configuration.getTextLines(c,a);if(v){const e=[g[0]+6,g[1]-6];Xs(t,d,"0",v,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function kv(e,t){const n=e.cachedStats[t],{index:i,value:o,modalityUnit:a}=n;if(void 0===o)return;const r=[];return r.push("(".concat(i[0],", ").concat(i[1],", ").concat(i[2],")")),r.push("".concat(o.toFixed(2)," ").concat(a)),r}ie(Av,"toolName",void 0),Av.toolName="DragProbe";const Lv=Av;class Uv extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ie(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),i=t[0]*t[1];let o,a;e instanceof Float32Array?(o=4,a=Float32Array):e instanceof Uint8Array?(o=1,a=Uint8Array):e instanceof Uint16Array?(o=2,a=Uint16Array):e instanceof Int16Array&&(o=2,a=Int16Array);const r=new a(e.buffer,n*i*o,i),{max:s,min:l}=this._getMinMax(r,i);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),{renderingEngine:o,viewport:a}=i;let r,s,l,d,c,h,g=!1;const u=a.getProperties();if(a instanceof Q.VolumeViewport){r=this.getTargetId(a).split("volumeId:")[1],h=Q.utilities.getViewportsWithVolumeId(r,o.id),({lower:s,upper:l}=u.voiRange);const e=Q.cache.getVolume(r);if(!e)throw new Error("Volume not found "+r);d=e.metadata.Modality,g=e.scaling&&Object.keys(e.scaling).length>0}else{if(!u.voiRange)throw new Error("Viewport is not a valid type");{var v,m;d=a.modality,({lower:s,upper:l}=u.voiRange);const{preScale:e={scaled:!1}}=(null===(v=a.getImageData)||void 0===v?void 0:v.call(a))||{};g=e.scaled&&void 0!==(null===(m=e.scalingParameters)||void 0===m?void 0:m.suvbw)}}c="PT"===d?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:g,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),a.setProperties({voiRange:c}),a.render(),a instanceof Q.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()}))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:i,clientHeight:o,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/o:this._getMultiplierFromDynamicRange(a,r)||4,i-=t[1]*l,i=s?Math.max(i,.1):i,{lower:n,upper:i}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:i,lower:o,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,i)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:d,windowCenter:c}=Q.utilities.windowLevel.toWindowLevel(o,a);return d+=s,c+=l,d=Math.max(d,1),Q.utilities.windowLevel.toLowHighRange(d,c)}_getMultiplierFromDynamicRange(e,t){let n;if(t){var i;const e=Q.cache.getVolume(t),{dimensions:o}=e,a=e.getScalarData(),r=this._getImageDynamicRangeFromMiddleSlice(a,o),s=null==e||null===(i=e.metadata)||void 0===i?void 0:i.BitsStored,l=s?2**s:1/0;n=Math.min(r,l)}else n=this._getImageDynamicRangeFromViewport(e);const o=n/1024;let a=4;return o>1&&(a=Math.round(o)),a}_getImageDynamicRangeFromViewport(e){const{imageData:t}=e.getImageData(),n=t.getDimensions();if(t.getRange)return t.getRange();let i,o;if(i=t.getScalarData?t.getScalarData():t.getPointData().getScalars(),1!==n[2])return this._getImageDynamicRangeFromMiddleSlice(i,n);if(i.getRange)o=i.getRange();else{const{min:e,max:t}=this._getMinMax(i,i.length);o=[e,t]}return o[1]-o[0]}_getMinMax(e,t){let n=1/0,i=-1/0;for(let o=0;o<t;o++){const t=e[o];t<n&&(n=t),t>i&&(i=t)}return{max:i,min:n}}}ie(Uv,"toolName",void 0),Uv.toolName="WindowLevel";const Vv=Uv;class Wv extends zi{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,ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"initialMousePosWorld",void 0),ie(this,"dirVec",void 0),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=i.world,a=(0,Q.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=o;let s=ys.vec3.fromValues(r[0]-o[0],r[1]-o[1],r[2]-o[2]);return s=ys.vec3.normalize(ys.vec3.create(),s),this.dirVec=s,!1})),ie(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),ie(this,"_dragParallelProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:d,focalPoint:c,position:h}=i,g=s*(5/l[1])*(e.configuration.invert?-1:1),u=(1-g)*d;let v=c,m=h;if(!e.configuration.zoomToCenter){const t=ys.vec3.distance(c,e.initialMousePosWorld);m=ys.vec3.scaleAndAdd(ys.vec3.create(),h,e.dirVec,-t*g),v=ys.vec3.scaleAndAdd(ys.vec3.create(),c,e.dirVec,-t*g)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:E,maxZoomScale:w}=e.configuration,I=a.clientHeight*f[1]*.5,_=I/u;let C=u,b=!1;p&&(_<E?(C=I/E,b=!0):_>=w&&(C=I/w,b=!0)),n.setCamera({parallelScale:C,focalPoint:b?c:v,position:b?h:m})})),ie(this,"_dragPerspectiveProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:d,focalPoint:c,viewPlaneNormal:h}=i,g=Oh().distance2BetweenPoints(d,c),u=Math.sqrt(g)/l[1],v=[-h[0],-h[1],-h[2]],m=e.configuration.invert?s/u:s*u;let p=m*v[0];d[0]+=p,c[0]+=p,p=m*v[1],d[1]+=p,c[1]+=p,p=m*v[2],d[2]+=p,c[2]+=p,n.setCamera({position:d,focalPoint:c})})),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,i=(0,Q.getEnabledElement)(t),{viewport:o}=i,a=o.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=ys.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=ys.vec3.normalize(ys.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,o,a,!0):this._dragPerspectiveProjection(e,o,a,!0),o.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,Q.getEnabledElement)(t),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ie(Wv,"toolName",void 0),Wv.toolName="Zoom";const Fv=Wv;class Hv extends zi{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}}),ie(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:i}=e.detail,{viewport:o}=(0,Q.getEnabledElementByIds)(n,i),a=this.getTargetId(o),{debounceIfNotLoaded:r,invert:s,loop:l}=this.configuration,d=t.canvas[1];let c;o instanceof Q.VolumeViewport&&(c=a.split("volumeId:")[1]);const h=this._getPixelPerImage(o),g=d+this.deltaY;if(h)if(Math.abs(g)>=h){const e=Math.round(g/h);Os(o,{delta:s?-e:e,volumeId:c,debounceLoading:r,loop:l}),this.deltaY=g%h}else this.deltaY=g}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}ie(Hv,"toolName",void 0),Hv.toolName="StackScroll";const Bv=Hv;function Gv(e,t){return 3===e[0].length?function(e,t){const[n,i]=e,[o,a]=t,r=ys.vec3.sub(ys.vec3.create(),i,n),s=ys.vec3.sub(ys.vec3.create(),o,a),l=ys.vec3.dot(r,s)/(ys.vec3.length(r)*ys.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,i]=e,[o,a]=t,r=ys.vec2.sub(ys.vec2.create(),i,n),s=ys.vec2.sub(ys.vec2.create(),o,a),l=ys.vec2.dot(r,s)/(ys.vec2.length(r)*ys.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class qv extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,r=(0,Q.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),d=[.5*t.clientWidth,.5*t.clientHeight],c=s.canvasToWorld(d);let h=Gv([a,c],[c,o]);const{viewPlaneNormal:g,viewUp:u}=l,v=ys.vec3.sub(ys.vec3.create(),c,a),m=ys.vec3.sub(ys.vec3.create(),c,o),p=ys.vec3.cross(ys.vec3.create(),v,m);if(ys.vec3.dot(g,p)>0&&(h=-h),!Number.isNaN(h)){if(s instanceof Q.BaseVolumeViewport){const e=h*Math.PI/180,t=ys.mat4.identity(new Float32Array(16));ys.mat4.rotate(t,t,e,g);const n=ys.vec3.transformMat4(ys.vec3.create(),u,t);s.setCamera({viewUp:n})}else{const{rotation:e}=s.getProperties();s.setProperties({rotation:e+h})}s.render()}}}ie(qv,"toolName",void 0),qv.toolName="PlanarRotate";const jv=qv;class zv extends zi{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}}),ie(this,"_configuration",void 0)}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,Q.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetId(a).split("volumeId:")[1];Os(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}}ie(zv,"toolName",void 0),zv.toolName="StackScrollMouseWheel";const Kv=zv,Yv={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class Xv extends zi{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:Yv.Z,rotateIncrementDegrees:30}}),ie(this,"_configuration",void 0)}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,i=(0,Q.getEnabledElement)(t),{viewport:o}=i,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=o.getCamera(),{viewUp:l,position:d,focalPoint:c}=s,{direction:h}=n,[g,u,v]=c,[m,p,f]=a,E=h*(r*Math.PI)/180,w=[0,0,0],I=[0,0,0],_=[0,0,0],C=ys.mat4.identity(new Float32Array(16));ys.mat4.translate(C,C,[g,u,v]),ys.mat4.rotate(C,C,E,[m,p,f]),ys.mat4.translate(C,C,[-g,-u,-v]),ys.vec3.transformMat4(w,d,C),ys.vec3.transformMat4(I,c,C),ys.mat4.identity(C),ys.mat4.rotate(C,C,E,[m,p,f]),ys.vec3.transformMat4(_,l,C),o.setCamera({position:w,viewUp:_,focalPoint:I}),o.render()}}ie(Xv,"toolName",void 0),Xv.toolName="VolumeRotateMouseWheel";const Jv=Xv;class Zv extends zi{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:[]}}),ie(this,"_bounds",void 0)}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,r=this.getTargetId(o);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=r.split("volumeId:")[1];let l=-1/0;const d=xh(o,n.world,s,((e,t)=>{if(e>l)return l=e,t}));if(!d||!d.length)return;const{targetViewportIds:c,toolGroupId:h}=this.configuration;a.getViewports().filter((e=>{if((null==c?void 0:c.indexOf(e.id))>=0)return!0;const t=Mi(e.id,a.id);return!(!h||h!==(null==t?void 0:t.id))})).forEach((e=>{e instanceof Q.VolumeViewport?Yu(e,d):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}ie(Zv,"toolName",void 0),Zv.toolName="MIPJumpToClickTool";const $v=Zv,{transformWorldToIndex:Qv}=Q.utilities;class em extends dc{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:tm}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return uc([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles;c.annotationUID=r;const v=this.getStyle("lineWidth",c,i),m=this.getStyle("lineDash",c,i),p=this.getStyle("color",c,i),f=this.getStyle("shadow",c,i),E=g.map((e=>a.worldToCanvas(e)));let w;if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(i,d,e)),!Pe(r))continue;ce(i)||this.editData||null===u||(w=[E[u]]),w&&qs(t,r,"0",E,{color:p,lineDash:m,lineWidth:v});const I="".concat(r,"-line");if(js(t,r,"1",E[0],E[1],{color:p,width:v,lineDash:m,shadow:f},I),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const _=this.getLinkedTextBoxStyle(c,i);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 C=this.configuration.getTextLines(h,l);if(!h.handles.textBox.hasMoved){const e=mc(E);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),T=Zs(t,r,"1",C,b,E,{},_),{x:D,y:S,width:y,height:M}=T;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([D,S]),topRight:a.canvasToWorld([D+y,S]),bottomLeft:a.canvasToWorld([D,S+M]),bottomRight:a.canvasToWorld([D+y,S+M])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n,r=i.handles.points[0],s=i.handles.points[1],{cachedStats:l}=i,d=Object.keys(l);for(let e=0;e<d.length;e++){const n=d[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:a}=i,c=Qv(o,r),h=Qv(o,s),g=[c,h],{scale:u,units:v}=wl(i,g),m=this._calculateLength(r,s)/u;this._isInsideVolume(c,h,a)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,l[n]={length:m,unit:v}}e.invalidated=!1;const c=te.ANNOTATION_MODIFIED,h={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,c,h),l}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function tm(e,t){const n=e.cachedStats[t],{length:i,unit:o}=n;if(null!=i&&!isNaN(i))return["".concat(mv(i)," ").concat(o)]}ie(em,"toolName",void 0),em.toolName="Length";const nm=em;var im=C(847),om=C.n(im);const{RENDERING_DEFAULTS:am}=Q.CONSTANTS;function rm(){return"rgb(0, 200, 0)"}function sm(){return!0}function lm(){return!0}function dm(){return!0}class cm extends dc{constructor(){var e,t,n,i;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(o,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:Q.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),ie(this,"toolCenter",[0,0,0]),ie(this,"_getReferenceLineColor",void 0),ie(this,"_getReferenceLineControllable",void 0),ie(this,"_getReferenceLineDraggableRotatable",void 0),ie(this,"_getReferenceLineSlabThicknessControlsOn",void 0),ie(this,"editData",void 0),ie(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,Q.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:o,viewport:a}=i,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:d}=a.getCamera();let c=this._getAnnotations(i);return c=this.filterInteractableAnnotationsForElement(r,c),c.length&&tt(c[0].annotationUID),Qe({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:o,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:d,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),ie(this,"_getViewportsInfo",(()=>xi(this.toolGroupId).viewportsInfo)),ie(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)throw new Error("For crosshairs to operate, at least two viewports must be given.");const[t,n,i]=e,{normal:o,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],d=ys.vec3.create();i?({normal:l,point:d}=this.initializeViewport(i)):(ys.vec3.add(d,a,s),ys.vec3.scale(d,d,.5),ys.vec3.cross(l,o,r));const c=Q.utilities.planar.planeEquation(o,a),h=Q.utilities.planar.planeEquation(r,s),g=Q.utilities.planar.planeEquation(l,d);this.toolCenter=Q.utilities.planar.threePlaneIntersection(c,h,g);const{renderingEngine:u}=(0,Q.getEnabledElementByIds)(e[0].viewportId,e[0].renderingEngineId);or(u,e.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.world,a=(0,Q.getEnabledElement)(n),{viewport:r}=a;this._jump(a,o);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:d}=l[0],{rotationPoints:c}=d.handles,h=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],n=this._getReferenceLineControllable(t.id),i=this._getReferenceLineDraggableRotatable(t.id);n&&i&&(h.push(t.id),e++)}return d.activeViewportIds=[...h],d.handles.activeOperation=1,e.preventDefault(),ds(n),this._activateModify(n),l[0]})),ie(this,"cancel",(()=>{console.log("Not implemented yet")})),ie(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0,this._activateModify(i),ds(i),e.preventDefault()})),ie(this,"isPointNearTool",((e,t,n,i)=>!!this._pointNearTool(e,t,n,6))),ie(this,"toolSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i;t.highlighted=!0,this._activateModify(o),ds(o),e.preventDefault()})),ie(this,"onCameraModified",(e=>{var t;const n=e.detail,{element:i}=n,o=(0,Q.getEnabledElement)(i),{renderingEngine:a}=o,r=o.viewport,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const d=r.getCamera(),c=l.metadata.cameraPosition,h=[0,0,0];Oh().subtract(d.position,c,h);const g=l.metadata.cameraFocalPoint,u=[0,0,0];Oh().subtract(d.focalPoint,g,u),l.metadata.cameraPosition=[...d.position],l.metadata.cameraFocalPoint=[...d.focalPoint];const v=this._getReferenceLineControllable(r.id),m=this._getReferenceLineDraggableRotatable(r.id);if(!Q.utilities.isEqual(d.position,c,.001)&&v&&m){let e=!1;Q.utilities.isEqual(h,u,.001)||(e=!0);const t=Math.abs(Oh().dot(h,d.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&&Mi(r.id,a.id).getViewportIds().filter((e=>e!==r.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,a)}));const p=Qd(i,this.getToolName(),!1);or(a,p)})),ie(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(let e=0;e<t.length;e++){const i=t[e];if(ce(i))continue;const{data:r,highlighted:s}=i;if(!r.handles)continue;const l=r.handles.activeOperation,d=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let c=!1;c=!!this.getHandleNearImagePoint(n,i,o,6)||this._pointNearTool(n,i,o,6),c&&!s||!c&&s?(i.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,d)||(a=!0)}return a})),ie(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;return t.filter((e=>e.data.viewportId===i))})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,renderingEngine:o}=e,{element:a}=i,r=this._getAnnotations(e),s=i.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(null==r||!r.length||null==l||!l.data)return n;const d=l.annotationUID,{clientWidth:c,clientHeight:h}=i.canvas,g=Math.sqrt(c*c+h*h),u=Math.min(c,h),v=l.data,m=i.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],E=[0,0,c,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=o.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),d=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:c,clientHeight:h}=n.canvas,v=Math.sqrt(c*c+h*h),w=[.5*c,.5*h],I=n.canvasToWorld(w),_=[0,0,0];Oh().cross(s.viewPlaneNormal,a.viewPlaneNormal,_),Oh().normalize(_),Oh().multiplyScalar(_,v);const C=[0,0,0];Oh().add(I,_,C);const b=[0,0,0];Oh().subtract(I,_,b);const T=i.worldToCanvas(C),D=i.worldToCanvas(I),S=ys.vec2.create();ys.vec2.subtract(S,T,D),ys.vec2.normalize(S,S);const y=ys.vec2.create();ys.vec2.scale(y,S,100*g);const M=ys.vec2.create();ys.vec2.scale(M,S,.4*u);const O=ys.vec2.create();ys.vec2.scale(O,S,.2*u);const x=ys.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;ys.vec2.scale(x,S,2===p.length?P:0);const N=ys.vec2.create(),R=ys.vec2.create(),A=ys.vec2.create(),k=ys.vec2.create();let L=ys.vec2.clone(m);l&&r||(L=ys.vec2.clone(D)),ys.vec2.add(N,L,x),ys.vec2.add(R,L,y),ys.vec2.subtract(A,L,x),ys.vec2.subtract(k,L,y),yh(N,R,E),yh(A,k,E);const U=ys.vec2.create();ys.vec2.subtract(U,m,M);const V=ys.vec2.create();ys.vec2.add(V,m,M);let W=ys.vec2.clone(m);!l&&d&&(W=ys.vec2.clone(D));let F=[...this.toolCenter];!l&&d&&(F=[...I]);const H=[0,0,0];Oh().subtract(C,b,H),Oh().normalize(H);const{viewPlaneNormal:B}=s,{matrix:G}=om().buildFromDegree().rotate(90,B),q=[0,0,0];ys.vec3.transformMat4(q,H,G);const j=n.getSlabThickness(),z=[...q];Oh().multiplyScalar(z,j);const K=[0,0,0];Oh().add(F,z,K);const Y=i.worldToCanvas(K),X=ys.vec2.create();ys.vec2.subtract(X,W,Y);const J=ys.vec2.create();ys.vec2.subtract(J,W,y),ys.vec2.add(J,J,X);const Z=ys.vec2.create();ys.vec2.add(Z,W,y),ys.vec2.add(Z,Z,X),yh(J,Z,E);const $=ys.vec2.create();ys.vec2.add($,W,y),ys.vec2.subtract($,$,X);const Q=ys.vec2.create();ys.vec2.subtract(Q,W,y),ys.vec2.subtract(Q,Q,X),yh($,Q,E);const ee=ys.vec2.create(),te=ys.vec2.create(),ne=ys.vec2.create(),ie=ys.vec2.create();ys.vec2.subtract(ee,W,O),ys.vec2.add(ee,ee,X),ys.vec2.add(te,W,O),ys.vec2.add(te,te,X),ys.vec2.subtract(ne,W,O),ys.vec2.subtract(ne,ne,X),ys.vec2.add(ie,W,O),ys.vec2.subtract(ie,ie,X),f.push([n,N,R,A,k,J,Z,$,Q,U,V,ee,te,ne,ie])}));const w=[],I=[],_=this._getReferenceLineColor(i.id),C=void 0!==_?_:"rgb(200, 200, 200)";return f.forEach(((e,n)=>{var o,a;const r=e[0],s=this._getReferenceLineColor(r.id),l=this._getReferenceLineControllable(r.id),c=this._getReferenceLineDraggableRotatable(r.id)||(null===(o=this.configuration.mobile)||void 0===o?void 0:o.enabled),h=this._getReferenceLineSlabThicknessControlsOn(r.id)||(null===(a=this.configuration.mobile)||void 0===a?void 0:a.enabled),g=v.activeViewportIds.find((e=>e===r.id));let u=void 0!==s?s:"rgb(200, 200, 200)",m=1;const p=null!==v.handles.activeOperation&&1===v.handles.activeOperation&&g;p&&(m=2.5);let f="".concat(n);if(l&&c?(f="".concat(n,"One"),js(t,d,f,e[1],e[2],{color:u,lineWidth:m}),f="".concat(n,"Two"),js(t,d,f,e[3],e[4],{color:u,lineWidth:m})):js(t,d,f,e[2],e[4],{color:u,lineWidth:m}),l){var E;u=void 0!==s?s:"rgb(200, 200, 200)";const o=2===v.handles.activeOperation,a=[e[9],e[10]],l=[i.canvasToWorld(e[9]),r,e[1],e[2]],m=[i.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=[i.canvasToWorld(e[11]),r,e[5],e[6]],F=[i.canvasToWorld(e[12]),r,e[5],e[6]],H=[i.canvasToWorld(e[13]),r,e[7],e[8]],B=[i.canvasToWorld(e[14]),r,e[7],e[8]];if(I.push(W,F,H,B),(p||null!==(E=this.configuration.mobile)&&void 0!==E&&E.enabled)&&!o&&!U&&c&&h){var _,C,b,T,D,S,y,M;let e="".concat(n,"One");qs(t,d,e,a,{color:u,handleRadius:null!==(_=this.configuration.mobile)&&void 0!==_&&_.enabled?null===(C=this.configuration.mobile)||void 0===C?void 0:C.handleRadius:3,opacity:null!==(b=this.configuration.mobile)&&void 0!==b&&b.enabled?null===(T=this.configuration.mobile)||void 0===T?void 0:T.opacity:1,type:"circle"}),e="".concat(n,"Two"),qs(t,d,e,V,{color:u,handleRadius:null!==(D=this.configuration.mobile)&&void 0!==D&&D.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&&!o&&!U&&c){var O,x,P,N;const e="".concat(n);qs(t,d,e,a,{color:u,handleRadius:null!==(O=this.configuration.mobile)&&void 0!==O&&O.enabled?null===(x=this.configuration.mobile)||void 0===x?void 0:x.handleRadius:3,opacity:null!==(P=this.configuration.mobile)&&void 0!==P&&P.enabled?null===(N=this.configuration.mobile)||void 0===N?void 0:N.opacity:1,type:"circle"})}else if(g&&!o&&!U&&h){var R,A,k,L;const e="".concat(n);qs(t,d,e,V,{color:u,handleRadius:null!==(R=this.configuration.mobile)&&void 0!==R&&R.enabled?null===(A=this.configuration.mobile)||void 0===A?void 0:A.handleRadius:3,opacity:null!==(k=this.configuration.mobile)&&void 0!==k&&k.enabled?null===(L=this.configuration.mobile)||void 0===L?void 0:L.opacity:1,type:"rect"})}else if(o&&c){const e="".concat(n);qs(t,d,e,a,{color:u,handleRadius:2,fill:u,type:"circle"})}else U&&g&&h&&qs(t,d,f,V,{color:u,handleRadius:2,fill:u,type:"rect"});r.getSlabThickness()>.5&&h&&(f="".concat(n,"STOne"),js(t,d,f,e[5],e[6],{color:u,width:1,lineDash:[2,3]}),f="".concat(n,"STTwo"),js(t,d,f,e[7],e[8],{color:u,width:e,lineDash:[2,3]}))}})),n=!0,v.handles.rotationPoints=w,v.handles.slabThicknessPoints=I,this.configuration.viewportIndicators&&Fs(t,d,"0",[.95*c,.05*h],.01*g,{color:C,fill:C}),n})),ie(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=$e(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return i.includes(t.viewportId)}))})),ie(this,"_onNewVolume",(e=>{const t=this._getViewportsInfo();this.computeToolCenter(t)})),ie(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let i=0;i<t.length;++i)if(e===t[i]){n=!0;break}if(!1===n)return!1})),!0))),ie(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:i,viewport:o}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=o.getCamera(),{viewPlaneNormal:s,position:l}=r,d=a.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(Q.utilities.isEqual(n.viewPlaneNormal,s,.01)&&Q.utilities.isEqual(n.position,l,1))}));return d})),ie(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:i}=e,{data:o}=t,a=i.getViewport(o.viewportId),r=n.filter((e=>{const{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return Oh().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),o=n.viewPlaneNormal;return Oh().normalize(o),Q.utilities.isEqual(l,o,.01)&&Q.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),ie(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:i}=e,o=i.getCamera().viewPlaneNormal;Oh().normalize(o);const a=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:i}=t.data,s=n.getViewport(i).getCamera(),l=s.viewPlaneNormal;if(Oh().normalize(l),Q.utilities.isEqual(o,l,.01)||Q.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,s.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,s.position,1)&&(d=!0)}d||r.push(t)}const s=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),l=a.viewPlaneNormal;if(Oh().normalize(l),Q.utilities.isEqual(o,l,.01)||Q.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||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:i}=t.data,a=n.getViewport(i).getCamera(),s=a.viewPlaneNormal;if(Oh().normalize(s),Q.utilities.isEqual(o,s,.01)||Q.utilities.isOpposite(o,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}return r})),ie(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),i=t.getActors();let o=!0;return n.forEach((e=>{n.length===i.length&&void 0!==i.find((t=>{let{uid:n}=t;return n===e.uid}))||(o=!1)})),o})),ie(this,"_jump",((e,t)=>{Ge.isInteractingWithTool=!0;const{viewport:n,renderingEngine:i}=e,o=this._getAnnotations(e),a=[0,0,0];Oh().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,o).filter((e=>{const{data:t}=e,o=i.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,o);return this._getReferenceLineControllable(o.id)&&this._getReferenceLineDraggableRotatable(o.id)&&a}));return 0===r.length?(Ge.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(i,r,a),Ge.isInteractingWithTool=!1,!0)})),ie(this,"_activateModify",(e=>{var t;Ge.isInteractingWithTool=!(null!==(t=this.configuration.mobile)&&void 0!==t&&t.enabled),e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(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),ls(n),this.editData=null;const i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i,a=Qd(n,this.getToolName(),!1);or(o,a)})),ie(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:i}=t,o=(0,Q.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const{handles:d}=l.data,{currentPoints:c}=e.detail,h=c.canvas;if(1===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o})),n=ys.vec2.create(),i=ys.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],d=r.worldToCanvas(l),c=t.currentPoints.canvas,h=ys.vec2.create();ys.vec2.sub(h,c,t.deltaPoints.canvas),ys.vec2.sub(n,h,d),ys.vec2.sub(i,c,d);let g=ys.vec2.angle(n,i);this._isClockWise(d,h,c)&&(g*=-1),g=Math.round(100*g)/100;const u=r.getCamera().viewPlaneNormal,{matrix:v}=om().buildFromRadian().translate(l[0],l[1],l[2]).rotate(g,u).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),i=n.getCamera(),{viewUp:o,position:r,focalPoint:s}=i;o[0]+=r[0],o[1]+=r[1],o[2]+=r[2],ys.vec3.transformMat4(s,s,v),ys.vec3.transformMat4(r,r,v),ys.vec3.transformMat4(o,o,v),o[0]-=r[0],o[1]-=r[1],o[2]-=r[2],n.setCamera({position:r,viewUp:o,focalPoint:s}),m.push(n.id)})),a.renderViewports(m)}else if(3===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const i=this._filterViewportWithSameOrientation(o,e[0],s),d=[];d.push(r.id),i.forEach((e=>{const{data:i}=e,o=a.getViewport(i.viewportId),s=o.getCamera().viewPlaneNormal,c=Oh().dot(n,s),g=[...s];if(Oh().multiplyScalar(g,c),Math.abs(g[0])>.001||Math.abs(g[1])>.001||Math.abs(g[2])>.001){const e=Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]),n=t.lastPoints.world,i=[0,0,0],c=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(o.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===o.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);Oh().add(e,n,c),Oh().multiplyScalar(c,.5)}}Oh().subtract(n,c,i);const u=Oh().dot(i,s),v=[...s];Oh().multiplyScalar(v,u);const m=[v[0],v[1],v[2]];ys.vec3.normalize(m,m);const p=[g[0],g[1],g[2]];ys.vec3.normalize(p,p);let f=o.getSlabThickness();Q.utilities.isOpposite(m,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(am.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,o)&&(f=am.MINIMUM_SLAB_THICKNESS),Mi(o.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(o,f),d.push(o.id)}})),a.renderViewports(d)}})),ie(this,"_pointNearReferenceLine",((e,t,n,i)=>{const{data:o}=e,{rotationPoints:a}=o.handles;for(let e=0;e<a.length-1;++e){const o=a[e][1];if(o.id!==i.id)continue;if(!this._getReferenceLineControllable(o.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=uc([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]}},d=uc([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||d<=n)return!0;e++}return!1})),this._getReferenceLineColor=(null===(e=o.configuration)||void 0===e?void 0:e.getReferenceLineColor)||rm,this._getReferenceLineControllable=(null===(t=o.configuration)||void 0===t?void 0:t.getReferenceLineControllable)||sm,this._getReferenceLineDraggableRotatable=(null===(n=o.configuration)||void 0===n?void 0:n.getReferenceLineDraggableRotatable)||lm,this._getReferenceLineSlabThicknessControlsOn=(null===(i=o.configuration)||void 0===i?void 0:i.getReferenceLineSlabThicknessControlsOn)||dm}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 i=(0,Q.getEnabledElementByIds)(n,t);if(!i)return;const o=this._getAnnotations(i);null!=o&&o.length&&o.forEach((e=>{tt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o;let r=this._getRotationHandleNearImagePoint(a,t,n,i);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,i),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,Q.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(Q.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,Q.getEnabledElementByIds)(t,n),{element:o}=i;o.addEventListener(Q.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:i,clientHeight:o}=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]>i&&(s[0]=i-r),a[1]<0?s[1]=r:a[1]>o&&(s[1]=o-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),d=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],c=n.getCamera(),{focalPoint:h,position:g}=c,u=[g[0]-d[0],g[1]-d[1],g[2]-d[2]],v=[h[0]-d[0],h[1]-d[1],h[2]-d[2]];n.setCamera({focalPoint:v,position:u}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;t===am.MINIMUM_SLAB_THICKNESS&&(o=Q.Enums.BlendModes.COMPOSITE),e.setBlendMode(o,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:i}=t,o=e.getViewport(i.viewportId),a=o.getCamera(),r=a.viewPlaneNormal,s=Oh().dot(n,r),l=[...r];if(Oh().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];Oh().add(a.focalPoint,l,e),Oh().add(a.position,l,t),o.setCamera({focalPoint:e,position:t}),o.render()}}_getRotationHandleNearImagePoint(e,t,n,i){const{data:o}=t,{rotationPoints:a}=o.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 d=e.worldToCanvas(s);if(ys.vec2.distance(n,d)<i)return o.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,i){const{data:o}=t,{slabThicknessPoints:a}=o.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 d=e.worldToCanvas(s);if(ys.vec2.distance(n,d)<i)return o.handles.activeOperation=3,o.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:d}=t,{rotationPoints:c}=d.handles,{slabThicknessPoints:h}=d.handles,g=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!o||!a)continue;const r={start:{x:c[e][2][0],y:c[e][2][1]},end:{x:c[e][3][0],y:c[e][3][1]}},s=uc([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:c[e+1][2][0],y:c[e+1][2][1]},end:{x:c[e+1][3][0],y:c[e+1][3][1]}},h=uc([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=i||h<=i)&&(g.push(t.id),d.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(g.find((e=>e===t.id)))continue;const o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!o||!a)continue;const r=h[e][2],s=h[e][3],c=ys.vec2.create();ys.vec2.add(c,r,s),ys.vec2.scale(c,c,.5);const u=ys.vec2.create();ys.vec2.subtract(u,r,c),ys.vec2.normalize(u,u);const v=ys.vec2.create();ys.vec2.scale(v,u,.05*l);const m=ys.vec2.create(),p=ys.vec2.create();ys.vec2.add(m,c,v),ys.vec2.subtract(p,c,v);const f={start:{x:m[0],y:m[1]},end:{x:r[0],y:r[1]}},E=uc([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]}},I=uc([w.start.x,w.start.y],[w.end.x,w.end.y],[n[0],n[1]]);(E<=i||I<=i)&&(g.push(t.id),d.handles.activeOperation=null),e++}return d.activeViewportIds=[...g],this.editData={annotation:t},1===d.handles.activeOperation}}ie(cm,"toolName",void 0),cm.toolName="Crosshairs";const hm=cm,{EPSILON:gm}=Q.CONSTANTS;class um extends sc{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",{}),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"_init",(()=>{const e=(0,Q.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Jd(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(!n||!n.getImageData())return;const{element:i}=n,{viewUp:o,viewPlaneNormal:a}=n.getCamera(),r=Q.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:[...o],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};Qe(e,i),s=e}this.editData={sourceViewport:n,renderingEngine:e,annotation:s},or(e,t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this._init()})),ie(this,"renderAnnotation",((e,t)=>{var n;const{viewport:i}=e,{annotation:o,sourceViewport:a}=this.editData;let r=!1;if(!a)return r;if(a.id===i.id)return r;if(!o||null==o||null===(n=o.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return r;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=o.data.handles.points[0],d=o.data.handles.points[1],c=o.data.handles.points[2],h=o.data.handles.points[3],{focalPoint:g,viewPlaneNormal:u,viewUp:v}=i.getCamera(),{viewPlaneNormal:m}=a.getCamera();if(this.isParallel(u,m))return r;const p=Q.utilities.planar.planeEquation(u,g),f=[l,c,d,h],E=[l,d,c,h];let w=f,I=ys.vec3.subtract(ys.vec3.create(),f[0],f[1]);I=ys.vec3.normalize(ys.vec3.create(),I);let _=ys.vec3.subtract(ys.vec3.create(),f[2],f[0]);_=ys.vec3.normalize(ys.vec3.create(),_);const C=ys.vec3.cross(ys.vec3.create(),I,_);if(this.isParallel(C,u))return r;this.isPerpendicular(I,u)&&(w=E);const b=Q.utilities.planar.linePlaneIntersection(w[0],w[1],p),T=Q.utilities.planar.linePlaneIntersection(w[2],w[3],p),{annotationUID:D}=o;s.annotationUID=D;const S=this.getStyle("lineWidth",s,o),y=this.getStyle("lineDash",s,o),M=this.getStyle("color",s,o),O=this.getStyle("shadow",s,o);let x=[b,T].map((e=>i.worldToCanvas(e)));this.configuration.showFullDimension&&(x=this.handleFullDimension(i,b,u,v,T,x));const P="".concat(D,"-line");return js(t,D,"1",x[0],x[1],{color:M,width:S,lineDash:y,shadow:O},P),r=!0,r})),ie(this,"isPerpendicular",((e,t)=>{const n=ys.vec3.dot(e,t);return Math.abs(n)<gm}))}handleFullDimension(e,t,n,i,o,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),d=this.getReferencedImageId(e,t,n,i);if(d&&l)try{const{imageData:n,dimensions:i}=l,[r,s,c,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([i[0]-1,0,0]),n.indexToWorld([i[0]-1,i[1]-1,0]),n.indexToWorld([0,i[1]-1,0])].map((e=>Q.utilities.worldToImageCoords(d,e))),[g,u]=[t,o].map((e=>Q.utilities.worldToImageCoords(d,e)));a=[[r,s],[s,c],[h,c],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,g,u)})).filter((e=>e&&this.isInBound(e,i))).map((t=>{const n=Q.utilities.imageToWorldCoords(d,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,g=s-a,u=o-r,v=r*a-o*s,m=h-d,p=l-c,f=c*d-l*h;if(!(Math.abs(g*p-m*u)<gm))return[(u*f-p*v)/(g*p-m*u),(m*v-g*f)/(g*p-m*u)]}isParallel(e,t){return Math.abs(ys.vec3.dot(e,t))>1-gm}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}ie(um,"toolName",void 0),um.toolName="ReferenceLines";const vm=um,{EPSILON:mm}=Q.CONSTANTS;class pm extends sc{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:[]}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onSetToolActive",(()=>{this._init()})),ie(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(null==e||!e.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=Q.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,i=xi(this.toolGroupId).viewportsInfo;if(null==i||!i.length)return void console.warn("OverlayGridTool: No viewports found");const o=$e(this.getToolName(),n);if(null==o||!o.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));Qe({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}or((0,Q.getRenderingEngine)(i[0].renderingEngineId),i.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:i,rowCosines:o,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=Q.metaData.get("imagePlaneModule",e),l=[...t],d=[...t],c=[...t],h=[...t];return ys.vec3.scaleAndAdd(d,t,a,i*s),ys.vec3.scaleAndAdd(c,t,o,n*r),ys.vec3.scaleAndAdd(h,c,a,i*s),{pointSet1:[l,c,d,h],pointSet2:[l,d,c,h]}})),ie(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let i=!1;if(null==n||!n.length)return i;const{viewport:o,FrameOfReferenceUID:a}=e;if(o.getImageIds().length<2)return i;const r=$e(this.getToolName(),a);if(null==r||!r.length)return i;const s=r[0],{annotationUID:l}=s,{focalPoint:d,viewPlaneNormal:c}=o.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},g=this.getImageIdNormal(n[0]);if(this.isParallel(c,g))return i;const u=Q.utilities.planar.planeEquation(c,d),v=s.data.pointSets,m=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:i}=v[e],a=m.get(o.id)||this.initializeViewportData(m,o.id);if(!a.pointSetsToUse[e]){let t=n,o=ys.vec3.subtract(ys.vec3.create(),n[0],n[1]);o=ys.vec3.normalize(ys.vec3.create(),o),this.isPerpendicular(o,c)&&(t=i),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=Q.utilities.planar.linePlaneIntersection(t[0],t[1],u),a.lineEndsWorld[e]=Q.utilities.planar.linePlaneIntersection(t[2],t[3],u)}const r=a.lineStartsWorld[e],d=a.lineEndsWorld[e];h.annotationUID=l;const g=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),E=this.getStyle("shadow",h,s),w=[r,d].map((e=>o.worldToCanvas(e))),I="".concat(l,"-line");js(t,l,"".concat(e),w[0],w[1],{color:f,width:g,lineDash:p,shadow:E},I)}return i=!0,i})),ie(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),ie(this,"isPerpendicular",((e,t)=>{const n=ys.vec3.dot(e,t);return Math.abs(n)<mm}))}isParallel(e,t){return Math.abs(ys.vec3.dot(e,t))>1-mm}getImageIdNormal(e){const{imageOrientationPatient:t}=Q.metaData.get("imagePlaneModule",e),n=ys.vec3.fromValues(t[0],t[1],t[2]),i=ys.vec3.fromValues(t[3],t[4],t[5]);return ys.vec3.cross(ys.vec3.create(),n,i)}}ie(pm,"toolName",void 0),pm.toolName="OverlayGrid";const fm=pm;class Em extends sc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),ie(this,"_init",(()=>{var e;const t=xi(this.toolGroupId).viewportsInfo;if(null==t||!t.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const n=null===(e=(0,Q.getRenderingEngine)(t[0].renderingEngineId))||void 0===e?void 0:e.getViewport(t[0].viewportId);if(!n)return;const i=n.getFrameOfReferenceUID(),o=$e(this.getToolName(),i);if(null==o||!o.length){const e=new Map;!function(e,t){t.forEach((t=>{var n;let{viewportId:i,renderingEngineId:o}=t;const a=null===(n=(0,Q.getRenderingEngine)(o))||void 0===n?void 0:n.getViewport(i);wm(e,a)}))}(e,t),Qe({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:i,referencedImageId:null},data:{actorsWorldPointsMap:e}},i)}or((0,Q.getRenderingEngine)(t[0].renderingEngineId),t.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this._init()})),ie(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:i}=e;let o=!1;const a=$e(this.getToolName(),i);if(null==a||!a.length)return o;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;wm(l,n);const d=n.getActors(),c=Im(n);return d.forEach((e=>{if(null==e||!e.clippingFilter)return;const i=l.get(e.uid);if(!i)return;if(!i.get(c))return;let o=1;const{worldPointsSet:a,color:r}=i.get(c);for(let i=0;i<a.length;i++){const l=a[i].map((e=>n.worldToCanvas(e))),d={color:r,fillColor:r,fillOpacity:this.configuration.opacity,connectLastToFirst:!0},c=e.uid+"#"+o;zs(t,s,c,l,d),o++}})),o=!0,o}))}}function wm(e,t){const n=t.getActors(),i=Im(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(i)){const e=Qu(t.clippingFilter.getOutputData());if(!e)return;const o=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(i,{worldPointsSet:e,color:o})}}))}function Im(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return"".concat(e.id,"-").concat(oo(t),"-").concat(n)}ie(Em,"toolName",void 0),Em.toolName="SegmentationIntersection";const _m=Em;function Cm(e,t,n,i){const o=ys.vec3.create();ys.vec3.cross(o,t,e);const a=ys.vec3.fromValues(...n),r=ys.vec3.fromValues(...i),s=ys.vec3.create();ys.vec3.subtract(s,a,r);const l=ys.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=ys.vec3.dot(s,o)/(l*ys.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}const{transformWorldToIndex:bm}=Q.utilities;class Tm extends dc{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:Dm,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,Q.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,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:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,centerWorld:o,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=ud(s.map((e=>a.worldToCanvas(e)))),[d,c]=l,h={left:Math.min(d[0],c[0])+i/2,top:Math.min(d[1],c[1])+i/2,width:Math.abs(d[0]-c[0])-i,height:Math.abs(d[1]-c[1])-i},g={left:Math.min(d[0],c[0])-i/2,top:Math.min(d[1],c[1])-i/2,width:Math.abs(d[0]-c[0])+i,height:Math.abs(d[1]-c[1])+i},u=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(g,n)||u)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s,l,d,c,h,g=!1;if(n.worldPosition)g=!0;else{const{points:e}=a.handles,{viewport:t}=(0,Q.getEnabledElement)(o),{worldToCanvas:i,canvasToWorld:g}=t;r=e.findIndex((e=>e===n));const u=e.map(i);h=u[r],d=Math.abs(u[2][0]-u[3][0]),c=Math.abs(u[0][1]-u[1][1]),s=[(u[2][0]+u[3][0])/2,(u[0][1]+u[1][1])/2],l=g(s)}const u=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:u,handleIndex:r,canvasWidth:d,canvasHeight:c,centerWorld:l,originalHandleCanvas:h,movingTextBox:g},this._activateModify(o),ds(o);const v=(0,Q.getEnabledElement)(o),{renderingEngine:m}=v;or(m,u),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerWorld:h}=this.editData,g=s.worldToCanvas(h),{data:u}=d,v=Math.abs(o[0]-g[0]),m=Math.abs(o[1]-g[1]),p=[g[0],g[1]-m],f=[g[0],g[1]+m],E=[g[0]-v,g[1]],w=[g[0]+v,g[1]];u.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:i}=(0,Q.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:d,centerWorld:c,originalHandleCanvas:h}=this.editData,g=i.worldToCanvas(c),{data:u}=r,{points:v}=u.handles,{currentPoints:m}=t,p=m.canvas;if(0===d||1===d){const e=Math.abs(p[1]-g[1]),t=[g[0],g[1]-e],n=[g[0],g[1]+e];v[0]=o(t),v[1]=o(n);const i=s/2+(p[0]-h[0]),a=[g[0]-i,g[1]],r=[g[0]+i,g[1]];v[2]=o(a),v[3]=o(r)}else{const e=Math.abs(p[0]-g[0]),t=[g[0]-e,g[1]],n=[g[0]+e,g[1]];v[2]=o(t),v[3]=o(n);const i=l/2+(p[1]-h[1]),a=[g[0],g[1]-i],r=[g[0],g[1]+i];v[0]=o(a),v[1]=o(r)}})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{handles:g}=h,{points:u,activeHandleIndex:v}=g;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e))),w=(Math.abs(a.getRotation()-(h.initialRotation||0)),ud(E)),{centerPointRadius:I}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,a,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(i,a,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let _;if(!Pe(r))continue;ce(i)||this.editData||null===v||(_=[E[v]]),_&&qs(t,r,"0",_,{color:f});const C="".concat(r,"-ellipse"),b="0";if(Hs(t,r,b,E,{color:f,lineDash:p,lineWidth:m},C),I>0&&Math.min(Math.abs(w[0][0]-w[1][0])/2,Math.abs(w[0][1]-w[1][1])/2)>3*I){const e=this._getCanvasEllipseCenter(E);Fs(t,r,"".concat(b,"-center"),e,I,{color:f,lineDash:p,lineWidth:m})}o=!0;const T=this.getLinkedTextBoxStyle(c,i);if(!T.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 D=this.configuration.getTextLines(h,l);if(!D||0===D.length)continue;let S;h.handles.textBox.hasMoved||(S=mc(w),h.handles.textBox.worldPosition=a.canvasToWorld(S));const y=a.worldToCanvas(h.handles.textBox.worldPosition),M=Zs(t,r,"1",D,y,E,{},T),{x:O,y:x,width:P,height:N}=M;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([O,x]),topRight:a.canvasToWorld([O+P,x]),bottomLeft:a.canvasToWorld([O,x+N]),bottomRight:a.canvasToWorld([O+P,x+N])}}return o})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{viewportId:a,renderingEngineId:r}=i,{points:s}=o.handles,l=s.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:d,viewUp:c}=t.getCamera(),[h,g]=ud(l),u=t.canvasToWorld(h),v=t.canvasToWorld(g),{cachedStats:m}=o,p=Object.keys(m),f=u,E=v;for(let i=0;i<p.length;i++){const o=p[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:l,hasPixelSpacing:h}=a,g=bm(s,f);g[0]=Math.floor(g[0]),g[1]=Math.floor(g[1]),g[2]=Math.floor(g[2]);const C=bm(s,E);if(C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]),this._isInsideVolume(g,C,r)){var w,I,_;const n=[[Math.min(g[0],C[0]),Math.max(g[0],C[0])],[Math.min(g[1],C[1]),Math.max(g[1],C[1])],[Math.min(g[2],C[2]),Math.max(g[2],C[2])]],i={center:[(u[0]+v[0])/2,(u[1]+v[1])/2,(u[2]+v[2])/2],xRadius:Math.abs(u[0]-v[0])/2,yRadius:Math.abs(u[1]-v[1])/2,zRadius:Math.abs(u[2]-v[2])/2},{worldWidth:r,worldHeight:h}=Cm(d,c,f,E),p=0===r&&0===h,b=El(a),T=Math.abs(Math.PI*(r/2)*(h/2))/b/b,D={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},S=fc(l.Modality,e.metadata.referencedImageId,D),y=Cl(s,(e=>vd(i,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),M=this.configuration.statsCalculator.getStatistics();m[o]={Modality:l.Modality,area:T,mean:null===(w=M[1])||void 0===w?void 0:w.value,max:null===(I=M[0])||void 0===I?void 0:I.value,stdDev:null===(_=M[2])||void 0===_?void 0:_.value,statsArray:M,pointsInShape:y,isEmptyArea:p,areaUnit:fl(null,a),modalityUnit:S}}else this.isHandleOutsideImage=!0,m[o]={Modality:l.Modality}}e.invalidated=!1;const C=te.ANNOTATION_MODIFIED,b={annotation:e,viewportId:a,renderingEngineId:r};return(0,Q.triggerEvent)(Q.eventTarget,C,b),m})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,i=e.height/2;if(n<=0||i<=0)return!1;const o=[e.left+n,e.top+i],a=[t[0]-o[0],t[1]-o[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[t,n,i,o]=e,a=[i[0],n[1]],r=[o[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function Dm(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(l);c.push(e)}return o&&c.push("Mean: ".concat(mv(o)," ").concat(d)),r&&c.push("Max: ".concat(mv(r)," ").concat(d)),a&&c.push("Std Dev: ".concat(mv(a)," ").concat(d)),c}ie(Tm,"toolName",void 0),Tm.toolName="EllipticalROI";const Sm=Tm;function ym(e){const[t,n]=e;return lh(t,n)}function Mm(e){const[t,n]=e,i=lh(t,n);return[[t[0]-i,t[1]-i],[t[0]+i,t[1]+i]]}const{transformWorldToIndex:Om}=Q.utilities;class xm extends dc{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:Pm,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,Q.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,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:[[...o],[...o]],activeHandleIndex:null},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=ym(l),c=ym([l[0],n]);return Math.abs(c-d)<i/2})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{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=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c}=this.editData,{data:h}=d;h.handles.points=[h.handles.points[0],l(o)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:d}=l.handles,c=d.map((e=>a(e))),{currentPoints:h}=t,g=h.canvas;if(0===s){const e=g[0]-c[0][0],t=g[1]-c[0][1],n=g,i=[c[1][0]+e,c[1][1]+t];d[0]=o(n),d[1]=o(i)}else d[1]=o(g)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{handles:g}=h,{points:u,activeHandleIndex:v}=g;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e))),w=E[0],I=ym(E),_=Mm(E),{centerPointRadius:C}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,a,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==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(i,a,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let b;if(!Pe(r))continue;ce(i)||this.editData||null===v||(b=[E[v]]),b&&qs(t,r,"0",b,{color:f});const T="".concat(r,"-circle"),D="0";Fs(t,r,D,w,I,{color:f,lineDash:p,lineWidth:m},T),C>0&&I>3*C&&Fs(t,r,"".concat(D,"-center"),w,C,{color:f,lineDash:p,lineWidth:m}),o=!0;const S=this.getLinkedTextBoxStyle(c,i);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=mc(_),h.handles.textBox.worldPosition=a.canvasToWorld(M));const O=a.worldToCanvas(h.handles.textBox.worldPosition),x=Zs(t,r,"1",y,O,E,{},S),{x:P,y:N,width:R,height:A}=x;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,N]),topRight:a.canvasToWorld([P+R,N]),bottomLeft:a.canvasToWorld([P,N+A]),bottomRight:a.canvasToWorld([P+R,N+A])}}return o})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{viewportId:a,renderingEngineId:r}=i,{points:s}=o.handles,l=s.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:d,viewUp:c}=t.getCamera(),[h,g]=Mm(l),u=t.canvasToWorld(h),v=t.canvasToWorld(g),{cachedStats:m}=o,p=Object.keys(m),f=u,E=v;for(let i=0;i<p.length;i++){const o=p[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:l,hasPixelSpacing:h}=a,g=Om(s,f);g[0]=Math.floor(g[0]),g[1]=Math.floor(g[1]),g[2]=Math.floor(g[2]);const C=Om(s,E);if(C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]),this._isInsideVolume(g,C,r)){var w,I,_;const n=[[Math.min(g[0],C[0]),Math.max(g[0],C[0])],[Math.min(g[1],C[1]),Math.max(g[1],C[1])],[Math.min(g[2],C[2]),Math.max(g[2],C[2])]],i={center:[(u[0]+v[0])/2,(u[1]+v[1])/2,(u[2]+v[2])/2],xRadius:Math.abs(u[0]-v[0])/2,yRadius:Math.abs(u[1]-v[1])/2,zRadius:Math.abs(u[2]-v[2])/2},{worldWidth:r,worldHeight:h}=Cm(d,c,f,E),p=0===r&&0===h,b=El(a),T=_l(a),D=Math.abs(Math.PI*(r/b/2)*(h/T/b/2)),S={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},y=fc(l.Modality,e.metadata.referencedImageId,S),M=Cl(s,(e=>vd(i,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),O=this.configuration.statsCalculator.getStatistics();m[o]={Modality:l.Modality,area:D,mean:null===(w=O[1])||void 0===w?void 0:w.value,max:null===(I=O[0])||void 0===I?void 0:I.value,stdDev:null===(_=O[2])||void 0===_?void 0:_.value,statsArray:O,pointsInShape:M,isEmptyArea:p,areaUnit:fl(null,a),radius:r/2/b,radiusUnit:ml(null,a),perimeter:2*Math.PI*(r/2)/b,modalityUnit:y}}else this.isHandleOutsideImage=!0,m[o]={Modality:l.Modality}}e.invalidated=!1;const C=te.ANNOTATION_MODIFIED,b={annotation:e,viewportId:a,renderingEngineId:r};return(0,Q.triggerEvent)(Q.eventTarget,C,b),m})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}}function Pm(e,t){const n=e.cachedStats[t],{radius:i,radiusUnit:o,area:a,mean:r,stdDev:s,max:l,isEmptyArea:d,Modality:c,areaUnit:h,modalityUnit:g}=n,u=[];if(i){const e=d?"Radius: Oblique not supported":"Radius: ".concat(mv(i)," ").concat(o);u.push(e)}if(a){const e=d?"Area: Oblique not supported":"Area: ".concat(mv(a)," ").concat(h);u.push(e)}return r&&u.push("Mean: ".concat(mv(r)," ").concat(g)),l&&u.push("Max: ".concat(mv(l)," ").concat(g)),s&&u.push("Std Dev: ".concat(mv(s)," ").concat(g)),u}ie(xm,"toolName",void 0),xm.toolName="CircleROI";const Nm=xm;class Rm{constructor(e){var t,n;ie(this,"_controlPoints",[]),ie(this,"_resolution",void 0),ie(this,"_closed",void 0),ie(this,"_invalidated",!1),ie(this,"_curveSegments",void 0),ie(this,"_aabb",void 0),ie(this,"_length",0),this._controlPoints=[],this._resolution=null!==(t=null==e?void 0:e.resolution)&&void 0!==t?t:20,this._closed=null!==(n=null==e?void 0:e.closed)&&void 0!==n&&n,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._resolution!==e&&(this._resolution=e,this.invalidated=!0)}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:i}=t.points,o=Math.floor(e),a=this._curveSegments[o],r=e-Math.floor(o),s=[n[0]+r*(i[0]-n[0]),n[1]+r*(i[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,i=-1;for(let o=0,a=t.length;o<a;o++){const a=t[o],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,i=o)}return{index:i,point:-1===i?void 0:[...t[i]],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 i,o,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:d,curveSegment:c}=l,{lineSegments:h}=c;for(let t=0;t<h.length;t++){const s=h[t],{point:c,distanceSquared:g}=hc(s.points.start,s.points.end,e);g<r&&(o=s,a=d,i=l.curveSegment,n=c,r=g)}}return{point:n,uValue:a+(o.previousLineSegmentsLength+lh(o.points.start,n))/i.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,i=1/0,o=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=hc(o,r,e);l<i&&(n=s,i=l),o=r}return{point:n,distance:Math.sqrt(i)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),i=0===(null==n?void 0:n.index),o=this.getPreviewCurveSegments(e,i);return null!=o&&o.length?this._convertCurveSegmentsToPolyline(o):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),i=t*t;for(let t=0;t<n.length;t++){const{lineSegments:o}=n[t];for(let t=0;t<o.length;t++){const n=o[t];if(gc(n.points.start,n.points.end,e)<=i)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 i=0;for(let n=0;n<t.length;n++){const o=t[n],{aabb:a}=o;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=o;for(let t=0;t<r.length;t++){const n=r[t],{aabb:o}=n;if(e[0]<=o.maxX&&e[1]>=o.minY&&e[1]<o.maxY){const{start:t,end:o}=n.points,a=t[0]===o[0],r=(e[1]-t[1])*(o[0]-t[0])/(o[1]-t[1])+t[0];i+=a||e[0]<=r?1:0}}}return i%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,i=1/0,o=-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,i=i<=s.minY?i:s.minY,o=o>=s.maxX?o:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:i}=e;i.forEach(((e,i)=>{0===n&&0===i&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let i=0;i<n.length;i++){const o=n[i],a=rh(o.aabb,e);t.push({curveSegmentIndex:i,curveSegment:o,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(rh(this.aabb,e)>n)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let e=0,t=i.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=i[e];a<=n&&o.push(t)}return o}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,i=this._curveSegments[t],{lineSegments:o}=i,a=i.length*n;for(let e=0;e<o.length;e++){const t=o[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],i={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:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}class Am extends Rm{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=i;e<=o;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 i=0;for(let o=0;o<e;o++){const e=this._getCurveSegment(o,n);e.previousCurveSegmentsLength=i,t[o]=e,i+=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,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=Math.floor(e);let r=a%o;const s=e-a;if(r<0||r>=o){if(!this.closed)return;r=(o+r)%o}const{p0:l,p1:d,p2:c,p3:h}=this._getCurveSegmentPoints(r,n,i),g=s*s,u=g*s,v=ys.vec4.fromValues(1,s,g,u),m=ys.vec4.transformMat4(ys.vec4.create(),v,t);return[ys.vec4.dot(m,ys.vec4.fromValues(l[0],d[0],c[0],h[0])),ys.vec4.dot(m,ys.vec4.fromValues(l[1],d[1],c[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 i=this._getNumCurveSegments(t,n),o=e-1,a=n?(e+1)%i:e+1,r=a+1,s=t[e],l=t[a];let d,c;return d=o>=0?t[o]:n?t[t.length-1]:dh(l,s),c=r<t.length?t[r]:n?t[0]:dh(s,l),{p0:d,p1:s,p2:l,p3:c}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=this.resolution+1,r=1/a;let s=e+1;i||e!==o-1||(s-=1e-8);const l=[];let d,c,h=0;for(let o=0,g=e;o<=a;o++,g+=r){g=g>s?s:g;const e=this._getPoint(g,t,n,i);if(!o){d=e;continue}c=e;const a=c[0]-d[0],r=c[1]-d[1],u=Math.sqrt(a**2+r**2),v={minX:d[0]<=c[0]?d[0]:c[0],maxX:d[0]>=c[0]?d[0]:c[0],minY:d[1]<=c[1]?d[1]:c[1],maxY:d[1]>=c[1]?d[1]:c[1]};l.push({points:{start:d,end:c},aabb:v,length:u,previousLineSegmentsLength:h}),d=c,h+=u}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,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:o,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,t,n,i);let d=0,c=1/0,h=1/0,g=-1/0,u=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;c=Math.min(c,t.minX),h=Math.min(h,t.minY),g=Math.max(g,t.maxX),u=Math.max(u,t.maxY),d+=n})),{controlPoints:{p0:o,p1:a,p2:r,p3:s},aabb:{minX:c,minY:h,maxX:g,maxY:u},length:d,previousCurveSegmentsLength:0,lineSegments:l}}}class km extends Am{constructor(e){var t,n;super(e),ie(this,"_scale",void 0),ie(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 Lm extends km{constructor(){super({scale:0,fixedScale:!0})}}class Um extends km{constructor(){super({scale:.5,fixedScale:!0})}}const Vm=ys.mat4.multiplyScalar(ys.mat4.create(),ys.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class Wm extends Am{getTransformMatrix(){return Vm}}const Fm={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var Hm=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(Hm||{}),Bm=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(Bm||{});class Gm extends dc{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,calculateStats:!0,getTextLines:qm,spline:{configuration:{[Hm.Cardinal]:{Class:km,scale:.5},[Hm.CatmullRom]:{Class:Um},[Hm.Linear]:{Class:Lm},[Hm.BSpline]:{Class:Wm,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:Hm.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[Bm.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:ma.Primary,modifierKey:pa.Shift}]},[Bm.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:ma.Primary,modifierKey:pa.Ctrl}]}}}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,{world:o,canvas:a}=n,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,{type:g}=this.configuration.spline,u=this._getSplineConfig(g),v=new u.Class,m=this.getReferencedImageId(s,o,c,h),p=s.getFrameOfReferenceUID(),f={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:m},data:{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:[[...o]],activeHandleIndex:null},spline:{type:u.type,instance:v,resolution:u.resolution,closed:!1,polyline:[]},cachedStats:{}}};Qe(f,i);const E=Qd(i,this.getToolName());return this.editData={annotation:f,viewportIdsToRender:E,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:a},this._activateDraw(i),e.preventDefault(),or(l,E),f})),ie(this,"isPointNearTool",((e,t,n,i)=>{const{instance:o}=t.data.spline;return o.isPointNearCurve(n,i)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1};const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{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=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_keyDownCallback",(e=>{var t;const n=e.detail,{element:i}=n,o=null!==(t=n.key)&&void 0!==t?t:"",{lastControlPointDeletionKeys:a}=this.configuration.spline;if(!a.includes(o))return;const{annotation:r}=this.editData,{data:s}=r;if(3!==s.handles.points.length){{const e=s.handles.points.length-1;this._deleteControlPointByIndex(i,r,e)}e.preventDefault()}else this.cancel(i)})),ie(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:i}=(0,Q.getEnabledElement)(n),o=Qd(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,or(i,o),e.preventDefault()})),ie(this,"_mouseDownCallback",(e=>{const t=e.type===te.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i}=this.editData,{data:o}=n;if(o.spline.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:d}=s,c=(0,Q.getEnabledElement)(r),{renderingEngine:h}=c;let g=o.handles.points.length>=2&&t,u=!0;if(o.handles.points.length>=3){const{instance:e}=o.spline,t=e.getClosestControlPointWithinDistance(l,10);0===(null==t?void 0:t.index)&&(u=!1,g=!0)}u&&o.handles.points.push(d),o.spline.closed=o.spline.closed||g,n.invalidated=!0,or(h,i),o.spline.closed&&this._endCallback(e),e.preventDefault()})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&tt(t.annotationUID);const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,t.annotationUID})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.KEY_DOWN,this._keyDownCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.KEY_DOWN,this._keyDownCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o;let a=!1;const{viewport:r}=e,{worldToCanvas:s}=r,{element:l}=r;if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let d=$e(this.getToolName(),l);if(null===(n=d)||void 0===n||!n.length)return a;if(d=this.filterInteractableAnnotationsForElement(l,d),null===(i=d)||void 0===i||!i.length)return a;const c=this.getTargetId(r),h=null===(o=this.editData)||void 0===o?void 0:o.newAnnotation,g={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<d.length;n++){var u;const i=d[n],{annotationUID:o,data:v,highlighted:m}=i,{handles:p}=v,{points:f,activeHandleIndex:E}=p;g.annotationUID=o;const w=this.getStyle("lineWidth",g,i),I=this.getStyle("lineDash",g,i),_=this.getStyle("color",g,i),C=f.map((e=>s(e))),{drawPreviewEnabled:b}=this.configuration.spline,T=i.data.spline.type,D=this._getSplineConfig(T),S=this._updateSplineInstance(l,i),y=S.getPolylinePoints(),M=[];for(let e=0,t=y.length;e<t;e++)M.push(r.canvasToWorld(y[e]));let O;if(v.spline.polyline=M,v.cachedStats[c]&&null!=v.cachedStats[c].areaUnit?i.invalidated&&this._throttledCalculateCachedStats(i,l):(v.cachedStats[c]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(i,l)),Pe(o)){if(ce(i)||this.editData||null===E||(O=[C[E]]),(O||h||m)&&qs(t,o,"0",C,{color:_,lineDash:I,lineWidth:w,handleRadius:"3"}),b&&S.numControlPoints>1&&null!==(u=this.editData)&&void 0!==u&&u.lastCanvasPoint&&!S.closed){const{lastCanvasPoint:e}=this.editData;zs(t,o,"previewSplineChange",S.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:I,lineWidth:w})}if(D.showControlPointsConnectors){const e=[...C];S.closed&&e.push(C[0]),zs(t,o,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineDash:I,lineWidth:w})}zs(t,o,"lineSegments",y,{color:_,lineDash:I,lineWidth:w}),this._renderStats(i,r,e,t),a=!0,i.invalidated=!1}}return a})),ie(this,"_renderStats",((e,t,n,i)=>{var o;const a=e.data,r=this.getTargetId(t);if(!a.spline.closed)return;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},l=this.getLinkedTextBoxStyle(s,e);if(!l.visibility)return;const d=this.configuration.getTextLines(a,r);if(!d||0===d.length)return;const c=a.handles.points.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=mc(c);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),g=Zs(i,null!==(o=e.annotationUID)&&void 0!==o?o:"","textBox",d,h,c,{},l),{x:u,y:v,width:m,height:p}=g;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,v]),topRight:t.canvasToWorld([u+m,v]),bottomLeft:t.canvasToWorld([u,v+p]),bottomRight:t.canvasToWorld([u+m,v+p])}})),ie(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,i=n.spline.type,o=this._getSplineConfig(i),a=o.controlPointAdditionDistance;if(!1===o.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,Q.getEnabledElement)(s),{renderingEngine:d,viewport:c}=l,{canvasToWorld:h}=c,{instance:g}=n.spline,u=e.detail.currentPoints.canvas,v=g.getClosestPoint(u);if(v.distance>a)return;const{index:m,point:p}=g.addControlPointAtU(v.uValue);n.handles.points.splice(m,0,h(p)),t.invalidated=!0;const f=Qd(s,this.getToolName());or(d,f)})),ie(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,i=this._getSplineConfig(n),o=i.controlPointDeletionDistance;if(!1===i.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:d}=t.data.spline,c=d.getClosestControlPointWithinDistance(l,o);c&&this._deleteControlPointByIndex(r,t,c.index)})),ie(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.spline.closed)return;const i=(0,Q.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,{cachedStats:r}=n,{polyline:s}=n.spline,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:i}=n,d=s.map((e=>o.worldToCanvas(e))),c=d[0],h=o.canvasToWorld(c),g=o.canvasToWorld([c[0]+1,c[1]]),u=o.canvasToWorld([c[0],c[1]+1]),v=ys.vec3.distance(h,g),m=ys.vec3.distance(h,u),p=El(n);let f=Ch(d)/p/p;f*=v*m,r[t]={Modality:i.Modality,area:f,areaUnit:fl(null,n)}}return this.triggerAnnotationModified(e,i),r})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}_deleteControlPointByIndex(e,t,n){const i=(0,Q.getEnabledElement)(e),{points:o}=t.data.handles;3===o.length?tt(t.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,r=Qd(e,this.getToolName());t.invalidated=!0,or(a,r)}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},Fm,n[e])}_updateSplineScale(e,t){const n=t.data.spline.type,i=this._getSplineConfig(n);e instanceof km&&!e.fixedScale&&void 0!==i.scale&&e.scale!==i.scale&&(e.scale=i.scale,t.invalidated=!0)}_updateSplineInstance(e,t){var n;const i=(0,Q.getEnabledElement)(e),{viewport:o}=i,{worldToCanvas:a}=o,{data:r}=t,{type:s,instance:l}=t.data.spline,d=this._getSplineConfig(s),c=r.handles.points.map(a);return l.setControlPoints(c),l.closed=!(null===(n=r.spline)||void 0===n||!n.closed),l.resolution!==d.resolution&&(l.resolution=parseInt(d.resolution),t.invalidated=!0),l instanceof km&&!l.fixedScale&&void 0!==d.scale&&l.scale!==d.scale&&(l.scale=d.scale,t.invalidated=!0),l}}function qm(e,t){const n=e.cachedStats[t],{area:i,isEmptyArea:o,areaUnit:a}=n,r=[];if(i){const e=o?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(a);r.push(e)}return r}ie(Gm,"toolName",void 0),ie(Gm,"SplineTypes",Hm),ie(Gm,"Actions",Bm),Gm.toolName="SplineROI";const jm=Gm;class zm{constructor(e){let{numBits:t,getPriority:n,areEqual:i}=e;ie(this,"_bucketCount",void 0),ie(this,"_mask",void 0),ie(this,"_size",void 0),ie(this,"_currentBucketIndex",void 0),ie(this,"_getPriority",void 0),ie(this,"_areEqual",void 0),ie(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 i?i:(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 i,o=n;for(;null!==o&&!this._areEqual(e,o.value);)i=o,o=o.next;return null!==o&&(o===n?this._buckets[t]=o.next:i.next=o.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 Km=4294967295,Ym=2/(3*Math.PI);class Xm{constructor(e,t,n){ie(this,"searchGranularityBits",void 0),ie(this,"searchGranularity",void 0),ie(this,"width",void 0),ie(this,"height",void 0),ie(this,"grayscalePixelData",void 0),ie(this,"laplace",void 0),ie(this,"gradMagnitude",void 0),ie(this,"gradXNew",void 0),ie(this,"gradYNew",void 0),ie(this,"startPoint",void 0),ie(this,"visited",void 0),ie(this,"parents",void 0),ie(this,"costs",void 0),ie(this,"priorityQueueNew",void 0),ie(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),ie(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),ie(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const i=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(i),this.parents=new Uint32Array(i),this.costs=new Float32Array(i)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(Km),this.costs.fill(1/0),this.priorityQueueNew=new zm({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:i}=this,o=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:d}=this;if(a===o)return[];for(;!d.isEmpty()&&s[a]===Km;){const e=d.pop();if(r[e])continue;const t=i(e),o=this._getNeighborPoints(t);r[e]=!0;for(let i=0,a=o.length;i<a;i++){const a=o[i],r=n(a[1],a[0]),c=this._getWeightedDistance(t,a),h=l[e]+c;h<l[r]&&(l[r]!==1/0&&d.remove(r),l[r]=h,s[r]=e,d.push(r))}}const c=[];let h=a;for(;h!==Km;)c.push(i(h)),h=s[h];return c.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:i}=this;let o=this._getPointIndex(t,e);return e+1===i&&o--,n[o+1]-n[o]}_getDeltaY(e,t){const{grayscalePixelData:n,width:i,height:o}=this;let a=this._getPointIndex(t,e);return t+1===o&&(a-=o),n[a]-n[a+i]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),i=this._getDeltaY(e,t);return Math.sqrt(n*n+i*i)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:i}=this;let o=n[i(t-2,e)];return o+=n[i(t-1,e-1)]+2*n[i(t-1,e)]+n[i(t-1,e+1)],o+=n[i(t,e-2)]+2*n[i(t,e-1)]-16*n[i(t,e)]+2*n[i(t,e+1)]+n[i(t,e+2)],o+=n[i(t+1,e-1)]+2*n[i(t+1,e)]+n[i(t+1,e+1)],o+=n[i(t+2,e)],o}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0,o=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[i]=this._getGradientMagnitude(a,r),o=Math.max(n[i],o),i++;n[i]=n[i-1],i++}for(let t=n.length;i<t;i++)n[i]=n[i-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/o;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,i=new Float32Array(e*t);i.fill(1,0,n(2,0));for(let o=2;o<t-2;o++){i[n(o,0)]=1,i[n(o,1)]=1;for(let t=2;t<e-2;t++)i[n(o,t)]=this._getLaplace(t,o)>.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(t-2,0)),i}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++){for(let t=0;t<e-1;t++)n[i++]=this._getDeltaX(t,o);n[i]=n[i-1],i++}return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t-1;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaY(t,o);for(let t=n.length;i<t;i++)n[i]=n[i-e];return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:i,_getPointIndex:o}=this,a=n[o(t,e)],r=i[o(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,i){const o=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,i);let r=o[1]*(n-e)-o[0]*(i-t),s=a[1]*(n-e)-a[0]*(i-t);return r<0&&(r=-r,s=-s),e!==n&&t!==i&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),Ym*(Math.acos(r)+Math.acos(s))}_getWeightedDistance(e,t){const{_getPointIndex:n}=this,[i,o]=e,[a,r]=t,s=n(r,a);let l=this.gradMagnitude[s];return i!==a&&o!==r||(l*=Math.SQRT1_2),.43*l+.43*this.laplace[s]+.11*this._getGradientDirection(i,o,a,r)}_getNeighborPoints(e){const{width:t,height:n}=this,i=[],o=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=o;n<=r;n++)n===e[0]&&t===e[1]||i.push([n,t]);return i}static createInstanceFromRawPixelData(e,t,n,i){const o=e.length,a=new Float32Array(o),{lower:r,upper:s}=i,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 Xm(a,t,n)}static createInstanceFromRGBAPixelData(e,t,n){const i=e.length/4,o=new Float32Array(i);for(let t=0,n=0;t<i;t++,n+=4){const i=e[n],a=e[n],r=e[n];o[t]=.00130718954248366*(i+a+r)}return new Xm(o,t,n)}}class Jm{constructor(e,t){ie(this,"pointArray",void 0),ie(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()}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)}}class Zm extends dc{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}}),ie(this,"scissors",void 0),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,{world:o,canvas:a}=n,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.getReferencedImageId(s,o,c,h),u=s.getFrameOfReferenceUID(),v=s.getDefaultActor();if(!v||!Q.utilities.isImageActor(v))throw new Error("Default actor must be an image actor");const m=s.getImageData(),{imageData:p}=m;let f,E,w,I,_;if(s instanceof Q.StackViewport)w=m.scalarData,I=m.dimensions[0],_=m.dimensions[1],f=e=>{const t=Q.utilities.transformWorldToIndex(p,e);return[t[0],t[1]]},E=e=>Q.utilities.transformIndexToWorld(p,[e[0],e[1],0]);else{if(!(s instanceof Q.VolumeViewport))throw new Error("Viewport not supported");{const e=Q.utilities.getCurrentVolumeViewportSlice(s),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;f=e=>{const t=Q.utilities.transformWorldToIndex(p,e),i=ys.vec3.transformMat4([0,0,0],t,n);return[i[0],i[1]]},E=e=>{const n=ys.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return Q.utilities.transformIndexToWorld(p,n)},w=e.scalarData,I=e.width,_=e.height}}const{voiRange:C}=s.getProperties(),b=f(o);this.scissors=Xm.createInstanceFromRawPixelData(w,I,_,C),this.scissors.startSearch(b);const T=new Jm,D=new Jm;T.addPoint(b),T.addControlPoint(b);const S={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:u,referencedImageId:g},data:{polyline:[],handles:{points:[[...o]],activeHandleIndex:null}}};Qe(S,i);const y=Qd(i,this.getToolName());return this.editData={annotation:S,viewportIdsToRender:y,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:a,confirmedPath:T,currentPath:D,closed:!1,worldToSlice:f,sliceToWorld:E},this._activateDraw(i),e.preventDefault(),or(l,y),S})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,r=i*i,s=t.data.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(gc(l,t,n)<=r)return!0;l=t}return!1})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o};const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.scissors=null,this.isDrawing=!1})),ie(this,"_mouseDownCallback",(e=>{const t=e.type===te.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i,worldToSlice:o,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:d,world:c}=l,h=(0,Q.getEnabledElement)(s),{viewport:g,renderingEngine:u}=h,v=this.editData.currentPath.getControlPoints();let m=v.length>=2&&t;if(v.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=v.length;t<n;t++){const n=a(v[t]),i=cc(d,g.worldToCanvas(n));i<=100&&i<e.distSquared&&(e.distSquared=i,e.index=t)}0===e.index&&(m=!0)}this.editData.closed=this.editData.closed||m,this.editData.confirmedPath=this.editData.currentPath,this.editData.confirmedPath.addControlPoint(this.editData.currentPath.getLastPoint()),this.scissors.startSearch(o(c)),n.invalidated=!0,or(u,i),this.editData.closed&&(this._updateAnnotation(s,this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),ie(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:i,canvas:o}=n,{renderingEngine:a}=(0,Q.getEnabledElement)(t),r=Qd(t,this.getToolName());this.editData.lastCanvasPoint=o;const{width:s,height:l}=this.scissors,{worldToSlice:d}=this.editData,c=d(i);if(c[0]<0||c[1]<0||c[0]>=s||c[1]>=l)return;const h=this.scissors.findPathToPoint(c),g=new Jm;for(let e=0,t=h.length;e<t;e++)g.addPoint(h[e]);g.prependPath(this.editData.confirmedPath),this.editData.currentPath=g,or(a,r),e.preventDefault()})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world;r.polyline.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;r.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&tt(t.annotationUID);const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,this.scissors=null,t.annotationUID})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o,a;let r=!1;const{viewport:s}=e,{worldToCanvas:l}=s,{element:d}=s;if(!s.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),r;let c=$e(this.getToolName(),d);if(null===(n=c)||void 0===n||!n.length)return r;if(c=this.filterInteractableAnnotationsForElement(d,c),null===(i=c)||void 0===i||!i.length)return r;const h=null===(o=this.editData)||void 0===o?void 0:o.newAnnotation,g={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};this._updateAnnotation(d,null===(a=this.editData)||void 0===a?void 0:a.currentPath);for(let e=0;e<c.length;e++){var u;const n=c[e],{annotationUID:i,data:o}=n,{handles:a}=o,{points:d}=a;g.annotationUID=i;const v=this.getStyle("lineWidth",g,n),m=this.getStyle("lineDash",g,n),p=this.getStyle("color",g,n),f=d.map((e=>l(e)));Pe(i)&&(h&&n.annotationUID===(null===(u=this.editData)||void 0===u||null===(u=u.annotation)||void 0===u?void 0:u.annotationUID)&&qs(t,i,"0",[f[0]],{color:p,lineDash:m,lineWidth:v}),zs(t,i,"polyline",o.polyline.map((e=>s.worldToCanvas(e))),{color:p,lineDash:m,lineWidth:v}),r=!0,n.invalidated=!1)}return r}))}_updateAnnotation(e,t){if(!this.editData||!t)return;const{pointArray:n}=t,i=[],{sliceToWorld:o}=this.editData;for(let e=0,t=n.length;e<t;e++){const t=o(n[e]);i.push(t)}i.length>1&&i.push([...i[0]]),this.editData.annotation.data.polyline=i}}ie(Zm,"toolName",void 0),Zm.toolName="LivewireContour";const $m=Zm;class Qm extends dc{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:ep,changeTextCallback:tp,preventHandleOutsideImage:!1,arrowFirst:!0}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),{arrowFirst:g}=this.configuration,u=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h},data:{text:"",handles:{points:[[...o],[...o]],activeHandleIndex:null,arrowFirst:g,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:""}};Qe(v,i);const m=Qd(i,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,m),v})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return uc([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{viewportId:d,renderingEngineId:c,renderingEngine:h}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),a)this.configuration.getTextCallback((e=>{if(!e)return tt(i.annotationUID),or(h,o),this.editData=null,void(this.isDrawing=!1);i.data.text=e;const t=te.ANNOTATION_COMPLETED,n={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,t,n),or(h,o)}));else{const e=te.ANNOTATION_MODIFIED,t={annotation:i,viewportId:d,renderingEngineId:c};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),ie(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:i}=n;let o=$e(this.getToolName(),i);if(o=this.filterInteractableAnnotationsForElement(i,o),null===(t=o)||void 0===t||!t.length)return;const a=o.find((e=>this.isPointNearTool(i,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,i,r)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;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:i,data:r}=n,{handles:d,text:c}=r,{points:h,activeHandleIndex:g}=d;l.annotationUID=i;const u=this.getStyle("lineWidth",l,n),v=this.getStyle("lineDash",l,n),m=this.getStyle("color",l,n),p=h.map((e=>a.worldToCanvas(e)));let f;ce(n)||this.editData||null===g||(f=[p[g]]),f&&qs(t,i,"0",p,{color:m,lineWidth:u});const E="1";if(this.configuration.arrowFirst?Qs(t,i,E,p[1],p[0],{color:m,width:u,lineDash:v}):Qs(t,i,E,p[0],p[1],{color:m,width:u,lineDash:v}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!c)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 I=a.worldToCanvas(r.handles.textBox.worldPosition),_=Zs(t,i,"1",[c],I,p,{},w),{x:C,y:b,width:T,height:D}=_;r.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([C,b]),topRight:a.canvasToWorld([C+T,b]),bottomLeft:a.canvasToWorld([C,b+D]),bottomRight:a.canvasToWorld([C+T,b+D])}}return o}))}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const{renderingEngine:i,viewportId:o,renderingEngineId:a}=(0,Q.getEnabledElement)(e),r=Qd(e,this.getToolName());or(i,r);const s=te.ANNOTATION_MODIFIED;(0,Q.triggerEvent)(Q.eventTarget,s,{annotation:t,viewportId:o,renderingEngineId:a})}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function ep(e){return e(prompt("Enter your annotation:"))}function tp(e,t,n){return n(prompt("Enter your annotation:"))}ie(Qm,"toolName",void 0),Qm.toolName="ArrowAnnotate";const np=Qm;class ip extends dc{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:op}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"angleStartedNotYetCompleted",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l,d]=r.handles.points,c=a.worldToCanvas(s),h=a.worldToCanvas(l),g={start:{x:c[0],y:c[1]},end:{x:h[0],y:h[1]}};if(uc([g.start.x,g.start.y],[g.end.x,g.end.y],[n[0],n[1]])<=i)return!0;if(!d)return!1;const u=a.worldToCanvas(d),v={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}};return uc([v.start.x,v.start.y],[v.end.x,v.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;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),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const i=s[n],{annotationUID:r,data:g}=i,{points:u,activeHandleIndex:v}=g.handles;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e)));let w;if(g.cachedStats[l]&&null!=g.cachedStats[l].angle?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(g.cachedStats[l]={angle:null},this._calculateCachedStats(i,d,e)),ce(i)||this.editData||null===v||(w=[E[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;w&&qs(t,r,"0",E,{color:f,lineDash:p,lineWidth:m});let I="1";if(js(t,r,I,E[0],E[1],{color:f,width:m,lineDash:p}),o=!0,3!==E.length)return o;if(I="2",js(t,r,I,E[1],E[2],{color:f,width:m,lineDash:p}),null===(h=g.cachedStats[l])||void 0===h||!h.angle)continue;const _=this.getLinkedTextBoxStyle(c,i);if(!_.visibility){g.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 C=this.configuration.getTextLines(g,l);if(!g.handles.textBox.hasMoved){const e=E[1];g.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(g.handles.textBox.worldPosition),T=Zs(t,r,"1",C,b,E,{},_),{x:D,y:S,width:y,height:M}=T;g.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([D,S]),topRight:a.canvasToWorld([D+y,S]),bottomLeft:a.canvasToWorld([D,S+M]),bottomRight:a.canvasToWorld([D+y,S+M])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(3!==i.handles.points.length)return;const r=i.handles.points[0],s=i.handles.points[1],l=i.handles.points[2],{cachedStats:d}=i,c=Object.keys(d);for(let e=0;e<c.length;e++){const t=c[e],n=Gv([r,s],[s,l]);d[t]={angle:isNaN(n)?"Incomplete Angle":n}}e.invalidated=!1;const h=te.ANNOTATION_MODIFIED,g={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,h,g),d}}function op(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return["".concat(mv(i)," ").concat(String.fromCharCode(176))]}ie(ip,"toolName",void 0),ip.toolName="Angle";const ap=ip,rp=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=2===t[0].length?[0,0]:[0,0,0],o=t.length;for(const e of t)i[0]+=e[0]/o,i[1]+=e[1]/o,3===i.length&&(i[2]+=e[2]/o);return i};class sp extends dc{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:lp}}),e=this,ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"angleStartedNotYetCompleted",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:i});return s<=i||l<=i})),ie(this,"toolSelectedCallback",(function(t,n,i,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Qd(s,e.getToolName()),d=(0,Q.getEnabledElement)(s),{renderingEngine:c,viewport:h}=d,{isNearFirstLine:g,isNearSecondLine:u}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:o,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:g,isNearSecondLine:u},e._activateModify(s),ds(s),or(c,l),t.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return ls(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,i=e.detail,{element:o,currentPoints:a}=i,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,ds(o),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),ie(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:d}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,o=d.handles.points;s?[o[0],o[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[o[2],o[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;d.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const c=(0,Q.getEnabledElement)(n),{renderingEngine:h}=c;or(h,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;o.handles.points.length<4&&tt(t.annotationUID),t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const i=s[n],{annotationUID:r,data:g}=i,{points:u,activeHandleIndex:v}=g.handles;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e)));let w;if(g.cachedStats[l]&&null!=g.cachedStats[l].angle?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(g.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(i,d,e)),ce(i)||this.editData||null===v||(w=[E[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;w&&qs(t,r,"0",E,{color:f,lineDash:p,lineWidth:m});const I=[E[0],E[1]],_=[E[2],E[3]];let C="line1";if(js(t,r,C,I[0],I[1],{color:f,width:m,lineDash:p}),o=!0,E.length<4)return o;C="line2",js(t,r,C,_[0],_[1],{color:f,width:m,lineDash:p}),C="linkLine",js(t,r,C,rp(I[0],I[1]),rp(_[0],_[1]),{color:f,lineWidth:"1",lineDash:"1,4"});const{arc1Start:b,arc1End:T,arc2End:D,arc2Start:S}=g.cachedStats[l].points.canvas,{arc1Angle:y,arc2Angle:M}=g.cachedStats[l];if(C="arc1",js(t,r,C,b,T,{color:f,lineWidth:"1"}),C="arc2",js(t,r,C,S,D,{color:f,lineWidth:"1"}),null===(h=g.cachedStats[l])||void 0===h||!h.angle)continue;const O=this.getLinkedTextBoxStyle(c,i);if(!O.visibility){g.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 x=this.configuration.getTextLines(g,l);if(!g.handles.textBox.hasMoved){const e=mc(E);g.handles.textBox.worldPosition=a.canvasToWorld(e)}const P=a.worldToCanvas(g.handles.textBox.worldPosition),N=Zs(t,r,"cobbAngleText",x,P,E,{},O),{x:R,y:A,width:k,height:L}=N;g.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,A]),topRight:a.canvasToWorld([R+k,A]),bottomLeft:a.canvasToWorld([R,A+L]),bottomRight:a.canvasToWorld([R+k,A+L])};const U="arcAngle1",V=["".concat(y.toFixed(2)," ").concat(String.fromCharCode(176))],W=rp(b,T);Xs(t,r,U,V,W,{...O,padding:3});const F="arcAngle2",H=["".concat(M.toFixed(2)," ").concat(String.fromCharCode(176))],B=rp(S,D);Xs(t,r,F,H,B,{...O,padding:3})}return o})),ie(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:i,proximity:o}=e;const[a,r,s,l]=n,d=t.worldToCanvas(a),c=t.worldToCanvas(r),h=t.worldToCanvas(s),g=t.worldToCanvas(l),u={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}},v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}},m=uc([u.start.x,u.start.y],[u.end.x,u.end.y],[i[0],i[1]]),p=uc([v.start.x,v.start.y],[v.end.x,v.end.y],[i[0],i[1]]);let f=!1,E=!1;return m<=o?f=!0:p<=o&&(E=!0),{distanceToPoint:m,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:E}})),ie(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:i,mid2:o}=e;const a=[i,o],r=Gv(t,a),s=Gv(n,a),l=r>90?1:0,d=s>90?0:1,c=rp(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),g=.1,u=rp(t[0],t[1]),v=rp(n[0],n[1]),m=[t[l][0]-u[0],t[l][1]-u[1]],p=Math.sqrt(m[0]**2+m[1]**2),f=[m[0]/p,m[1]/p],E=[u[0]+f[0]*h*g,u[1]+f[1]*h*g],w=[c[0]-i[0],c[1]-i[1]],I=Math.sqrt(w[0]**2+w[1]**2),_=[w[0]/I,w[1]/I],C=[i[0]+_[0]*h*g,i[1]+_[1]*h*g],b=[n[d][0]-v[0],n[d][1]-v[1]],T=Math.sqrt(b[0]**2+b[1]**2),D=[b[0]/T,b[1]/T],S=[v[0]+D[0]*h*g,v[1]+D[1]*h*g],y=[c[0]-o[0],c[1]-o[1]],M=Math.sqrt(y[0]**2+y[1]**2),O=[y[0]/M,y[1]/M];return{arc1Start:E,arc1End:C,arc2Start:S,arc2End:[o[0]+O[0]*h*g,o[1]+O[1]*h*g],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(4!==i.handles.points.length)return;const r=[null,null],s=[null,null];let l=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=ys.vec3.distance(i.handles.points[e],i.handles.points[t]);n<l&&(l=n,r[1]=i.handles.points[e],r[0]=i.handles.points[(e+1)%2],s[0]=i.handles.points[t],s[1]=i.handles.points[2+(t-1)%2])}const{viewport:d}=n,c=i.handles.points.map((e=>d.worldToCanvas(e))),h=[c[0],c[1]],g=[c[2],c[3]],u=rp(h[0],h[1]),v=rp(g[0],g[1]),{arc1Start:m,arc1End:p,arc2End:f,arc2Start:E,arc1Angle:w,arc2Angle:I}=this.getArcsStartEndPoints({firstLine:h,secondLine:g,mid1:u,mid2:v}),{cachedStats:_}=i,C=Object.keys(_);for(let e=0;e<C.length;e++)_[C[e]]={angle:Gv(r,s),arc1Angle:w,arc2Angle:I,points:{canvas:{arc1Start:m,arc1End:p,arc2End:f,arc2Start:E},world:{arc1Start:d.canvasToWorld(m),arc1End:d.canvasToWorld(p),arc2End:d.canvasToWorld(f),arc2Start:d.canvasToWorld(E)}}};e.invalidated=!1;const b=te.ANNOTATION_MODIFIED,T={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,b,T),_}}function lp(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return["".concat(i.toFixed(2)," ").concat(String.fromCharCode(176))]}ie(sp,"toolName",void 0),sp.toolName="CobbAngle";const dp=sp,{transformWorldToIndex:cp}=Q.utilities;class hp extends dc{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:gp,displayBothAxesDistances:!1}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"startedDrawing",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;if(!(r instanceof Q.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>!1)),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;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),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.startedDrawing=!1,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g}=h.handles;c.annotationUID=r;const u=this.getStyle("color",c,i),v=g.map((e=>a.worldToCanvas(e)));if(h.cachedStats[l]&&null!=h.cachedStats[l].xValues?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(i,d,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let m="0";if(Gs(t,r,m,v[0],{color:u},0),o=!0,2!==v.length)return o;if(m="1",Gs(t,r,m,v[1],{color:u},1),h.cachedStats[l].isUnitless){const e="".concat(r,"-line-1");js(t,r,"1",v[0],v[1],{color:u,width:1,shadow:this.configuration.shadow},e)}else{const e=v[0],n=v[1],i=n[1]-e[1],o=n[0]-e[0];let a=[0,0];a=h.cachedStats[l].isHorizontal?[e[0]+o,e[1]]:[e[0],e[1]+i];let s="".concat(r,"-line-1"),d="1";js(t,r,d,v[0],a,{color:u,width:1,shadow:this.configuration.shadow},s),s="".concat(r,"-line-2"),d="2",js(t,r,d,v[1],a,{color:u,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(c,i);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 E=a.worldToCanvas(h.handles.textBox.worldPosition),w=Zs(t,r,"1",f,E,v,{},p),{x:I,y:_,width:C,height:b}=w;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([I,_]),topRight:a.canvasToWorld([I+C,_]),bottomLeft:a.canvasToWorld([I,_+b]),bottomRight:a.canvasToWorld([I+C,_+b])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,i){}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const r=Qd(o,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(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,r),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(2!==i.handles.points.length)return;const{cachedStats:r}=i,s=Object.keys(r);for(let e=0;e<s.length;e++){const o=s[e],a=this.getTargetIdImage(o,t);if(!a)continue;const{imageData:l}=a,d=i.handles.points[0],c=i.handles.points[1],h=cp(l,d),g=cp(l,c),{values:u,units:v}=Il(a,[h]),{values:m,units:p}=Il(a,[g]);let f,E,w,I,_=!1;if(v[0]!==p[0]||v[1]!==p[1]||"raw"===v[0]&&"raw"===p[0]){const e=lh(d,c);f=[e,0],E=[e,0],w=["px"],_=!0}else{const e=n.viewport.worldToCanvas(d),t=n.viewport.worldToCanvas(c),i=t[1]-e[1],o=t[0]-e[0];I=Math.abs(o)>Math.abs(i),f=[u[0],m[0]],E=[u[1],m[1]],w=[v[0],v[1]]}r[o]={xValues:f,yValues:E,isHorizontal:I,units:w,isUnitless:_}}e.invalidated=!1;const l=te.ANNOTATION_MODIFIED,d={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,l,d),r}}function gp(e,t,n){const i=e.cachedStats[t],{xValues:o,yValues:a,units:r,isUnitless:s,isHorizontal:l}=i;if(s)return["".concat(mv(o[0])," px")];if(n.displayBothAxesDistances){const e=Math.abs(o[1]-o[0]),t=Math.abs(a[1]-a[0]);return["".concat(mv(e)," ").concat(r[0]),"".concat(mv(t)," ").concat(r[1])]}if(l){const e=Math.abs(o[1]-o[0]);return["".concat(mv(e)," ").concat(r[0])]}{const e=Math.abs(a[1]-a[0]);return["".concat(mv(e)," ").concat(r[1])]}}ie(hp,"toolName",void 0),hp.toolName="UltrasoundDirectionalTool";const up=hp;class vp extends dc{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:mp,changeTextCallback:pp,canvasPosition:[10,10],canvasSize:10}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},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:""}};Qe(u,i);const v=Qd(i,this.getToolName());return e.preventDefault(),or(s,v),this.configuration.getTextCallback((e=>{if(!e)return tt(u.annotationUID),or(s,v),void(this.isDrawing=!1);u.data.text=e;const t=te.ANNOTATION_COMPLETED,n={annotation:u};(0,Q.triggerEvent)(Q.eventTarget,t,n),or(s,v)})),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{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})),ie(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),ls(n)})),ie(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:i}=n;let o=$e(this.getToolName(),i);if(o=this.filterInteractableAnnotationsForElement(i,o),null===(t=o)||void 0===t||!t.length)return;const a=o.find((e=>this.isPointNearTool(i,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,i,r)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;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:i}=n;l.annotationUID=i;const r=this.getStyle("color",l,n),{canvasPosition:d,canvasSize:c}=this.configuration;if(null!=d&&d.length&&Qs(t,i,"1",d.map((e=>e+c)),d,{color:r,width:1}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o}return o}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const{renderingEngine:i,viewportId:o,renderingEngineId:a}=(0,Q.getEnabledElement)(e),r=Qd(e,this.getToolName());or(i,r);const s=te.ANNOTATION_MODIFIED;(0,Q.triggerEvent)(Q.eventTarget,s,{annotation:t,viewportId:o,renderingEngineId:a})}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function mp(e){return e(prompt("Enter your annotation:"))}function pp(e,t,n){return n(prompt("Enter your annotation:"))}ie(vp,"toolName",void 0),vp.toolName="KeyImage";const fp=vp,Ep="magnify-viewport";class wp extends zi{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}}),ie(this,"_bounds",void 0),ie(this,"editData",void 0),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,Q.getEnabledElement)(n),{viewport:a,renderingEngine:r}=o;if(!(a instanceof Q.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=Qd(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:o,renderingEngine:r,currentPoints:i},this._createMagnificationViewport(),this._activateDraw(n),ds(n),e.preventDefault(),or(r,l),!0})),ie(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),ie(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:i,currentPoints:o}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:d}=o;let c;if(c=r.querySelector(".magnifyTool"),null===c){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",c=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:Ep,type:Q.Enums.ViewportType.STACK,element:c};i.enableElement(t)}c.style.top="".concat(l[1]-this.configuration.magnifyHeight/2,"px"),c.style.left="".concat(l[0]-this.configuration.magnifyWidth/2,"px");const h=i.getViewport(Ep);h.setStack([t]).then((()=>{h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:i}=h.getCamera(),o=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[d[0],d[1],d[2]],l=[r[0]+o*i[0],r[1]+o*i[1],r[2]+o*i[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),c.style.display="block",or(i,n)})),ie(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:i,currentPoints:o}=t,a=n.world,r=o.canvas,s=(0,Q.getEnabledElement)(i),{renderingEngine:l}=s,d=l.getViewport(Ep),c=i.querySelector(".magnifyTool");if(!c)return;c.style.top="".concat(r[1]-this.configuration.magnifyHeight/2,"px"),c.style.left="".concat(r[0]-this.configuration.magnifyWidth/2,"px");const{focalPoint:h,position:g}=d.getCamera(),u=[g[0]+a[0],g[1]+a[1],g[2]+a[2]],v=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];d.setCamera({focalPoint:v,position:u}),d.render()})),ie(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,Q.getEnabledElement)(t),{renderingEngine:i}=n;i.disableElement(Ep);const o=t.querySelector(".viewport-element"),a=o.querySelector(".magnifyTool");o.removeChild(a),this._deactivateDraw(t),ls(t)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._dragEndCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(te.TOUCH_END,this._dragEndCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._dragEndCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(te.TOUCH_END,this._dragEndCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof Q.StackViewport&&(n=t.split("imageId:")[1]),n}}ie(wp,"toolName",void 0),wp.toolName="Magnify";const Ip=wp,_p=125,Cp=e=>e.uid!==e.referenceId;class bp{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:i=_p,position:o=[0,0],zoomFactor:a,autoPan:r}=e;ie(this,"_viewportId",void 0),ie(this,"_sourceEnabledElement",void 0),ie(this,"_enabledElement",null),ie(this,"_sourceToolGroup",null),ie(this,"_magnifyToolGroup",null),ie(this,"_isViewportReady",!1),ie(this,"_radius",0),ie(this,"_resized",!1),ie(this,"_resizeViewportAsync",void 0),ie(this,"_canAutoPan",!1),ie(this,"_autoPan",void 0),ie(this,"position",void 0),ie(this,"zoomFactor",void 0),ie(this,"visible",void 0),this._viewportId=null!=t?t:Q.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=i,this.position=o,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=al(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:i}=this._enabledElement,{element:o}=i,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.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(),i.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:i,toolName:o,mode:a,toolBindingsOptions:r}=e.detail;if((null===(t=this._sourceToolGroup)||void 0===t?void 0:t.id)===i)switch(a){case je.Active:n.setToolActive(o,r);break;case je.Passive:n.setToolPassive(o);break;case je.Enabled:n.setToolEnabled(o);break;case je.Disabled:n.setToolDisabled(o);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:i}=e.getCamera();return i*(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(),i="".concat(t.id,"-toolGroup"),o=Mi(e.id,e.renderingEngineId),a=o.clone(i,(e=>{const t=o.getToolInstance(e);return t instanceof dc&&!(t instanceof Mp)||e===Ro.toolName}));return a.addViewport(t.id,t.renderingEngineId),n.filter(Cp).forEach((e=>{bv(i,[{segmentationId:e.referenceId,type:at.Labelmap}])})),{sourceToolGroup:o,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=>!Cp(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const r=i.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(!Ge.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:r}=this,s=[r,r],l=lh(s,a),d=r-t.padding;if(l<=d)return;const c=l-d,h=ys.vec2.sub(ys.vec2.create(),a,s);ys.vec2.normalize(h,h),ys.vec2.scale(h,h,c);const g=ys.vec2.add(ys.vec2.create(),this.position,h),u=o(this.position),v=o(g),m=ys.vec3.sub(ys.vec3.create(),v,u),p={points:{currentPosition:{canvas:this.position,world:u},newPosition:{canvas:g,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){Q.eventTarget.addEventListener(te.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){Q.eventTarget.removeEventListener(te.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(t,i),this._enabledElement=(0,Q.getEnabledElement)(i)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParalellScale(e,t,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],d=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:i,focalPoint:l,position:d})}_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 Tp=1-Q.CONSTANTS.EPSILON,{Events:Dp}=Q.Enums;class Sp{constructor(){ie(this,"_magnifyViewportsMap",void 0),ie(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=i,{element:d}=l,c=new bp({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(d),this._magnifyViewportsMap.set(c.viewportId,{annotation:e,magnifyViewport:c}),c})),ie(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this._destroyViewport(t.data.magnifyViewportId)})),ie(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}))})),ie(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,i=(0,Q.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:o}=i.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(ys.vec3.dot(n,o))>Tp))return;const{handles:a}=t.data,r=i.canvasToWorld([0,0]),s=ys.vec3.sub(ys.vec3.create(),r,a.points[0]),l=ys.vec3.dot(s,o),d=ys.vec3.scale(ys.vec3.create(),o,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=d[0],t[1]+=d[1],t[2]+=d[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){var e;return Sp._singleton=null!==(e=Sp._singleton)&&void 0!==e?e:new Sp,Sp._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:i}=n.sourceEnabledElement,{element:o}=i;this._removeSourceElementEventListener(o),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:i}=n.sourceEnabledElement;return i.id===e}))}_addEventListeners(){Q.eventTarget.addEventListener(te.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){Q.eventTarget.removeEventListener(te.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(Dp.STACK_NEW_IMAGE,this._newStackImageCallback),e.addEventListener(Dp.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_removeSourceElementEventListener(e){e.removeEventListener(Dp.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(Dp.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_initialize(){this._addEventListeners()}}ie(Sp,"_singleton",void 0);var yp=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(yp||{});class Mp extends dc{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:ma.Secondary,modifierKey:pa.Shift}]}}}}),ie(this,"magnifyViewportManager",void 0),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{viewport:a,renderingEngine:r}=o,s=n.world,l=n.canvas,{magnifyingGlass:d}=this.configuration,{radius:c,zoomFactor:h,autoPan:g}=d,u=this._getWorldHandlesPoints(a,l,c),v=a.getCamera(),{viewPlaneNormal:m,viewUp:p}=v,f=this.getReferencedImageId(a,s,m,p),E=Q.utilities.uuidv4(),w=Q.utilities.uuidv4(),I=a.getFrameOfReferenceUID(),_={annotationUID:E,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...p],FrameOfReferenceUID:I,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:w,zoomFactor:h,handles:{points:u,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(_,{magnifyViewportId:w,sourceEnabledElement:o,position:l,radius:c,zoomFactor:h,autoPan:{enabled:g.enabled,padding:g.padding,callback:e=>{const t=_.data.handles.points,{world:n}=e.delta;for(let e=0,i=t.length;e<i;e++)t[e][0]+=n[0],t[e][1]+=n[1],t[e][2]+=n[2]}}}),Qe(_,i);const C=Qd(i,this.getToolName());return e.preventDefault(),or(r,C),_})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=l[0],c=l[2],h=l[3],g=.5*Math.abs(c[1]-d[1]),u=ym([[h[0]+g,d[1]+g],n]);return Math.abs(u-g)<1.5*i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.editData=null,this.isDrawing=!1,or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{var t;this.isDrawing=!0;const n=e.detail,{element:i,deltaPoints:o}=n,a=null!==(t=null==o?void 0:o.world)&&void 0!==t?t:[0,0,0],r=(0,Q.getEnabledElement)(i),{renderingEngine:s}=r,{annotation:l,viewportIdsToRender:d}=this.editData,{points:c}=l.data.handles;c.forEach((e=>{e[0]+=a[0],e[1]+=a[1],e[2]+=a[2]})),l.invalidated=!0,this.editData.hasMoved=!0,or(s,d)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o}=i,{worldToCanvas:a}=o,{annotation:r}=this.editData,{data:s}=r,{points:l}=s.handles,d=l.map((e=>a(e))),c=d[0],h=d[2],g=d[3],u=.5*Math.abs(h[1]-c[1]),v=[g[0]+u,c[1]+u],{currentPoints:m}=t,p=ym([v,m.canvas]),f=this._getWorldHandlesPoints(o,v,p);l[0]=f[0],l[1]=f[1],l[2]=f[2],l[3]=f[3]})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o;let a=!1;const{viewport:r}=e,{element:s}=r;let l=$e(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return a;if(l=this.filterInteractableAnnotationsForElement(s,l),l=null===(i=l)||void 0===i?void 0:i.filter((e=>e.data.sourceViewportId===r.id)),null===(o=l)||void 0===o||!o.length)return a;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:i,data:o}=n,{magnifyViewportId:s,zoomFactor:c,handles:h}=o,{points:g,activeHandleIndex:u}=h;d.annotationUID=i;const v=this.getStyle("lineWidth",d,n),m=this.getStyle("lineDash",d,n),p=this.getStyle("color",d,n),f=g.map((e=>r.worldToCanvas(e))),E=f[0],w=f[2],I=f[3],_=.5*Math.abs(w[1]-E[1]),C=[I[0]+_,E[1]+_];if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let b;if(!Pe(i))continue;ce(n)||this.editData||null===u||(b=[f[u]]),b&&qs(t,i,"0",b,{color:p});const T="".concat(i,"-advancedMagnify");Fs(t,i,"0",C,_,{color:p,lineDash:m,lineWidth:v},T);const D=this.magnifyViewportManager.getViewport(s);D.position=C,D.radius=_,D.zoomFactor=c,D.update(),a=!0}return a})),ie(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=Sp.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:i}=e.detail,o=(0,Q.getEnabledElement)(n),{viewport:a}=o,{canvas:r}=i,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,d=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),d.parentElement.removeChild(d),a.render()}));Object.assign(d.style,{left:"".concat(r[0],"px"),top:"".concat(r[1],"px")}),s.appendChild(d),d.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{i.addEventListener(e,(e=>e.stopPropagation()))})),i.addEventListener("change",(e=>{e.stopPropagation(),t(i.value)})),i.addEventListener("keydown",(e=>{var n,i;((null!==(n=e.keyCode)&&void 0!==n?n:27===e.which)||"escape"===(null===(i=e.key)||void 0===i?void 0:i.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,i.add(n)})),i}}ie(Mp,"toolName",void 0),ie(Mp,"Actions",yp),Mp.toolName="AdvancedMagnify";class Op extends sc{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"isDrawing",!1),ie(this,"isHandleOutsideImage",!1),ie(this,"_elementWithCursor",null),ie(this,"_currentCursorWorldPosition",null),ie(this,"_currentCanvasPosition",null),ie(this,"_disableCursorEnabled",!1),ie(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:i}=t;this._currentCursorWorldPosition=i.world,this._currentCanvasPosition=i.canvas,this._elementWithCursor=n;const o=this.getActiveAnnotation(n);return null===o?(this.createInitialAnnotation(i.world,n),!1):(this.updateAnnotationPosition(n,o),!1)})),ie(this,"createInitialAnnotation",((e,t)=>{const n=(0,Q.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:i,renderingEngine:o}=n;this.isDrawing=!0;const a=i.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(i,e,r,s),d=i.getFrameOfReferenceUID(),c={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:d,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($e(this.getToolName(),t).length>0)return null;if(null===Qe(c,t))return;const h=Qd(t,this.getToolName(),!1);or(o,h)})),ie(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:i,camera:o}=t,a=(0,Q.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=i.focalPoint,s=o.viewPlaneNormal,l=o.focalPoint,d=[0,0,0];if(Oh().subtract(l,r,d),0===d.reduce(((e,t)=>e+t),0))return;const c=Oh().dot(d,s);if(Math.abs(c)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,FrameOfReferenceUID:r}=e,s=this._elementWithCursor===a.element;this.configuration.positionSync&&!s&&this.updateViewportImage(a);const{element:l}=a;let d=$e(this.getToolName(),l);if(null===(n=d)||void 0===n||!n.length)return o;if(d=this.filterInteractableAnnotationsForElement(l,d),null===(i=d)||void 0===i||!i.length)return o;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<d.length;e++){const n=d[e],{annotationUID:i,data:r}=n,{handles:l}=r,{points:h}=l;if(!i)return o;c.annotationUID=i;const g=parseFloat(this.getStyle("lineWidth",c,n)),u=this.getStyle("lineDash",c,n),v=this.getStyle("color",c,n);if(h[0].some((e=>isNaN(e))))return o;const m=h.map((e=>a.worldToCanvas(e)));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Pe(i))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,E]=m[0],w=s?20:7,I=s?5:7;js(t,i,p.upper,[f,E-(w/2+I)],[f,E-w/2],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.lower,[f,E+(w/2+I)],[f,E+w/2],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.right,[f+(w/2+I),E],[f+w/2,E],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.left,[f-(w/2+I),E],[f-w/2,E],{color:v,lineDash:u,lineWidth:g}),o=!0}return o})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=xi(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&ds(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=xi(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&ls(e.viewport.element)}))}getActiveAnnotation(e){const t=$e(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){var n;const i=this._currentCursorWorldPosition;if(!i)return;if(null===(n=t.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return;t.data.handles.points=[[...i]],t.invalidated=!0;const o=Qd(e,this.getToolName(),!1),a=(0,Q.getEnabledElement)(e);if(!a)return;const{renderingEngine:r}=a;or(r,o)}filterInteractableAnnotationsForElement(e,t){var n,i;if(!(t instanceof Array)||0===t.length)return[];const o=t[0],a=null===(n=(0,Q.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 d=null===(i=o.data)||void 0===i||null===(i=i.handles)||void 0===i?void 0:i.points;if(!(d instanceof Array)||1!==d.length)return[];const c=d[0],h=Q.utilities.planar.planeEquation(s,l);return Q.utilities.planar.planeDistanceToPoint(h,c)<this.configuration.displayThreshold?[o]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof Q.StackViewport){const n=Q.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof Q.VolumeViewport){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=Q.utilities.planar.planeEquation(i,n),a=Q.utilities.planar.planeDistanceToPoint(o,t,!0);if(Math.abs(a)<.5)return;const r=ys.vec3.normalize(ys.vec3.create(),ys.vec3.fromValues(...i)),s=ys.vec3.scale(ys.vec3.create(),r,a),l=ys.vec3.add(ys.vec3.create(),ys.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}ie(Op,"toolName",void 0),Op.toolName="ReferenceCursors";const xp=Op,Pp=[];class Np extends sc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",{}),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"_init",(()=>{const e=(0,Q.getRenderingEngines)()[0];if(!e)return;const t=xi(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:i}=n[0];const{FrameOfReferenceUID:o}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(i=e.viewport)})),!i)return;const{viewUp:a,viewPlaneNormal:r}=i.getCamera(),s=Q.utilities.getViewportImageCornersInWorld(i);let l=this.editData.annotation;const d=$e(this.getToolName(),i.element);if(d.length&&(l=d.filter((e=>e.data.viewportId==i.id))[0]),Pp.includes(i.id))this.editData.annotation.data.viewportId==i.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=i.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:o,referencedImageId:null},data:{handles:{points:s},viewportId:i.id}};Pp.push(i.id),Qe(e,i.element),l=e}this.editData={viewport:i,renderingEngine:e,annotation:l}})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),ie(this,"computeScaleSize",((e,t,n)=>{const i=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let o;return o="top"==n||"bottom"==n?i.filter((t=>t<.6*e&&t>.2*e)):i.filter((e=>e<.6*t&&e>.2*t)),o[0]})),ie(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]]]}})),ie(this,"computeInnerScaleTicks",((e,t,n,i,o)=>{let a;"bottom"==t||"top"==t?a=o[0][0]-i[0][0]:"left"!=t&&"right"!=t||(a=o[0][1]-i[0][1]);const r=[],s=[],l=[];let d=e;e>=50&&(d=e/10);const c=a/d;for(let e=0;e<d-1;e++){const o={bottom:[[c*(e+1),0],[c*(e+1),5]],top:[[c*(e+1),0],[c*(e+1),-5]],left:[[0,c*(e+1)],[-5,c*(e+1)]],right:[[0,c*(e+1)],[5,c*(e+1)]]};r.push("".concat(n,"-tick").concat(e)),s.push("tick".concat(e)),(e+1)%5==0?l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][0][0],i[1][1]+o[t][0][1]]]):l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][1][0],i[1][1]+o[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),ie(this,"computeWorldScaleCoordinates",((e,t,n)=>{let i,o=ys.vec3.subtract(ys.vec3.create(),n[0],n[1]);o=ys.vec3.normalize(ys.vec3.create(),o);let a=ys.vec3.subtract(ys.vec3.create(),n[2],n[0]);a=ys.vec3.normalize(ys.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=ys.vec3.add(ys.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(o[0],2)+Math.pow(o[1],2)+Math.pow(o[2],2));return"top"==t||"bottom"==t?i=[ys.vec3.subtract(ys.vec3.create(),s,a.map((e=>e*l))),ys.vec3.add(ys.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(i=[ys.vec3.add(ys.vec3.create(),s,o.map((e=>e*l))),ys.vec3.subtract(ys.vec3.create(),s,o.map((e=>e*l)))]),i})),ie(this,"computeCanvasScaleCoordinates",((e,t,n,i,o)=>{let a;if("top"==o||"bottom"==o){const i=t[0][0]-t[1][0];a=[[e.width/2-i/2,n.height],[e.width/2+i/2,n.height]]}else if("left"==o||"right"==o){const n=t[0][1]-t[1][1];a=[[i.width,e.height/2-n/2],[i.width,e.height/2+n/2]]}return a})),ie(this,"computeScaleBounds",((e,t,n,i)=>{const o=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-o],top:[a,o],left:[a,o],right:[-a,-o]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[i][0]+r[i][0],width:s[i][1]+r[i][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,o=$e(this.getToolName(),i.element).filter((e=>e.data.viewportId==i.id))[0],a=e.viewport.canvas;if(!i)return!1;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s={width:a.width,height:a.height},l=o.data.handles.points[0],d=o.data.handles.points[1],c=o.data.handles.points[2],h=o.data.handles.points[3],g=[l,c,d,h],u=ys.vec3.distance(c,h),v=ys.vec3.distance(l,c),m=this.computeScaleBounds(s,.05,.05,n),p=this.computeScaleBounds(s,.05,.05,n),f=this.computeScaleSize(u,v,n),E=this.computeWorldScaleCoordinates(f,n,g).map((e=>i.worldToCanvas(e))),w=this.computeCanvasScaleCoordinates(s,E,p,m,n),I=this.computeEndScaleTicks(w,n),{annotationUID:_}=o;r.annotationUID=_;const C=this.getStyle("lineWidth",r,o),b=this.getStyle("lineDash",r,o),T=this.getStyle("color",r,o),D=this.getStyle("shadow",r,o),S="".concat(_,"-scaleline");js(t,_,"1",w[0],w[1],{color:T,width:C,lineDash:b,shadow:D},S);const y="".concat(_,"-left");js(t,_,"2",I.endTick1[0],I.endTick1[1],{color:T,width:C,lineDash:b,shadow:D},y);const M="".concat(_,"-right");js(t,_,"3",I.endTick2[0],I.endTick2[1],{color:T,width:C,lineDash:b,shadow:D},M);const O={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},x=[w[0][0]+O[n][0],w[0][1]+O[n][1]],P=this._getTextLines(f),{tickIds:N,tickUIDs:R,tickCoordinates:A}=this.computeInnerScaleTicks(f,n,_,I.endTick1,I.endTick2);for(let e=0;e<R.length;e++)js(t,_,R[e],A[e][0],A[e][1],{color:T,width:C,lineDash:b,shadow:D},N[e]);return Xs(t,_,"text0",P,[x[0],x[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:T}),!1}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}ie(Np,"toolName",void 0),Np.toolName="ScaleOverlay";const Rp=Np,{transformWorldToIndex:Ap}=Q.utilities;function kp(e,t){!function(e,t){const{points:n,segmentsLocked:i,segmentIndex:o,segmentationId:a}=t,{viewport:r}=e,s=ld({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationScalarData:d}=s;let c=n.map((e=>Ap(l,e)));c=c.map((e=>e.map((e=>Math.round(e)))));const h=Dl(c,l.getDimensions()),g=r instanceof Q.StackViewport||Su(c),u=l.getDirection(),v=l.getSpacing(),{viewPlaneNormal:m}=r.getCamera(),p=Q.utilities.getSpacingInNormalDirection({direction:u,spacing:v},m),f=Sl(n);let[[E,w],[I,_],[C,b]]=f;E-=p,w+=p,I-=p,_+=p,C-=p,b+=p,Cl(l,g?()=>!0:e=>{const[t,n,i]=e;return t>=E&&t<=w&&n>=I&&n<=_&&i>=C&&i<=b},(e=>{let{value:t,index:n}=e;i.includes(t)||(d[n]=o)}),h),ft(a)}(e,t)}function Lp(e,t){!function(e,t){kp(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class Up extends zi{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:kp,ERASE_INSIDE:Lp},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.toolGroupId,g=Pd(h);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:v,type:m}=g,p=Wd(v),f=Ld(v),E=od(h,u,p),{representationData:w}=It(v),I=w[at.Labelmap],_={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:E},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null}}},C=Qd(i,this.getToolName());if(this.editData={annotation:_,segmentIndex:p,segmentationId:v,segmentsLocked:f,segmentColor:E,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:u},Oi(I)){const{volumeId:e}=I,t=Q.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=I;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(i),ds(i),e.preventDefault(),or(s,C),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i,{currentPoints:s}=t,l=(0,Q.getEnabledElement)(n),{worldToCanvas:d,canvasToWorld:c}=l.viewport,h=s.world,{points:g}=r.handles;let u,v,m,p,f,E,w,I;switch(g[a]=[...h],a){case 0:case 3:u=d(g[0]),p=d(g[3]),v=[p[0],u[1]],m=[u[0],p[1]],E=c(v),w=c(m),g[1]=E,g[2]=w;break;case 1:case 2:v=d(g[1]),m=d(g[2]),u=[m[0],v[1]],p=[v[0],m[1]],f=c(u),I=c(p),g[0]=f,g[3]=I}i.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:_}=l;or(_,o)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{annotation:o}=this.editData,a=o.metadata,r=o.annotationUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c="rgb(".concat(a.segmentColor.slice(0,3),")");return i.getRenderingEngine()?($s(t,r,"0",d[0],d[3],{color:c}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Up,"toolName",void 0),Up.toolName="RectangleScissor";const Vp=Up;class Wp extends zi{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:Cd,ERASE_INSIDE:xd},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.toolGroupId,u=Pd(g);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m,type:p}=u,f=Wd(m),E=Ld(m),w=od(g,v,f),{representationData:I}=It(m),_=I[p];if(!_)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const C={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:w},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},b=[s.id];if(this.editData={annotation:C,centerCanvas:a,segmentIndex:f,segmentationId:m,segmentsLocked:E,segmentColor:w,viewportIdsToRender:b,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:v},Oi(_)){const{volumeId:e}=_,t=Q.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(i),ds(i),e.preventDefault(),or(l,b),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:g}=d,u=Math.abs(o[0]-h[0]),v=Math.abs(o[1]-h[1]),m=Math.sqrt(u*u+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],E=[h[0]-m,h[1]],w=[h[0]+m,h[1]];g.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i,{viewPlaneNormal:s,viewUp:l}=i.metadata;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const d=(0,Q.getEnabledElement)(n),c={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,c)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],g=c[1],u=[Math.floor((h[0]+g[0])/2),Math.floor((h[1]+g[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+g[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return i.getRenderingEngine()?(Fs(t,s,"0",u,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Wp,"toolName",void 0),Wp.toolName="CircleScissor";const Fp=Wp;class Hp extends zi{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:yd,ERASE_INSIDE:Od},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.toolGroupId,u=Pd(g);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m}=u,p=Wd(m),f=Ld(m),E=od(g,v,p);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:E},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},I=[s.id];this.editData={annotation:w,centerCanvas:a,segmentationRepresentationUID:v,segmentIndex:p,segmentationId:m,segmentsLocked:f,segmentColor:E,toolGroupId:g,viewportIdsToRender:I,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1};const{representationData:_}=It(m),C=_[at.Labelmap];if(Oi(C)){const{volumeId:e}=C,t=Q.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(i),ds(i),e.preventDefault(),or(l,I),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:g}=d,u=Math.abs(o[0]-h[0]),v=Math.abs(o[1]-h[1]),m=Math.sqrt(u*u+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],E=[h[0]-m,h[1]],w=[h[0]+m,h[1]];g.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:d}=i,{viewPlaneNormal:c,viewUp:h}=i.metadata;if(o&&!a)return;i.highlighted=!1,d.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const g=(0,Q.getEnabledElement)(n),u={...this.editData,points:d.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:c,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(g,u)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],g=c[1],u=[Math.floor((h[0]+g[0])/2),Math.floor((h[1]+g[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+g[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return i.getRenderingEngine()?(Fs(t,s,"0",u,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Hp,"toolName",void 0),Hp.toolName="SphereScissor";const Bp=Hp;var Gp=C(518),qp=C.n(Gp),jp=C(744),zp=C.n(jp),Kp=C(424),Yp=C.n(Kp),Xp=C(614),Jp=C.n(Xp);const Zp={ANNOTATED_CUBE:1,AXES:2,CUSTOM:3};class $p extends zi{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:qp().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:$p.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[$p.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}},[$p.OVERLAY_MARKER_TYPES.AXES]:{},[$p.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),ie(this,"orientationMarkers",void 0),ie(this,"polyDataURL",void 0),ie(this,"configuration_invalidated",!0),ie(this,"onSetToolEnabled",(()=>{this.initViewports(),this.configuration_invalidated=!0})),ie(this,"onSetToolActive",(()=>{this.initViewports()})),ie(this,"onSetToolDisabled",(()=>{this.cleanUpData()})),this.orientationMarkers={},this.configuration_invalidated=!0}cleanUpData(){(0,Q.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:i}=t;null==i||i.setEnabled(!1),null==i||i.delete(),null==n||n.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,Q.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Jd(t,this.getToolName()),t.forEach((e=>this.addAxisActorInViewport(e)))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:i}=this.orientationMarkers[t];e.getRenderer().removeActor(n),i.setEnabled(!1)}let o;1===n?o=this.createAnnotationCube(i):2===n?o=Yp().newInstance():3===n&&(o=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:d,minPixelSize:c,maxPixelSize:h}=this.configuration.orientationWidget,g=qp().newInstance({actor:o,interactor:r.getInteractor(),parentRenderer:a});g.setEnabled(s),g.setViewportCorner(l),g.setViewportSize(d),g.setMinPixelSize(c),g.setMaxPixelSize(h),g.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:g,actor:o},r.render(),e.getRenderingEngine().render(),this.configuration_invalidated=!1}async createCustomActor(){const e=this.configuration.overlayConfiguration[Zp.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),i=Jp().newInstance();i.parseAsArrayBuffer(n),i.update();const o=to().newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=Xi().newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const r=Zi().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=zp().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=zp().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const i="set".concat(n.charAt(0).toUpperCase()+n.slice(1),"FaceProperty");e[i](t[n])})),e}}ie($p,"toolName",void 0),ie($p,"CUBE",1),ie($p,"AXIS",2),ie($p,"VTPFILE",3),ie($p,"OVERLAY_MARKER_TYPES",Zp),$p.toolName="OrientationMarker";const Qp=$p;class ef extends zi{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:750}}),ie(this,"hoverTimer",void 0),ie(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),ie(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),ie(this,"onSetToolActive",(()=>{this.hoverTimer=null})),ie(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{element:t,currentPoints:n}=e.detail,i=n.world,o=(0,Q.getEnabledElement)(t);if(!o)return;const{viewport:a}=o,r=Nd(this.toolGroupId);if(r.type!==at.Labelmap)throw Error("non-labelmap segmentation not supported yet");this._setActiveSegmentLabelmap(r,i,a)}_setActiveSegmentLabelmap(e,t,n){if(!n.getImageData())return;const i=e.representationData.LABELMAP;let o;if(Oi(e.representationData.LABELMAP)){const{volumeId:e}=i,n=Q.cache.getVolume(e);if(!n)return;o=n.imageData.getScalarValueFromWorld(t)}else{const{imageIdReferenceMap:e}=i,a=n.getCurrentImageId(),r=e.get(a),s=Q.cache.getImage(r);if(!s)return;const l=Pd(this.toolGroupId);if(!l)return;const d=n.getActor(l.segmentationRepresentationUID),c=null==d?void 0:d.actor.getMapper().getInputData(),h=Q.utilities.transformWorldToIndex(c,t),g=h[0]+h[1]*s.columns;o=c.getPointData().getScalars().getData()[g]}if(!o||0===o)return;Vd(e.segmentationId,o);const a=n.getRenderingEngine();pt(e.segmentationId),or(a,a.getViewports().map((e=>e.id)))}}ie(ef,"toolName",void 0),ef.toolName="SegmentSelectTool";const tf=ef,{transformWorldToIndex:nf,isEqual:of}=Q.utilities;class af extends zi{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,ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,d=Pd(this.toolGroupId);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:c,type:h}=d,g=Wd(c),u=Ld(c),{representationData:v}=It(c),m=v[at.Labelmap];let p,f,E,w;if(Oi(m)){const{volumeId:e}=v[h],t=Q.cache.getVolume(e);({dimensions:p,direction:f}=t),E=t.getScalarData(),w=nf(t.imageData,o)}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 i=Q.cache.getImage(n);E=i.getPixelData();const{imageData:s}=r.getImageData();p=s.getDimensions(),f=s.getDirection(),w=nf(s,o)}const I=this.getFixedDimension(l,f);if(void 0===I)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:_,getLabelValue:C,getScalarDataPositionFromPlane:b,inPlaneSeedPoint:T,fixedDimensionValue:D}=this.generateHelpers(E,p,w,I);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=C(w[0],w[1],w[2]);if(u.includes(S))return;const y=td(_,T),{flooded:M}=y;return M.forEach((e=>{const t=b(e[0],e[1]);E[t]=g})),ft(c,this.getFramesModified(I,D,y)),!0})),ie(this,"getFramesModified",((e,t,n)=>{const{boundaries:i}=n;if(2===e)return[t];let o=1/0,a=-1/0;for(let e=0;e<i.length;e++){const t=i[e][1];t<o&&(o=t),t>a&&(a=t)}const r=[];for(let e=o;e<=a;e++)r.push(e);return r})),ie(this,"generateHelpers",(function(t,n,i){let o,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:o=i[0],a=[i[1],i[2]];break;case 1:o=i[1],a=[i[0],i[2]];break;case 2:o=i[2],a=[i[0],i[1]];break;default:throw new Error("Invalid fixedDimension: ".concat(r))}const s=(e,t,i)=>i*n[1]*n[0]+t*n[0]+e,l=(e,n,i)=>t[s(e,n,i)],d=e.generateFloodFillGetter(n,r,o,l);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(s,r,o),getLabelValue:l,floodFillGetter:d,inPlaneSeedPoint:a,fixedDimensionValue:o}})),ie(this,"generateFloodFillGetter",((e,t,n,i)=>{let o;switch(t){case 0:o=(t,o)=>{if(!(t>=e[1]||t<0||o>=e[2]||o<0))return i(n,t,o)};break;case 1:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[2]||o<0))return i(t,n,o)};break;case 2:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[1]||o<0))return i(t,o,n)};break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return o})),ie(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let i;switch(t){case 0:i=(t,i)=>e(n,t,i);break;case 1:i=(t,i)=>e(t,n,i);break;case 2:i=(t,i)=>e(t,i,n);break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return i}))}getFixedDimension(e,t){const n=t.slice(0,3),i=t.slice(3,6),o=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(of(a,r))return 0;const s=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(of(a,s))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];return of(a,l)?2:void 0}}ie(af,"toolName",void 0),af.toolName="PaintFill";const rf=af;class sf extends dc{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"_configuration",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},active:!0}};Qe(g,i);const u=Qd(i,this.getToolName(),!1);return this.editData={annotation:g,viewportUIDsToRender:u,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,u),g})),ie(this,"getHandleNearImagePoint",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==ys.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:g,top:u,width:v,height:m}=c;if(vc([g,u,v,m],h)<=i)return!0})),ie(this,"toolSelectedCallback",(function(t,n){const i=t.detail,{element:o}=i,{data:a}=n;a.active=!0;const r=Qd(o,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(o),ds(o);const s=(0,Q.getEnabledElement)(o),{renderingEngine:l}=s;or(l,r),t.preventDefault()})),ie(this,"handleSelectedCallback",(function(t,n,i){const o=t.detail,{element:a}=o,{data:r}=n;r.active=!0;let s,l=!1;i.worldPosition||(s=r.handles.points.findIndex((e=>e===i)));const d=Qd(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:d,handleIndex:s},e._activateModify(a),ds(a);const c=(0,Q.getEnabledElement)(a),{renderingEngine:h}=c;or(h,d),t.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o)})),ie(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=r.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,i=(0,Q.getEnabledElement)(n),{worldToCanvas:o,canvasToWorld:s}=i.viewport,l=e.world,{points:d}=r.handles;let c,h,g,u,v,m,p,f;switch(d[a]=[...l],a){case 0:case 3:c=o(d[0]),u=o(d[3]),h=[u[0],c[1]],g=[c[0],u[1]],m=s(h),p=s(g),d[1]=m,d[2]=p;break;case 1:case 2:h=o(d[1]),g=o(d[2]),c=[g[0],h[1]],u=[h[0],g[1]],v=s(c),f=s(u),d[0]=v,d[3]=f}r.invalidated=!0}this.editData.hasMoved=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.TOUCH_END,this._mouseUpCallback),e.addEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.TOUCH_END,this._mouseUpCallback),e.removeEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.TOUCH_END,this._mouseUpCallback),e.addEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.TOUCH_END,this._mouseUpCallback),e.removeEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;const{viewport:o}=e,{element:a}=o;let r=$e(this.getToolName(),a);if(null===(n=r)||void 0===n||!n.length)return!1;if(r=this.filterInteractableAnnotationsForElement(a,r),null===(i=r)||void 0===i||!i.length)return!1;this.getTargetId(o),o.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:i}=n,a=(n.metadata,n.data),{points:l,activeHandleIndex:d}=a.handles,c=l.map((e=>o.worldToCanvas(e))),h=this.getStyle("lineWidth",s,n),g=this.getStyle("lineDash",s,n),u=this.getStyle("color",s,n);if(!o.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let v;this.editData||null===d||(v=[c[d]]),v&&qs(t,i,"0",v,{color:u}),el(t,i,"0",c[0],c[3],{color:"black",lineDash:g,lineWidth:h})}})),ie(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])}})),ie(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,g=Object.keys(h);for(let e=0;e<g.length;e++){const o=g[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(o,i),{dimensions:r,scalarData:s,vtkImageData:l,metadata:u}=a,v=ys.vec3.fromValues(0,0,0),m=ys.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(d,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),l.worldToIndexVec3(c,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]),i=Math.max(v[0],m[0]),a=Math.min(v[1],m[1]),l=Math.max(v[1],m[1]),g=Math.min(v[2],m[2]),p=Math.max(v[2],m[2]),{worldWidth:f,worldHeight:E}=Cm(t,n,d,c),w=f*E;let I=0,_=0,C=0;const b=r[0],T=r[0]*r[1];for(let t=g;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++)I++,_+=s[t*T+n*b+o];_/=I;for(let t=g;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++){const e=s[t*T+n*b+o]-_;C+=e*e}C/=I,C=Math.sqrt(C),h[o]={Modality:u.Modality,area:w,mean:_,stdDev:C}}else this.isHandleOutsideImage=!0,h[o]={Modality:u.Modality}}a.invalidated=!1;const u=te.ANNOTATION_MODIFIED,v={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,Q.triggerEvent)(Q.eventTarget,u,v),h})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),ie(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=rl(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:i}=t;i.active=!1,i.handles.activeHandleIndex=null;const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const i=e.indexOf(":"),o=e.substring(i+1);n=t.getViewport(o).getImageData()}else n=Q.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return"stackTarget:".concat(e.uid)}}sf.toolName="VideoRedaction";const lf=sf})(),b})()));
2
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("gl-matrix"),require("@cornerstonejs/core"),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/Common/Core/DataArray"),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/Filters/General/ClipClosedSurface"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),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/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/Common/Core/DataArray","@kitware/vtk.js/Filters/General/AppendPolyData","@kitware/vtk.js/Rendering/Core/Actor","@kitware/vtk.js/Rendering/Core/Mapper","@kitware/vtk.js/Filters/General/ClipClosedSurface","@kitware/vtk.js/Common/DataModel/ImageData","@kitware/vtk.js/Common/Core/Math","@kitware/vtk.js/Filters/General/ImageMarchingSquares","@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/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/Common/Core/DataArray"),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/Filters/General/ClipClosedSurface"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("@kitware/vtk.js/Common/Core/Math"),require("@kitware/vtk.js/Filters/General/ImageMarchingSquares"),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/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/Common/Core/DataArray"],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/Filters/General/ClipClosedSurface"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["@kitware/vtk.js/Common/Core/Math"],e["@kitware/vtk.js/Filters/General/ImageMarchingSquares"],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,i,o,a,r,s,l,d,c,h,g,u,v,m,p,f,E,w)=>(()=>{var I={907:(e,t,n)=>{e=n.nmd(e);var i="__lodash_hash_undefined__",o=9007199254740991,a="[object Arguments]",r="[object Boolean]",s="[object Date]",l="[object Function]",d="[object GeneratorFunction]",c="[object Map]",h="[object Number]",g="[object Object]",u="[object Promise]",v="[object RegExp]",m="[object Set]",p="[object String]",f="[object Symbol]",E="[object WeakMap]",w="[object ArrayBuffer]",I="[object DataView]",_="[object Float32Array]",C="[object Float64Array]",b="[object Int8Array]",T="[object Int16Array]",D="[object Int32Array]",S="[object Uint8Array]",y="[object Uint8ClampedArray]",M="[object Uint16Array]",O="[object Uint32Array]",x=/\w*$/,P=/^\[object .+?Constructor\]$/,N=/^(?:0|[1-9]\d*)$/,R={};R[a]=R["[object Array]"]=R[w]=R[I]=R[r]=R[s]=R[_]=R[C]=R[b]=R[T]=R[D]=R[c]=R[h]=R[g]=R[v]=R[m]=R[p]=R[f]=R[S]=R[y]=R[M]=R[O]=!0,R["[object Error]"]=R[l]=R[E]=!1;var A="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,k="object"==typeof self&&self&&self.Object===Object&&self,L=A||k||Function("return this")(),U=t&&!t.nodeType&&t,V=U&&e&&!e.nodeType&&e,W=V&&V.exports===U;function F(e,t){return e.set(t[0],t[1]),e}function H(e,t){return e.add(t),e}function B(e,t,n,i){var o=-1,a=e?e.length:0;for(i&&a&&(n=e[++o]);++o<a;)n=t(n,e[o],o,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,i){n[++t]=[i,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=L["__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.*?")+"$"),ie=W?L.Buffer:void 0,oe=L.Symbol,ae=L.Uint8Array,re=j(Object.getPrototypeOf,Object),se=Object.create,le=J.propertyIsEnumerable,de=Y.splice,ce=Object.getOwnPropertySymbols,he=ie?ie.isBuffer:void 0,ge=j(Object.keys,Object),ue=Le(L,"DataView"),ve=Le(L,"Map"),me=Le(L,"Promise"),pe=Le(L,"Set"),fe=Le(L,"WeakMap"),Ee=Le(Object,"create"),we=He(ue),Ie=He(ve),_e=He(me),Ce=He(pe),be=He(fe),Te=oe?oe.prototype:void 0,De=Te?Te.valueOf:void 0;function Se(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function ye(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Me(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function Oe(e){this.__data__=new ye(e)}function xe(e,t,n){var i=e[t];ee.call(e,t)&&Be(i,n)&&(void 0!==n||t in e)||(e[t]=n)}function Pe(e,t){for(var n=e.length;n--;)if(Be(e[n][0],t))return n;return-1}function Ne(e,t,n,i,o,u,E){var P;if(i&&(P=u?i(e,o,u,E):i(e)),void 0!==P)return P;if(!Ke(e))return e;var N=Ge(e);if(N){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,i=e.length;for(t||(t=Array(i));++n<i;)t[n]=e[n];return t}(e,P)}else{var A=Ve(e),k=A==l||A==d;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(A==g||A==a||k&&!u){if(G(e))return u?e:{};if(P=function(e){return"function"!=typeof e.constructor||Fe(e)?{}:Ke(t=re(e))?se(t):{};var t}(k?{}:e),!t)return function(e,t){return Ae(e,Ue(e),t)}(e,function(e,t){return e&&Ae(t,Ye(t),e)}(P,e))}else{if(!R[A])return u?e:{};P=function(e,t,n,i){var o,a=e.constructor;switch(t){case w:return Re(e);case r:case s:return new a(+e);case I:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}(e,i);case _:case C:case b:case T:case D:case S:case y:case M:case O:return function(e,t){var n=t?Re(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}(e,i);case c:return function(e,t,n){return B(t?n(q(e),!0):q(e),F,new e.constructor)}(e,i,n);case h:case p:return new a(e);case v:return function(e){var t=new e.constructor(e.source,x.exec(e));return t.lastIndex=e.lastIndex,t}(e);case m:return function(e,t,n){return B(t?n(z(e),!0):z(e),H,new e.constructor)}(e,i,n);case f:return o=e,De?Object(De.call(o)):{}}}(e,A,Ne,t)}}E||(E=new Oe);var L=E.get(e);if(L)return L;if(E.set(e,P),!N)var U=n?function(e){return function(e,t,n){var i=t(e);return Ge(e)?i:function(e,t){for(var n=-1,i=t.length,o=e.length;++n<i;)e[o+n]=t[n];return e}(i,n(e))}(e,Ye,Ue)}(e):Ye(e);return function(e,t){for(var n=-1,i=e?e.length:0;++n<i&&!1!==t(e[n],n););}(U||e,(function(o,a){U&&(o=e[a=o]),xe(P,a,Ne(o,t,n,i,a,e,E))})),P}function Re(e){var t=new e.constructor(e.byteLength);return new ae(t).set(new ae(e)),t}function Ae(e,t,n,i){n||(n={});for(var o=-1,a=t.length;++o<a;){var r=t[o],s=i?i(n[r],e[r],r,n,e):void 0;xe(n,r,void 0===s?e[r]:s)}return n}function ke(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function Le(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(He(e));var t}(n)?n:void 0}Se.prototype.clear=function(){this.__data__=Ee?Ee(null):{}},Se.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},Se.prototype.get=function(e){var t=this.__data__;if(Ee){var n=t[e];return n===i?void 0:n}return ee.call(t,e)?t[e]:void 0},Se.prototype.has=function(e){var t=this.__data__;return Ee?void 0!==t[e]:ee.call(t,e)},Se.prototype.set=function(e,t){return this.__data__[e]=Ee&&void 0===t?i: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():de.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__,i=Pe(n,e);return i<0?n.push([e,t]):n[i][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 ke(this,e).delete(e)},Me.prototype.get=function(e){return ke(this,e).get(e)},Me.prototype.has=function(e){return ke(this,e).has(e)},Me.prototype.set=function(e,t){return ke(this,e).set(e,t),this},Oe.prototype.clear=function(){this.__data__=new ye},Oe.prototype.delete=function(e){return this.__data__.delete(e)},Oe.prototype.get=function(e){return this.__data__.get(e)},Oe.prototype.has=function(e){return this.__data__.has(e)},Oe.prototype.set=function(e,t){var n=this.__data__;if(n instanceof ye){var i=n.__data__;if(!ve||i.length<199)return i.push([e,t]),this;n=this.__data__=new Me(i)}return n.set(e,t),this};var Ue=ce?j(ce,Object):function(){return[]},Ve=function(e){return te.call(e)};function We(e,t){return!!(t=null==t?o:t)&&("number"==typeof e||N.test(e))&&e>-1&&e%1==0&&e<t}function Fe(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||J)}function He(e){if(null!=e){try{return Q.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Be(e,t){return e===t||e!=e&&t!=t}(ue&&Ve(new ue(new ArrayBuffer(1)))!=I||ve&&Ve(new ve)!=c||me&&Ve(me.resolve())!=u||pe&&Ve(new pe)!=m||fe&&Ve(new fe)!=E)&&(Ve=function(e){var t=te.call(e),n=t==g?e.constructor:void 0,i=n?He(n):void 0;if(i)switch(i){case we:return I;case Ie:return c;case _e:return u;case Ce:return m;case be:return E}return t});var Ge=Array.isArray;function qe(e){return null!=e&&function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=o}(e.length)&&!ze(e)}var je=he||function(){return!1};function ze(e){var t=Ke(e)?te.call(e):"";return t==l||t==d}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,i=Array(e);++n<e;)i[n]=t(n);return i}(e.length,String):[],i=n.length,o=!!i;for(var r in e)!t&&!ee.call(e,r)||o&&("length"==r||We(r,i))||n.push(r);return n}(e):function(e){if(!Fe(e))return ge(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 Ne(e,!0,!0)}},485:(e,t,n)=>{var i,o="__lodash_hash_undefined__",a=1/0,r="[object Function]",s="[object GeneratorFunction]",l="[object Symbol]",d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/,h=/^\./,g=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,u=/\\(\\)?/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")(),E=Array.prototype,w=Function.prototype,I=Object.prototype,_=f["__core-js_shared__"],C=(i=/[^.]+$/.exec(_&&_.keys&&_.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"",b=w.toString,T=I.hasOwnProperty,D=I.toString,S=RegExp("^"+b.call(T).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),y=f.Symbol,M=E.splice,O=V(f,"Map"),x=V(Object,"create"),P=y?y.prototype:void 0,N=P?P.toString:void 0;function R(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function A(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function k(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var i=e[t];this.set(i[0],i[1])}}function L(e,t){for(var n,i,o=e.length;o--;)if((n=e[o][0])===(i=t)||n!=n&&i!=i)return o;return-1}function U(e,t){var n,i,o=e.__data__;return("string"==(i=typeof(n=t))||"number"==i||"symbol"==i||"boolean"==i?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.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)||C&&C in e)return!1;var t=function(e){var t=G(e)?D.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__=x?x(null):{}},R.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},R.prototype.get=function(e){var t=this.__data__;if(x){var n=t[e];return n===o?void 0:n}return T.call(t,e)?t[e]:void 0},R.prototype.has=function(e){var t=this.__data__;return x?void 0!==t[e]:T.call(t,e)},R.prototype.set=function(e,t){return this.__data__[e]=x&&void 0===t?o:t,this},A.prototype.clear=function(){this.__data__=[]},A.prototype.delete=function(e){var t=this.__data__,n=L(t,e);return!(n<0||(n==t.length-1?t.pop():M.call(t,n,1),0))},A.prototype.get=function(e){var t=this.__data__,n=L(t,e);return n<0?void 0:t[n][1]},A.prototype.has=function(e){return L(this.__data__,e)>-1},A.prototype.set=function(e,t){var n=this.__data__,i=L(n,e);return i<0?n.push([e,t]):n[i][1]=t,this},k.prototype.clear=function(){this.__data__={hash:new R,map:new(O||A),string:new R}},k.prototype.delete=function(e){return U(this,e).delete(e)},k.prototype.get=function(e){return U(this,e).get(e)},k.prototype.has=function(e){return U(this,e).has(e)},k.prototype.set=function(e,t){return U(this,e).set(e,t),this};var W=H((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(q(e))return N?N.call(e):"";var t=e+"";return"0"==t&&1/e==-a?"-0":t}(t);var n=[];return h.test(e)&&n.push(""),e.replace(g,(function(e,t,i,o){n.push(i?o.replace(u,"$1"):t||e)})),n}));function F(e){if("string"==typeof e||q(e))return e;var t=e+"";return"0"==t&&1/e==-a?"-0":t}function H(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var i=arguments,o=t?t.apply(this,i):i[0],a=n.cache;if(a.has(o))return a.get(o);var r=e.apply(this,i);return n.cache=a.set(o,r),r};return n.cache=new(H.Cache||k),n}H.Cache=k;var B=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)&&D.call(e)==l}e.exports=function(e,t,n){var i=null==e?void 0:function(e,t){var n;t=function(e,t){if(B(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!q(e))||c.test(e)||!d.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:B(n=t)?n:W(n);for(var i=0,o=t.length;null!=e&&i<o;)e=e[F(t[i++])];return i&&i==o?e:void 0}(e,t);return void 0===i?n:i}},396:e=>{"use strict";e.exports=o},785:e=>{"use strict";e.exports=s},807:e=>{"use strict";e.exports=u},847:e=>{"use strict";e.exports=m},348:e=>{"use strict";e.exports=a},283:e=>{"use strict";e.exports=g},441:e=>{"use strict";e.exports=n},70:e=>{"use strict";e.exports=r},127:e=>{"use strict";e.exports=l},448:e=>{"use strict";e.exports=h},543:e=>{"use strict";e.exports=v},614:e=>{"use strict";e.exports=w},518:e=>{"use strict";e.exports=p},474:e=>{"use strict";e.exports=d},744:e=>{"use strict";e.exports=f},424:e=>{"use strict";e.exports=E},795:e=>{"use strict";e.exports=i},610:e=>{"use strict";e.exports=c},953:e=>{"use strict";e.exports=t},976:t=>{"use strict";t.exports=e}},_={};function C(e){var t=_[e];if(void 0!==t)return t.exports;var n=_[e]={id:e,loaded:!1,exports:{}};return I[e](n,n.exports,C),n.loaded=!0,n.exports}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.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 b={};return(()=>{"use strict";C.r(b),C.d(b,{AdvancedMagnifyTool:()=>Mp,AngleTool:()=>ap,AnnotationDisplayTool:()=>sc,AnnotationTool:()=>dc,ArrowAnnotateTool:()=>np,BaseTool:()=>zi,BidirectionalTool:()=>ih,BrushTool:()=>Hd,CONSTANTS:()=>h,CircleROITool:()=>Nm,CircleScissorsTool:()=>Fp,CobbAngleTool:()=>dp,CrosshairsTool:()=>hm,DragProbeTool:()=>Lv,EllipticalROITool:()=>Sm,Enums:()=>$,KeyImageTool:()=>fp,LengthTool:()=>nm,LivewireContourTool:()=>$m,MIPJumpToClickTool:()=>$v,MagnifyTool:()=>Ip,OrientationMarkerTool:()=>Qp,OverlayGridTool:()=>fm,PaintFillTool:()=>rf,PanTool:()=>yv,PlanarFreehandROITool:()=>_u,PlanarRotateTool:()=>jv,ProbeTool:()=>Rv,RectangleROIStartEndThresholdTool:()=>Nc,RectangleROIThresholdTool:()=>Oc,RectangleROITool:()=>yc,RectangleScissorsTool:()=>Vp,ReferenceCursors:()=>xp,ReferenceLines:()=>vm,ReferenceLinesTool:()=>vm,ScaleOverlayTool:()=>Rp,SegmentSelectTool:()=>tf,SegmentationDisplayTool:()=>Ro,SegmentationIntersectionTool:()=>_m,SphereScissorsTool:()=>Bp,SplineROITool:()=>jm,StackScrollMouseWheelTool:()=>Kv,StackScrollTool:()=>Bv,Synchronizer:()=>Tr,SynchronizerManager:()=>l,ToolGroupManager:()=>c,TrackballRotateTool:()=>Ov,Types:()=>K,UltrasoundDirectionalTool:()=>up,VideoRedactionTool:()=>lf,VolumeRotateMouseWheelTool:()=>Jv,WindowLevelTool:()=>Vv,ZoomTool:()=>Fv,addTool:()=>wr,annotation:()=>X,cancelActiveManipulations:()=>_r,cursors:()=>z,destroy:()=>pr,drawing:()=>u,init:()=>mr,removeTool:()=>Ir,segmentation:()=>Z,state:()=>Ge,synchronizers:()=>g,utilities:()=>j});var e={};C.r(e),C.d(e,{checkAndDefineIsLockedProperty:()=>ge,getAnnotationsLocked:()=>de,getAnnotationsLockedCount:()=>he,isAnnotationLocked:()=>ce,setAnnotationLocked:()=>se,unlockAllAnnotations:()=>le});var t={};C.r(t),C.d(t,{deselectAnnotation:()=>Ie,getAnnotationsSelected:()=>_e,getAnnotationsSelectedByToolName:()=>Ce,getAnnotationsSelectedCount:()=>Te,isAnnotationSelected:()=>be,setAnnotationSelected:()=>we});var n={};C.r(n),C.d(n,{checkAndDefineIsVisibleProperty:()=>Ne,isAnnotationVisible:()=>Pe,setAnnotationVisibility:()=>Oe,showAllAnnotations:()=>xe});var i={};C.r(i),C.d(i,{addAnnotation:()=>Qe,getAnnotation:()=>nt,getAnnotationManager:()=>Xe,getAnnotations:()=>$e,getNumberOfAnnotations:()=>et,removeAllAnnotations:()=>it,removeAnnotation:()=>tt,resetAnnotationManager:()=>Ze,setAnnotationManager:()=>Je});var o={};C.r(o),C.d(o,{triggerSegmentationDataModified:()=>ft,triggerSegmentationModified:()=>pt,triggerSegmentationRemoved:()=>ut,triggerSegmentationRepresentationModified:()=>mt,triggerSegmentationRepresentationRemoved:()=>vt});var a={};C.r(a),C.d(a,{addColorLUT:()=>Bt,addSegmentation:()=>Ct,addSegmentationRepresentation:()=>Nt,getAllSegmentationRepresentations:()=>Tt,getColorLUT:()=>Ft,getDefaultSegmentationStateManager:()=>wt,getGlobalConfig:()=>Rt,getNextColorLUTIndex:()=>Ht,getSegmentSpecificRepresentationConfig:()=>xt,getSegmentation:()=>It,getSegmentationRepresentationByUID:()=>kt,getSegmentationRepresentationSpecificConfig:()=>Ot,getSegmentationRepresentations:()=>bt,getSegmentations:()=>_t,getToolGroupIdsWithSegmentation:()=>Dt,getToolGroupSpecificConfig:()=>St,removeColorLUT:()=>Wt,removeSegmentation:()=>Lt,removeSegmentationRepresentation:()=>Ut,removeSegmentationRepresentations:()=>Vt,setGlobalConfig:()=>At,setSegmentSpecificRepresentationConfig:()=>Pt,setSegmentationRepresentationSpecificConfig:()=>Mt,setToolGroupSpecificConfig:()=>yt});var r={};C.r(r),C.d(r,{copyPoints:()=>Bn,copyPointsList:()=>Hn,getDeltaDistance:()=>Vn,getDeltaDistanceBetweenIPoints:()=>Fn,getDeltaPoints:()=>Un,getDeltaRotation:()=>Wn,getMeanPoints:()=>Gn,getMeanTouchPoints:()=>qn});var s={};C.r(s),C.d(s,{getSegmentationVisibility:()=>Bi,setSegmentVisibility:()=>qi,setSegmentationVisibility:()=>Hi,setSegmentsVisibility:()=>Gi});var l={};C.r(l),C.d(l,{createSynchronizer:()=>Dr,destroy:()=>Sr,destroySynchronizer:()=>Or,getAllSynchronizers:()=>Mr,getSynchronizer:()=>yr,getSynchronizersForViewport:()=>nr});var d={};C.r(d),C.d(d,{hideElementCursor:()=>ds,initElementCursor:()=>rs,resetElementCursor:()=>ls,setElementCursor:()=>ss});var c={};C.r(c),C.d(c,{createToolGroup:()=>ps,destroy:()=>ur,destroyToolGroup:()=>gr,getAllToolGroups:()=>fs,getToolGroup:()=>xi,getToolGroupForViewport:()=>Mi,getToolGroupsWithToolName:()=>Ke});var h={};C.r(h),C.d(h,{COLOR_LUT:()=>Es});var g={};C.r(g),C.d(g,{createCameraPositionSynchronizer:()=>_s,createImageSliceSynchronizer:()=>ks,createStackImageSynchronizer:()=>Ls,createVOISynchronizer:()=>bs,createZoomPanSynchronizer:()=>Ss});var u={};C.r(u),C.d(u,{draw:()=>Go,drawArrow:()=>Qs,drawCircle:()=>Fs,drawEllipse:()=>Bs,drawEllipseByCoordinates:()=>Hs,drawHandle:()=>Gs,drawHandles:()=>qs,drawLine:()=>js,drawLinkedTextBox:()=>Zs,drawPolyline:()=>zs,drawRect:()=>$s,drawRedactionRect:()=>el,drawTextBox:()=>Xs,setAttributesIfNecessary:()=>Vs,setNewAttributesIfValid:()=>Ws});var v={};C.r(v),C.d(v,{AnnotationToPointData:()=>Kl,contourFinder:()=>Rl,detectContourHoles:()=>Vl,generateContourSetsFromLabelmap:()=>Bl,mergePoints:()=>Ul});var m={};C.r(m),C.d(m,{addColorLUT:()=>nd,getColorForSegmentIndex:()=>od,setColorForSegmentIndex:()=>ad,setColorLUT:()=>id});var p={};C.r(p),C.d(p,{getActiveSegmentation:()=>Nd,getActiveSegmentationRepresentation:()=>Pd,setActiveSegmentationRepresentation:()=>Rd});var f={};C.r(f),C.d(f,{getLockedSegments:()=>Ld,isSegmentIndexLocked:()=>Ad,setSegmentIndexLocked:()=>kd});var E={};C.r(E),C.d(E,{getActiveSegmentIndex:()=>Wd,setActiveSegmentIndex:()=>Vd});var w={};C.r(w),C.d(w,{contourAndFindLargestBidirectional:()=>Jc,createBidirectionalToolData:()=>Zc,createImageIdReferenceMap:()=>jc,createLabelmapVolumeForViewport:()=>Wc,createMergedLabelmapForIndex:()=>Lc,floodFill:()=>td,getBrushSizeForToolGroup:()=>Hc,getBrushThresholdForToolGroup:()=>Gc,getDefaultRepresentationConfig:()=>Vc,invalidateBrushCursor:()=>Ud,isValidRepresentationConfig:()=>Uc,rectangleROIThresholdVolumeByRange:()=>kc,segmentContourAction:()=>oh,setBrushSizeForToolGroup:()=>Fc,setBrushThresholdForToolGroup:()=>Bc,thresholdSegmentationByRange:()=>qc,thresholdVolumeByRange:()=>jd,triggerSegmentationRender:()=>ko});var I={};C.r(I),C.d(I,{getTextBoxCoordsCanvas:()=>mc});var _={};C.r(_),C.d(_,{distanceToPoint:()=>sh,distanceToPointSquared:()=>rh});var T={};C.r(T),C.d(T,{BasicStatsCalculator:()=>Cc,Calculator:()=>Ic});var D={};C.r(D),C.d(D,{getCanvasEllipseCorners:()=>ud,pointInEllipse:()=>vd,precalculatePointInEllipse:()=>md});var S={};C.r(S),C.d(S,{distanceToPoint:()=>uc,distanceToPointSquared:()=>gc,distanceToPointSquaredInfo:()=>hc,intersectLine:()=>Qc});var y={};C.r(y),C.d(y,{distanceToPoint:()=>lh,distanceToPointSquared:()=>cc,mirror:()=>dh});var M={};C.r(M),C.d(M,{addCanvasPointsToArray:()=>Ih,calculateAreaOfPoints:()=>Ch,getClosestIntersectionWithPolyline:()=>gh,getFirstIntersectionWithPolyline:()=>hh,getSubPixelSpacingAndXYDirections:()=>Eh,pointCanProjectOnLine:()=>_h,pointsAreWithinCloseContourProximity:()=>wh});var O={};C.r(O),C.d(O,{distanceToPoint:()=>vc});var x={};C.r(x),C.d(x,{findClosestPoint:()=>Js,liangBarksyClip:()=>yh});var P={};C.r(P),C.d(P,{BasicStatsCalculator:()=>T,aabb:()=>_,ellipse:()=>D,lineSegment:()=>S,point:()=>y,polyline:()=>M,rectangle:()=>O,vec2:()=>x});var N={};C.r(N),C.d(N,{default:()=>Nh,filterAnnotationsForDisplay:()=>oc,filterAnnotationsWithinSlice:()=>nc,getPointInLineOfSightWithCriteria:()=>xh,getWorldWidthAndHeightFromCorners:()=>pc});var R={};C.r(R),C.d(R,{filterViewportsWithFrameOfReferenceUID:()=>zd,filterViewportsWithParallelNormals:()=>$d,filterViewportsWithToolEnabled:()=>Jd,getViewportIdsWithToolToRender:()=>Qd});var A={};C.r(A),C.d(A,{getOrientationStringLPS:()=>Rh,invertOrientationStringLPS:()=>Ah});var k={};C.r(k),C.d(k,{Events:()=>Lh,addToolState:()=>Vh,getToolState:()=>Wh,playClip:()=>jh,stopClip:()=>zh});var L={};C.r(L),C.d(L,{extend2DBoundingBoxInViewAxis:()=>Rc,getBoundingBoxAroundShape:()=>Dl,getBoundingBoxAroundShapeIJK:()=>Dl,getBoundingBoxAroundShapeWorld:()=>Sl});var U={};C.r(U),C.d(U,{default:()=>bu,interpolateAnnotation:()=>Cu});var V={};C.r(V),C.d(V,{getBoundsIJKFromRectangleAnnotations:()=>Ac,isAxisAlignedRectangle:()=>Su});var W={};C.r(W),C.d(W,{isViewportPreScaled:()=>Ec,jumpToSlice:()=>xs,jumpToWorld:()=>Yu});var F={};C.r(F),C.d(F,{generateImageFromTimeData:()=>Ju,getDataInTime:()=>Xu});var H={};C.r(H),C.d(H,{getPoint:()=>Zu,getPolyDataPointIndexes:()=>$u,getPolyDataPoints:()=>Qu});var B={};C.r(B),C.d(B,{ColorbarRangeTextPosition:()=>ev});var G={};C.r(G),C.d(G,{Colorbar:()=>hv,Enums:()=>B,ViewportColorbar:()=>vv});var q={};C.r(q),C.d(q,{colorbar:()=>G});var j={};C.r(j),C.d(j,{annotationFrameRange:()=>Ol,boundingBox:()=>L,calibrateImageSpacing:()=>ll,cine:()=>k,clip:()=>Ms,contours:()=>v,debounce:()=>al,drawing:()=>I,dynamicVolume:()=>F,getAnnotationNearPoint:()=>tl,getAnnotationNearPointOnEnabledElement:()=>nl,getCalibratedAreaUnits:()=>fl,getCalibratedLengthUnits:()=>ml,getCalibratedScale:()=>El,getSphereBoundsInfo:()=>Ml,isObject:()=>ol,jumpToSlice:()=>xs,math:()=>P,orientation:()=>A,planar:()=>N,planarFreehandROITool:()=>U,pointInShapeCallback:()=>Cl,pointToString:()=>oo,polyDataUtils:()=>H,rectangleROITool:()=>V,roundNumber:()=>mv,scroll:()=>Os,segmentation:()=>w,stackContextPrefetch:()=>Ku,stackPrefetch:()=>Hu,throttle:()=>rl,touch:()=>r,triggerAnnotationRender:()=>Xo,triggerAnnotationRenderForViewportIds:()=>or,triggerEvent:()=>Q.triggerEvent,viewport:()=>W,viewportFilters:()=>R,voi:()=>q});var z={};C.r(z),C.d(z,{CursorNames:()=>fv,CursorSVG:()=>Kr,ImageMouseCursor:()=>Wr,MouseCursor:()=>Ar,SVGMouseCursor:()=>ts,elementCursor:()=>d,registerCursor:()=>Xr,setCursorForElement:()=>pv});var K={};C.r(K);var Y={};C.r(Y),C.d(Y,{getFont:()=>Ev,getState:()=>ac,style:()=>Zr});var X={};C.r(X),C.d(X,{AnnotationGroup:()=>wv,FrameOfReferenceSpecificAnnotationManager:()=>Fe,config:()=>Y,locking:()=>e,selection:()=>t,state:()=>i,visibility:()=>n});var J={};C.r(J),C.d(J,{color:()=>m,getGlobalConfig:()=>Pi,getGlobalRepresentationConfig:()=>Ri,getSegmentSpecificConfig:()=>Wi,getSegmentationRepresentationSpecificConfig:()=>Ui,getToolGroupSpecificConfig:()=>ki,setGlobalConfig:()=>Ni,setGlobalRepresentationConfig:()=>Ai,setSegmentSpecificConfig:()=>Fi,setSegmentationRepresentationSpecificConfig:()=>Vi,setToolGroupSpecificConfig:()=>Li,visibility:()=>s});var Z={};C.r(Z),C.d(Z,{activeSegmentation:()=>p,addSegmentationRepresentations:()=>bv,addSegmentations:()=>_v,config:()=>J,convertStackToVolumeSegmentation:()=>Tv,convertVolumeToStackSegmentation:()=>Dv,removeSegmentationsFromToolGroup:()=>hr,segmentIndex:()=>E,segmentLocking:()=>f,state:()=>a,triggerSegmentationEvents:()=>o});var $={};C.r($),C.d($,{AnnotationStyleStates:()=>Vr,Events:()=>te,KeyboardBindings:()=>pa,MouseBindings:()=>ma,SegmentationRepresentations:()=>at,StrategyCallbacks:()=>Xl,Swipe:()=>kn,ToolModes:()=>je});var Q=C(953),ee=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.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}(ee||{});const te=ee;function ne(e){return ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ne(e)}function ie(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ne(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,"string");if("object"!==ne(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ne(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var oe=C(907),ae=C.n(oe);const re=new Set;function se(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=ue();e&&(t?function(e,t,n){t.has(e)||(t.add(e),n.added.push(e))}(e,re,n):ve(e,re,n)),me(n,re)}function le(){const e=ue();!function(e,t){e.forEach((n=>{ve(n,e,t)}))}(re,e),me(e,re)}function de(){return Array.from(re)}function ce(e){return re.has(e)}function he(){return re.size}function ge(e){if(e){const t=!!e.isLocked;(function(e){const t=Object.getOwnPropertyDescriptor(e,"isLocked");return t?t.configurable&&(t.set!==pe||t.get!==fe):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isLocked",{configurable:!1,enumerable:!0,set:pe,get:fe}),se(e,t)}}function ue(){return Object.freeze({added:[],removed:[],locked:[]})}function ve(e,t,n){t.delete(e)&&n.removed.push(e)}function me(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.locked.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_LOCK_CHANGE,e))}function pe(e){se(this,e)}function fe(){return ce(this)}const Ee=new Set;function we(e){arguments.length>1&&void 0!==arguments[1]&&!arguments[1]?Ie(e):function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=De();t||Se(Ee,n),e&&!Ee.has(e)&&(Ee.add(e),n.added.push(e)),ye(n,Ee)}(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2])}function Ie(e){const t=De();e?Ee.delete(e)&&t.removed.push(e):Se(Ee,t),ye(t,Ee)}function _e(){return Array.from(Ee)}function Ce(e){return _e().filter((t=>nt(t).metadata.toolName===e))}function be(e){return Ee.has(e)}function Te(){return Ee.size}function De(){return Object.freeze({added:[],removed:[],selection:[]})}function Se(e,t){e.forEach((n=>{e.delete(n)&&t.removed.push(n)}))}function ye(e,t){(e.added.length>0||e.removed.length>0)&&(t.forEach((t=>{e.selection.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_SELECTION_CHANGE,e))}const Me=new Set;function Oe(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const n=Re();e&&(t?Ae(e,Me,n):function(e,t,n){t.has(e)||(t.add(e),be(e)&&Ie(e),n.lastHidden.push(e))}(e,Me,n)),ke(n)}function xe(){const e=Re();Me.forEach((t=>{Ae(t,Me,e)})),ke(e)}function Pe(e){if(nt(e))return!Me.has(e)}function Ne(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!==Le||t.get!==Ue):Object.isExtensible(e)})(e)&&Object.defineProperty(e,"isVisible",{configurable:!1,enumerable:!0,set:Le,get:Ue}),Oe(e.annotationUID,n)}}function Re(){return Object.freeze({lastVisible:[],lastHidden:[],hidden:[]})}function Ae(e,t,n){t.delete(e)&&n.lastVisible.push(e)}function ke(e){(e.lastHidden.length>0||e.lastVisible.length>0)&&(Me.forEach((t=>{e.hidden.push(t)})),(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_VISIBILITY_CHANGE,e))}function Le(e){Oe(this.annotationUID,e)}function Ue(){return Pe(this.annotationUID)}class Ve{constructor(e){ie(this,"annotations",void 0),ie(this,"uid",void 0),ie(this,"getGroupKey",(e=>{if("string"==typeof e)return e;const t=e,n=(0,Q.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})),ie(this,"_imageVolumeModifiedHandler",(e=>{const t=e.detail,{FrameOfReferenceUID:n}=t,i=this.annotations[n];i&&Object.keys(i).forEach((e=>{i[e].forEach((e=>{void 0!==e.invalidated&&(e.invalidated=!0)}))}))})),ie(this,"getFramesOfReference",(()=>Object.keys(this.annotations))),ie(this,"getAnnotations",((e,t)=>{const n=this.annotations;return n[e]?t?n[e][t]:n[e]:[]})),ie(this,"getAnnotation",(e=>{const t=this.annotations;for(const n in t){const i=t[n];for(const t in i){const n=i[t];for(const t of n)if(e===t.annotationUID)return t}}})),ie(this,"getNumberOfAnnotations",((e,t)=>{const n=this.getAnnotations(e,t);if(!n.length)return 0;if(t)return n.length;let i=0;for(const e in n)i+=n[e].length;return i})),ie(this,"addAnnotation",((e,t)=>{const{metadata:n}=e,{FrameOfReferenceUID:i,toolName:o}=n;t=t||i;const a=this.annotations;let r=a[t];r||(a[t]={},r=a[t]);let s=r[o];s||(r[o]=[],s=r[o]),s.push(e),ge(e),Ne(e)})),ie(this,"removeAnnotation",(e=>{const{annotations:t}=this;for(const n in t){const i=t[n];for(const t in i){const n=i[t],o=n.findIndex((t=>t.annotationUID===e));-1!==o&&(n.splice(o,1),0===n.length&&delete i[t])}0===Object.keys(i).length&&delete t[n]}})),ie(this,"removeAnnotations",((e,t)=>{const n=this.annotations;n[e]&&(t?delete n[e][t]:delete n[e])})),ie(this,"saveAnnotations",((e,t)=>{const n=this.annotations;if(e&&t){const i=n[e];if(!i)return;const o=i[t];return ae()(o)}if(e){const t=n[e];return ae()(t)}return ae()(n)})),ie(this,"restoreAnnotations",((e,t,n)=>{const i=this.annotations;if(t&&n){let o=i[t];o||(i[t]={},o=i[t]),o[n]=e}else t?i[t]=e:this.annotations=ae()(e)})),ie(this,"getNumberOfAllAnnotations",(()=>{let e=0;const t=this.annotations;for(const n in t){const i=t[n];for(const t in i)e+=i[t].length}return e})),ie(this,"removeAllAnnotations",(()=>{this.annotations={}})),e||(e=Q.utilities.uuidv4()),this.annotations={},this.uid=e,Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedHandler)}}const We=new Ve("DEFAULT"),Fe=Ve;let He={};const Be={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:He,enabledElements:[],handleRadius:6};let Ge={isInteractingWithTool:!1,isMultiPartToolActive:!1,tools:{},toolGroups:[],synchronizers:[],svgNodeCache:He,enabledElements:[],handleRadius:6};var qe=function(e){return e.Active="Active",e.Passive="Passive",e.Enabled="Enabled",e.Disabled="Disabled",e}(qe||{});const je=qe,ze=[je.Active,je.Passive,je.Enabled],Ke=function(e){return Ge.toolGroups.filter((t=>{let{toolOptions:n}=t;const i=Object.keys(n);for(let t=0;t<i.length;t++)if(e===i[t]&&n[e]&&ze.includes(n[e].mode))return!0;return!1}))};let Ye=We;function Xe(){return Ye}function Je(e){Ye=e}function Ze(){Ye=We}function $e(e,t){const n=Xe(),i=n.getGroupKey(t);return n.getAnnotations(i,e)}function Qe(e,t){e.annotationUID||(e.annotationUID=Q.utilities.uuidv4());const n=Xe(),i=n.getGroupKey(t);return n.addAnnotation(e,i),t instanceof HTMLDivElement?function(e,t){const n=(0,Q.getEnabledElement)(t),{renderingEngine:i,viewportId:o}=n,a=te.ANNOTATION_ADDED,r={annotation:e,viewportId:o,renderingEngineId:i.id};(0,Q.triggerEvent)(Q.eventTarget,a,r)}(e,t):function(e){const{toolName:t}=e.metadata,n=Ke(t);if(!n.length)return;const i=[];if(n.forEach((t=>{t.viewportsInfo.forEach((t=>{const{renderingEngineId:n,viewportId:o}=t,{FrameOfReferenceUID:a}=(0,Q.getEnabledElementByIds)(o,n);e.metadata.FrameOfReferenceUID===a&&i.push(t)}))})),!i.length)return;const o=te.ANNOTATION_ADDED;i.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const a={annotation:e,viewportId:i,renderingEngineId:n};(0,Q.triggerEvent)(Q.eventTarget,o,a)}))}(e),e.annotationUID}function et(e,t){const n=Xe(),i=n.getGroupKey(t);return n.getNumberOfAnnotations(i,e)}function tt(e){if(!e)return;const t=Xe(),n=t.getAnnotation(e);if(!n)return;t.removeAnnotation(e);const i=te.ANNOTATION_REMOVED,o={annotation:n,annotationManagerUID:t.uid};(0,Q.triggerEvent)(Q.eventTarget,i,o)}function nt(e){return Xe().getAnnotation(e)}function it(){Xe().removeAllAnnotations()}var ot=function(e){return e.Labelmap="LABELMAP",e.Contour="CONTOUR",e.Surface="SURFACE",e}(ot||{});const at=ot,rt={renderOutline:!0,outlineWidthActive:2,outlineWidthInactive:2,outlineOpacity:1,outlineOpacityInactive:.85,renderFill:!0,fillAlpha:1,fillAlphaInactive:0},st={renderOutline:!0,outlineWidthActive:3,outlineWidthInactive:2,activeSegmentOutlineWidthDelta:0,renderFill:!0,renderFillInactive:!0,fillAlpha:.7,fillAlphaInactive:.65,outlineOpacity:1,outlineOpacityInactive:.85},lt=function(){return st},dt=lt(),ct=rt,ht={colorLUT:[],segmentations:[],globalConfig:{renderInactiveSegmentations:!0,representations:{[at.Labelmap]:dt,[at.Contour]:ct}},toolGroups:{}},gt=new class{constructor(e){ie(this,"state",void 0),ie(this,"uid",void 0),e||(e=Q.utilities.uuidv4()),this.state=ae()(ht),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=ae()(ht)}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,i]=t;e[n]=i.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){return this.getSegmentationRepresentations(e).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 i=n.findIndex((e=>e.segmentationRepresentationUID===t));-1===i&&console.warn("No viewport specific segmentation state data found for viewport ".concat(e," and segmentation data UID ").concat(t));const o=n[i];n.splice(i,1),this._handleActiveSegmentation(e,o)}setActiveSegmentationRepresentation(e,t){const n=this.getSegmentationRepresentations(e);if(!n||!n.length)throw new Error("No segmentation data found for toolGroupId: ".concat(e));const i=n.find((e=>e.segmentationRepresentationUID===t));if(!i)throw new Error("No segmentation data found for segmentation data UID ".concat(t));i.active=!0,this._handleActiveSegmentation(e,i)}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 i=this.getSegmentationRepresentationByUID(e,t);i&&(i.segmentationRepresentationSpecificConfig=n)}getSegmentSpecificConfig(e,t,n){const i=this.getSegmentationRepresentationByUID(e,t);if(i)return i.segmentSpecificConfig[n]}setSegmentSpecificConfig(e,t,n){const i=this.getSegmentationRepresentationByUID(e,t);i&&(i.segmentSpecificConfig=n)}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]=structuredClone(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 ut(e){const t={segmentationId:e};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REMOVED,t)}function vt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_REMOVED,n)}function mt(e,t){const n={toolGroupId:e,segmentationRepresentationUID:t};t?(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_MODIFIED,n):(bt(e)||[]).forEach((t=>{const{segmentationRepresentationUID:n}=t,i={toolGroupId:e,segmentationRepresentationUID:n};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_REPRESENTATION_MODIFIED,i)}))}function pt(e){let t;t=e?[e]:_t().map((e=>{let{segmentationId:t}=e;return t})),t.forEach((e=>{const t={segmentationId:e};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_MODIFIED,t)}))}function ft(e,t){const n={segmentationId:e,modifiedSlicesToUse:t};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_DATA_MODIFIED,n)}const Et=function(e){const{segmentationId:t,representation:n}=e;return{segmentationId:t,cachedStats:{},segmentLabels:{},label:null,segmentsLocked:new Set,type:n.type,activeSegmentIndex:1,representationData:{[n.type]:{...n.data}}}};function wt(){return gt}function It(e){return wt().getSegmentation(e)}function _t(){return wt().getState().segmentations}function Ct(e,t){const n=wt(),i=Et(e);n.addSegmentation(i),t||pt(i.segmentationId)}function bt(e){return wt().getSegmentationRepresentations(e)}function Tt(){return wt().getAllSegmentationRepresentations()}function Dt(e){if(!e)throw new Error("getToolGroupIdsWithSegmentation: segmentationId is empty");const t=wt(),n=t.getState(),i=Object.keys(n.toolGroups),o=[];return i.forEach((n=>{t.getSegmentationRepresentations(n).forEach((t=>{t.segmentationId===e&&o.push(n)}))})),o}function St(e){return wt().getToolGroupSpecificConfig(e)}function yt(e,t,n){wt().setSegmentationRepresentationConfig(e,t),n||mt(e)}function Mt(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];wt().setSegmentationRepresentationSpecificConfig(e,t,n),i||mt(e,t)}function Ot(e,t){return wt().getSegmentationRepresentationSpecificConfig(e,t)}function xt(e,t,n){return wt().getSegmentSpecificConfig(e,t,n)}function Pt(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];wt().setSegmentSpecificConfig(e,t,n),i||mt(e,t)}function Nt(e,t,n){wt().addSegmentationRepresentation(e,t),n||mt(e,t.segmentationRepresentationUID)}function Rt(){return wt().getGlobalConfig()}function At(e,t){wt().setGlobalConfig(e),t||pt()}function kt(e,t){return wt().getSegmentationRepresentationByUID(e,t)}function Lt(e){wt().removeSegmentation(e),ut(e)}function Ut(e,t){wt().removeSegmentationRepresentation(e,t),vt(e,t)}function Vt(e){(bt(e)||[]).forEach((t=>{Ut(e,t.segmentationRepresentationUID)}))}function Wt(e){wt().removeColorLUT(e)}function Ft(e){return wt().getColorLUT(e)}function Ht(){return wt().getNextColorLUTIndex()}function Bt(e,t){wt().addColorLUT(e,t)}function Gt(e,t){const n=t||e.currentTarget,{viewport:i}=(0,Q.getEnabledElement)(n),o=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:o,canvas:r,world:i.canvasToWorld(r)}}const qt=function(e){const t=e.currentTarget,{viewportId:n,renderingEngineId:i}=(0,Q.getEnabledElement)(t),o=Gt(e,t),a={event:e,eventName:te.MOUSE_DOUBLE_CLICK,viewportId:n,renderingEngineId:i,camera:{},element:t,startPoints:o,lastPoints:o,currentPoints:o,deltaPoints:{page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]}};!(0,Q.triggerEvent)(t,te.MOUSE_DOUBLE_CLICK,a)&&(e.stopImmediatePropagation(),e.preventDefault())},jt=te.MOUSE_MOVE,zt=function(e){const t=e.currentTarget,n=(0,Q.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=n,a={renderingEngineId:i,viewportId:o,camera:{},element:t,currentPoints:Gt(e),eventName:jt,event:e};!(0,Q.triggerEvent)(t,jt,a)&&(e.stopImmediatePropagation(),e.preventDefault())},{MOUSE_DOWN:Kt,MOUSE_DOWN_ACTIVATE:Yt,MOUSE_CLICK:Xt,MOUSE_UP:Jt,MOUSE_DRAG:Zt}=te,$t=3,Qt={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 en={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 tn={doubleClickTimeout:null,mouseDownEvent:null,mouseUpEvent:null,ignoreDoubleClick:!1};function nn(e){const t=Gt(e,en.element),n=gn(en.element,en.lastPoints),i=un(t,n);if(tn.doubleClickTimeout){if(!rn(i.canvas))return;ln()}const o={event:e,eventName:Zt,mouseButton:en.mouseButton,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},element:en.element,startPoints:hn(en.startPoints),lastPoints:hn(n),currentPoints:t,deltaPoints:i};!(0,Q.triggerEvent)(en.element,Zt,o)&&(e.stopImmediatePropagation(),e.preventDefault()),en.lastPoints=hn(t)}function on(e){if(clearTimeout(en.preventClickTimeout),tn.doubleClickTimeout)tn.mouseUpEvent?cn():(tn.mouseUpEvent=e,en.element.addEventListener("mousemove",an));else{const t=en.isClickEvent?Xt:Jt,n=Gt(e,en.element),i=un(n,en.lastPoints),o={event:e,eventName:t,mouseButton:en.mouseButton,element:en.element,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},startPoints:hn(en.startPoints),lastPoints:hn(en.lastPoints),currentPoints:n,deltaPoints:i};(0,Q.triggerEvent)(o.element,t,o),cn()}document.removeEventListener("mousemove",nn)}function an(e){rn(un(Gt(e,en.element),gn(en.element,en.lastPoints)).canvas)&&(ln(),zt(e))}function rn(e){return Math.abs(e[0])+Math.abs(e[1])>$t}function sn(){en.isClickEvent=!1}function ln(){tn.ignoreDoubleClick=!0;const e=tn.mouseDownEvent,t=tn.mouseUpEvent;dn(),function(e){const t=un(en.startPoints,en.startPoints),n={event:e,eventName:Kt,element:en.element,mouseButton:en.mouseButton,renderingEngineId:en.renderingEngineId,viewportId:en.viewportId,camera:{},startPoints:en.startPoints,lastPoints:en.startPoints,currentPoints:en.startPoints,deltaPoints:t};en.lastPoints=hn(n.lastPoints),(0,Q.triggerEvent)(n.element,Kt,n)&&(0,Q.triggerEvent)(n.element,Yt,n)}(e),t&&on(t)}function dn(){tn.doubleClickTimeout&&(clearTimeout(tn.doubleClickTimeout),tn.doubleClickTimeout=null),tn.mouseDownEvent=null,tn.mouseUpEvent=null}function cn(){var e,t;document.removeEventListener("mouseup",on),null===(e=en.element)||void 0===e||e.removeEventListener("mousemove",an),null===(t=en.element)||void 0===t||t.addEventListener("mousemove",zt),dn(),en=JSON.parse(JSON.stringify(Qt))}function hn(e){return JSON.parse(JSON.stringify(e))}function gn(e,t){const{viewport:n}=(0,Q.getEnabledElement)(e),i=n.canvasToWorld(t.canvas);return{page:t.page,client:t.client,canvas:t.canvas,world:i}}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,i=t.world,[n[0]-i[0],n[1]-i[1],n[2]-i[2]])};var n,i}function vn(e,t){return[e[0]-t[0],e[1]-t[1]]}function mn(e){tn.ignoreDoubleClick?(tn.ignoreDoubleClick=!1,e.stopImmediatePropagation(),e.preventDefault()):cn()}const pn=function(e){if(tn.doubleClickTimeout){if(e.buttons===tn.mouseDownEvent.buttons)return;return tn.mouseDownEvent=e,void ln()}tn.doubleClickTimeout=setTimeout(ln,1===e.buttons?400:150),tn.mouseDownEvent=e,tn.ignoreDoubleClick=!1,en.element=e.currentTarget,en.mouseButton=e.buttons;const t=(0,Q.getEnabledElement)(en.element),{renderingEngineId:n,viewportId:i}=t;en.renderingEngineId=n,en.viewportId=i,en.preventClickTimeout=setTimeout(sn,en.clickDelay),en.element.removeEventListener("mousemove",zt);const o=Gt(e,en.element);en.startPoints=hn(o),en.lastPoints=hn(o),document.addEventListener("mouseup",on),document.addEventListener("mousemove",nn)};function fn(e){e.removeEventListener("dblclick",qt),e.removeEventListener("mousedown",pn),e.removeEventListener("mousemove",zt),e.removeEventListener("dblclick",mn,{capture:!0})}const En={enable:function(e){fn(e),e.addEventListener("dblclick",qt),e.addEventListener("mousedown",pn),e.addEventListener("mousemove",zt),e.addEventListener("dblclick",mn,{capture:!0})},disable:fn},wn=function(e){const t=e.currentTarget,n=(0,Q.getEnabledElement)(t),{renderingEngineId:i,viewportId:o}=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,i=0,o=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),i=10*t,o=10*n,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||o)&&e.deltaMode&&(1===e.deltaMode?(i*=40,o*=40):(i*=800,o*=800)),i&&!t&&(t=i<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:i,pixelY:o}}(e),d=r<0?-1:1,c={event:e,eventName:te.MOUSE_WHEEL,renderingEngineId:i,viewportId:o,element:t,camera:{},detail:e,wheel:{spinX:a,spinY:r,pixelX:s,pixelY:l,direction:d},points:Gt(e)};(0,Q.triggerEvent)(t,te.MOUSE_WHEEL,c)};function In(e){e.removeEventListener("wheel",wn)}const _n={enable:function(e){In(e),e.addEventListener("wheel",wn,{passive:!1})},disable:In},Cn=0,bn=1;let Tn,Dn;function Sn(e,t){const n=Date.now();if(e!==Tn){if(n-Dn<=2e3)return t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation(),!1;Tn=e}Dn=n}const yn=Sn.bind(null,Cn),Mn=Sn.bind(null,bn);function On(e,t,n){const i=n?yn:Mn;t.forEach((function(t){e.addEventListener(t,i,{passive:!1})}))}function xn(e,t,n){const i=n?yn:Mn;t.forEach((function(t){e.removeEventListener(t,i)}))}const Pn=["mousedown","mouseup","mousemove"],Nn=["touchstart","touchend"];function Rn(e){xn(e,Pn,Cn),xn(e,Nn,bn)}const An={enable:function(e){Rn(e),On(e,Pn,Cn),On(e,Nn,bn)},disable:Rn};var kn=function(e){return e.UP="UP",e.DOWN="DOWN",e.LEFT="LEFT",e.RIGHT="RIGHT",e}(kn||{});function Ln(e,t){const n=t||e.currentTarget,i="touchend"===e.type?e.changedTouches:e.touches;return Object.keys(i).map((e=>{const t=function(e){return[e.clientX,e.clientY]}(i[e]),o=function(e){return[e.pageX,e.pageY]}(i[e]),a=function(e,t){const n=e.getBoundingClientRect();return[t[0]-n.left-window.pageXOffset,t[1]-n.top-window.pageYOffset]}(n,o),{viewport:r}=(0,Q.getEnabledElement)(n);return{page:o,client:t,canvas:a,world:r.canvasToWorld(a),touch:{identifier:e,radiusX:i[e].radiusX,radiusY:i[e].radiusY,force:i[e].force,rotationAngle:i[e].rotationAngle}}}))}function Un(e,t){const n=Gn(e),i=Gn(t);return{page:jn(n.page,i.page),client:jn(n.client,i.client),canvas:jn(n.canvas,i.canvas),world:(o=n.world,a=i.world,[o[0]-a[0],o[1]-a[1],o[2]-a[2]])};var o,a}function Vn(e,t){const n=Gn(e),i=Gn(t);return{page:Kn(n.page,i.page),client:Kn(n.client,i.client),canvas:Kn(n.canvas,i.canvas),world:Yn(n.world,i.world)}}function Wn(e,t){}function Fn(e,t){const n=zn(e),i=zn(t);return{page:n.page-i.page,client:n.client-i.client,canvas:n.canvas-i.canvas,world:n.world-i.world}}function Hn(e){return JSON.parse(JSON.stringify(e))}function Bn(e){return JSON.parse(JSON.stringify(e))}function Gn(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 qn(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 jn(e,t){return[e[0]-t[0],e[1]-t[1]]}function zn(e){const t=[];for(let n=0;n<e.length;n++)for(let i=0;i<e.length;i++)n<i&&t.push({page:Kn(e[n].page,e[i].page),client:Kn(e[n].client,e[i].client),canvas:Kn(e[n].canvas,e[i].canvas),world:Yn(e[n].world,e[i].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 Kn(e,t){return Math.sqrt(Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2))}function Yn(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))}Q.Settings.getRuntimeSettings();const{TOUCH_START:Xn,TOUCH_START_ACTIVATE:Jn,TOUCH_PRESS:Zn,TOUCH_DRAG:$n,TOUCH_END:Qn,TOUCH_TAP:ei,TOUCH_SWIPE:ti}=te,ni={page:[0,0],client:[0,0],canvas:[0,0],world:[0,0,0]},ii={page:0,client:0,canvas:0,world:0},oi={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...ni,touch:null}],lastPointsList:[{...ni,touch:null}],isTouchStart:!1,startTime:null,pressTimeout:null,pressDelay:700,pressMaxDistance:5,accumulatedDistance:ii,swipeDistanceThreshold:48,swiped:!1,swipeToleranceMs:300},ai={renderingEngineId:void 0,viewportId:void 0,element:null,startPointsList:[{...ni,touch:null}],taps:0,tapTimeout:null,tapMaxDistance:24,tapToleranceMs:300};let ri=JSON.parse(JSON.stringify(oi)),si=JSON.parse(JSON.stringify(ai));function li(e,t,n){return(0,Q.triggerEvent)(e,t,n)}function di(e){const t=Ln(e,ri.element),n=hi(ri.element,ri.lastPointsList),i=t.length===n.length?Un(t,n):ni,o=t.length===n.length?Fn(t,n):ii,a=t.length===n.length?Vn(t,ri.lastPointsList):ii;ri.accumulatedDistance={page:ri.accumulatedDistance.page+a.page,client:ri.accumulatedDistance.client+a.client,canvas:ri.accumulatedDistance.canvas+a.canvas,world:ri.accumulatedDistance.world+a.world};const r={event:e,eventName:$n,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,startPoints:qn(ri.startPointsList),lastPoints:qn(n),currentPoints:qn(t),startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(n),currentPointsList:t,deltaPoints:i,deltaDistance:o};li(ri.element,$n,r),function(e,t){const n=(new Date).getTime(),i=ri.startTime.getTime();if(ri.swiped||n-i>ri.swipeToleranceMs)return;const[o,a]=t.canvas,r={event:e,eventName:ti,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,swipe:null};Math.abs(o)>ri.swipeDistanceThreshold&&(r.swipe=o>0?kn.RIGHT:kn.LEFT,li(r.element,ti,r),ri.swiped=!0),Math.abs(a)>ri.swipeDistanceThreshold&&(r.swipe=a>0?kn.DOWN:kn.UP,li(r.element,ti,r),ri.swiped=!0)}(e,i),ri.lastPointsList=Hn(t)}function ci(e){clearTimeout(ri.pressTimeout);const t=Ln(e,ri.element),n=hi(ri.element,ri.lastPointsList),i=t.length===n.length?Un(t,n):Un(t,t),o=t.length===n.length?Fn(t,n):Fn(t,t),a={event:e,eventName:Qn,element:ri.element,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(n),currentPointsList:t,startPoints:qn(ri.startPointsList),lastPoints:qn(n),currentPoints:qn(t),deltaPoints:i,deltaDistance:o};li(a.element,Qn,a),function(e){if((new Date).getTime()-ri.startTime.getTime()>si.tapToleranceMs)return;if(0===si.taps&&(si.element=ri.element,si.renderingEngineId=ri.renderingEngineId,si.viewportId=ri.viewportId,si.startPointsList=ri.startPointsList),si.taps>0&&(si.element!=ri.element||si.renderingEngineId!=ri.renderingEngineId||si.viewportId!=ri.viewportId))return;const t=Ln(e,si.element);Vn(t,si.startPointsList).canvas>si.tapMaxDistance||(clearTimeout(si.tapTimeout),si.taps+=1,si.tapTimeout=setTimeout((()=>{const n={event:e,eventName:ei,element:si.element,renderingEngineId:si.renderingEngineId,viewportId:si.viewportId,camera:{},currentPointsList:t,currentPoints:qn(t),taps:si.taps};li(n.element,ei,n),si=JSON.parse(JSON.stringify(ai))}),si.tapToleranceMs))}(e),ri=JSON.parse(JSON.stringify(oi)),document.removeEventListener("touchmove",di),document.removeEventListener("touchend",ci)}function hi(e,t){const{viewport:n}=(0,Q.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 gi=function(e){ri.element=e.currentTarget;const t=(0,Q.getEnabledElement)(ri.element),{renderingEngineId:n,viewportId:i}=t;ri.renderingEngineId=n,ri.viewportId=i,ri.isTouchStart||(clearTimeout(ri.pressTimeout),ri.pressTimeout=setTimeout((()=>function(e){if(ri.accumulatedDistance.canvas>ri.pressMaxDistance)return;const t={event:e,eventName:Zn,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},element:ri.element,startPointsList:Hn(ri.startPointsList),lastPointsList:Hn(ri.lastPointsList),startPoints:Bn(qn(ri.startPointsList)),lastPoints:Bn(qn(ri.lastPointsList))};li(t.element,Zn,t)}(e)),ri.pressDelay),function(e){ri.isTouchStart=!0,ri.startTime=new Date;const t=Ln(e,ri.element),n=qn(t),i=ni,o=ii,a={event:e,eventName:Xn,element:ri.element,renderingEngineId:ri.renderingEngineId,viewportId:ri.viewportId,camera:{},startPointsList:t,lastPointsList:t,currentPointsList:t,startPoints:n,lastPoints:n,currentPoints:n,deltaPoints:i,deltaDistance:o};ri.startPointsList=Hn(a.startPointsList),ri.lastPointsList=Hn(a.lastPointsList),li(a.element,Xn,a)&&li(a.element,Jn,a)}(e),document.addEventListener("touchmove",di),document.addEventListener("touchend",ci))};function ui(e){An.disable(e),e.removeEventListener("touchstart",gi)}const vi={enable:function(e){ui(e),An.enable(e),e.addEventListener("touchstart",gi,{passive:!1})},disable:ui},mi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};let pi={renderingEngineId:void 0,viewportId:void 0,key:void 0,keyCode:void 0,element:null};function fi(e){pi.element=e.currentTarget;const t=(0,Q.getEnabledElement)(pi.element),{renderingEngineId:n,viewportId:i}=t;pi.renderingEngineId=n,pi.viewportId=i,pi.key=e.key,pi.keyCode=e.keyCode,e.preventDefault();const o={renderingEngineId:pi.renderingEngineId,viewportId:pi.viewportId,element:pi.element,key:pi.key,keyCode:pi.keyCode};(0,Q.triggerEvent)(o.element,te.KEY_DOWN,o),document.addEventListener("keyup",wi),document.addEventListener("visibilitychange",Ei),pi.element.removeEventListener("keydown",fi)}function Ei(){document.removeEventListener("visibilitychange",Ei),"hidden"===document.visibilityState&&Ii()}function wi(e){const t={renderingEngineId:pi.renderingEngineId,viewportId:pi.viewportId,element:pi.element,key:pi.key,keyCode:pi.keyCode};document.removeEventListener("keyup",wi),document.removeEventListener("visibilitychange",Ei),pi.element.addEventListener("keydown",fi),pi=ae()(mi),(0,Q.triggerEvent)(t.element,te.KEY_UP,t)}function Ii(){pi.keyCode=void 0}const _i=fi;function Ci(e){e.removeEventListener("keydown",_i)}const bi={enable:function(e){Ci(e),e.addEventListener("keydown",_i)},disable:Ci,getModifierKey:function(){return pi.keyCode}};var Ti=C(785),Di=C.n(Ti),Si=C(283),yi=C.n(Si);const Mi=function(e,t){const n=Ge.toolGroups.filter((n=>n.viewportsInfo.some((n=>n.renderingEngineId===t&&(!n.viewportId||n.viewportId===e)))));if(n.length){if(n.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 n[0]}};function Oi(e){return void 0!==(null==e?void 0:e.volumeId)}const xi=function(e){return Ge.toolGroups.find((t=>t.id===e))};function Pi(){return Rt()}function Ni(e){At(e)}function Ri(e){return Pi().representations[e]}function Ai(e,t){const n=Pi();Ni({...n,representations:{...n.representations,[e]:{...n.representations[e],...t}}})}function ki(e){return St(e)}function Li(e,t){yt(e,t)}function Ui(e,t){return Ot(e,t)}function Vi(e,t,n){Mt(e,t,n)}function Wi(e,t,n){return xt(e,t,n)}function Fi(e,t,n){Pt(e,t,n)}function Hi(e,t,n){const i=bt(e);if(!i)return;const o=i.find((e=>e.segmentationRepresentationUID===t));if(!o)return;const{segmentsHidden:a,segmentationId:r}=o,s=function(e){const t=It(e);if(t.type===at.Labelmap){const t=Q.cache.getVolume(e).getScalarData(),n={};for(let e=0;e<t.length;e++){const i=t[e];0===i||n[i]||(n[i]=!0)}return Object.keys(n).map((e=>parseInt(e,10)))}if(t.type===at.Contour){var n;const i=null===(n=t.representationData.CONTOUR)||void 0===n?void 0:n.geometryIds;if(!i)throw new Error("No geometryIds found for segmentationId ".concat(e));return i.map((e=>Q.cache.getGeometry(e).data.getSegmentIndex()))}}(r);n?a.clear():s.forEach((e=>{a.add(e)})),mt(e,o.segmentationRepresentationUID)}function Bi(e,t){const n=bt(e).find((e=>e.segmentationRepresentationUID===t));if(!n)return;const{segmentsHidden:i}=n;return 0===i.size}function Gi(e,t,n,i){const o=kt(e,t);o&&(n.forEach((e=>{i?o.segmentsHidden.delete(e):o.segmentsHidden.add(e)})),mt(e,t))}function qi(e,t,n,i){const o=kt(e,t);o&&(i?o.segmentsHidden.delete(n):o.segmentsHidden.add(n),mt(e,t))}class ji{constructor(e,t){ie(this,"supportedInteractionTypes",void 0),ie(this,"configuration",void 0),ie(this,"toolGroupId",void 0),ie(this,"mode",void 0);const n=Q.utilities.deepMerge(t,e),{configuration:i={},supportedInteractionTypes:o,toolGroupId:a}=n;i.strategies||(i.strategies={},i.defaultStrategy=void 0,i.activeStrategy=void 0,i.strategyOptions={}),this.toolGroupId=a,this.supportedInteractionTypes=o||[],this.configuration=Object.assign({},i),this.mode=je.Disabled}getToolName(){return this.constructor.toolName}applyActiveStrategy(e,t){var n;const{strategies:i,activeStrategy:o}=this.configuration;return null===(n=i[o])||void 0===n?void 0:n.call(this,e,t)}applyActiveStrategyCallback(e,t,n){var i;const{strategies:o,activeStrategy:a}=this.configuration;return null===(i=o[a][n])||void 0===i?void 0:i.call(this,e,t)}setConfiguration(e){this.configuration=Q.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],i=Q.utilities.imageIdToURI(n);let o=Q.utilities.getViewportsWithImageURI(i,t.id);if(!o||!o.length)return;if(o=o.filter((e=>e.getCurrentImageId()===n)),!o||!o.length)return;return o[0].getImageData()}if(e.startsWith("volumeId:")){const n=e.split("volumeId:")[1],i=Q.utilities.getViewportsWithVolumeId(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}if(e.startsWith("videoId:")){const n=Q.utilities.imageIdToURI(e),i=Q.utilities.getViewportsWithImageURI(n,t.id);if(!i||!i.length)return;return i[0].getImageData()}throw new Error('getTargetIdImage: targetId must start with "imageId:" or "volumeId:"')}getTargetId(e){if(e instanceof Q.StackViewport)return"imageId:".concat(e.getCurrentImageId());if(e instanceof Q.BaseVolumeViewport)return"volumeId:".concat(this.getTargetVolumeId(e));if(e instanceof Q.VideoViewport)return"videoId:".concat(e.getCurrentImageId());throw new Error("getTargetId: viewport must be a StackViewport or VolumeViewport")}}ie(ji,"toolName",void 0),ji.toolName="BaseTool";const zi=ji,Ki=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.startsWith(t)?n:void 0})).filter(Boolean);i.removeActors(o)};var Yi=C(610),Xi=C.n(Yi),Ji=C(474),Zi=C.n(Ji),$i=C(448),Qi=C.n($i),eo=C(70),to=C.n(eo),no=C(396),io=C.n(no);function oo(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)+","}const ao=new Map;function ro(e){const{actorEntry:t,vtkPlanes:n,viewport:i}=e.detail;if(null==t||!t.clippingFilter)return;const o=t.actor.getMapper(),{viewPlaneNormal:a}=i.getCamera(),r=i.getCurrentImageIdIndex(),s="".concat(i.id,"-").concat(oo(a),"-").concat(r);let l=ao.get(t.uid);l||(l=new Map,ao.set(t.uid,l));let d=l.get(s);if(!d){const e=t.clippingFilter;e.setClippingPlanes(n);try{e.update(),d=e.getOutputData(),l.set(s,d)}catch(e){console.error("Error clipping surface",e)}}o.setInputData(d)}const so={render:async function(e,t,n){const{colorLUTIndex:i,active:o,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s}=t,l=It(a).representationData[at.Surface],{geometryId:d}=l;d||console.warn("No Surfaces found for segmentationId ".concat(a,". Skipping render."));const c=Q.cache.getGeometry(d);if(!c)throw new Error("No Surfaces found for geometryId ".concat(d));if(c.type!==Q.Enums.GeometryType.SURFACE)throw new Error("Geometry type ".concat(c.type," not supported for rendering."));if(!c.data)return void console.warn("No Surfaces found for geometryId ".concat(d,". Skipping render."));const h=c.data;!function(e,t,n){const i=n;if(e.getActor(i))throw new Error("Not implemented yet. (Update surface)");!function(e,t,n){const i=(0,Q.getEnabledElement)(e),{viewport:o}=i,a=t.getPoints(),r=t.getPolys(),s=t.getColor(),l=to().newInstance();l.getPoints().setData(a,3);const d=io().newInstance({values:Float32Array.from(r)});l.setPolys(d);const c=Xi().newInstance({});let h;if(o instanceof Q.VolumeViewport3D)c.setInputData(l);else{h=Qi().newInstance({clippingPlanes:[],activePlaneId:2,passPointData:!1}),h.setInputData(l),h.setGenerateOutline(!0),h.setGenerateFaces(!1),h.update();const e=h.getOutputData();c.setInputData(e)}const g=Zi().newInstance();g.setMapper(c),g.getProperty().setColor(s[0]/255,s[1]/255,s[2]/255),o.addActor({actor:g,uid:n,clippingFilter:h}),e.addEventListener(Q.Enums.Events.CLIPPING_PLANES_UPDATED,ro)}(e.element,t,i)}(e,h,"".concat(r,"_").concat(h.id,"}")),e.resetCamera(),e.render()},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);Ki(o.viewport.element,t)}})(e,t),Ut(e,t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};var lo=C(127),co=C.n(lo),ho=C(348),go=C.n(ho);function uo(e,t,n){var i;let o=null===(i=e.segmentSpecificConfig)||void 0===i?void 0:i[t];var a;return o||(o=null===(a=e.segmentSpecificConfig)||void 0===a?void 0:a[n]),o?o.CONTOUR:null}const vo=new Map;function mo(e){return vo.get(e)}function po(e,t){vo.set(e,t)}function fo(e,t,n,i,o){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=co().newInstance(),l=new Map,d=new Map;t.forEach((e=>{const t=Q.cache.getGeometry(e);if(!t)return void console.warn("No geometry found for geometryId ".concat(e,". Skipping render."));const i=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!==Q.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 o=uo(n,e,i),a=t.data,c=function(e){const t=[],n=go().newInstance(),i=io().newInstance();let o=0;e.getContours().forEach((e=>{const n=e.getPoints(),a=e.getFlatPointsArray(),r=e.getType(),s=n.map(((e,t)=>t+o));r===Q.Enums.ContourType.CLOSED_PLANAR&&s.push(s[0]);const l=Float32Array.from(a);t.push(...l),i.insertNextCell([...s]),o+=n.length})),n.setData(t,3);const a=to().newInstance();return a.setPoints(n),a.setLines(i),a}(a),h=a.getColor(),g=c.getPoints().getNumberOfPoints(),u=Di().newInstance({size:4*g,numberOfComponents:4,dataType:"Uint8Array"});for(let e=0;e<g;++e)u.setTuple(e,[...h,255]);c.getPointData().setScalars(u),o&&d.set(i,o),l.set(i,[...h,r.has(i)?0:255]),0===i?s.setInputData(c):s.addInputData(c)}));const c=s.getOutputData(),h=i.representations.CONTOUR.outlineWidthActive,g=Xi().newInstance();g.setInputData(c);const u=Zi().newInstance();u.setMapper(g),u.getProperty().setLineWidth(h),po(a,Object.assign({},mo(a),{segmentsHidden:new Set(r),segmentSpecificMap:d,outlineWidthActive:h})),u.setForceOpaque(!0),e.addActor({uid:o,actor:u}),e.resetCamera(),e.render()}function Eo(e,t,n,i,o){const{segmentationRepresentationUID:a,segmentsHidden:r}=n,s=i.representations.CONTOUR,l=mo(a),d=e.getActor(o);if(!d)return void console.warn("No contour actor found for actorUID ".concat(o,". Skipping render."));const{actor:c}=d,h=s.outlineWidthActive;(null==l?void 0:l.outlineWidthActive)!==h&&(c.getProperty().setLineWidth(h),po(a,Object.assign({},l,{outlineWidthActive:h})));const g=c.getMapper(),u=g.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:E}=t.reduce(((e,t)=>{const i=Q.cache.getGeometry(t),{data:o}=i,a=o.getSegmentIndex(),r=uo(n,t,a);return e.contourSets.push(o),e.segmentSpecificConfigs[a]=null!=r?r:{},e}),{contourSets:[],segmentSpecificConfigs:{}}),w=[...p,...m],I=Object.values(E).some((e=>Object.keys(e).length>0));let _=!1;if(w.length||I){const e=g.getInputData(),t=e.getPointData().getScalars().getData();let n=0;f.forEach((e=>{var i;const o=e.getSegmentIndex(),a=e.getTotalNumberOfPoints();if(w.includes(o)||null!==(i=E[o])&&void 0!==i&&i.fillAlpha){const i=e.getColor();let r=p.includes(o)?0:255;const s=E[o];void 0!==s.fillAlpha&&(r=255*s.fillAlpha);for(let e=0;e<a;++e)t[n+4*e]=i[0],t[n+4*e+1]=i[1],t[n+4*e+2]=i[2],t[n+4*e+3]=r;_=!0}n+=4*a})),_&&e.modified(),po(a,Object.assign({},l,{segmentsHidden:new Set(r)})),g.setLookupTable(u)}e.render()}const wo=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getActors().map((e=>{let{uid:n}=e;return n.includes(t)?n:void 0})).filter(Boolean);i.removeActors(o)},Io={render:async function(e,t,n){const{segmentationId:i}=t,o=It(i).representationData[at.Contour],{geometryIds:a}=o;e instanceof Q.StackViewport||(null!=a&&a.length||console.warn("No contours found for segmentationId ".concat(i,". Skipping render.")),function(e,t,n,i){const{segmentationRepresentationUID:o}=n,a="CONTOUR_".concat(o);(e.getActor(a)?Eo:fo)(e,t,n,i,a)}(e,a,t,n))},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);wo(o.viewport.element,t)}})(e,t),Ut(e,t),function(e){vo.delete(e)}(t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};var _o=C(441),Co=C.n(_o),bo=C(795),To=C.n(bo);const Do=function(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;i instanceof Q.StackViewport||i.removeVolumeActors([t])},So=new Map;function yo(){const e=To().newInstance(),t=Co().newInstance();return t.addPoint(0,0),{ofun:t,cfun:e}}function Mo(e,t,n,i){const o={...e,...t,...i||{}};return{fillAlpha:n?o.fillAlpha:o.fillAlphaInactive,outlineWidth:n?o.outlineWidthActive:o.outlineWidthInactive,renderFill:n?o.renderFill:o.renderFillInactive,renderOutline:o.renderOutline,outlineOpacity:n?o.outlineOpacity:o.outlineOpacityInactive}}function Oo(e,t,n,i){let{fillAlpha:o,renderFill:a,renderOutline:r,segmentColor:s,outlineWidth:l,segmentsHidden:d}=i;const c="".concat(e,"-").concat(t,"-").concat(n),h=So.get(c);if(!h)return So.set(c,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(d)}),{forceOpacityUpdate:!0,forceColorUpdate:!0};const{fillAlpha:g,renderFill:u,renderOutline:v,outlineWidth:m,segmentColor:p,segmentsHidden:f}=h,E=p[0]!==s[0]||p[1]!==s[1]||p[2]!==s[2],w=p[3]!==s[3]||g!==o||u!==a||v!==r||m!==l||f.has(n)!==d.has(n);return So.set(c,{fillAlpha:o,renderFill:a,renderOutline:r,outlineWidth:l,segmentColor:s.slice(),segmentsHidden:new Set(d)}),{forceOpacityUpdate:w,forceColorUpdate:E}}async function xo(e,t,n){await async function(e,t,n){const i=(0,Q.getEnabledElement)(e),{renderingEngine:o,viewport:a}=i,{id:r}=a;if(Oi(t)){const e=[{volumeId:t.volumeId,actorUID:n,visibility:!0,blendMode:Q.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND}];await(0,Q.addVolumesToViewports)(o,e,[r],!1,!0)}else{const e=[{imageId:t.imageIdReferenceMap.get(a.getCurrentImageId()),actorUID:n}];await(0,Q.addImageSlicesToViewports)(o,e,[r],!1,!0)}}(e.element,t,n)}const Po={getRepresentationRenderingConfig:yo,render:async function(e,t,n){const{colorLUTIndex:i,active:o,segmentationId:a,segmentationRepresentationUID:r,segmentsHidden:s,config:l}=t,d=It(a);if(!d)return void console.warn("No segmentation found for segmentationId: ",a);const c=d.representationData[at.Labelmap];let h=e.getActor(r);if(Oi(c)){if(e instanceof Q.StackViewport)return;const{volumeId:t}=c;if(!Q.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:i}=n,o=Q.cache.getVolume(i);if(o){const e=Q.cache.getVolume(t);if(e&&o.metadata.FrameOfReferenceUID===e.metadata.FrameOfReferenceUID)return!0}return!1}(e,null==c?void 0:c.referencedVolumeId))return;h||await xo(e,c,r),h=e.getActor(r)}else{if(e instanceof Q.VolumeViewport)return;const t=e.getCurrentImageId(),{imageIdReferenceMap:n}=c;if(!n.has(t))return;h||await xo(e,c,r),h=e.getActor(r)}if(!h)return;const{cfun:g,ofun:u}=l,v=n.renderInactiveSegmentations;!function(e,t,n,i,o,a,r,s,l,d){const{segmentSpecificConfig:c,segmentationRepresentationSpecificConfig:h}=r,g=h[at.Labelmap],u=Ft(o),v=Math.min(256,u.length),{uid:m}=t,{outlineWidth:p,renderOutline:f,outlineOpacity:E}=Mo(a,g,s);for(let t=0;t<v;t++){var w;const o=t,r=u[o],l=null===(w=c[o])||void 0===w?void 0:w[at.Labelmap],{fillAlpha:h,outlineWidth:v,renderFill:p,renderOutline:f}=Mo(a,g,s,l),{forceOpacityUpdate:E,forceColorUpdate:I}=Oo(e,m,o,{fillAlpha:h,renderFill:p,renderOutline:f,segmentColor:r,outlineWidth:v,segmentsHidden:d});if(I&&n.addRGBPoint(o,r[0]/255,r[1]/255,r[2]/255),E)if(p){const e=d.has(o)?0:r[3]/255*h;i.removePoint(o),i.addPointLong(o,e,.5,1)}else i.addPointLong(o,.01,.5,1)}const I=t.actor;I.getProperty().setRGBTransferFunction(0,n),i.setClamping(!1),I.getProperty().setScalarOpacity(0,i),I.getProperty().setInterpolationTypeToNearest(),I.getProperty().setUseLabelOutline(f),I.getProperty().setLabelOutlineOpacity(E);const{activeSegmentIndex:_}=It(r.segmentationId),C=new Array(v-1);for(let e=1;e<v;e++)C[e-1]=e===_?p+a.activeSegmentOutlineWidthDelta:p;I.getProperty().setLabelOutlineThickness(C);const b=s||l;I.setVisibility(b)}(e.id,h,g,u,i,n.representations[at.Labelmap],t,o,v,s)},removeSegmentationRepresentation:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(function(e,t){const n=xi(e);if(void 0===n)throw new Error("ToolGroup with ToolGroupId ".concat(e," does not exist"));const{viewportsInfo:i}=n;for(const e of i){const{viewportId:n,renderingEngineId:i}=e,o=(0,Q.getEnabledElementByIds)(n,i);Do(o.viewport.element,t)}})(e,t),Ut(e,t),n&&xi(e).getViewportsInfo().forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;(0,Q.getEnabledElementByIds)(t,n).viewport.render()}))}};class No extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{}}),ie(this,"renderSegmentation",(e=>{const t=xi(e);if(!t)return;const n=bt(e);if(!n||0===n.length)return;const i=t.viewportsInfo.map((e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,Q.getEnabledElementByIds)(n,t);if(i)return i.viewport})),o=n.map((t=>{const n=this._getMergedRepresentationsConfig(e),o=[],a={[at.Labelmap]:Po,[at.Contour]:Io,[at.Surface]:so}[t.type];for(const e of i){const i=a.render(e,t,n);o.push(i)}return o}));Promise.allSettled(o).then((()=>{i.forEach((e=>{e.render()}))}))}))}onSetToolEnabled(){const e=this.toolGroupId,t=bt(e);t&&0!==t.length&&t.forEach((t=>{Hi(e,t.segmentationRepresentationUID,!0)}))}onSetToolDisabled(){const e=this.toolGroupId,t=bt(e);t&&0!==t.length&&t.forEach((t=>{Hi(e,t.segmentationRepresentationUID,!1)}))}_getMergedRepresentationsConfig(e){const t=ki(e),n=Pi();return Q.utilities.deepMerge(n,t)}}ie(No,"toolName",void 0),No.toolName="SegmentationDisplay";const Ro=No,Ao=new class{constructor(){ie(this,"_needsRender",new Set),ie(this,"_animationFrameSet",!1),ie(this,"_animationFrameHandle",null),ie(this,"hasBeenDestroyed",void 0),ie(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=xi(e);if(!t)return void console.warn("No tool group found with toolGroupId: ".concat(e));const{viewportsInfo:n}=t,i=n.map((e=>{let{viewportId:t,renderingEngineId:n}=e;const i=(0,Q.getRenderingEngine)(n);if(!i)return void console.warn("rendering Engine has been destroyed");return i.getViewport(t)||void 0})).filter(Boolean),o=t.getToolInstance(Ro.toolName);function a(e){const{element:t,viewportId:n,renderingEngineId:i}=e.detail;t.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,a);const o=Mi(n,i);if(!o)return void console.warn("toolGroup has been destroyed");const r={toolGroupId:o.id,viewportId:n};(0,Q.triggerEvent)(Q.eventTarget,te.SEGMENTATION_RENDERED,{...r})}o?(i.forEach((e=>{let{element:t}=e;t.addEventListener(Q.Enums.Events.IMAGE_RENDERED,a)})),o.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 ko(e){Ao.renderToolGroupSegmentations(e)}const Lo=ko;function Uo(e){var t;const n=e.detail,{viewportId:i,renderingEngineId:o}=n,{viewport:a}=(0,Q.getEnabledElementByIds)(i,o),r=Mi(i,o);if(!r)return;let s=bt(r.id)||[];if(s=s.filter((e=>e.type===at.Labelmap)),null===(t=s)||void 0===t||!t.length)return;const l={};s.forEach((e=>{const t=It(e.segmentationId);if(!t)return;const n=t.representationData[at.Labelmap];if(Oi(n))return;const{imageIdReferenceMap:i}=n;l[e.segmentationRepresentationUID]={imageIdReferenceMap:i}}));const d=Object.keys(l),c=a.getCurrentImageId(),h=a.getActors();h.find((e=>!!d.includes(e.uid)))?h.forEach((t=>{if(!d.includes(t.uid))return;const n=t.actor,{imageIdReferenceMap:i}=l[t.uid],o=i.get(c),s=n.getMapper().getInputData();if(!o){const e=Di().newInstance({name:"Pixels",numberOfComponents:1,values:new Uint8Array(s.getNumberOfPoints())}),t=yi().newInstance();return t.getPointData().setScalars(e),void n.getMapper().setInputData(t)}const h=Q.cache.getImage(o),{dimensions:g,spacing:u,direction:v}=a.getImageDataMetadata(h),m=Q.cache.getImage(c),{origin:p}=a.getImageDataMetadata(m),f=p;if(s.setOrigin(f),s.modified(),s.getDimensions()[0]!==g[0]||s.getDimensions()[1]!==g[1])return a.removeActors([t.uid]),a.addImages([{imageId:o,actorUID:t.uid,callback:e=>{let{imageActor:t}=e;const n=Di().newInstance({name:"Pixels",numberOfComponents:1,values:[...h.getPixelData()]}),i=yi().newInstance();i.setDimensions(g[0],g[1],1),i.setSpacing(u),i.setDirection(v),i.setOrigin(f),i.getPointData().setScalars(n),t.getMapper().setInputData(i)}}],!0,!1),void Lo(r.id);Q.utilities.updateVTKImageDataWithCornerstoneImage(s,h),a.render(),e.type===Q.Enums.Events.IMAGE_RENDERED&&a.element.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo)})):Lo(r.id)}const Vo={enable:function(e){const{viewport:t}=(0,Q.getEnabledElement)(e);t instanceof Q.StackViewport&&(e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Uo),e.addEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo))},disable:function(e){const{viewport:t}=(0,Q.getEnabledElement)(e);t instanceof Q.StackViewport&&(e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Uo),e.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Uo))}};function Wo(e,t){if(Ge.svgNodeCache[e])return Ge.svgNodeCache[e][t]?Ge.svgNodeCache[e][t].domRef:void 0}function Fo(e,t,n,i){if(!Ge.svgNodeCache[t])return null;Ge.svgNodeCache[t][i]={touched:!0,domRef:n},e.appendChild(n)}function Ho(e,t){Ge.svgNodeCache[e]&&Ge.svgNodeCache[e][t]&&(Ge.svgNodeCache[e][t].touched=!0)}function Bo(e,t){Ge.svgNodeCache[t]&&Object.keys(Ge.svgNodeCache[t]).forEach((n=>{const i=Ge.svgNodeCache[t][n];!i.touched&&i.domRef&&(e.removeChild(i.domRef),delete Ge.svgNodeCache[t][n])}))}const Go=function(e,t){const n=function(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n,renderingEngineId:i}=t,o="".concat(n,":").concat(i),a=function(e){const t=".".concat("viewport-element");return e.querySelector(t).querySelector(":scope > .svg-layer")}(e);return Object.keys(Ge.svgNodeCache[o]).forEach((e=>{Ge.svgNodeCache[o][e].touched=!1})),{svgLayerElement:a,svgNodeCacheForCanvas:Ge.svgNodeCache,getSvgNode:Wo.bind(this,o),appendNode:Fo.bind(this,a,o),setNodeTouched:Ho.bind(this,o),clearUntouched:Bo.bind(this,a,o)}}(e);t(n),n.clearUntouched()};function qo(e,t){const n=(0,Q.getEnabledElement)(e),{renderingEngineId:i,viewportId:o}=n,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n];if(i&&t.includes(i.mode)){const e=a.getToolInstance(n);r.push(e)}}return r}const{Active:jo,Passive:zo,Enabled:Ko}=je,Yo=new class{constructor(){ie(this,"hasBeenDestroyed",void 0),ie(this,"_needsRender",new Set),ie(this,"_animationFrameSet",!1),ie(this,"_animationFrameHandle",null),ie(this,"_viewportElements",void 0),ie(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))return this._animationFrameSet=!1,void(this._animationFrameHandle=null)}})),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,Q.getEnabledElement)(e);if(!t)return void console.warn("Element has been disabled");if(!(0,Q.getRenderingEngine)(t.renderingEngineId))return void console.warn("rendering Engine has been destroyed");const n=qo(e,[jo,zo,Ko]),{renderingEngineId:i,viewportId:o}=t,a={element:e,renderingEngineId:i,viewportId:o};Go(e,(i=>{let o=!1;n.forEach((e=>{if(e.renderAnnotation){const n=e.renderAnnotation(t,i);o=o||n}})),o&&(0,Q.triggerEvent)(e,te.ANNOTATION_RENDERED,{...a})}))}_reset(){window.cancelAnimationFrame(this._animationFrameHandle),this._needsRender.clear(),this._animationFrameSet=!1,this._animationFrameHandle=null,this._setAllViewportsToBeRenderedNextFrame()}},Xo=function(e){Yo.renderViewport(e)},Jo=function(e){Xo(e.detail.element)},Zo={enable:function(e){e.addEventListener(Q.Enums.Events.IMAGE_RENDERED,Jo)},disable:function(e){e.removeEventListener(Q.Enums.Events.IMAGE_RENDERED,Jo)}};function $o(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.mouseButton===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:Qo,Passive:ea,Enabled:ta}=je,na=function(e){$o(e,[Qo,ea,ta]).forEach((t=>{t.onCameraModified&&t.onCameraModified(e)}))},ia={enable:function(e){e.addEventListener(Q.Enums.Events.CAMERA_MODIFIED,na)},disable:function(e){e.removeEventListener(Q.Enums.Events.CAMERA_MODIFIED,na)}},{Active:oa,Passive:aa,Enabled:ra}=je,sa=function(e){$o(e,[oa,aa,ra]).forEach((t=>{t.onImageSpacingCalibrated&&t.onImageSpacingCalibrated(e)}))},la={enable:function(e){e.addEventListener(Q.Enums.Events.IMAGE_SPACING_CALIBRATED,sa)},disable:function(e){e.removeEventListener(Q.Enums.Events.IMAGE_SPACING_CALIBRATED,sa)}},{Active:da}=je;function ca(e,t,n){if(Ge.isInteractingWithTool)return!1;const{renderingEngineId:i,viewportId:o}=n.detail,a=Mi(o,i);if(!a)return!1;let r;const s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const n=s[e],i=a.toolOptions[n],o=a.getToolInstance(n);if(i.mode===da&&"function"==typeof o[t]){r=a.getToolInstance(n);break}}r&&r[t](n)}const ha=ca.bind(null,"Mouse","mouseClickCallback");function ga(e,t,n){const i="touch"===(arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse")?36:6,o=[];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,i);if(r){o.push({tool:a,annotation:t,handle:r});break}}})),o}function ua(e,t){const n=[];for(let o=0;o<t.length;o++){var i;const a=t[o];if(!a){console.warn("undefined tool in filterToolsWithAnnotationsForElement");continue}let r=$e(a.constructor.toolName,e);null!==(i=r)&&void 0!==i&&i.length&&("function"==typeof a.filterInteractableAnnotationsForElement&&(r=a.filterInteractableAnnotationsForElement(e,r)),r.length>0&&n.push({tool:a,annotations:r}))}return n}function va(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"mouse";const o="touch"===i?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,o,i)){a.push({tool:r,annotation:t});break}})),a}var ma=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}(ma||{}),pa=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}(pa||{});const fa=e=>e.shiftKey?e.ctrlKey?pa.ShiftCtrl:e.altKey?pa.ShiftAlt:e.metaKey?pa.ShiftMeta:pa.Shift:e.ctrlKey?e.altKey?pa.CtrlAlt:e.metaKey?pa.CtrlMeta:pa.Ctrl:e.altKey?e.metaKey&&pa.AltMeta||pa.Alt:e.metaKey?pa.Meta:void 0,{Active:Ea}=je;function wa(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=fa(i)||bi.getModifierKey(),a=Mi(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===(i?i.buttons:s)&&e.modifierKey===o));if(n.mode===Ea&&l)return a.getToolInstance(t)}}const{Active:Ia,Passive:_a}=je;const{Active:Ca,Passive:ba}=je;function Ta(e){if(Ge.isInteractingWithTool)return;const t=wa(e);if(t&&"function"==typeof t.preMouseDownCallback&&t.preMouseDownCallback(e))return;const n=1===e.detail.event.buttons,i=[...$o(e,[Ca],e.detail.event.buttons)||[],...(n?$o(e,[ba]):void 0)||[]];if(function(e){if(Ge.isInteractingWithTool)return!1;const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{canvas:o}=t.currentPoints;if(!i)return!1;const a=function(e,t){var n;const i=new Map,{renderingEngineId:o,viewportId:a}=e.detail,r=Mi(a,o);if(!r)return i;const s=Object.keys(r.toolOptions),l=r.getDefaultMousePrimary(),d=e.detail.event,c=null!==(n=null==d?void 0:d.buttons)&&void 0!==n?n:l,h=fa(d)||bi.getModifierKey();for(let e=0;e<s.length;e++){var g,u;const n=s[e],o=r.getToolInstance(n),a=null!==(g=null===(u=o.configuration)||void 0===u?void 0:u.actions)&&void 0!==g?g:{},l=Object.values(a);if(null==l||!l.length||!t.includes(o.mode))continue;const d=l.find((e=>e.bindings.length&&e.bindings.some((e=>e.mouseButton===c&&e.modifierKey===h))));d&&i.set(o,d)}return i}(e,[Ia,_a]),r=va(n,ua(n,Array.from(a.keys())),o);if(r.length>0){const{tool:t,annotation:n}=r[0],i=a.get(t);return("string"==typeof i.method?t[i.method]:i.method).call(t,e,n),!0}return!1}(e))return;const o=e.detail,{element:a}=o,r=ua(a,i),s=o.currentPoints.canvas,l=ga(a,r,s,"mouse"),d=!!e.detail.event.shiftKey;if(l.length>0){const{tool:t,annotation:n,handle:i}=Da(l);return Sa(n.annotationUID,d),void t.handleSelectedCallback(e,n,i,"Mouse")}const c=va(a,r,s,"mouse");if(c.length>0){const{tool:t,annotation:n}=Da(c);return Sa(n.annotationUID,d),void t.toolSelectedCallback(e,n,"Mouse",s)}!t||"function"!=typeof t.postMouseDownCallback||t.postMouseDownCallback(e)}function Da(e){return e.length>1&&e.find((e=>!ce(e.annotation)&&Pe(e.annotation.annotationUID)))||e[0]}function Sa(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?be(e)?we(e,!1):we(e,!0,!0):we(e,!0,!1)}function ya(e){if(Ge.isInteractingWithTool)return;const t=wa(e);t&&!Ge.isMultiPartToolActive&&t.addNewAnnotation&&we(t.addNewAnnotation(e,"mouse").annotationUID)}const Ma=ca.bind(null,"Mouse","doubleClickCallback");function Oa(e){if(Ge.isInteractingWithTool)return;const t=wa(e);!t||"function"!=typeof t.mouseDragCallback||t.mouseDragCallback(e)}const{Active:xa,Passive:Pa}=je;function Na(e){if(Ge.isInteractingWithTool||Ge.isMultiPartToolActive)return;const t=$o(e,[xa,Pa]),n=e.detail,{element:i}=n,o=ua(i,t),a=t.filter((e=>!o.some((t=>t.tool.getToolName()===e.getToolName()))));let r=!1;for(const{tool:t,annotations:n}of o)"function"==typeof t.mouseMoveCallback&&(r=t.mouseMoveCallback(e,n)||r);a.forEach((t=>{"function"==typeof t.mouseMoveCallback&&t.mouseMoveCallback(e)})),!0===r&&Xo(i)}const Ra=ca.bind(null,"Mouse","mouseUpCallback"),Aa=ca.bind(null,"MouseWheel","mouseWheelCallback"),ka={enable:function(e){e.addEventListener(te.MOUSE_CLICK,ha),e.addEventListener(te.MOUSE_DOWN,Ta),e.addEventListener(te.MOUSE_DOWN_ACTIVATE,ya),e.addEventListener(te.MOUSE_DOUBLE_CLICK,Ma),e.addEventListener(te.MOUSE_DRAG,Oa),e.addEventListener(te.MOUSE_MOVE,Na),e.addEventListener(te.MOUSE_UP,Ra),e.addEventListener(te.MOUSE_WHEEL,Aa)},disable:function(e){e.removeEventListener(te.MOUSE_CLICK,ha),e.removeEventListener(te.MOUSE_DOWN,Ta),e.removeEventListener(te.MOUSE_DOWN_ACTIVATE,ya),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,Ma),e.removeEventListener(te.MOUSE_DRAG,Oa),e.removeEventListener(te.MOUSE_MOVE,Na),e.removeEventListener(te.MOUSE_UP,Ra),e.removeEventListener(te.MOUSE_WHEEL,Aa)}},{Active:La}=je;function Ua(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=en.mouseButton,o=bi.getModifierKey(),a=Mi(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===La&&(n.bindings.length&&n.bindings.some((e=>e.mouseButton===(null!=i?i:s)&&e.modifierKey===o))))return a.getToolInstance(t)}}function Va(e){const t=Ua(e);if(t){const{renderingEngineId:n,viewportId:i}=e.detail,o=Mi(i,n),a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const n=function(e,t){const n=new Map,{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);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 i=r[e],o=a.getToolInstance(i),d=null===(l=o.configuration)||void 0===l?void 0:l.actions;if(!d)continue;const c=Object.values(d);if(null==c||!c.length||!t.includes(o.mode))continue;const h=c.find((e=>e.bindings.some((e=>e.key===s))));h&&n.set(o,h)}return n}(e,[je.Active]);if(null!=n&&n.size){const{element:t}=e.detail;for(const[e,i]of[...n.entries()])("function"==typeof i.method?i.method:e[i.method]).call(e,t,i)}}function Wa(e){const t=Ua(e);if(!t)return;const{renderingEngineId:n,viewportId:i}=e.detail,o=Mi(i,n);Ii();const a=t.getToolName();Object.keys(o.toolOptions).includes(a)&&o.setViewportsCursorByToolName(a)}const Fa={enable:function(e){e.addEventListener(te.KEY_DOWN,Va),e.addEventListener(te.KEY_UP,Wa)},disable:function(e){e.removeEventListener(te.KEY_DOWN,Va),e.removeEventListener(te.KEY_UP,Wa)}},{Active:Ha}=je;function Ba(e){const{renderingEngineId:t,viewportId:n}=e.detail,i=e.detail.event,o=Mi(n,t);if(!o)return null;const a=Object.keys(o.toolOptions),r=Object.keys(i.touches).length,s=fa(i)||bi.getModifierKey(),l=o.getDefaultMousePrimary();for(let e=0;e<a.length;e++){const t=a[e],n=o.toolOptions[t],i=n.bindings.length&&n.bindings.some((e=>(e.numTouchPoints===r||1===r&&e.mouseButton===l)&&e.modifierKey===s));if(n.mode===Ha&&i)return o.getToolInstance(t)}}function Ga(e,t,n){const{renderingEngineId:i,viewportId:o}=e.detail,a=Mi(o,i);if(!a)return[];const r=[],s=Object.keys(a.toolOptions);for(let e=0;e<s.length;e++){const i=s[e],o=a.toolOptions[i],l=null!=n&&o.bindings.length&&o.bindings.some((e=>e.numTouchPoints===n));if(t.includes(o.mode)&&(!n||l)){const e=a.getToolInstance(i);r.push(e)}}return r}const{Active:qa,Passive:ja}=je;function za(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);if(t&&"function"==typeof t.preTouchStartCallback&&t.preTouchStartCallback(e))return;const n=1===Object.keys(e.detail.event.touches).length,i=[...Ga(e,[qa],Object.keys(e.detail.event.touches).length)||[],...(n?Ga(e,[ja]):void 0)||[],t],o=e.detail,{element:a}=o,r=ua(a,i),s=o.currentPoints.canvas,l=ga(a,r,s,"touch");if(l.length>0){const{tool:t,annotation:n,handle:i}=Ka(l);return Ya(n.annotationUID,!1),void t.handleSelectedCallback(e,n,i,"Touch")}const d=va(a,r,s,"touch");if(d.length>0){const{tool:t,annotation:n}=Ka(d);return Ya(n.annotationUID,!1),void t.toolSelectedCallback(e,n,"Touch")}!t||"function"!=typeof t.postTouchStartCallback||t.postTouchStartCallback(e)}function Ka(e){return e.length>1&&e.find((e=>!ce(e.annotation)&&Pe(e.annotation.annotationUID)))||e[0]}function Ya(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?be(e)?we(e,!1):we(e,!0,!0):we(e,!0,!1)}function Xa(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);t&&!Ge.isMultiPartToolActive&&t.addNewAnnotation&&we(t.addNewAnnotation(e,"touch").annotationUID)}function Ja(e){if(Ge.isInteractingWithTool)return;const t=Ba(e);!t||"function"!=typeof t.touchDragCallback||t.touchDragCallback(e)}const Za=ca.bind(null,"Touch","touchEndCallback"),$a=ca.bind(null,"Touch","touchTapCallback"),Qa=ca.bind(null,"Touch","touchPressCallback"),er={enable:function(e){e.addEventListener(te.TOUCH_START,za),e.addEventListener(te.TOUCH_START_ACTIVATE,Xa),e.addEventListener(te.TOUCH_DRAG,Ja),e.addEventListener(te.TOUCH_END,Za),e.addEventListener(te.TOUCH_TAP,$a),e.addEventListener(te.TOUCH_PRESS,Qa)},disable:function(e){e.removeEventListener(te.TOUCH_START,za),e.removeEventListener(te.TOUCH_START_ACTIVATE,Xa),e.removeEventListener(te.TOUCH_DRAG,Ja),e.removeEventListener(te.TOUCH_END,Za),e.removeEventListener(te.TOUCH_PRESS,Qa)}};function tr(e){const{element:t,viewportId:n}=e.detail,i=function(e){const t="http://www.w3.org/2000/svg",n=document.createElementNS(t,"svg"),i="svg-layer-".concat(e);n.classList.add("svg-layer"),n.setAttribute("id",i),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 o=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(i)),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),o.appendChild(a),n.appendChild(o),n}(n);var o;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i="".concat(t,":").concat(n);Ge.svgNodeCache[i]={}}(t),o=i,t.querySelector("div.viewport-element").appendChild(o),Yo.addViewportElement(n,t),En.enable(t),_n.enable(t),vi.enable(t),bi.enable(t),Vo.enable(t),Zo.enable(t),ia.enable(t),la.enable(t),ka.enable(t),Fa.enable(t),er.enable(t),Ge.enabledElements.push(t)}const nr=function(e,t){const n=[];if(!t&&!e)throw new Error("At least one of renderingEngineId or viewportId should be given");for(let i=0;i<Ge.synchronizers.length;i++){const o=Ge.synchronizers[i],a=!o.isDisabled(),r=o.hasSourceViewport(t,e),s=o.hasTargetViewport(t,e);a&&(r||s)&&n.push(o)}return n},ir=function(e){const{element:t,viewportId:n}=e.detail;!function(e){const{viewportUid:t,renderingEngineUid:n}=e.dataset,i="".concat(t,":").concat(n);delete Ge.svgNodeCache[i]}(t),function(e){const t=e.querySelector("div.".concat("viewport-element")),n=t.querySelector("svg");n&&t.removeChild(n)}(t),Yo.removeViewportElement(n,t),En.disable(t),_n.disable(t),vi.disable(t),bi.disable(t),Vo.disable(t),Zo.disable(t),ia.disable(t),la.disable(t),ka.disable(t),Fa.disable(t),er.disable(t),(e=>{const t=(0,Q.getEnabledElement)(e);nr(t.viewportId,t.renderingEngineId).forEach((e=>{e.remove(t)}))})(t),(e=>{const{renderingEngineId:t,viewportId:n}=(0,Q.getEnabledElement)(e),i=Mi(n,t);i&&i.removeViewports(t,n)})(t),function(e){const t=Ge.enabledElements.findIndex((t=>t===e));t>-1&&Ge.enabledElements.splice(t,1)}(t)},or=function(e,t){t.length&&t.forEach((t=>{const{element:n}=e.getViewport(t);Xo(n)}))},ar=function(e){const{viewportId:t,renderingEngineId:n}=e.detail,i=(0,Q.getRenderingEngine)(n);or(i,[t])},rr=function(e){e.detail.removed.length&&(0,Q.getRenderingEngines)().forEach((e=>{const t=e.getViewports().map((e=>e.id));or(e,t)}))},sr=function(e){const{segmentationId:t}=e.detail;Dt(t).forEach((e=>{bt(e).forEach((n=>{n.segmentationId===t&&mt(e,n.segmentationRepresentationUID)}))}))},lr=function(e){const{segmentationId:t,modifiedSlicesToUse:n}=e.detail,{representationData:i,type:o}=It(t),a=Dt(t);if(o!==at.Labelmap)throw new Error("onSegmentationDataModified: representationType ".concat(o," not supported yet"));if(Oi(i[o])){const e=Q.cache.getVolume(i[o].volumeId);if(!e)return void console.warn("segmentation not found in cache");const{imageData:t,vtkOpenGLTexture:a}=e;let r;if(n&&Array.isArray(n))r=n;else{const e=t.getDimensions()[2];r=[...Array(e).keys()]}r.forEach((e=>{a.setUpdatedFrame(e)})),t.modified()}else a.forEach((e=>{const n=bt(e),a=xi(e).getViewportsInfo();n.forEach((e=>{e.segmentationId===t&&a.forEach((t=>{let{viewportId:n,renderingEngineId:a}=t;const r=(0,Q.getEnabledElementByIds)(n,a).viewport,s=r.getActor(e.segmentationRepresentationUID);if(!s)return;const l=r.getCurrentImageId(),d=s.actor.getMapper().getInputData(),{imageIdReferenceMap:c}=i[o],h=c.get(l),g=Q.cache.getImage(h);d.modified(),Q.utilities.updateVTKImageDataWithCornerstoneImage(d,g)}))}))}));a.forEach((e=>{Lo(e)}))},dr=function(e){const{toolGroupId:t}=e.detail;Lo(t)},cr=function(e){const{toolGroupId:t,segmentationRepresentationUID:n}=e.detail;Lo(t)},hr=function(e,t,n){const i=bt(e);if(!i||0===i.length)return;const o=i.map((e=>e.segmentationRepresentationUID));let a=t;if(a){const e=t.filter((e=>!o.includes(e)));if(e.length>0)throw new Error("The following segmentationRepresentationUIDs are not part of the toolGroup: ".concat(JSON.stringify(e)))}else a=o;a.forEach((t=>{!function(e,t,n){const i=kt(e,t),{type:o}=i;if(o===at.Labelmap)Po.removeSegmentationRepresentation(e,t,n);else{if(o!==at.Contour)throw new Error("The representation ".concat(o," is not supported yet"));Io.removeSegmentationRepresentation(e,t,n)}}(e,t,n)}))},gr=function(e){const t=Ge.toolGroups.findIndex((t=>t.id===e));t>-1&&(Ao.removeToolGroup(e),hr(e),Ge.toolGroups.splice(t,1))},ur=function(){const e=[...Ge.toolGroups];for(const t of e)gr(t.id);Ge.toolGroups=[]};let vr=!1;function mr(){vr||(function(){fr();const e=Q.Enums.Events.ELEMENT_ENABLED,t=Q.Enums.Events.ELEMENT_DISABLED;Q.eventTarget.addEventListener(e,tr),Q.eventTarget.addEventListener(t,ir)}(),Er(),Q.eventTarget.addEventListener(te.ANNOTATION_MODIFIED,ar),Q.eventTarget.addEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.addEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.addEventListener(te.SEGMENTATION_MODIFIED,sr),Q.eventTarget.addEventListener(te.SEGMENTATION_DATA_MODIFIED,lr),Q.eventTarget.addEventListener(te.SEGMENTATION_REPRESENTATION_MODIFIED,dr),Q.eventTarget.addEventListener(te.SEGMENTATION_REPRESENTATION_REMOVED,cr),vr=!0)}function pr(){fr(),Er(),ur(),He={},Ge=ae()(Be);const e=Xe(),t=wt();e.restoreAnnotations({}),t.resetState(),vr=!1}function fr(){const e=Q.Enums.Events.ELEMENT_ENABLED,t=Q.Enums.Events.ELEMENT_DISABLED;Q.eventTarget.removeEventListener(e,tr),Q.eventTarget.removeEventListener(t,ir)}function Er(){Q.eventTarget.removeEventListener(te.ANNOTATION_MODIFIED,ar),Q.eventTarget.removeEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.removeEventListener(te.ANNOTATION_SELECTION_CHANGE,rr),Q.eventTarget.removeEventListener(te.SEGMENTATION_MODIFIED,sr),Q.eventTarget.removeEventListener(te.SEGMENTATION_DATA_MODIFIED,lr),Q.eventTarget.removeEventListener(te.SEGMENTATION_REPRESENTATION_MODIFIED,dr),Q.eventTarget.removeEventListener(te.SEGMENTATION_REPRESENTATION_REMOVED,cr)}function wr(e){const t=e.toolName,n=void 0!==Ge.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"));Ge.tools[t]={toolClass:e}}function Ir(e){const t=e.toolName;if(!t)throw new Error("No tool found for: ".concat(e.name));if(void 0===!Ge.tools[t])throw new Error("".concat(t," cannot be removed because it has not been added"));delete Ge.tools[t]}function _r(e){const t=ua(e,qo(e,[je.Active,je.Passive]));for(const{tool:n}of t){const t=n.cancel(e);if(t)return t}}function Cr(e,t){return e.findIndex((e=>t.renderingEngineId===e.renderingEngineId&&t.viewportId===e.viewportId))}function br(e,t){return e.some((e=>e.renderingEngineId===t.renderingEngineId&&e.viewportId===t.viewportId))}const Tr=class{constructor(e,t,n,i){ie(this,"_enabled",void 0),ie(this,"_eventName",void 0),ie(this,"_auxiliaryEventNames",void 0),ie(this,"_eventHandler",void 0),ie(this,"_ignoreFiredEvents",void 0),ie(this,"_sourceViewports",void 0),ie(this,"_targetViewports",void 0),ie(this,"_viewportOptions",{}),ie(this,"_options",void 0),ie(this,"id",void 0),ie(this,"_onEvent",(e=>{if(!0===this._ignoreFiredEvents)return;if(!this._targetViewports.length)return;const t=(0,Q.getEnabledElement)(e.currentTarget);if(!t)return;const{renderingEngineId:n,viewportId:i}=t;this._sourceViewports.find((e=>e.viewportId===i))&&this.fireEvent({renderingEngineId:n,viewportId:i},e)})),this._enabled=!0,this._eventName=t,this._eventHandler=n,this._ignoreFiredEvents=!1,this._sourceViewports=[],this._targetViewports=[],this._options=i||{},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}getOptions(e){return this._viewportOptions[e]}add(e){this.addTarget(e),this.addSource(e)}addSource(e){if(br(this._sourceViewports,e))return;const{renderingEngineId:t,viewportId:n}=e,i=(0,Q.getRenderingEngine)(t).getViewport(n);if(!i)return void console.warn("Synchronizer.addSource: No viewport for ".concat(t," ").concat(n));const o=i.element;o.addEventListener(this._eventName,this._onEvent.bind(this)),this._auxiliaryEventNames.length&&this._auxiliaryEventNames.forEach((e=>{o.addEventListener(e,this._onEvent.bind(this))})),this._updateDisableHandlers(),this._sourceViewports.push(e)}addTarget(e){br(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=Cr(this._sourceViewports,e);if(-1===t)return;const n=function(e){const t=(0,Q.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=Cr(this._targetViewports,e);-1!==t&&(this._targetViewports.splice(t,1),this._updateDisableHandlers())}hasSourceViewport(e,t){return br(this._sourceViewports,{renderingEngineId:e,viewportId:t})}hasTargetViewport(e,t){return br(this._targetViewports,{renderingEngineId:e,viewportId:t})}fireEvent(e,t){if(this.isDisabled()||this._ignoreFiredEvents)return;this._ignoreFiredEvents=!0;const n=[];try{for(let i=0;i<this._targetViewports.length;i++){const o=this._targetViewports[i];if(e.viewportId===o.viewportId)continue;const a=this._eventHandler(this,e,o,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=[],i=e.concat(t);for(let e=0;e<i.length;e++){const t=i[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,Q.getRenderingEngine)(e.renderingEngineId).getViewport(e.viewportId);if(!t)return;const{element:i}=t;i.removeEventListener(Q.Enums.Events.ELEMENT_DISABLED,n),i.addEventListener(Q.Enums.Events.ELEMENT_DISABLED,n)}))}},Dr=function(e,t,n,i){if(Ge.synchronizers.some((t=>t.id===e)))throw new Error("Synchronizer with id '".concat(e,"' already exists."));const o=new Tr(e,t,n,i);return Ge.synchronizers.push(o),o},Sr=function(){for(;Ge.synchronizers.length>0;)Ge.synchronizers.pop().destroy()},yr=function(e){return Ge.synchronizers.find((t=>t.id===e))},Mr=function(){return Ge.synchronizers},Or=function(e){const t=Ge.synchronizers.findIndex((t=>t.id===e));t>-1&&(Ge.synchronizers[t].destroy(),Ge.synchronizers.splice(t,1))};var xr=C(485),Pr=C.n(xr);const Nr=Symbol("DefinedCursors"),Rr=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 Ar{constructor(e,t){ie(this,"name",void 0),ie(this,"fallback",void 0),this.name=e+"",this.fallback=t}getName(){return this.name+""}addFallbackStyleProperty(e){const{fallback:t}=this;return t instanceof Ar?"".concat(e,", ").concat(t.getStyleProperty()):e+""}getStyleProperty(){return this.addFallbackStyleProperty(this.name)+""}static getDefinedCursor(e){const t=kr(Ar,Nr);let n=t.get(e);return n instanceof Ar?n:Rr.has(e)?(n=new Ar(e),t.set(e,n),n):void 0}static setDefinedCursor(e,t){return t instanceof Ar&&(kr(Ar,Nr).set(e,t),!0)}}function kr(e,t){let n=e[t];return n instanceof Map||(n=new Map,Object.defineProperty(e,t,{value:n})),n}const Lr=Rr.values();var Ur=function(e){return e.Default="",e.Highlighted="Highlighted",e.Selected="Selected",e.Locked="Locked",e}(Ur||{});const Vr=Ur;class Wr extends Ar{constructor(e,t,n,i,o){super(i||Wr.getUniqueInstanceName("image-cursor"),o),ie(this,"url",void 0),ie(this,"x",void 0),ie(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 i="url('".concat(e,"')");return t>=0&&n>=0&&(t>0||n>0)&&(i+=" ".concat(t," ").concat(n)),this.addFallbackStyleProperty(i)}static getUniqueInstanceName(e){return"".concat(e,"-").concat(Q.utilities.getRuntimeId(Wr))}}const Fr={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 '},Hr={x:127,y:60},Br='\n<rect fill="{{color}}" x="80.19" y="25.03" width="47.14" height="15.85"/>\n',Gr='\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',qr='<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)"/>',jr='<path fill="{{color}}" d="M8.86,2.25V66.08H72.69V2.25H8.86ZM65.28,58.67h-49v-49h49v49Z" transform="translate(-8.86 -2.25)"/>',zr='<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)"/>',Kr={Angle:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{iconContent:'<circle stroke="{{color}}" fill="none" stroke-width="3" cx="16" cy="16" r="14" />',viewBox:{x:32,y:32}}),EllipticalROI:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{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:Yr(Fr,{iconContent:"".concat(qr," ").concat(Br),viewBox:Hr}),SegmentationFreeHandFillInside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Gr),viewBox:Hr}),SegmentationFreeHandEraseOutside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Br),viewBox:Hr}),SegmentationFreeHandFillOutside:Yr(Fr,{iconContent:"".concat(qr," ").concat(Gr),viewBox:Hr}),SegmentationRectangleEraseInside:Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),RectangleScissor:Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.FILL_INSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.FILL_OUTSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Gr),viewBox:Hr}),"RectangleScissor.ERASE_OUTSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),"RectangleScissor.ERASE_INSIDE":Yr(Fr,{iconContent:"".concat(jr," ").concat(Br),viewBox:Hr}),CircleScissor:Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr}),"CircleScissor.FILL_INSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr}),"CircleScissor.ERASE_OUTSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Br),viewBox:Hr}),"CircleScissor.FILL_OUTSIDE":Yr(Fr,{iconContent:"".concat(zr," ").concat(Gr),viewBox:Hr})};function Yr(e,t){return Object.assign(Object.create(e),t)}function Xr(e,t,n){Kr[e]=Yr(Fr,{iconContent:t,viewBox:n})}const Jr=Object.keys(Kr),Zr=new class{constructor(){ie(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:i,toolGroupId:o,toolName:a}=t;return this._getToolStyle(e,n,i,o,a)}_getToolStyle(e,t,n,i,o){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[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}if(i){const t=this.getToolGroupToolStyles(i);if(t){if(t[o]&&void 0!==t[o][e])return t[o][e];if(t.global&&void 0!==t.global[e])return t.global[e]}}const a=this.getDefaultToolStyles();return a[o]&&void 0!==a[o][e]?a[o][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 $r(e,t,n,i){const o=function(e,t,n){const i=["".concat(e)];return t&&i.push("".concat(i[0]).concat(t)),n&&i.push("".concat(i[i.length-1]).concat(n)),i}(e,n,i);for(let e=o.length-1;e>=0;--e){const n=Zr.getStyleProperty(o[e],t);if(void 0!==n)return n}}const Qr=Vr.Highlighted,es=je.Active;class ts extends Wr{constructor(e,t,n,i,o){super(e,t,n,i,o)}static getDefinedCursor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;n||(n=$r("color",{},Qr,es));const i=function(e,t,n){return"".concat(t?"pointer":"cursor",":").concat(e,"/").concat(n)}(e,t,n);let o=super.getDefinedCursor(i);if(!o){const a=function(e){return Kr[e]}(e);a&&(o=function(e,t,n,i,o){const{x:a,y:r}=e.mousePoint;return new ts(function(e,t,n){return URL.createObjectURL(function(e,t,n){const i=(t?os:is)(e,n);return new Blob([i],{type:"image/svg+xml"})}(e,t,n))}(e,n,{color:i}),a,r,t,o)}(a,i,t,n,super.getDefinedCursor("default")),super.setDefinedCursor(i,o))}return o}}function ns(e,t){const n=Object(t),i=Object.prototype.hasOwnProperty.bind(n);return(e+"").replace(/\{\{(\w+)\}\}/g,((e,t)=>i(t)?n[t]+"":""))}function is(e,t){const{iconContent:n,iconSize:i,viewBox:o}=e;return ns('\n <svg data-icon="cursor" role="img" xmlns="http://www.w3.org/2000/svg"\n width="'.concat(i,'" height="').concat(i,'" viewBox="0 0\n ').concat(o.x," ").concat(o.y,'">\n ').concat(n,"\n </svg>"),t)}function os(e,t){const{iconContent:n,iconSize:i,viewBox:o,mousePointerGroupString:a}=e,r=i/Math.max(o.x,o.y,1),s=16+i;return ns('\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 as=Symbol("ElementCursorsMap");function rs(e,t){cs(e)[0]=t,ss(e,t)}function ss(e,t){const n=cs(e);n[1]=n[0],n[0]=t,e.style.cursor=(t instanceof Ar?t:Ar.getDefinedCursor("auto")).getStyleProperty()}function ls(e){ss(e,cs(e)[1])}function ds(e){ss(e,Ar.getDefinedCursor("none"))}function cs(e){let t=cs[as];t instanceof WeakMap||(t=new WeakMap,Object.defineProperty(cs,as,{value:t}));let n=t.get(e);return n||(n=[null,null],t.set(e,n)),n}const{Active:hs,Passive:gs,Enabled:us,Disabled:vs}=je;class ms{constructor(e){ie(this,"id",void 0),ie(this,"viewportsInfo",[]),ie(this,"toolOptions",{}),ie(this,"restoreToolOptions",{}),ie(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,")."))}addTool(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Ge.tools[e],i=void 0!==e&&""!==e,o=this.toolOptions[e];if(!i)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(o)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 i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=null===(n=Ge.tools[e])||void 0===n?void 0:n.toolClass;if(!o){const n=Ge.tools[t].toolClass;class i extends n{}i.toolName=e,o=i,Ge.tools[e]={toolClass:i}}this.addTool(o.toolName,i)}addViewport(e,t){if("string"!=typeof e)throw new Error("viewportId must be defined and be a string");const n=(0,Q.getRenderingEngines)();if(!t&&n.length>1)throw new Error("You must specify a renderingEngineId when there are multiple rendering engines.");const i=t||n[0].id;this.viewportsInfo.some((t=>{let{viewportId:n}=t;return n===e}))||this.viewportsInfo.push({viewportId:e,renderingEngineId:i});const o=this.getActivePrimaryMouseButtonTool();Q.Settings.getRuntimeSettings().get("useCursors")&&this.setViewportsCursorByToolName(o)}removeViewports(e,t){const n=[];if(this.viewportsInfo.forEach(((i,o)=>{let a=!1;i.renderingEngineId===e&&(a=!0,t&&i.viewportId!==t&&(a=!1)),a&&n.push(o)})),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 i={bindings:[...this.toolOptions[e]?this.toolOptions[e].bindings:[],...t.bindings?t.bindings:[]].reduce(((e,t)=>{const n=void 0!==t.numTouchPoints,i=void 0!==t.mouseButton;return e.some((e=>{return i=t,(n=e).mouseButton===i.mouseButton&&n.modifierKey===i.modifierKey;var n,i}))||!n&&!i||e.push(t),e}),[]),mode:hs};this.toolOptions[e]=i,this._toolInstances[e].mode=hs;const o=Q.Settings.getRuntimeSettings().get("useCursors");if(this._hasMousePrimaryButtonBinding(t)&&o)this.setViewportsCursorByToolName(e);else if(!this.getActivePrimaryMouseButtonTool()&&o){const e=Ar.getDefinedCursor("default");this._setCursorForViewports(e)}"function"==typeof n.onSetToolActive&&n.onSetToolActive(),this._renderViewports();const a={toolGroupId:this.id,toolName:e,toolBindingsOptions:t};(0,Q.triggerEvent)(Q.eventTarget,te.TOOL_ACTIVATED,a),this._triggerToolModeChangedEvent(e,hs,t)}setToolPassive(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=this.getToolOptions(e),i=Object.assign({bindings:n?n.bindings:[]},n,{mode:gs}),o=this.getDefaultMousePrimary();i.bindings=i.bindings.filter((e=>e.mouseButton!==o||e.modifierKey));let a=gs;0!==i.bindings.length&&(a=hs,i.mode=a),this.toolOptions[e]=i,t.mode=a,"function"==typeof t.onSetToolPassive&&t.onSetToolPassive(),this._renderViewports(),this._triggerToolModeChangedEvent(e,gs)}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:us};this.toolOptions[e]=n,t.mode=us,"function"==typeof t.onSetToolEnabled&&t.onSetToolEnabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,us)}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:vs};this.restoreToolOptions[e]=this.toolOptions[e],this.toolOptions[e]=n,t.mode=vs,"function"==typeof t.onSetToolDisabled&&t.onSetToolDisabled(),this._renderViewports(),this._triggerToolModeChangedEvent(e,vs)}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===hs&&this._hasMousePrimaryButtonBinding(t)}))}setViewportsCursorByToolName(e,t){const n=this._getCursor(e,t);this._setCursorForViewports(n)}_getCursor(e,t){let n,i;return t&&(n="".concat(e,".").concat(t),i=ts.getDefinedCursor(n,!0),i)?i:(n="".concat(e),i=ts.getDefinedCursor(n,!0),i||(n=e,i=ts.getDefinedCursor(n,!0),i||Ar.getDefinedCursor("default")))}_setCursorForViewports(e){this.viewportsInfo.forEach((t=>{let{renderingEngineId:n,viewportId:i}=t;const o=(0,Q.getEnabledElementByIds)(i,n);if(!o)return;const{viewport:a}=o;rs(a.element,e)}))}setToolConfiguration(e,t,n){if(void 0===this._toolInstances[e])return console.warn("Tool ".concat(e," not present, can't set tool configuration.")),!1;let i;return i=n?t:Object.assign(this._toolInstances[e].configuration,t),this._toolInstances[e].configuration=i,this._renderViewports(),!0}getDefaultMousePrimary(){return ma.Primary}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=Pr()(this._toolInstances[e].configuration,t)||this._toolInstances[e].configuration;return ae()(n)}clone(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=xi(e);return i?(console.warn("ToolGroup ".concat(e," already exists")),i):(i=ps(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],o=this.toolOptions[e],a=n.mode;i.addTool(e),i.setToolMode(e,a,{bindings:null!==(t=o.bindings)&&void 0!==t?t:[]})})),i)}_hasMousePrimaryButtonBinding(e){var t;const n=this.getDefaultMousePrimary();return null==e||null===(t=e.bindings)||void 0===t?void 0:t.some((e=>e.mouseButton===n&&void 0===e.modifierKey))}_renderViewports(){this.viewportsInfo.forEach((e=>{let{renderingEngineId:t,viewportId:n}=e;(0,Q.getRenderingEngine)(t).renderViewport(n)}))}_triggerToolModeChangedEvent(e,t,n){const i={toolGroupId:this.id,toolName:e,mode:t,toolBindingsOptions:n};(0,Q.triggerEvent)(Q.eventTarget,te.TOOL_MODE_CHANGED,i)}}const ps=function(e){if(Ge.toolGroups.some((t=>t.id===e)))return void console.warn("'".concat(e,"' already exists."));const t=new ms(e);return Ge.toolGroups.push(t),t},fs=function(){return Ge.toolGroups},Es=[[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 ws(e,t,n,i){const{camera:o}=i.detail,a=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!a)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const r=a.getViewport(n.viewportId);r.setCamera(o),r.render()}const{CAMERA_MODIFIED:Is}=Q.Enums.Events;function _s(e){return Dr(e,Is,ws)}function Cs(e,t,n,i,o){const a=i.detail,{volumeId:r,range:s,invertStateChanged:l,invert:d}=a,c=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!c)throw new Error("Rendering Engine does not exist: ".concat(n.renderingEngineId));const h=c.getViewport(n.viewportId),g={voiRange:s};if(null!=o&&o.syncInvertState&&l&&(g.invert=d),h instanceof Q.BaseVolumeViewport)h.setProperties(g,r);else{if(!(h instanceof Q.StackViewport))throw new Error("Viewport type not supported.");h.setProperties(g)}h.render()}function bs(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{syncInvertState:!0};return Dr(e,Q.Enums.Events.VOI_MODIFIED,Cs,t)}function Ts(e,t,n){const i=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const o=e.getOptions(n.viewportId),a=i.getViewport(n.viewportId),r=i.getViewport(t.viewportId);if(!1!==(null==o?void 0:o.syncZoom)){const e=r.getZoom();a.setZoom(e)}if(!1!==(null==o?void 0:o.syncPan)){const e=r.getPan();a.setPan(e)}a.render()}const{CAMERA_MODIFIED:Ds}=Q.Enums.Events;function Ss(e){return Dr(e,Ds,Ts)}var ys=C(976);const Ms=function(e,t,n){return Math.min(Math.max(t,e),n)};function Os(e,t){if(!(0,Q.getEnabledElement)(e.element))throw new Error("Scroll::Viewport is not enabled (it might be disabled)");if(e instanceof Q.StackViewport&&0===e.getImageIds().length)throw new Error("Scroll::Stack Viewport has no images");const{type:n}=e,{volumeId:i,delta:o,scrollSlabs:a}=t;if(e instanceof Q.StackViewport)e.scroll(o,t.debounceLoading,t.loop);else if(e instanceof Q.VolumeViewport)!function(e,t,n){const i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],{numScrollSteps:o,currentStepIndex:a,sliceRangeInfo:r}=Q.utilities.getVolumeViewportScrollInfo(e,t,i);if(!r)return;const{sliceRange:s,spacingInNormalDirection:l,camera:d}=r,{focalPoint:c,viewPlaneNormal:h,position:g}=d,{newFocalPoint:u,newPosition:v}=Q.utilities.snapFocalPointToSlice(c,g,s,h,l,n);e.setCamera({focalPoint:u,position:v}),e.render();const m=a+n;if((m>o||m<0)&&e.getCurrentImageId()){const i={volumeId:t,viewport:e,delta:n,desiredStepIndex:m,currentStepIndex:a,numScrollSteps:o,currentImageId:e.getCurrentImageId()};Q.utilities.triggerEvent(Q.eventTarget,Q.EVENTS.VOLUME_SCROLL_OUT_OF_BOUNDS,i)}}(e,i,o,a);else{if(!(e instanceof Q.VideoViewport))throw new Error("Not implemented for Viewport Type: ".concat(n));e.scroll(o)}}const xs=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{imageIndex:n,debounceLoading:i,volumeId:o}=t,a=(0,Q.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 Q.StackViewport)return{numberOfSlices:e.getImageIds().length,imageIndex:t?e.getTargetImageIdIndex():e.getCurrentImageIdIndex()};if(e instanceof Q.VolumeViewport)return Q.utilities.getImageSliceDataForVolumeViewport(e);throw new Error("Unsupported viewport type")}(r,i),d=function(e,t){return Ms(t,0,e-1)}(l,n);Os(r,{delta:d-s,debounceLoading:i,volumeId:o})},Ps=(e,t)=>Q.utilities.spatialRegistrationMetadataProvider.get("spatialRegistrationModule",e,t);async function Ns(e,t,n){const i=(0,Q.getRenderingEngine)(n.renderingEngineId);if(!i)throw new Error("No RenderingEngine for Id: ".concat(n.renderingEngineId));const o=i.getViewport(t.viewportId),a=e.getOptions(n.viewportId);if(null!=a&&a.disabled)return;const r=i.getViewport(n.viewportId),s=o.getCurrentImageId(),l=Q.metaData.get("imagePlaneModule",s).imagePositionPatient,d=r.getImageIds();if(!function(e,t){const{viewPlaneNormal:n}=e.getCamera(),{viewPlaneNormal:i}=t.getCamera(),o=ys.vec3.dot(n,i);return Math.abs(o)>.9}(o,r))return;let c=Ps(n.viewportId,t.viewportId);if(!c&&(o.getFrameOfReferenceUID()===r.getFrameOfReferenceUID()&&!1!==(null==a?void 0:a.useInitialPosition)?c=ys.mat4.identity(ys.mat4.create()):(Q.utilities.calculateViewportsSpatialRegistration(o,r),c=Ps(n.viewportId,t.viewportId)),!c))return;const h=ys.vec3.transformMat4(ys.vec3.create(),l,c),g=(u=h,d.reduce(((e,t,n)=>{const{imagePositionPatient:i}=Q.metaData.get("imagePlaneModule",t),o=ys.vec3.distance(i,u);return o<e.distance?{distance:o,index:n}:e}),{distance:1/0,index:-1}));var u;let v=g.index;r instanceof Q.VolumeViewport&&(v=d.length-g.index-1),-1!==g.index&&r.getCurrentImageIdIndex()!==g.index&&await xs(r.element,{imageIndex:v})}const{STACK_NEW_IMAGE:Rs,VOLUME_NEW_IMAGE:As}=Q.Enums.Events;function ks(e){return Dr(e,Rs,Ns,{auxiliaryEventNames:[As]})}const Ls=ks,Us=function(e,t,n){return"".concat(e,"::").concat(t,"::").concat(n)},Vs=function(e,t){Object.keys(e).forEach((n=>{const i=t.getAttribute(n),o=e[n];void 0===o||""===o?t.removeAttribute(n):i!==o&&t.setAttribute(n,o)}))},Ws=function(e,t){Object.keys(e).forEach((n=>{const i=e[n];void 0!==i&&""!==i&&t.setAttribute(n,i)}))},Fs=function(e,t,n,i,o){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:d,lineWidth:c,lineDash:h,fillOpacity:g,strokeOpacity:u}=Object.assign({color:"dodgerblue",fill:"transparent",width:"2",lineDash:void 0,lineWidth:void 0,strokeOpacity:1,fillOpacity:1},a),v=c||d,m=Us(t,"circle",n),p=e.getSvgNode(m),f={cx:"".concat(i[0]),cy:"".concat(i[1]),r:"".concat(o),stroke:s,fill:l,"stroke-width":v,"stroke-dasharray":h,"fill-opacity":g,"stroke-opacity":u};if(p)Vs(f,p),e.setNodeTouched(m);else{const t=document.createElementNS("http://www.w3.org/2000/svg","circle");""!==r&&t.setAttribute("data-id",r),Ws(f,t),e.appendNode(t,m)}},Hs=function(e,t,n,i){let o=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:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},o),c=l||s,h=Us(t,"ellipse",n),g=e.getSvgNode(h),[u,v,m,p]=i,f=Math.hypot(m[0]-p[0],m[1]-p[1]),E=Math.hypot(v[0]-u[0],v[1]-u[1]),w=180*Math.atan2(m[1]-p[1],m[0]-p[0])/Math.PI,I=[(m[0]+p[0])/2,(v[1]+u[1])/2],_=f/2,C=E/2,b={cx:"".concat(I[0]),cy:"".concat(I[1]),rx:"".concat(_),ry:"".concat(C),stroke:r,fill:"transparent",transform:"rotate(".concat(w," ").concat(I[0]," ").concat(I[1],")"),"stroke-width":c,"stroke-dasharray":d};if(g)Vs(b,g),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","ellipse");""!==a&&t.setAttribute("data-id",a),Ws(b,t),e.appendNode(t,h)}},Bs=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";const s=[(i[0]+o[0])/2,i[1]],l=[(i[0]+o[0])/2,o[1]],d=[i[0],(i[1]+o[1])/2],c=[o[0],(i[1]+o[1])/2];Hs(e,t,n,[l,s,d,c],a={},r="")},Gs=function(e,t,n,i){let o=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:d,fill:c,type:h,opacity:g}=Object.assign({color:"dodgerblue",handleRadius:"6",width:"2",lineWidth:void 0,fill:"transparent",type:"circle",opacity:1},o),u=d||l,v=Us(t,"handle","hg-".concat(n,"-index-").concat(a));let m;if("circle"===h)m={cx:"".concat(i[0]),cy:"".concat(i[1]),r:s,stroke:r,fill:c,"stroke-width":u,opacity:g};else{if("rect"!==h)throw new Error("Unsupported handle type: ".concat(h));{const e=1.5*parseFloat(s),t=i[0]-.5*e,n=i[1]-.5*e;m={x:"".concat(t),y:"".concat(n),width:"".concat(e),height:"".concat(e),stroke:r,fill:c,"stroke-width":u,rx:"".concat(.1*e),opacity:g}}}const p=e.getSvgNode(v);if(p)Vs(m,p),e.setNodeTouched(v);else{const t=document.createElementNS("http://www.w3.org/2000/svg",h);Ws(m,t),e.appendNode(t,v)}},qs=function(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};i.forEach(((i,a)=>{Gs(e,t,n,i,o,a)}))};function js(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:"";if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:s,width:l,lineWidth:d,lineDash:c,shadow:h}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0,shadow:void 0},a),g=d||l,u=Us(t,"line",n),v=e.getSvgNode(u),m=h?"filter:url(#shadow-".concat(e.svgLayerElement.id,");"):"",p={x1:"".concat(i[0]),y1:"".concat(i[1]),x2:"".concat(o[0]),y2:"".concat(o[1]),stroke:s,style:m,"stroke-width":g,"stroke-dasharray":c};if(v)Vs(p,v),e.setNodeTouched(u);else{const t=document.createElementNS("http://www.w3.org/2000/svg","line");""!==r&&t.setAttribute("data-id",r),Ws(p,t),e.appendNode(t,u)}}function zs(e,t,n,i,o){if(i.length<2)return;const{fillColor:a,fillOpacity:r,color:s,width:l,lineWidth:d,lineDash:c}=Object.assign({color:"dodgerblue",width:"2",fillColor:"none",fillOpacity:0,lineWidth:void 0,lineDash:void 0,connectLastToFirst:!1},o),h=d||l,g=Us(t,"polyline",n),u=e.getSvgNode(g);let v="";for(const e of i)v+="".concat(e[0],", ").concat(e[1]," ");if(o.connectLastToFirst){const e=i[0];v+="".concat(e[0],", ").concat(e[1])}const m={points:v,stroke:s,fill:a,"fill-opacity":r,"stroke-width":h,"stroke-dasharray":c};if(u)Vs(m,u),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","polyline");Ws(m,t),e.appendNode(t,g)}}function Ks(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 Ys(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 i=e.getBBox(),o={x:"".concat(i.x),y:"".concat(i.y),width:"".concat(i.width),height:"".concat(i.height),fill:t};return Vs(o,n),i}const Xs=function(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return function(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[""],o=arguments.length>4?arguments[4]:void 0,a=arguments.length>5?arguments[5]:void 0;const{padding:r,color:s,fontFamily:l,fontSize:d,background:c}=a;let h;const[g,u]=[o[0]+r,o[1]+r],v=Us(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],o=i[e]||"";t.textContent=o}if(i.length>n.length){for(let e=0;e<i.length-n.length;e++){const o=Ks(i[e+n.length]);t.appendChild(o)}m.appendChild(t),e.appendNode(m,v)}const o={fill:s,"font-size":d,"font-family":l},a={transform:"translate(".concat(g," ").concat(u,")")};Vs(o,t),Vs(a,m),h=Ys(m,c),e.setNodeTouched(v)}else{const t=document.createElementNS("http://www.w3.org/2000/svg","g");t.setAttribute("transform","translate(".concat(g," ").concat(u,")"));const n=function(e,t){const{color:n,fontFamily:i,fontSize:o}=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",i),a.setAttribute("font-size",o),a.setAttribute("style",s),a}(e,a);for(let e=0;e<i.length;e++){const t=Ks(i[e]);n.appendChild(t)}t.appendChild(n),e.appendNode(t,v),h=Ys(t,c)}return Object.assign({},h,{x:g,y:u,height:h.height+r,width:h.width+r})}(e,t,n,i,o,Object.assign({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"14px",color:"rgb(255, 255, 0)",background:"",padding:25,centerX:!1,centerY:!0},a))};function Js(e,t){let n=[0,0],i=Number.MAX_SAFE_INTEGER;return e.forEach((function(e){const o=function(e,t){const[n,i]=e,[o,a]=t;return Math.sqrt(Math.pow(n-o,2)+Math.pow(i-a,2))}(t,e);o<i&&(i=o,n=[...e])})),n}const Zs=function(e,t,n,i,o,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),d=Xs(e,t,n,i,o,l);return function(e,t,n,i,o,a){let r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{};const s=i.length>0?Js(i,o):o,l=Js(function(e){const{x:t,y:n,height:i,width:o}=e,a=o/2,r=i/2;return[[t+a,n],[t,n+r],[t+a,n+i],[t+o,n+r]]}(a),s),d=Object.assign({color:"rgb(255, 255, 0)",lineWidth:"1",lineDash:"2,3"},r);js(e,t,"link-".concat(n),s,l,d)}(e,t,n,a,o,d,l),d};function $s(e,t,n,i,o){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:d,lineDash:c}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a),h=d||l,g=Us(t,"rect",n),u=e.getSvgNode(g),v=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],m=Math.abs(i[0]-o[0]),p=Math.abs(i[1]-o[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":c};if(u)Vs(f,u),e.setNodeTouched(g);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");""!==r&&t.setAttribute("data-id",r),Ws(f,t),e.appendNode(t,g)}}function Qs(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(isNaN(i[0])||isNaN(i[1])||isNaN(o[0])||isNaN(o[1]))return;const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a);js(e,t,n,i,o,{color:r,width:s,lineWidth:l,lineDash:d});const c=Math.atan2(o[1]-i[1],o[0]-i[0]),h={start:[o[0]-10*Math.cos(c-Math.PI/7),o[1]-10*Math.sin(c-Math.PI/7)],end:o},g={start:[o[0]-10*Math.cos(c+Math.PI/7),o[1]-10*Math.sin(c+Math.PI/7)],end:o};js(e,t,"2",h.start,h.end,{color:r,width:s,lineWidth:l}),js(e,t,"3",g.start,g.end,{color:r,width:s,lineWidth:l})}function el(e,t,n,i,o){let a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const{color:r,width:s,lineWidth:l,lineDash:d}=Object.assign({color:"dodgerblue",width:"2",lineWidth:void 0,lineDash:void 0},a),c=l||s,h=Us(t,"rect",n),g=e.getSvgNode(h),u=[Math.min(i[0],o[0]),Math.min(i[1],o[1])],v=Math.abs(i[0]-o[0]),m=Math.abs(i[1]-o[1]),p={x:"".concat(u[0]),y:"".concat(u[1]),width:"".concat(v),height:"".concat(m),stroke:r,fill:"black","stroke-width":c,"stroke-dasharray":d};if(g)Vs(p,g),e.setNodeTouched(h);else{const t=document.createElementNS("http://www.w3.org/2000/svg","rect");Ws(p,t),e.appendNode(t,h)}}function tl(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;const i=(0,Q.getEnabledElement)(e);if(!i)throw new Error("getAnnotationNearPoint: enabledElement not found");return nl(i,t,n)}function nl(e,t,n){const{renderingEngineId:i,viewportId:o}=e,a=Mi(o,i);if(!a)return null;const{_toolInstances:r}=a;for(const i in r){const o=il(r[i],e,t,n);if(o)return o}return null}function il(e,t,n,i){var o;const{viewport:a}=t,r=$e(e.constructor.toolName,null==a?void 0:a.element),s=null==a||null===(o=a.getCurrentImageId)||void 0===o?void 0:o.call(a);if(null!=r&&r.length){const{element:o}=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(o,t,n,i,"")||e.getHandleNearImagePoint(o,t,n,i)))return t}}return null}const ol=function(e){const t=typeof e;return null!==e&&("object"===t||"function"===t)},al=function(e,t,n){let i,o,a,r,s,l,d=0,c=!1,h=!1,g=!0;const u=!t&&0!==t&&"function"==typeof window.requestAnimationFrame;if("function"!=typeof e)throw new TypeError("Expected a function");function v(t){const n=i,a=o;return i=o=void 0,d=t,r=e.apply(a,n),r}function m(e,t){return u?window.requestAnimationFrame(e):setTimeout(e,t)}function p(e){const n=e-l;return void 0===l||n>=t||n<0||h&&e-d>=a}function f(){const e=Date.now();if(p(e))return E(e);s=m(f,function(e){const n=e-d,i=t-(e-l);return h?Math.min(i,a-n):i}(e))}function E(e){return s=void 0,g&&i?v(e):(i=o=void 0,r)}function w(){const e=Date.now(),n=p(e);for(var a=arguments.length,g=new Array(a),u=0;u<a;u++)g[u]=arguments[u];if(i=g,o=this,l=e,n){if(void 0===s)return function(e){return d=e,s=m(f,t),c?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,ol(n)&&(c=Boolean(n.leading),h="maxWait"in n,a=h?Math.max(Number(n.maxWait)||0,t):a,g="trailing"in n?Boolean(n.trailing):g),w.cancel=function(){void 0!==s&&function(e){if(u)return window.cancelAnimationFrame(e);clearTimeout(e)}(s),d=0,i=l=o=s=void 0},w.flush=function(){return void 0===s?r:E(Date.now())},w.pending=function(){return void 0!==s},w},rl=function(e,t,n){let i=!0,o=!0;if("function"!=typeof e)throw new TypeError("Expected a function");return ol(n)&&(i="leading"in n?Boolean(n.leading):i,o="trailing"in n?Boolean(n.trailing):o),al(e,t,{leading:i,trailing:o,maxWait:t})},{calibratedPixelSpacingMetadataProvider:sl}=Q.utilities;function ll(e,t,n){"number"==typeof n&&(n={type:Q.Enums.CalibrationTypes.USER,scale:n}),sl.add(e,n),t.getStackViewports().forEach((t=>{t.getImageIds().includes(e)&&t.calibrateSpacing(e)}))}const{CalibrationTypes:dl}=Q.Enums,cl="px",hl=[1],gl=["3,3"],ul=["4,3"],vl={3:"cm",4:"seconds"},ml=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=t,o=i?"mm":cl;return n&&(n.type||n.sequenceOfUltrasoundRegions)?n.type===dl.UNCALIBRATED?cl:n.sequenceOfUltrasoundRegions?"US Region":"".concat(o," ").concat(n.type):o},pl="²",fl=(e,t)=>{const{calibration:n,hasPixelSpacing:i}=t,o=(i?"mm":cl)+pl;return n&&n.type?n.sequenceOfUltrasoundRegions?"US Region":"".concat(o," ").concat(n.type):o},El=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},wl=(e,t)=>{const[n,i]=t,{calibration:o,hasPixelSpacing:a}=e;let r=a?"mm":cl;const s=r+pl;let l=1,d="";if(!o||!o.type&&!o.sequenceOfUltrasoundRegions)return{units:r,areaUnits:s,scale:l};if(o.type===dl.UNCALIBRATED)return{units:cl,areaUnits:cl+pl,scale:l};if(o.sequenceOfUltrasoundRegions){var c;let e=o.sequenceOfUltrasoundRegions.filter((e=>n[0]>=e.regionLocationMinX0&&n[0]<=e.regionLocationMaxX1&&n[1]>=e.regionLocationMinY0&&n[1]<=e.regionLocationMaxY1&&i[0]>=e.regionLocationMinX0&&i[0]<=e.regionLocationMaxX1&&i[1]>=e.regionLocationMinY0&&i[1]<=e.regionLocationMaxY1));if(null===(c=e)||void 0===c||!c.length)return{units:r,areaUnits:s,scale:l};if(e=e.filter((e=>hl.includes(e.regionDataType)&&gl.includes("".concat(e.physicalUnitXDirection,",").concat(e.physicalUnitYDirection)))),!e.length)return{units:cl,areaUnits:cl+pl,scale:l};const t=e[0],a=Math.abs(t.physicalDeltaX),h=Math.abs(t.physicalDeltaY);if(!Q.utilities.isEqual(a,h,.001))return{units:cl,areaUnits:cl+pl,scale:l};l=1/(a*h*100),d="US Region",r="mm"}else o.scale&&(l=o.scale);return{units:r+(d?" ".concat(d):""),areaUnits:s+(d?" ".concat(d):""),scale:l}},Il=(e,t)=>{const[n]=t,{calibration:i}=e;let o=["raw"],a=[null],r="";if(!i||!i.type&&!i.sequenceOfUltrasoundRegions)return{units:o,values:a};if(i.sequenceOfUltrasoundRegions){const e=i.sequenceOfUltrasoundRegions.filter((e=>hl.includes(e.regionDataType)&&ul.includes("".concat(e.physicalUnitXDirection,",").concat(e.physicalUnitYDirection))));if(null==e||!e.length)return{units:o,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:o,values:a};const{referencePixelX0:s=0,referencePixelY0:l=0}=t,{physicalDeltaX:d,physicalDeltaY:c}=t,h=(n[1]-t.regionLocationMinY0-l)*c;r="US Region",a=[(n[0]-t.regionLocationMinX0-s)*d,h],o=[vl[t.physicalUnitXDirection],vl[t.physicalUnitYDirection]]}return{units:o,values:a,calibrationType:r}},_l=e=>{var t;return(null===(t=e.calibration)||void 0===t?void 0:t.aspect)||1};function Cl(e,t,n,i){let o,a,r,s,l,d,c;c=e.getScalarData?e.getScalarData():e.getPointData().getScalars().getData();const h=e.getDimensions();i?[[o,a],[r,s],[l,d]]=i:(o=0,a=h[0],r=0,s=h[1],l=0,d=h[2]);const g=ys.vec3.fromValues(o,r,l),u=e.getDirection(),v=u.slice(0,3),m=u.slice(3,6),p=u.slice(6,9),f=e.getSpacing(),[E,w,I]=f,_=e.indexToWorld(g),C=ys.vec3.fromValues(v[0]*E,v[1]*E,v[2]*E),b=ys.vec3.fromValues(m[0]*w,m[1]*w,m[2]*w),T=ys.vec3.fromValues(p[0]*I,p[1]*I,p[2]*I),D=c.length/h[2]/h[1]/h[0],S=h[0]*D,y=h[1]*S,M=[],O=ys.vec3.clone(_);for(let e=l;e<=d;e++){const i=ys.vec3.clone(O);for(let i=r;i<=s;i++){const r=ys.vec3.clone(O);for(let r=o;r<=a;r++){const o=[r,i,e];if(t(O,o)){const t=e*y+i*S+r*D;let a;a=D>2?[c[t],c[t+1],c[t+2]]:c[t],M.push({value:a,index:t,pointIJK:o,pointLPS:O}),n&&n({value:a,index:t,pointIJK:o,pointLPS:O})}ys.vec3.add(O,O,C)}ys.vec3.copy(O,r),ys.vec3.add(O,O,b)}ys.vec3.copy(O,i),ys.vec3.add(O,O,T)}return M}const{EPSILON:bl}=Q.CONSTANTS;function Tl(e,t){var n;let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=1/0,a=i?-1/0:0,r=1/0,s=i?-1/0:0,l=1/0,d=i?-1/0:0;const c=3===(null===(n=e[0])||void 0===n?void 0:n.length);return e.forEach((e=>{var t,n;o=Math.min(e[0],o),a=Math.max(e[0],a),r=Math.min(e[1],r),s=Math.max(e[1],s),c&&(l=Math.min(null!==(t=e[2])&&void 0!==t?t:l,l),d=Math.max(null!==(n=e[2])&&void 0!==n?n:d,d))})),t?(o=Math.max(i?t[0]+bl:0,o),a=Math.min(i?t[0]-bl:t[0]-1,a),r=Math.max(i?t[1]+bl:0,r),s=Math.min(i?t[1]-bl:t[1]-1,s),c&&3===t.length&&(l=Math.max(i?t[2]+bl:0,l),d=Math.min(i?t[2]-bl:t[2]-1,d))):i||(o=Math.max(0,o),a=Math.min(1/0,a),r=Math.max(0,r),s=Math.min(1/0,s),c&&(l=Math.max(0,l),d=Math.min(1/0,d))),c?[[o,a],[r,s],[l,d]]:[[o,a],[r,s],null]}function Dl(e,t){return Tl(e,t,!1)}function Sl(e,t){return Tl(e,t,!0)}const{transformWorldToIndex:yl}=Q.utilities;function Ml(e,t,n){const[i,o]=e,a=ys.vec3.fromValues((i[0]+o[0])/2,(i[1]+o[1])/2,(i[2]+o[2])/2),r=ys.vec3.distance(i,o)/2;if(!n)throw new Error("viewport is required in order to calculate the sphere bounds");const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=function(e,t,n,i,o){const[a,r]=n,s=e.getDimensions(),l=t.getCamera(),d=ys.vec3.fromValues(l.viewUp[0],l.viewUp[1],l.viewUp[2]),c=ys.vec3.fromValues(l.viewPlaneNormal[0],l.viewPlaneNormal[1],l.viewPlaneNormal[2]),h=ys.vec3.create();ys.vec3.cross(h,d,c);const g=ys.vec3.create(),u=ys.vec3.create();ys.vec3.scaleAndAdd(g,r,c,o),ys.vec3.scaleAndAdd(u,a,c,-o),ys.vec3.scaleAndAdd(g,g,h,-o),ys.vec3.scaleAndAdd(u,u,h,o);return{boundsIJK:Dl([yl(e,g),yl(e,u),...n.map((t=>yl(e,t)))],s),topLeftWorld:g,bottomRightWorld:u}}(t,n,e,0,r);return{boundsIJK:s,centerWorld:a,radiusWorld:r,topLeftWorld:l,bottomRightWorld:d}}class Ol{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 i=this.framesToString(t);return e.replace(this.frameRangeExtractor,"".concat(n[1]).concat(i))}static setFrameRange(e,t,n){const{referencedImageId:i}=e.metadata;e.metadata.referencedImageId=this.framesToImageId(i,t);const o={...n,annotation:e};(0,Q.triggerEvent)(Q.eventTarget,te.ANNOTATION_MODIFIED,o)}static getFrameRange(e){return this.imageIdToFrames(e.metadata.referencedImageId)}}function xl(e,t,n){let i=-1;if(t.forEach(((t,n)=>{i>=0||t.a==e.b&&(i=n)})),i>=0){const e=t[i];return t.splice(i,1),n.push(e.b),n[0]==e.b?{remainingLines:t,contourPoints:n,type:"CLOSED_PLANAR"}:xl(e,t,n)}return{remainingLines:t,contourPoints:n,type:"OPEN_PLANAR"}}function Pl(e){if(0==e.length)return[];const t=[],n=e.shift();t.push(n.a),t.push(n.b);const i=xl(n,e,t);if(0==i.remainingLines.length)return[{type:i.type,contourPoints:i.contourPoints}];{const e=Pl(i.remainingLines);return e.push({type:i.type,contourPoints:i.contourPoints}),e}}function Nl(e){return Pl(e)}ie(Ol,"frameRangeExtractor",/(\/frames\/|[&?]frameNumber=)([^/&?]*)/i);const Rl={findContours:Pl,findContoursFromReducedSet:Nl};function Al(e,t){let n=-1;for(let a=0;a<e.length;a++)i=t,o=e[a],i[0]==o[0]&&i[1]==o[1]&&i[2]==o[2]&&(n=a);var i,o;return n}function kl(e,t,n){for(let i=0;i<e.length;i++){const o=e[i];o.a==t?o.a=n:o.b==t&&(o.b=n)}}function Ll(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=e.getPoints(),i=e.getLines(),o=[];for(let e=0;e<n.getNumberOfPoints();e++){const t=n.getPoint(e).slice();o.push(t)}const a=[];for(let e=0;e<i.getNumberOfCells();e++){const t=i.getCell(3*e).slice(),n={a:t[0],b:t[1]};a.push(n)}if(t)return{points:o,lines:a};const r=[];for(let e=0;e<o.length;e++){const t=o[e];let n=Al(r,t);n>=0||(n=r.length,r.push(t)),kl(a,e,n)}const s=[];return a.forEach((e=>{e.a!=e.b&&s.push(e)})),{points:r,lines:s}}const Ul={removeDuplicatePoints:Ll},Vl={processContourHoles:function(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=e.filter((e=>"CLOSED_PLANAR"!==e.type)),o=e.filter((e=>"CLOSED_PLANAR"===e.type)),a=[];let r=[];return o.forEach(((e,n)=>{const i=[];o.forEach(((o,a)=>{n!=a&&function(e,t,n){const i=[];e.contourPoints.forEach((e=>{i.push([n[e][0],n[e][1]])}));let o=0;return t.contourPoints.forEach((e=>{((e,t)=>{const n=e[0],i=e[1];let o=!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],d=t[a][1];s>i!=d>i&&n<(l-r)*(i-s)/(d-s)+r&&(o=!o)}return o})([n[e][0],n[e][1]],i)||o++})),0===o}(e,o,t)&&i.push(a)})),i.length>0?a.push({contour:e,holes:i}):r.push(n)})),n&&(a.forEach((e=>{e.contour.type="CLOSEDPLANAR_XOR",i.push(e.contour),e.holes.forEach((e=>{o[e].type="CLOSEDPLANAR_XOR",i.push(o[e]),r=r.filter((t=>t!==e))}))})),r.forEach((e=>{i.push(o[e])}))),i}};var Wl=C(543),Fl=C.n(Wl);const{Labelmap:Hl}=at;function Bl(e){let{segmentations:t}=e;const{representationData:n,segments:i=[0,1]}=t,{volumeId:o}=n[Hl],a=Q.cache.getVolume(o);if(!a)return void console.warn("No volume found for ".concat(o));const r=a.dimensions[2],s=Q.cache.getVolume(a.referencedVolumeId);if(!s)return void console.warn("No volume found for ".concat(a.referencedVolumeId));const l=a.imageData.getPointData().getScalars().getData(),d=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*d;l[n]=0,l[n+a.dimensions[0]-1]=0}const c=[],{FrameOfReferenceUID:h}=s.metadata,g=i.length;for(let e=0;e<g;e++){const t=i[e];if(!t)continue;const n=[],o=Di().newInstance({name:"Scalars",numberOfComponents:1,size:d*r,dataType:"Uint8Array"}),{containedSegmentIndices:g}=t;for(let t=0;t<r;t++){if(Gl(t,l,d,e))continue;const i=t*d;try{var u;for(let t=0;t<d;t++){const n=l[t+i];n===e||null!=g&&g.has(n)?o.setValue(t+i,1):o.setValue(t,0)}const r=Fl().newInstance({slice:t}),c=yi().newInstance();c.shallowCopy(a.imageData),c.getPointData().setScalars(o),r.setInputData(c);const v=[1];r.setContourValues(v),r.setMergePoints(!1);const m=Ll(r.getOutputData());if(null!==(u=m.points)&&void 0!==u&&u.length){const e=Nl(m.lines);n.push({referencedImageId:s.imageIds[t],contours:e,polyData:m,FrameNumber:t+1,sliceIndex:t,FrameOfReferenceUID:h})}}catch(e){console.warn(t),console.warn(e)}}const v={referencedImageId:s.imageIds[0],FrameOfReferenceUID:h},m={label:t.label,color:t.color,metadata:v,sliceContours:n};c.push(m)}return c}function Gl(e,t,n,i){const o=e*n,a=o+n;for(let e=o;e<a;e++)if(t[e]===i)return!1;return!0}class ql{constructor(){}static getContourSequence(e,t){const{data:n}=e,{projectionPoints:i,projectionPointsImageIds:o}=n.cachedStats;return i.map(((e,n)=>{const i=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}}(o[n],t);return{NumberOfContourPoints:i.length/3,ContourImageSequence:a,ContourGeometricType:"CLOSED_PLANAR",ContourData:i}}))}}ie(ql,"toolName",void 0),ql.toolName="RectangleROIStartEndThreshold";const jl=ql;class zl{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:i}=e.metadata,o=zl.TOOL_NAMES[i];if(!o)throw new Error("Unknown tool type: ".concat(i,", cannot convert to RTSSReport"));const a=o.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){zl.TOOL_NAMES[e.toolName]=e}}ie(zl,"TOOL_NAMES",{}),zl.register(jl);const Kl=zl;var Yl=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}(Yl||{});const Xl=Yl,Jl={[Xl.Initialize]:e=>{const{strategySpecificConfiguration:t}=e;if(!t)return;const{centerSegmentIndex:n}=t;n&&(e.segmentIndex=n.segmentIndex)},[Xl.OnInteractionStart]:e=>{const{segmentIndex:t,previewSegmentIndex:n,segmentationVoxelManager:i,centerIJK:o,strategySpecificConfiguration:a,imageVoxelManager:r,segmentationImageData:s,preview:l}=e;if(null==a||!a.useCenterSegmentIndex)return;delete a.centerSegmentIndex;let d=!1,c=!1;if(Cl(s,r.isInObject,(e=>{let{value:i}=e;d||(d=i===t),c||(c=i===n)}),i.boundsIJK),!d&&!c)return;let h=i.getAtIJKPoint(o);if(h===n){if(!l)return;h=l.segmentIndex}else c&&(h=null);e.segmentIndex=h,a.centerSegmentIndex={segmentIndex:h}}},Zl={[Xl.Initialize]:e=>{const{centerIJK:t,strategySpecificConfiguration:n,segmentationVoxelManager:i,imageVoxelManager:o,segmentIndex:a}=e,{THRESHOLD:r}=n;if(null==r||!r.isDynamic||!t||!a)return;const{boundsIJK:s}=i,{threshold:l,dynamicRadius:d=0}=r,c=l?0:d,h=s.map(((e,n)=>{const[i,o]=e;return[Math.max(i,t[n]-c),Math.min(o,t[n]+c)]})),g=l||[1/0,-1/0];o.forEach((e=>{let{value:t}=e;g[0]=Math.min(t,g[0]),g[1]=Math.max(t,g[1])}),{boundsIJK:h}),e.strategySpecificConfiguration.THRESHOLD.threshold=g},[Xl.OnInteractionStart]:e=>{var t;const{strategySpecificConfiguration:n,preview:i}=e;(null!=n&&null!==(t=n.THRESHOLD)&&void 0!==t&&t.isDynamic||i)&&(n.THRESHOLD.threshold=null)}},$l={[Xl.Initialize]:e=>{e.segmentIndex=0}};function Ql(e,t){return e===t}function ed(e,t,n){return(new Array(n+1).join(t)+e).slice(-n)}const td=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=n.onFlood,o=n.onBoundary,a=n.equals||Ql,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 i=0;i<Math.pow(3,e);i+=1){const o=ed(i.toString(3),"0",e);t.push(n(o))}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)})),d=[],c=[],h={},g={};for(d.push({currentArgs:t});d.length>0;)u(d.pop());return{flooded:c,boundaries:function(){const e=[];for(const t in g)void 0!==g[t]&&e.unshift(g[t]);return e}()};function u(e){const t=e.currentArgs,n=e.previousArgs;!0!==h[t]&&(h[t]=!0,function(e){const t=m(v,[e]);return m(a,[t,s])}(t)?(function(e){c.push(e),i&&i(...e)}(t),function(e){for(let t=0;t<l.length;t+=1){const n=l[t],i=e.slice(0);for(let t=0;t<e.length;t+=1)i[t]+=n[t];d.push({currentArgs:i,previousArgs:e})}}(t)):function(e){g[e]=e,o&&o(...e)}(n))}function v(t){return e(...t)}function m(e,t){try{return e(...t)}catch(e){return}}};function nd(e,t){if(!e)throw new Error("addColorLUT: colorLUT is required");Q.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])),Bt(e,t)}function id(e,t,n){const i=kt(e,t);if(!i)throw new Error("setColorLUT: could not find segmentation representation with UID ".concat(t));if(!Ft(n))throw new Error("setColorLUT: could not find colorLUT with index ".concat(n));i.colorLUTIndex=n,mt(e,t)}function od(e,t,n){const i=kt(e,t);if(!i)throw new Error("segmentation representation with UID ".concat(t," does not exist for tool group ").concat(e));const{colorLUTIndex:o}=i,a=Ft(o);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 ad(e,t,n,i){const o=od(e,t,n);for(let e=0;e<i.length;e++)o[e]=i[e];mt(e,t)}const rd={determineSegmentIndex:Jl,dynamicThreshold:Zl,erase:$l,islandRemoval:{[Xl.OnInteractionEnd]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n,strategySpecificConfiguration:i,previewSegmentIndex:o,segmentIndex:a}=e;if(!i.THRESHOLD||null===a)return;const r=t.getPoints();if(null==r||!r.length)return;if(void 0===o)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,d=(e,t,i)=>{if(e<s[0][0]||e>s[0][1]||t<s[1][0]||t>s[1][1]||i<s[2][0]||i>s[2][1])return-1;const r=n.toIndex([e,t,i]);if(l.has(r))return-2;const d=n.getAtIndex(r),c=d===o||d===a?1:0;return c||n.addPoint(r),c};let c=0;const h=(e,i,a)=>{const r=n.toIndex([e,i,a]);l.has(r)||(t.setAtIJK(e,i,a,o),l.add(r),c++)};r.forEach(((e,t)=>{1===d(...e)&&td(d,e,{onFlood:h,diagonals:!0})}));let g=0,u=0;t.forEach((e=>{let{index:i,pointIJK:r,value:s}=e;const d=n.getAtIndex(i);if(l.has(i)){u++;const e=s===a?a:o;t.setAtIJKPoint(r,e)}else if(d===o){g++;const e=null!=s?s:0;t.setAtIJKPoint(r,e)}}),{}),c-u!=0&&console.warn("There were flooded=",c,"cleared=",g,"preview count=",u,"not handled",c-u);const v=new Set(n.points||[]);l.clear();for(const e of v.keys()){if(l.has(e))continue;let n=!0;const i=new Set,a=(e,o,a)=>{const r=t.toIndex([e,o,a]);l.add(r),(s[0][0]===s[0][1]||e!==s[0][0]&&e!==s[0][1])&&(s[1][0]===s[1][1]||o!==s[1][0]&&o!==s[1][1])&&(s[2][0]===s[2][1]||a!==s[2][0]&&a!==s[2][1])||(n=!1),n&&i.add(r)},r=t.toIJK(e);if(0===d(...r)&&(td(d,r,{onFlood:a,diagonals:!1}),n))for(const e of i)t.setAtIndex(e,o)}ft(e.segmentationId,t.getArrayOfSlices())}},preview:{[Xl.Preview]:function(e){var t;const{previewColors:n,strategySpecificConfiguration:i,enabledElement:o}=e;if(!n||!i)return;e.preview&&delete e.preview,delete i.centerSegmentIndex,null===(t=this.onInteractionStart)||void 0===t||t.call(this,o,e);const a=this.fill(o,e);var r;return a&&(a.isPreviewFromHover=!0,e.preview=a,null===(r=this.onInteractionEnd)||void 0===r||r.call(this,o,e)),a},[Xl.Initialize]:e=>{const{toolGroupId:t,segmentIndex:n,segmentationRepresentationUID:i,previewSegmentIndex:o,previewColors:a,preview:r}=e;if(void 0===a)return;if(r&&(r.previewVoxelManager.sourceVoxelManager=e.segmentationVoxelManager,e.previewVoxelManager=r.previewVoxelManager),null===n||!o)return;const s=null==a?void 0:a[n],l=od(t,i,n);(s||l)&&ad(t,i,o,s||l.map((e=>.9*e)))},[Xl.AcceptPreview]:e=>{var t;const{segmentationVoxelManager:n,previewVoxelManager:i,previewSegmentIndex:o,preview:a}=e;if(void 0===o)return;const r=null!==(t=null==a?void 0:a.segmentIndex)&&void 0!==t?t:e.segmentIndex,s=i;s&&0!==s.modifiedSlices.size&&(s.forEach((e=>{let{index:t}=e;n.getAtIndex(t)===o&&n.setAtIndex(t,r)}),{}),ft(e.segmentationId,s.getArrayOfSlices()),s.clear())},[Xl.RejectPreview]:e=>{const{previewVoxelManager:t,segmentationVoxelManager:n}=e;0!==t.modifiedSlices.size&&(t.forEach((e=>{let{index:t,value:i}=e;n.setAtIndex(t,i)})),ft(e.segmentationId,t.getArrayOfSlices()),t.clear())}},regionFill:{[Xl.Fill]:e=>{var t;const{segmentsLocked:n,segmentationImageData:i,segmentationVoxelManager:o,previewVoxelManager:a,imageVoxelManager:r,brushStrategy:s,centerIJK:l}=e,d=null===(t=s.createIsInThreshold)||void 0===t?void 0:t.call(s,e),{setValue:c}=s,h=d?t=>{const{value:i,index:o}=t;!n.includes(i)&&d(o)&&c(e,t)}:t=>c(e,t);Cl(i,r.isInObject,h,o.boundsIJK),a.addPoint(l)}},setValue:{[Xl.INTERNAL_setValue]:(e,t)=>{let{value:n,index:i}=t;const{segmentsLocked:o,segmentIndex:a,previewVoxelManager:r,previewSegmentIndex:s,segmentationVoxelManager:l}=e,d=l.getAtIndex(i);if(null===a){const e=r.getAtIndex(i);return void(void 0!==e&&r.setAtIndex(i,e))}if(d===a||o.includes(n))return;if(d===s){if(void 0!==r.getAtIndex(i))return;l.setAtIndex(i,a)}const c=null!=s?s:a;r.setAtIndex(i,c)}},threshold:{[Xl.CreateIsInThreshold]:e=>{const{imageVoxelManager:t,strategySpecificConfiguration:n,segmentIndex:i}=e;if(n&&i)return e=>{const{THRESHOLD:i,THRESHOLD_INSIDE_CIRCLE:o}=n,a=t.getAtIndex(e),{threshold:r}=i||o||{};return null==r||!r.length||r[0]<=a&&a<=r[1]}}}},{VoxelManager:sd}=Q.utilities;function ld(e){let t,n,i,o,{operationData:a,viewport:r}=e;if(Oi(a)){const{volumeId:e,referencedVolumeId:r}=a,s=Q.cache.getVolume(e),l=Q.cache.getVolume(r);if(!s||!l)return;({imageData:t}=s),n=s.getScalarData(),i=l.getScalarData(),o=l.dimensions}else{const{imageIdReferenceMap:e,segmentationRepresentationUID:s}=a;if(!e)return;const l=r.getCurrentImageId();if(!l)return;t=r.getActor(s).actor.getMapper().getInputData();const d=e.get(l);n=Q.cache.getImage(d).getPixelData();const c=Q.cache.getImage(l);i=c.getPixelData(),o=[c.columns,c.rows,1]}return{segmentationImageData:t,segmentationScalarData:n,segmentationVoxelManager:sd.createVolumeVoxelManager(o,n),imageScalarData:i,imageVoxelManager:sd.createVolumeVoxelManager(o,i)}}const{VoxelManager:dd}=Q.utilities;class cd{constructor(e){ie(this,"compositions",void 0),ie(this,"strategyFunction",void 0),ie(this,"configurationName",void 0),ie(this,"_initialize",[]),ie(this,"_fill",[]),ie(this,"_acceptPreview",void 0),ie(this,"_onInteractionStart",[]),ie(this,"fill",((e,t)=>{const n=this.initialize(e,t),{strategySpecificConfiguration:i={},centerIJK:o}=n;if(Q.utilities.isEqual(o,i.centerIJK))return t.preview;i.centerIJK=o,this._fill.forEach((e=>e(n)));const{segmentationVoxelManager:a,previewVoxelManager:r,previewSegmentIndex:s}=n;return ft(n.segmentationId,a.getArrayOfSlices()),s&&r.modifiedSlices.size?n.preview||n:null})),ie(this,"onInteractionStart",((e,t)=>{const{preview:n}=t;if(null!=n&&n.isPreviewFromHover)return void(n.isPreviewFromHover=!1);const i=this.initialize(e,t);this._onInteractionStart.forEach((e=>e.call(this,i)))})),ie(this,"onInteractionEnd",void 0),ie(this,"rejectPreview",void 0),ie(this,"acceptPreview",void 0),ie(this,"preview",void 0),ie(this,"setValue",void 0),ie(this,"createIsInThreshold",void 0),this.configurationName=e;for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this.compositions=n,n.forEach((e=>{const t="function"==typeof e?e():e;if(t)for(const e in t){if(!cd.childFunctions[e])throw new Error("Didn't find ".concat(e," as a brush strategy"));cd.childFunctions[e](this,t[e])}})),this.strategyFunction=(e,t)=>this.fill(e,t);for(const e of Object.keys(cd.childFunctions))this.strategyFunction[e]=this[e]}initialize(e,t){var n;const{viewport:i}=e,o=ld({operationData:t,viewport:i});if(!o)return console.warn("No data found for BrushStrategy"),t.preview;if(Oi(t)){const{referencedVolumeId:e,volumeId:n}=t,i=Q.cache.getVolume(e),o=Q.cache.getVolume(n);if(!Q.utilities.isEqual(o.dimensions,i.dimensions)||!Q.utilities.isEqual(o.direction,i.direction))throw new Error("Only source data the same dimensions/size/orientation as the segmentation currently supported.")}const{imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s}=o,l=(null===(n=t.preview)||void 0===n?void 0:n.previewVoxelManager)||dd.createHistoryVoxelManager(r),d={previewSegmentIndex:t.previewColors?255:void 0,...t,enabledElement:e,imageVoxelManager:a,segmentationVoxelManager:r,segmentationImageData:s,previewVoxelManager:l,viewport:i,centerWorld:null,brushStrategy:this};return this._initialize.forEach((e=>e(d))),d}}function hd(e,t){const n="_".concat(e);return(i,o)=>{i[n]||(i[n]=[]),i[n].push(o),i[e]||(i[e]=t?(e,o)=>{const a=i[t](e,o);i[n].forEach((e=>e.call(i,a)))}:e=>{i[n].forEach((t=>t.call(i,e)))})}}function gd(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(n,i)=>{if(n[e])throw new Error("The singleton method ".concat(e," already exists"));n[e]=t?i:(e,t)=>(t.enabledElement=e,i.call(n,t))}}function ud(e){const[t,n,i,o]=e;return[[i[0],n[1]],[o[0],t[1]]]}function vd(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return n.precalculated||md(e,n),n.precalculated(t)}ie(cd,"COMPOSITIONS",rd),ie(cd,"childFunctions",{[Xl.OnInteractionStart]:hd(Xl.OnInteractionStart,Xl.Initialize),[Xl.OnInteractionEnd]:hd(Xl.OnInteractionEnd,Xl.Initialize),[Xl.Fill]:hd(Xl.Fill),[Xl.Initialize]:hd(Xl.Initialize),[Xl.CreateIsInThreshold]:gd(Xl.CreateIsInThreshold),[Xl.AcceptPreview]:hd(Xl.AcceptPreview,Xl.Initialize),[Xl.RejectPreview]:hd(Xl.RejectPreview,Xl.Initialize),[Xl.INTERNAL_setValue]:gd(Xl.INTERNAL_setValue),[Xl.Preview]:gd(Xl.Preview,!1),compositions:null});const md=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xRadius:n,yRadius:i,zRadius:o}=e;void 0!==t.invXRadiusSq&&void 0!==t.invYRadiusSq&&void 0!==t.invZRadiusSq||(t.invXRadiusSq=0!==n?1/n**2:0,t.invYRadiusSq=0!==i?1/i**2:0,t.invZRadiusSq=0!==o?1/o**2:0);const{invXRadiusSq:a,invYRadiusSq:r,invZRadiusSq:s}=t,{center:l}=e,[d,c,h]=l;return t.precalculated=e=>{const t=e[0]-d;let n=t*t*a;if(n>1)return!1;const i=e[1]-c;if(n+=i*i*r,n>1)return!1;const o=e[2]-h;return n+=o*o*s,n<=1},t},{transformWorldToIndex:pd,isEqual:fd}=Q.utilities,Ed={[Xl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=ys.vec3.fromValues(0,0,0);t.forEach((e=>{ys.vec3.add(r,r,e)})),ys.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=pd(o,r);const s=t.map((e=>i.worldToCanvas(e))),[l,d]=ud(s),c=i.canvasToWorld(l),h=i.canvasToWorld(d),g=Dl(t.map((e=>pd(o,e))),o.getDimensions());a.boundsIJK=g,n.isInObject=wd({topLeftWorld:c,bottomRightWorld:h,center:r})}};function wd(e){const{topLeftWorld:t,bottomRightWorld:n,center:i}=e,o=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(o,a,r);if(fd(o,s)&&fd(a,s)&&fd(r,s)){const e={center:i,radius:s,radius2:s*s};return t=>function(e,t){const{center:n,radius:i}=e,o=e.radius2||i*i;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])<=o}(e,t)}const l={center:i,xRadius:o,yRadius:a,zRadius:r},{precalculated:d}=md(l,{});return d}const Id=new cd("Circle",rd.regionFill,rd.setValue,Ed,rd.determineSegmentIndex,rd.preview),_d=new cd("CircleThreshold",rd.regionFill,rd.setValue,Ed,rd.determineSegmentIndex,rd.dynamicThreshold,rd.threshold,rd.preview,rd.islandRemoval),Cd=Id.strategyFunction,bd=_d.strategyFunction,{transformWorldToIndex:Td}=Q.utilities,Dd={[Xl.Initialize]:e=>{const{points:t,imageVoxelManager:n,viewport:i,segmentationImageData:o,segmentationVoxelManager:a}=e;if(!t)return;const r=ys.vec3.fromValues(0,0,0);t.forEach((e=>{ys.vec3.add(r,r,e)})),ys.vec3.scale(r,r,1/t.length),e.centerWorld=r,e.centerIJK=Td(o,r);const{boundsIJK:s,topLeftWorld:l,bottomRightWorld:d}=Ml(t.slice(0,2),o,i);a.boundsIJK=s,n.isInObject=wd({topLeftWorld:l,bottomRightWorld:d,center:r})}},Sd=new cd("Sphere",rd.regionFill,rd.setValue,Dd,rd.determineSegmentIndex,rd.preview),yd=Sd.strategyFunction,Md=new cd("SphereThreshold",...Sd.compositions,rd.dynamicThreshold,rd.threshold,rd.islandRemoval).strategyFunction,Od=new cd("EraseSphere",rd.erase,...Sd.compositions).strategyFunction,xd=new cd("EraseCircle",rd.erase,...Id.compositions).strategyFunction;function Pd(e){const t=wt().getSegmentationRepresentations(e);if(t)return t.find((e=>e.active))}function Nd(e){const t=Pd(e);if(t)return It(t.segmentationId)}function Rd(e,t){wt().setActiveSegmentationRepresentation(e,t),mt(e,t)}function Ad(e,t){const n=It(e);if(!n)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:i}=n;return i.has(t)}function kd(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=It(e);if(!i)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:o}=i;n?o.add(t):o.delete(t),pt(e)}function Ld(e){const t=It(e);if(!t)throw new Error("No segmentation state found for ".concat(e));const{segmentsLocked:n}=t;return Array.from(n)}function Ud(e){const t=xi(e);if(void 0===t)return;Bd(e).forEach((e=>{e.invalidateBrushCursor()}));const n=t.getViewportsInfo(),i=Object.keys(n).map((e=>n[e]));if(!i.length)return;const{renderingEngineId:o}=i[0],a=t.getViewportIds(),r=(0,Q.getRenderingEngine)(o);or(r,a)}function Vd(e,t){const n=It(e);(null==n?void 0:n.activeSegmentIndex)!==t&&(n.activeSegmentIndex=t,pt(e)),Dt(e).forEach((e=>{Ud(e)}))}function Wd(e){const t=It(e);if(t)return t.activeSegmentIndex}class Fd extends zi{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:Cd,ERASE_INSIDE_CIRCLE:xd,FILL_INSIDE_SPHERE:yd,ERASE_INSIDE_SPHERE:Od,THRESHOLD_INSIDE_CIRCLE:bd,THRESHOLD_INSIDE_SPHERE:Md},strategySpecificConfiguration:{THRESHOLD:{threshold:[-150,-70]}},defaultStrategy:"FILL_INSIDE_CIRCLE",activeStrategy:"FILL_INSIDE_CIRCLE",brushSize:25,preview:{enabled:!1,previewColors:{},previewTimeMs:250,previewMoveDistance:8,dragMoveDistance:4,dragTimeMs:500},centerRadius:2,actions:{[Xl.AcceptPreview]:{method:Xl.AcceptPreview,bindings:[{key:"Enter"}]},[Xl.RejectPreview]:{method:Xl.RejectPreview,bindings:[{key:"Escape"}]}}}}),ie(this,"_editData",void 0),ie(this,"_hoverData",void 0),ie(this,"_previewData",{preview:null,element:null,timerStart:0,timer:null,startPoint:[NaN,NaN],isDrag:!1}),ie(this,"onSetToolPassive",(e=>{this.disableCursor()})),ie(this,"onSetToolEnabled",(()=>{this.disableCursor()})),ie(this,"onSetToolDisabled",(e=>{this.disableCursor()})),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i;this._editData=this.createEditData(n),this._activateDraw(n),ds(n),e.preventDefault(),this._previewData.isDrag=!1,this._previewData.timerStart=Date.now();const a=this._hoverData||this.createHoverData(n);return or(o,a.viewportIdsToRender),this.applyActiveStrategyCallback(i,this.getOperationData(n),Xl.OnInteractionStart),!0})),ie(this,"mouseMoveCallback",(e=>{if(this.mode===je.Active){if(this.updateCursor(e),!this.configuration.preview.enabled)return;const{previewTimeMs:t,previewMoveDistance:n,dragMoveDistance:i}=this.configuration.preview,{currentPoints:o,element:a}=e.detail,{canvas:r}=o,{preview:s,startPoint:l,timer:d,timerStart:c,isDrag:h}=this._previewData,g=ys.vec2.distance(r,l),u=Date.now()-c;if((g>n||u>t&&g>i)&&(d&&(window.clearTimeout(d),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})}}})),ie(this,"previewCallback",(()=>{this._previewData.preview||(this._previewData.timer=null,this._previewData.preview=this.applyActiveStrategyCallback((0,Q.getEnabledElement)(this._previewData.element),this.getOperationData(this._previewData.element),Xl.Preview))})),ie(this,"_dragCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,Q.getEnabledElement)(n),{renderingEngine:a}=o;this.updateCursor(e);const{viewportIdsToRender:r}=this._hoverData;or(a,r);const s=ys.vec2.distance(i.canvas,this._previewData.startPoint),{dragTimeMs:l,dragMoveDistance:d}=this.configuration.preview;!this._previewData.isDrag&&this._previewData.preview&&Date.now()-this._previewData.timerStart<l&&s<d||(this._previewData.preview=this.applyActiveStrategy(o,this.getOperationData()),this._previewData.element=n,this._previewData.timerStart=Date.now()+l,this._previewData.isDrag=!0,this._previewData.startPoint=i.canvas)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),o=this.getOperationData(n);this._previewData.preview||this._previewData.isDrag||this.applyActiveStrategy(i,o),this._deactivateDraw(n),ls(n),this.updateCursor(e),this._editData=null,this.applyActiveStrategyCallback(i,o,Xl.OnInteractionEnd),this._previewData.isDrag||this.acceptPreview(n)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback)}))}disableCursor(){this._hoverData=void 0,this.rejectPreview()}createEditData(e){const t=(0,Q.getEnabledElement)(e),{viewport:n}=t,i=Pd(this.toolGroupId);if(!i)throw new Error("No active segmentation detected, create a segmentation representation before using the brush tool");const{segmentationId:o,type:a,segmentationRepresentationUID:r}=i;if(a===at.Contour)throw new Error("Not implemented yet");const s=Ld(o),{representationData:l}=It(o),d=l[at.Labelmap];if(Oi(d)){const{volumeId:e}=l[a];return{volumeId:e,referencedVolumeId:n.getActors()[0].uid,segmentsLocked:s,segmentationRepresentationUID:r}}{const{imageIdReferenceMap:e}=d,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,Q.getEnabledElement)(e),{viewport:i}=n,o=i.getCamera(),{viewPlaneNormal:a,viewUp:r}=o,s=[i.id],{segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h}=this.getActiveSegmentationData()||{};return{brushCursor:{metadata:{viewPlaneNormal:[...a],viewUp:[...r],FrameOfReferenceUID:i.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:h},data:{}},centerCanvas:t,segmentIndex:l,segmentationId:d,segmentationRepresentationUID:c,segmentColor:h,viewportIdsToRender:s}}getActiveSegmentationData(){const e=this.toolGroupId,t=Pd(e);if(!t)return void console.warn("No active segmentation detected, create one before using the brush tool");const{segmentationRepresentationUID:n,segmentationId:i}=t,o=Wd(i);return{segmentIndex:o,segmentationId:i,segmentationRepresentationUID:n,segmentColor:od(e,n,o)}}updateCursor(e){const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas;this._hoverData=this.createHoverData(n,o),this._calculateCursor(n,o),this._hoverData&&or((0,Q.getEnabledElement)(n).renderingEngine,this._hoverData.viewportIdsToRender)}getOperationData(e){var t,n;const i=this._editData||this.createEditData(e),{segmentIndex:o,segmentationId:a,segmentationRepresentationUID:r,brushCursor:s}=this._hoverData||this.createHoverData(e),{data:l,metadata:d={}}=s||{},{viewPlaneNormal:c,viewUp:h}=d;return{...i,points:null==l||null===(t=l.handles)||void 0===t?void 0:t.points,segmentIndex:o,previewColors:this.configuration.preview.enabled?this.configuration.preview.previewColors:null,viewPlaneNormal:c,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,Q.getEnabledElement)(e),{viewport:i}=n,{canvasToWorld:o}=i,a=i.getCamera(),{brushSize:r}=this.configuration,s=ys.vec3.fromValues(a.viewUp[0],a.viewUp[1],a.viewUp[2]),l=ys.vec3.fromValues(a.viewPlaneNormal[0],a.viewPlaneNormal[1],a.viewPlaneNormal[2]),d=ys.vec3.create();ys.vec3.cross(d,s,l);const c=o([t[0],t[1]]),h=ys.vec3.create(),g=ys.vec3.create(),u=ys.vec3.create(),v=ys.vec3.create();for(let e=0;e<=2;e++)h[e]=c[e]-s[e]*r,g[e]=c[e]+s[e]*r,u[e]=c[e]-d[e]*r,v[e]=c[e]+d[e]*r;if(!this._hoverData)return;const{brushCursor:m}=this._hoverData,{data:p}=m;void 0===p.handles&&(p.handles={}),p.handles.points=[h,g,u,v],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,Q.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Xl.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,Q.getEnabledElement)(e);this.applyActiveStrategyCallback(t,this.getOperationData(e),Xl.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:i}=e;if(!this._hoverData.viewportIdsToRender.includes(i.id))return;const o=this._hoverData.brushCursor;if(!0===o.data.invalidated){const{centerCanvas:e}=this._hoverData,{element:t}=i;this._calculateCursor(t,e)}const a=o.metadata;if(!a)return;const r=a.brushCursorUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c=d[0],h=d[1],g=[Math.floor((c[0]+h[0])/2),Math.floor((c[1]+h[1])/2)],u=Math.abs(c[1]-Math.floor((c[1]+h[1])/2)),v="rgb(".concat((null===(n=a.segmentColor)||void 0===n?void 0:n.slice(0,3))||[0,0,0],")");if(!i.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");Fs(t,r,"0",g,u,{color:v});const{centerRadius:m}=this.configuration;m>=0&&Fs(t,r,"1",g,2,{color:v})}}ie(Fd,"toolName",void 0),Fd.toolName="Brush";const Hd=Fd;function Bd(e,t){const n=xi(e);if(void 0===n)return;const i=n._toolInstances;return Object.keys(i).length?t&&i[t]?[i[t]]:Object.values(i).filter((e=>e instanceof Hd)):void 0}function Gd(e,t,n,i){const o=[];for(let e=0;e<2;e++)for(let t=0;t<2;t++)for(let a=0;a<2;a++){const r=[...i];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,o.push(r)}return Dl(o.map((t=>Q.utilities.transformWorldToIndex(e,t))),t)}function qd(e,t){const{spacing:n}=e,i=e.getScalarData(),o=[];let a=0;for(let e=0;e<t.length;e++){const{imageData:l,spacing:d,dimensions:c}=t[e].volume,h=t[e].volume.getScalarData().length;h===i.length&&(r=d,s=n,JSON.stringify(r)===JSON.stringify(s))&&(a=e);const g=l.getPointData().getScalars().getData(),u=t[e].lower,v=t[e].upper;o.push({imageData:l,referenceValues:g,lower:u,upper:v,spacing:d,dimensions:c,volumeSize:h})}var r,s;return{volumeInfoList:o,baseVolumeIdx:a}}const jd=function(e,t,n){const{imageData:i}=e,o=e.getScalarData(),{overwrite:a,boundsIJK:r}=n,s=(null==n?void 0:n.overlapType)||0;if(a)for(let e=0;e<o.length;e++)o[e]=0;const{baseVolumeIdx:l,volumeInfoList:d}=qd(e,t);let c,h,g;const u=(e,t,n)=>{const{imageData:i,dimensions:o,lower:a,upper:r}=e,l=Gd(i,o,t,n);h=0,c=0,g={lower:a,upper:r};let d=!1;return Cl(i,(()=>!0),(e=>{let{value:t}=e;h+=1,t>=g.lower&&t<=g.upper&&(c+=1)}),l),0===s?d=c>0:1==s&&(d=c===h),d},v=(e,t)=>{const{imageData:n,referenceValues:i,lower:o,upper:a}=e,r=i[n.computeOffsetIndex(t)];return!(r<=o||r>=a)};return Cl(i,(()=>!0),(e=>{let{index:t,pointIJK:n,pointLPS:i}=e,a=d.length>0;for(let e=0;e<d.length&&(a=d[e].volumeSize===o.length?v(d[e],n):u(d[e],d[l].spacing,i),a);e++);a&&(o[t]=1)}),r),ft(e.volumeId),e};function zd(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o];n.getFrameOfReferenceUID()===t&&i.push(n)}return i}const{Active:Kd,Passive:Yd,Enabled:Xd}=je;function Jd(e,t){const n=e.length,i=[];for(let o=0;o<n;o++){const n=e[o],a=Mi(n.id,n.renderingEngineId);a&&(Zd(a,t)&&i.push(n))}return i}function Zd(e,t){const{toolOptions:n}=e,i=n[t];if(!i)return!1;const o=i.mode;return o===Kd||o===Yd||o===Xd}const $d=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.999;return e.filter((e=>{const i=e.getCamera();return Math.abs(ys.vec3.dot(i.viewPlaneNormal,t.viewPlaneNormal))>n}))};function Qd(e,t){let n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const i=(0,Q.getEnabledElement)(e),{renderingEngine:o,FrameOfReferenceUID:a}=i;let r=o.getViewports();r=zd(r,a),r=Jd(r,t);const s=o.getViewport(i.viewportId);return n&&(r=$d(r,s.getCamera())),r.map((e=>e.id))}const{EPSILON:ec}=Q.CONSTANTS,tc=1-ec;function nc(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{let t=e.metadata.viewPlaneNormal;if(!t){const{referencedImageId:n}=e.metadata,{imageOrientationPatient:i}=Q.metaData.get("imagePlaneModule",n),o=ys.vec3.fromValues(i[0],i[1],i[2]),a=ys.vec3.fromValues(i[3],i[4],i[5]);t=ys.vec3.create(),ys.vec3.cross(t,o,a),e.metadata.viewPlaneNormal=t}const n=Math.abs(ys.vec3.dot(i,t))>tc;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.handles.points[0];if(!e.isVisible)continue;const n=ys.vec3.create();ys.vec3.sub(n,r,t);const o=ys.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}const ic=/(videoId:|imageId:|volumeId:)([a-zA-Z]*:)/;function oc(e,t){if(e instanceof Q.StackViewport){const n=e.getCurrentImageId(),i=n.indexOf(":"),o=n.substring(i+1);return t.filter((e=>{if(!e.isVisible)return!1;const t=e.metadata.referencedImageId;if(void 0===t)return!1;const n=t.indexOf(":");return t.substring(n+1)===o}))}if(e instanceof Q.VideoViewport){const n=e.getFrameOfReferenceUID();return t.filter((t=>{if(!t.isVisible)return!1;if(t.metadata.FrameOfReferenceUID!==n)return!1;const i=t.metadata.referencedImageId.replace(ic,"");if(!e.hasImageURI(i))return!1;const o=Ol.getFrameRange(t),a=e.getFrameNumber();return Array.isArray(o)?a>=o[0]&&a<=o[1]:Math.abs(a-o)<=5}))}if(e instanceof Q.VolumeViewport){const n=e.getCamera(),{spacingInNormalDirection:i}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(e,n);return nc(t,n,i)}throw new Error("Viewport Type ".concat(e.type," not supported"))}const ac=function(e){if(e){if(e.data&&e.highlighted)return Vr.Highlighted;if(be(e.annotationUID))return Vr.Selected;if(ce(e))return Vr.Locked}return Vr.Default};class rc extends zi{constructor(){super(...arguments),ie(this,"onImageSpacingCalibrated",(e=>{const{element:t,imageId:n}=e.detail,i=Q.utilities.imageIdToURI(n),o=Xe();o.getFramesOfReference().forEach((e=>{const n=o.getAnnotations(e)[this.getToolName()];n&&n.length&&(n.forEach((e=>{var t;null!==(t=e.metadata)&&void 0!==t&&t.referencedImageId&&Q.utilities.imageIdToURI(e.metadata.referencedImageId)===i&&(e.invalidated=!0,e.data.cachedStats={})})),Xo(t))}))}))}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;return oc(i,t)}getReferencedImageId(e,t,n,i){const o=this.getTargetId(e);let a;if(e instanceof Q.StackViewport)a=o.split("imageId:")[1];else if(e instanceof Q.VideoViewport)a=o.split("videoId:")[1];else{const e=o.split("volumeId:")[1],i=Q.cache.getVolume(e);a=Q.utilities.getClosestImageId(i,t,n)}return a}getStyle(e,t,n){return $r(e,t,ac(n),this.mode)}}ie(rc,"toolName",void 0),rc.toolName="AnnotationDisplayTool";const sc=rc;class lc extends sc{constructor(e,t){var n,i;super(e,t),ie(this,"mouseMoveCallback",((e,t)=>{if(!t)return!1;const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(const e of t){if(ce(e)||!Pe(e.annotationUID))continue;const{data:t}=e,i=t.handles?t.handles.activeHandleIndex:void 0,r=this._imagePointNearToolOrHandle(n,e,o,6),s=r&&!e.highlighted,l=!r&&e.highlighted;s||l?(e.highlighted=!e.highlighted,a=!0):t.handles&&t.handles.activeHandleIndex!==i&&(a=!0)}return a})),null!==(n=e.configuration)&&void 0!==n&&n.getTextLines&&(this.configuration.getTextLines=e.configuration.getTextLines),null!==(i=e.configuration)&&void 0!==i&&i.statsCalculator&&(this.configuration.statsCalculator=e.configuration.statsCalculator)}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{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<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==ys.vec2.distance(n,o)<i)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 Q.BaseVolumeViewport){var i;const e=t.split("volumeId:")[1];return void 0!==(null===(i=Q.cache.getVolume(e).scaling)||void 0===i?void 0:i.PT)}const o=n&&Q.metaData.get("scalingModule",n);return"number"==typeof(null==o?void 0:o.suvbw)}_imagePointNearToolOrHandle(e,t,n,i){return!!this.getHandleNearImagePoint(e,t,n,i)||(!!this.isPointNearTool(e,t,n,i,"mouse")||void 0)}}ie(lc,"toolName",void 0),lc.toolName="AnnotationTool";const dc=lc;function cc(e,t){if(e.length!==t.length)throw Error("Both points should have the same dimensionality");const[n,i,o=0]=e,[a,r,s=0]=t;return Math.pow(n-a,2)+Math.pow(i-r,2)+Math.pow(o-s,2)}function hc(e,t,n){let i;const o=cc(e,t);if(e[0]===t[0]&&e[1]===t[1]&&(i=e),!i){const a=((n[0]-e[0])*(t[0]-e[0])+(n[1]-e[1])*(t[1]-e[1]))/o;i=a<0?e:a>1?t:[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}return{point:[...i],distanceSquared:cc(n,i)}}function gc(e,t,n){return hc(e,t,n).distanceSquared}function uc(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(gc(e,t,n))}function vc(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,i,o,a]=e;let r=655535;const s=function(e,t,n,i){return{top:[[e,t],[e+n,t]],right:[[e+n,t],[e+n,t+i]],bottom:[[e+n,t+i],[e,t+i]],left:[[e,t+i],[e,t]]}}(n,i,o,a);return Object.keys(s).forEach((e=>{const[n,i]=s[e],o=uc(n,i,t);o<r&&(r=o)})),r}function mc(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})),i=t[t.length-1];return{top:n[0],bottom:n[n.length-1],right:i}}(e),n=(t.top[1]+t.bottom[1])/2;return[t.right[0],n]}function pc(e,t,n,i){const o=ys.vec3.create();ys.vec3.cross(o,t,e);const a=ys.vec3.fromValues(...n),r=ys.vec3.fromValues(...i),s=ys.vec3.create();ys.vec3.subtract(s,a,r);const l=ys.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=ys.vec3.dot(s,o)/(l*ys.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}function fc(e,t,n){return"CT"===e?"HU":"PT"===e?function(e,t){if(!t.isPreScaled)return"raw";if(t.isSuvScaled)return"SUV";const n=Q.metaData.get("generalSeriesModule",e);if("PT"===(null==n?void 0:n.modality)){const t=Q.metaData.get("petSeriesModule",e);return(null==t?void 0:t.units)||"unitless"}}(t,n):""}function Ec(e,t){if(e instanceof Q.BaseVolumeViewport){const e=t.split("volumeId:"),n=e.length>1?e[1]:e[0],i=Q.cache.getVolume(n);return!(null==i||!i.scaling)&&Object.keys(i.scaling).length>0}if(e instanceof Q.StackViewport){const{preScale:t}=e.getImageData()||{};return!(null==t||!t.scaled)}return!1}class wc{}ie(wc,"run",void 0),ie(wc,"getStatistics",void 0);const Ic=wc;var _c;class Cc extends Ic{}function bc(e){return 1===e.length?e[0]:e}_c=Cc,ie(Cc,"max",[-1/0]),ie(Cc,"sum",[0]),ie(Cc,"sumSquares",[0]),ie(Cc,"squaredDiffSum",[0]),ie(Cc,"count",0),ie(Cc,"statsCallback",(e=>{let{value:t}=e;Array.isArray(t)&&t.length>1&&1===_c.max.length&&(_c.max.push(_c.max[0],_c.max[0]),_c.sum.push(_c.sum[0],_c.sum[0]),_c.sumSquares.push(_c.sumSquares[0],_c.sumSquares[0]),_c.squaredDiffSum.push(_c.squaredDiffSum[0],_c.squaredDiffSum[0]));const n=Array.isArray(t)?t:[t];_c.count+=1,_c.max.forEach(((e,t)=>_c.max[t]=Math.max(e,n[t]))),_c.sum.map(((e,t)=>_c.sum[t]+=n[t])),_c.sumSquares.map(((e,t)=>_c.sumSquares[t]+=n[t]**2)),_c.squaredDiffSum.map(((e,t)=>_c.squaredDiffSum[t]+=Math.pow(n[t]-_c.sum[t]/_c.count,2)))})),ie(Cc,"getStatistics",(()=>{const e=_c.sum.map((e=>e/_c.count)),t=_c.squaredDiffSum.map((e=>Math.sqrt(e/_c.count))),n=_c.sumSquares.map(((t,n)=>Math.sqrt(_c.sumSquares[n]/_c.count-e[n]**2))),i=_c.max;return _c.max=[-1/0],_c.sum=[0],_c.sumSquares=[0],_c.squaredDiffSum=[0],_c.count=0,[{name:"max",value:bc(i),unit:null},{name:"mean",value:bc(e),unit:null},{name:"stdDev",value:bc(t),unit:null},{name:"stdDevWithSumSquare",value:bc(n),unit:null}]}));const{transformWorldToIndex:Tc}=Q.utilities;class Dc extends dc{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:Sc,statsCalculator:Cc}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{label:"",handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:g,top:u,width:v,height:m}=c;return vc([g,u,v,m],h)<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:o}=s.handles;o.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,o=(0,Q.getEnabledElement)(n),{worldToCanvas:r,canvasToWorld:l}=o.viewport,d=e.world,{points:c}=s.handles;let h,g,u,v,m,p,f,E;switch(c[a]=[...d],a){case 0:case 3:h=r(c[0]),v=r(c[3]),g=[v[0],h[1]],u=[h[0],v[1]],p=l(g),f=l(u),c[1]=p,c[2]=f;break;case 1:case 2:g=r(c[1]),u=r(c[2]),h=[u[0],g[1]],v=[g[0],u[1]],m=l(h),E=l(v),c[0]=m,c[3]=E}i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles,v=g.map((e=>a.worldToCanvas(e)));c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),{viewPlaneNormal:E,viewUp:w}=a.getCamera();if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,E,w,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(i,E,w,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let I;if(!Pe(r))continue;ce(i)||this.editData||null===u||(I=[v[u]]),I&&qs(t,r,"0",I,{color:f});const _="".concat(r,"-rect");$s(t,r,"0",v[0],v[3],{color:f,lineDash:p,lineWidth:m},_),o=!0;const C=this.getLinkedTextBoxStyle(c,i);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 b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;if(!h.handles.textBox.hasMoved){const e=mc(v);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const T=a.worldToCanvas(h.handles.textBox.worldPosition),D=Zs(t,r,"1",b,T,v,{},C),{x:S,y,width:M,height:O}=D;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([S,y]),topRight:a.canvasToWorld([S+M,y]),bottomLeft:a.canvasToWorld([S,y+O]),bottomRight:a.canvasToWorld([S+M,y+O])}}return o})),ie(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])}})),ie(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportId:r,renderingEngineId:s,viewport:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,g=Object.keys(h);for(let o=0;o<g.length;o++){const a=g[o],r=this.getTargetIdImage(a,i);if(!r)continue;const{dimensions:s,imageData:p,metadata:f}=r,E=("getScalarData"in r?r.getScalarData():r.scalarData,Tc(p,d));E[0]=Math.floor(E[0]),E[1]=Math.floor(E[1]),E[2]=Math.floor(E[2]);const w=Tc(p,c);if(w[0]=Math.floor(w[0]),w[1]=Math.floor(w[1]),w[2]=Math.floor(w[2]),this._isInsideVolume(E,w,s)){var u,v,m;this.isHandleOutsideImage=!1;const i=[[Math.min(E[0],w[0]),Math.max(E[0],w[0])],[Math.min(E[1],w[1]),Math.max(E[1],w[1])],[Math.min(E[2],w[2]),Math.max(E[2],w[2])]],{worldWidth:o,worldHeight:s}=pc(t,n,d,c),g=El(r),I=Math.abs(o*s)/(g*g),_={isPreScaled:Ec(l,a),isSuvScaled:this.isSuvScaled(l,a,e.metadata.referencedImageId)},C=fc(f.Modality,e.metadata.referencedImageId,_),b=Cl(p,(()=>!0),this.configuration.statsCalculator.statsCallback,i),T=this.configuration.statsCalculator.getStatistics();h[a]={Modality:f.Modality,area:I,mean:null===(u=T[1])||void 0===u?void 0:u.value,stdDev:null===(v=T[2])||void 0===v?void 0:v.value,max:null===(m=T[0])||void 0===m?void 0:m.value,statsArray:T,pointsInShape:b,areaUnit:fl(null,r),modalityUnit:C}}else this.isHandleOutsideImage=!0,h[a]={Modality:f.Modality}}e.invalidated=!1;const p=te.ANNOTATION_MODIFIED,f={annotation:e,viewportId:r,renderingEngineId:s};return(0,Q.triggerEvent)(Q.eventTarget,p,f),h})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}}function Sc(e,t){const n=e.cachedStats[t],{area:i,mean:o,max:a,stdDev:r,areaUnit:s,modalityUnit:l}=n;if(void 0===o)return;const d=[];return d.push("Area: ".concat(mv(i)," ").concat(s)),d.push("Mean: ".concat(mv(o)," ").concat(l)),d.push("Max: ".concat(mv(a)," ").concat(l)),d.push("Std Dev: ".concat(mv(r)," ").concat(l)),d}ie(Dc,"toolName",void 0),Dc.toolName="RectangleROI";const yc=Dc;class Mc extends yc{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}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getTargetId(r);let g,u;if(r instanceof Q.StackViewport)g=h.split("imageId:")[1];else{u=h.split("volumeId:")[1];const e=Q.cache.getVolume(u);g=Q.utilities.getClosestImageId(e,o,d)}const v=r.getFrameOfReferenceUID(),m={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:v,referencedImageId:g,toolName:this.getToolName(),volumeId:u},data:{label:"",handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},segmentationId:null}};Qe(m,i);const p=Qd(i,this.getToolName());return this.editData={annotation:m,viewportIdsToRender:p,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,p),m})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,renderingEngineId:r}=e,{element:s}=a;let l=$e(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return o;if(l=this.filterInteractableAnnotationsForElement(s,l),null===(i=l)||void 0===i||!i.length)return o;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:i,data:s}=n,{points:c,activeHandleIndex:h}=s.handles,g=c.map((e=>a.worldToCanvas(e)));d.annotationUID=i;const u=this.getStyle("lineWidth",d,n),v=this.getStyle("lineDash",d,n),m=this.getStyle("color",d,n);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const p=te.ANNOTATION_MODIFIED,f={annotation:n,viewportId:a.id,renderingEngineId:r};let E;((0,Q.triggerEvent)(Q.eventTarget,p,f),Pe(i))&&(ce(n)||this.editData||null===h||(E=[g[h]]),E&&qs(t,i,"0",E,{color:m}),$s(t,i,"0",g[0],g[3],{color:m,lineDash:v,lineWidth:u}),o=!0)}return o}))}}ie(Mc,"toolName",void 0),Mc.toolName="RectangleROIThreshold";const Oc=Mc,{transformWorldToIndex:xc}=Q.utilities;class Pc extends yc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{numSlicesToPropagate:10}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l;let h,g,u;if(r instanceof Q.StackViewport)throw new Error("Stack Viewport Not implemented");if(u=this.getTargetId(r).split("volumeId:")[1],g=Q.cache.getVolume(u),h=Q.utilities.getClosestImageId(g,o,d),!h)throw new Error("This tool does not work on non-acquisition planes");const v=r.getCurrentImageIdIndex(),m=Q.utilities.getSpacingInNormalDirection(g,d),p=this._getEndSliceIndex(g,o,m,d),f=r.getFrameOfReferenceUID(),E={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],enabledElement:a,viewUp:[...c],FrameOfReferenceUID:f,referencedImageId:h,toolName:this.getToolName(),volumeId:u,spacingInNormal:m},data:{label:"",startSlice:v,endSlice:p,cachedStats:{projectionPoints:[],projectionPointsImageIds:[h]},handles:{textBox:{hasMoved:!1,worldPosition:null,worldBoundingBox:null},points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},labelmapUID:null}};this._computeProjectionPoints(E,g),Qe(E,i);const w=Qd(i,this.getToolName());return this.editData={annotation:E,viewportIdsToRender:w,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,w),E})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e,o=$e(this.getToolName(),i.element);if(null==o||!o.length)return n;const a=i.getCurrentImageIdIndex(),r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let s=0;s<o.length;s++){const l=o[s],{annotationUID:d,data:c}=l,{startSlice:h,endSlice:g}=c,{points:u,activeHandleIndex:v}=c.handles,m=u.map((e=>i.worldToCanvas(e)));r.annotationUID=d;const p=this.getStyle("lineWidth",r,l),f=this.getStyle("lineDash",r,l),E=this.getStyle("color",r,l);if(a<Math.min(h,g)||a>Math.max(h,g))continue;l.invalidated&&this._throttledCalculateCachedStats(l,e);let w,I=!1;if(a!==h&&a!==g||(I=!0),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;if(!Pe(d))continue;ce(l)||this.editData||null===v||!I||(w=[m[v]]),w&&qs(t,d,"0",w,{color:E});let _=f;I||(_=2),$s(t,d,"0",m[0],m[3],{color:E,lineDash:_,lineWidth:p}),n=!0}return n})),this._throttledCalculateCachedStats=rl(this._calculateCachedStatsTool,100,{trailing:!0})}_computeProjectionPoints(e,t){const{data:n,metadata:i}=e,{viewPlaneNormal:o,spacingInNormal:a}=i,{imageData:r}=t,{startSlice:s,endSlice:l}=n,{points:d}=n.handles,c=xc(r,d[0]);if(c[2]!==s)throw new Error("Start slice does not match");const h=ys.vec3.fromValues(c[0],c[1],l),g=ys.vec3.create();r.indexToWorldVec3(c,g);const u=ys.vec3.create();r.indexToWorldVec3(h,u);const v=ys.vec3.distance(g,u),m=[];for(let e=0;e<v;e+=a)m.push(d.map((t=>{const n=ys.vec3.create();return ys.vec3.scaleAndAdd(n,t,o,e),Array.from(n)})));n.cachedStats.projectionPoints=m;const p=[];for(const e of m){const n=Q.utilities.getClosestImageId(t,e[0],o);p.push(n)}n.cachedStats.projectionPointsImageIds=p}_calculateCachedStatsTool(e,t){const n=e.data,{viewportId:i,renderingEngineId:o,viewport:a}=t,{cachedStats:r}=n,s=this.getTargetId(a),l=Q.cache.getVolume(s.split("volumeId:")[1]);this._computeProjectionPoints(e,l),e.invalidated=!1;const d=te.ANNOTATION_MODIFIED,c={annotation:e,viewportId:i,renderingEngineId:o};return(0,Q.triggerEvent)(Q.eventTarget,d,c),r}_getEndSliceIndex(e,t,n,i){const o=this.configuration.numSlicesToPropagate,a=ys.vec3.create();ys.vec3.scaleAndAdd(a,t,i,o*n);const r=n/2,{imageIds:s}=e;let l;for(let e=0;e<s.length;e++){const t=s[e],{imagePositionPatient:n}=Q.metaData.get("imagePlaneModule",t),o=ys.vec3.create();ys.vec3.sub(o,a,n);const d=ys.vec3.dot(o,i);Math.abs(d)<r&&(l=e)}return l}}ie(Pc,"toolName",void 0),Pc.toolName="RectangleROIStartEndThreshold";const Nc=Pc,Rc=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},Ac=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=[];return e.forEach((e=>{var o,a;const{data:r}=e,{points:s}=r.handles,{imageData:l,dimensions:d}=t;let c=s;if(null!==(o=r.cachedStats)&&void 0!==o&&o.projectionPoints){const{projectionPoints:e}=r.cachedStats;c=[].concat(...e)}let h=Dl(c.map((e=>Q.utilities.transformWorldToIndex(l,e))),d);!n.numSlicesToProject||null!==(a=r.cachedStats)&&void 0!==a&&a.projectionPoints||(h=Rc(h,n.numSlicesToProject)),i.push(h)})),1===i.length?i[0]:i.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})},kc=function(e,t,n,i){const o=e.map((e=>nt(e)));let a;!function(e){const t=[Oc.toolName,Nc.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")}}(o);for(let e=0;e<n.length;e++)n[e].volume.getScalarData().length!==t.getScalarData().length&&0!==e||(a=Ac(o,n[e].volume,i));return jd(t,n,{...i,boundsIJK:a})},Lc=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:i,origin:o,spacing:a}=t;if(!(Q.utilities.isEqual(i,e[0].dimensions)&&Q.utilities.isEqual(n,e[0].direction)&&Q.utilities.isEqual(a,e[0].spacing)&&Q.utilities.isEqual(o,e[0].origin)))throw new Error("labelmaps must have the same size and shape")}));const i=e[0],o=new(0,i.getScalarData().constructor)(i.getScalarData().length);e.forEach((e=>{const n=e.getScalarData();for(let e=0;e<n.length;e++)n[e]===t&&(o[e]=t)}));const a={scalarData:o,metadata:i.metadata,spacing:i.spacing,origin:i.origin,direction:i.direction,dimensions:i.dimensions};return Q.volumeLoader.createLocalVolume(a,n,!0)};function Uc(e,t){if(e===at.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 Vc(e){const{type:t}=e;if(t===at.Labelmap)return lt();throw new Error("Unknown representation type: ".concat(t))}async function Wc(e){const{viewportId:t,renderingEngineId:n,options:i}=e;let{segmentationId:o}=e;const a=(0,Q.getEnabledElementByIds)(t,n);if(!a)throw new Error("element disabled");const{viewport:r}=a;if(!(r instanceof Q.VolumeViewport))throw new Error("Segmentation only supports VolumeViewport");const{uid:s}=r.getDefaultActor();var l;if(void 0===o&&(o="".concat(s,"-based-segmentation-").concat(null!==(l=null==i?void 0:i.volumeId)&&void 0!==l?l:Q.utilities.uuidv4().slice(0,8))),i){const e=(0,oe._cloneDeep)(i);await Q.volumeLoader.createLocalVolume(e,o)}else{const{uid:e}=r.getDefaultActor();await Q.volumeLoader.createAndCacheDerivedSegmentationVolume(e,{volumeId:o})}return o}function Fc(e,t,n){const i=xi(e);if(void 0===i)return;Bd(e,n).forEach((e=>{e.configuration.brushSize=t,e.invalidateBrushCursor()}));const o=i.getViewportsInfo(),a=Object.keys(o).map((e=>o[e]));if(!a.length)return;const{renderingEngineId:r}=a[0],s=i.getViewportIds(),l=(0,Q.getRenderingEngine)(r);or(l,s)}function Hc(e,t){const n=xi(e);if(void 0===n)return;const i=n._toolInstances;if(!Object.keys(i).length)return;const o=Bd(e,t)[0];return o?o.configuration.brushSize:void 0}function Bc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{isDynamic:!1};const i=xi(e);if(void 0===i)return;const o=Bd(e),a={...n,...void 0!==t&&{threshold:t}};o.forEach((e=>{e.configuration.strategySpecificConfiguration.THRESHOLD={...e.configuration.strategySpecificConfiguration.THRESHOLD,...a}}));const r=i.getViewportsInfo();if(!r.length)return;const{renderingEngineId:s}=r[0],l=i.getViewportIds(),d=(0,Q.getRenderingEngine)(s);or(d,l)}function Gc(e){const t=xi(e);if(void 0===t)return;const n=t._toolInstances;if(!Object.keys(n).length)return;const i=Bd(e)[0];return i?i.configuration.strategySpecificConfiguration.THRESHOLD.threshold:void 0}const qc=function(e,t,n,i){const o=e.getScalarData(),{baseVolumeIdx:a,volumeInfoList:r}=qd(e,n);return r.forEach((e=>{const{volumeSize:n}=e;n===o.length?function(e,t,n){const{referenceValues:i,lower:o,upper:a}=n;for(let n=0;n<e.length;n++)if(e[n]===t){const r=i[n];e[n]=r>=o&&r<=a?t:0}}(o,t,e):function(e,t,n,i,o,a){const{imageData:r,lower:s,upper:l,dimensions:d}=n;let c,h,g;for(let n=0;n<e.length;n++)if(e[n]===t){const u=Gd(r,d,i[o].spacing,i[o].imageData.getPoint(n)),v=e=>{let{value:t}=e;c+=1,t>=g.lower&&t<=g.upper&&(h+=1)};c=0,h=0,g={lower:s,upper:l};let m=!1;Cl(r,(()=>!0),v,u),m=0===a?h>0:h===c,e[n]=m?t:0}}(o,t,e,r,a,i)})),ft(e.volumeId),e};function jc(e,t){return new Map(e.map(((e,n)=>[e,t[n]])))}function zc(e,t,n){const i=n.toIJK(e),o=n.toIJK(t),a=ys.vec3.create(),{testIJK:r}=n,s=ys.vec3.sub(ys.vec3.create(),i,o),l=Math.round(Math.max(...s.map(Math.abs)));if(l<2)return!0;const d=ys.vec3.scale(ys.vec3.create(),s,1/l);for(let e=1;e<l;e++)if(ys.vec3.scaleAndAdd(a,o,d,e),!r(a))return!1;return!0}const Kc=.01;function Yc(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{maxMajor:0,maxMinor:0};const{points:i}=e.polyData,{maxMinor:o,maxMajor:a}=n;let r,s=a*a,l=o*o;for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],d=ys.vec3.sqrDist(o,a);d<s||d-Kc<s+Kc&&r||t.testCenter(o,a)&&zc(o,a,t)&&(s=d-Kc,r=[e,n],l=0)}if(!r)return;s=Math.sqrt(s+Kc);const d=i[r[0]],c=i[r[1]],h=ys.vec3.sub(ys.vec3.create(),d,c);let g;ys.vec3.scale(h,h,1/s);for(let e=0;e<i.length;e++)for(let n=e+1;n<i.length;n++){const o=i[e],a=i[n],r=ys.vec3.sqrDist(o,a);if(r<=l)continue;const s=ys.vec3.sub(ys.vec3.create(),o,a);Math.abs(ys.vec3.dot(s,h))/Math.sqrt(r)>Kc||t.testCenter(o,a)&&zc(o,a,t)&&(l=r,g=[e,n])}return g?(l=Math.sqrt(l),{majorAxis:[d,c],minorAxis:[i[g[0]],i[g[1]]],maxMajor:s,maxMinor:l,...e}):void 0}const{Labelmap:Xc}=at;function Jc(e){const t=Bl({segmentations:e});if(null==t||!t.length||!t[0].sliceContours.length)return;const{representationData:n,segments:i=[null,{label:"Unspecified",color:null,containedSegmentIndices:null}]}=e,{volumeId:o}=n[Xc],a=i.findIndex((e=>!!e));return-1!==a?(i[a].segmentIndex=a,function(e,t,n){const{sliceContours:i}=e,{segmentIndex:o,containedSegmentIndices:a}=n;let r;const s=function(e,t,n){const i=Q.cache.getVolume(e);if(!i)return void console.warn("No volume found for ".concat(e));const o=i.imageData.getPointData().getScalars().getData(),a=i.dimensions[0],r=a*i.dimensions[1];return{testCenter:(e,s)=>{const l=ys.vec3.add(ys.vec3.create(),e,s).map((e=>e/2)),d=i.imageData.worldToIndex(l).map(Math.round),[c,h,g]=d,u=o[c+h*a+g*r];return u===t||(null==n?void 0:n.has(u))},toIJK:e=>i.imageData.worldToIndex(e),testIJK:e=>{const[i,s,l]=e,d=Math.round(i)+Math.round(s)*a+Math.round(l)*r,c=o[d];return c===t||(null==n?void 0:n.has(c))}}}(t,o,a);for(const e of i){const t=Yc(e,s,r);t&&(r=t)}return r&&Object.assign(r,n),r}(t[0],o,i[a])):void 0}function Zc(e,t){const{majorAxis:n,minorAxis:i,label:o="",FrameOfReferenceUID:a,referencedImageId:r}=e,[s,l]=n,[d,c]=i,{viewUp:h,viewPlaneNormal:g}=t.getCamera();return{highlighted:!0,invalidated:!0,metadata:{toolName:"Bidirectional",viewPlaneNormal:g,viewUp:h,FrameOfReferenceUID:a,referencedImageId:r},data:{handles:{points:[s,l,d,c],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:o,cachedStats:{}},isLocked:!1,isVisible:!0}}function $c(e){return"number"==typeof e?e?e<0?-1:1:e==e?0:NaN:NaN}function Qc(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,g=s-a,u=o-r,v=r*a-o*s,m=g*l+u*d+v,p=g*c+u*h+v;if(0!==m&&0!==p&&$c(m)===$c(p))return;const f=h-d,E=l-c,w=c*d-l*h,I=f*o+E*a+w,_=f*r+E*s+w;if(0!==I&&0!==_&&$c(I)===$c(_))return;const C=g*E-f*u;let b;b=u*w-E*v;const T=b/C;return b=f*v-g*w,[T,b/C]}const{transformWorldToIndex:eh}=Q.utilities;class th extends dc{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:nh}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preventHandleOutsideImage",void 0),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;let l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[1]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=uc([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]);return h<=i||(l=a.worldToCanvas(s[2]),d=a.worldToCanvas(s[3]),c={start:{x:l[0],y:l[1]},end:{x:d[0],y:d[1]}},h=uc([c.start.x,c.start.y],[c.end.x,c.end.y],[n[0],n[1]]),h<=i)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),ds(i),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=t.data;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());ds(o),this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(void 0!==this.editData.handleIndex){const{points:e}=s.handles,t=ys.vec3.distance(e[0],e[1]);if(ys.vec3.distance(e[2],e[3])>t){const t=[[...e[2]],[...e[3]]],n=[...e[0]],i=[...e[1]],o=ys.vec2.create();ys.vec2.set(o,t[1][0]-t[0][0],t[1][1]-t[1][0]);const a=ys.vec2.create();ys.vec2.set(a,-o[1],o[0]);const r=ys.vec2.create();let l;ys.vec2.set(r,i[0]-n[0],i[1]-n[0]),l=ys.vec2.dot(r,a)>0?[n,i]:[i,n],s.handles.points=[t[0],t[1],l[0],l[1]]}}if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,{worldToCanvas:s}=r,{annotation:l,viewportIdsToRender:d,handleIndex:c}=this.editData,{data:h}=l,g=n.world;h.handles.points[c]=[...g];const u=h.handles.points.map(s),v={x:u[0][0],y:u[0][1]},m={x:u[1][0],y:u[1][1]},p=(u[2][0],u[2][1],u[3][0],u[3][1],ys.vec2.distance(u[0],u[1])/3),f=v.x-m.x,E=v.y-m.y,w=Math.sqrt(f*f+E*E),I=f/w,_=E/w,C=(v.x+m.x)/2,b=(v.y+m.y)/2,T=C+p*_,D=b-p*I,S=C-p*_,y=b+p*I;h.handles.points[2]=r.canvasToWorld([T,D]),h.handles.points[3]=r.canvasToWorld([S,y]),l.invalidated=!0,or(a,d),this.editData.hasMoved=!0})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i,{annotation:a,viewportIdsToRender:r,handleIndex:s,movingTextBox:l}=this.editData,{data:d}=a;if(l){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===s){const{deltaPoints:e}=t,n=e.world;d.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;or(o,r)})),ie(this,"_dragModifyHandle",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{viewport:a}=o,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,d=n.world,c=[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:c[0][0],y:c[0][1]},end:{x:c[1][0],y:c[1][1]}},g={start:{x:c[2][0],y:c[2][1]},end:{x:c[3][0],y:c[3][1]}},u=[...d],v=a.worldToCanvas(u);if(0===s||1===s){const e=c[0===s?1:0],t=ys.vec2.set(ys.vec2.create(),v[0]-e[0],v[1]-e[1]),n=ys.vec2.set(ys.vec2.create(),c[s][0]-e[0],c[s][1]-e[1]);ys.vec2.normalize(t,t),ys.vec2.normalize(n,n);const i={start:{x:e[0],y:e[1]},end:{x:v[0],y:v[1]}};if(this._movingLongAxisWouldPutItThroughShortAxis(i,g))return;const o=e,r=this._getSignedAngle(n,t);let d=c[2][0],h=c[2][1],m=c[3][0],p=c[3][1];d-=o[0],h-=o[1],m-=o[0],p-=o[1];const f=d*Math.cos(r)-h*Math.sin(r),E=d*Math.sin(r)+h*Math.cos(r),w=m*Math.cos(r)-p*Math.sin(r),I=m*Math.sin(r)+p*Math.cos(r);d=f+o[0],h=E+o[1],m=w+o[0],p=I+o[1];const _=a.canvasToWorld([d,h]),C=a.canvasToWorld([m,p]);l.handles.points[s]=u,l.handles.points[2]=_,l.handles.points[3]=C}else{const e=2===s?3:2,t={longLineSegment:{start:h.start,end:h.end},shortLineSegment:{start:g.start,end:g.end}},n=ys.vec2.subtract(ys.vec2.create(),[t.longLineSegment.end.x,t.longLineSegment.end.y],[t.longLineSegment.start.x,t.longLineSegment.start.y]),i=ys.vec2.normalize(ys.vec2.create(),n),o=ys.vec2.subtract(ys.vec2.create(),[v[0],v[1]],[c[s][0],c[s][1]]),r=ys.vec2.length(o),d=this._getSignedAngle(i,o),m=Math.cos(d)*r,p=ys.vec2.scaleAndAdd(ys.vec2.create(),[c[e][0],c[e][1]],i,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(!Qc([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]=u}})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!0;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles,v=g.map((e=>a.worldToCanvas(e)));c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=this.getStyle("shadow",c,i);if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={length:null,width:null,unit:null},this._calculateCachedStats(i,d,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let w;if(!Pe(r))continue;ce(i)||this.editData||null===u||(w=[v[u]]),w&&qs(t,r,"0",w,{color:f});const I="".concat(r,"-line-1"),_="".concat(r,"-line-2");js(t,r,"0",v[0],v[1],{color:f,lineDash:p,lineWidth:m,shadow:E},I),js(t,r,"1",v[2],v[3],{color:f,lineDash:p,lineWidth:m,shadow:E},_),o=!0;const C=this.getLinkedTextBoxStyle(c,i);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 b=this.configuration.getTextLines(h,l);if(!b||0===b.length)continue;let T;h.handles.textBox.hasMoved||(T=mc(v),h.handles.textBox.worldPosition=a.canvasToWorld(T));const D=a.worldToCanvas(h.handles.textBox.worldPosition),S=Zs(t,r,"1",b,D,v,{},C),{x:y,y:M,width:O,height:x}=S;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([y,M]),topRight:a.canvasToWorld([y+O,M]),bottomLeft:a.canvasToWorld([y,M+x]),bottomRight:a.canvasToWorld([y+O,M+x])}}return o})),ie(this,"_movingLongAxisWouldPutItThroughShortAxis",((e,t)=>{const n=ys.vec2.create();ys.vec2.set(n,t.end.x-t.start.x,t.end.y-t.start.y),ys.vec2.normalize(n,n);const i={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!Qc([i.start.x,i.start.y],[i.end.x,i.end.y],[e.start.x,e.start.y],[e.end.x,e.end.y])})),ie(this,"_calculateCachedStats",((e,t,n)=>{const{data:i}=e,{viewportId:o,renderingEngineId:a}=n,r=i.handles.points[0],s=i.handles.points[1],l=i.handles.points[2],d=i.handles.points[3],{cachedStats:c}=i,h=Object.keys(c);for(let e=0;e<h.length;e++){const n=h[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:a}=i,g=El(i),u=this._calculateLength(r,s)/g,v=this._calculateLength(l,d)/g,m=u>v?u:v,p=u>v?v:u,f=eh(o,r),E=eh(o,s),w=eh(o,l),I=eh(o,d);this._isInsideVolume(f,E,w,I,a)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,c[n]={length:m,width:p,unit:ml(null,i)}}e.invalidated=!1;const g=te.ANNOTATION_MODIFIED,u={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,g,u),c})),ie(this,"_isInsideVolume",((e,t,n,i,o)=>Q.utilities.indexWithinDimensions(e,o)&&Q.utilities.indexWithinDimensions(t,o)&&Q.utilities.indexWithinDimensions(n,o)&&Q.utilities.indexWithinDimensions(i,o))),ie(this,"_getSignedAngle",((e,t)=>Math.atan2(e[0]*t[1]-e[1]*t[0],e[0]*t[0]+e[1]*t[1]))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}addNewAnnotation(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o],[...o],[...o]],textBox:{hasMoved:!1,worldPosition:[0,0,0],worldBoundingBox:{topLeft:[0,0,0],topRight:[0,0,0],bottomLeft:[0,0,0],bottomRight:[0,0,0]}},activeHandleIndex:null},label:"",cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}}function nh(e,t){const{cachedStats:n,label:i}=e,{length:o,width:a,unit:r}=n[t],s=[];return i&&s.push(i),void 0===o||s.push("L: ".concat(mv(o)," ").concat(r),"W: ".concat(mv(a)," ").concat(r)),s}ie(th,"toolName",void 0),th.toolName="Bidirectional";const ih=th;function oh(e,t){const{data:n}=t,i=(0,Q.getEnabledElement)(e),o=(n.getSegment||ah)(i,n);if(!o)return;const a=i.viewport.getFrameOfReferenceUID(),r=_t(),{segmentIndex:s,segmentationId:l}=o,d=$e(this.toolName||ih.toolName,a);let c=!1;const h=d.filter((e=>{const{segment:t}=e.data;if(t)return t.segmentationId===l&&t.segmentIndex===s&&(c=!0,e.data.segment=t),!!t}));let g;if(c||h.push({data:{segment:o}}),h.forEach((e=>{const t=[],{segment:n}=e.data,{segmentIndex:s,segmentationId:l}=n;t[s]=n,tt(e.annotationUID);const d=Jc({...r.find((e=>e.segmentationId===l)),segments:t});if(!d)return;const c=Zc(d,i.viewport);c.annotationUID=e.annotationUID,c.data.segment=n;const h=Qe(c,a);if(n.segmentIndex===o.segmentIndex&&n.segmentationId===o.segmentationId){g=d;const{style:e}=o;e&&Zr.setAnnotationStyles(h,e)}})),g){const{referencedImageId:t}=g,n=i.viewport.getImageIds(),o=n.findIndex((e=>e===t));xs(e,{imageIndex:n.length-1-o}),i.viewport.render()}else console.warn("No bidirectional found");return g}function ah(e,t){var n,i;const o=_t();if(!o.length)return;const a=t.segmentationId||o[0].segmentationId,r=null!==(n=t.segmentIndex)&&void 0!==n?n:Wd(a);if(!r)return;const s=null===(i=t.segmentData)||void 0===i?void 0:i.get(r);return{label:"Segment ".concat(r),segmentIndex:r,segmentationId:a,...s}}function rh(e,t){const n=e.maxX-e.minX,i=e.maxY-e.minY,o=[n,i],a=[e.minX+n/2,e.minY+i/2],r=[Math.abs(t[0]-a[0]),Math.abs(t[1]-a[1])],s=r[0]-.5*o[0],l=r[1]-.5*o[1];if(s>0&&l>0)return s*s+l*l;const d=Math.max(s,0)+Math.max(l,0);return d*d}function sh(e,t){return Math.sqrt(rh(e,t))}function lh(e,t){return Math.sqrt(cc(e,t))}function dh(e,t){const[n,i]=e,[o,a]=t;return[2*o-n,2*a-i]}function ch(e,t,n){const i=[],o=function(e,t,n){let i,o;const a=[];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let r=i;r<e.length;r++)uh(t,n,e[o],e[r])&&a.push([o,r]),o=r;return a}(e,t,n,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);for(let a=0;a<o.length;a++){const r=ph(t,n,e[o[a][0]],e[o[a][1]]);i.push(r)}return i}function hh(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);for(let a=i;a<e.length;a++){if(uh(t,n,e[o],e[a]))return[o,a];o=a}}function gh(e,t,n){let i,o;arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(o=0,i=1):(o=e.length-1,i=0);const a=[];for(let r=i;r<e.length;r++){const i=e[o],s=e[r];uh(t,n,i,s)&&a.push([o,r]),o=r}if(0===a.length)return;const r=[];a.forEach((n=>{const i=[e[n[0]],e[n[1]]],o=[(i[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];r.push(ys.vec2.distance(o,t))}));const s=Math.min(...r);return{segment:a[r.indexOf(s)],distance:s}}function uh(e,t,n,i){let o=!1;const a=[vh(e,t,n),vh(e,t,i),vh(n,i,e),vh(n,i,t)];return a[0]!==a[1]&&a[2]!==a[3]||((0===a[0]&&mh(e,n,t)||0===a[1]&&mh(e,i,t)||0===a[2]&&mh(n,e,i)||0===a[3]&&mh(n,t,i))&&(o=!0),o)}function vh(e,t,n){const i=(t[1]-e[1])*(n[0]-t[0])-(t[0]-e[0])*(n[1]-t[1]);return 0===i?0:i>0?1:2}function mh(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 ph(e,t,n,i){const o=(i[1]-n[1])*(t[0]-e[0])-(i[0]-n[0])*(t[1]-e[1]);if(0==o)return;let a=e[1]-n[1],r=e[0]-n[0];const s=(i[0]-n[0])*a-(i[1]-n[1])*r,l=(t[0]-e[0])*a-(t[1]-e[1])*r;return a=s/o,r=l/o,[e[0]+a*(t[0]-e[0]),e[1]+a*(t[1]-e[1])]}const fh=.001,Eh=(e,t)=>{let n,i,o;if(e instanceof Q.StackViewport){const t=e.getImageData();i=t.direction.slice(0,3),o=t.direction.slice(3,6),n=t.spacing}else{const t=e.getImageData(),{direction:a,spacing:r}=t,{viewPlaneNormal:s,viewUp:l}=e.getCamera(),d=a.slice(0,3),c=a.slice(3,6),h=a.slice(6,9),g=ys.vec3.create();ys.vec3.cross(g,l,s);const u=Math.abs(ys.vec3.dot(g,d)),v=Math.abs(ys.vec3.dot(g,c)),m=Math.abs(ys.vec3.dot(g,h));let p;if(Math.abs(1-u)<fh)p=r[0],i=d;else if(Math.abs(1-v)<fh)p=r[1],i=c;else{if(!(Math.abs(1-m)<fh))throw new Error("No support yet for oblique plane planar contours");p=r[2],i=h}const f=Math.abs(ys.vec3.dot(l,d)),E=Math.abs(ys.vec3.dot(l,c)),w=Math.abs(ys.vec3.dot(l,h));let I;if(Math.abs(1-f)<fh)I=r[0],o=d;else if(Math.abs(1-E)<fh)I=r[1],o=c;else{if(!(Math.abs(1-w)<fh))throw new Error("No support yet for oblique plane planar contours");I=r[2],o=h}n=[p,I]}return{spacing:[n[0]/t,n[1]/t],xDir:i,yDir:o}},wh=(e,t,n)=>ys.vec2.dist(e,t)<n,Ih=(e,t,n,i)=>{const{xDir:o,yDir:a,spacing:r}=i,s=(0,Q.getEnabledElement)(e),{viewport:l}=s,d=l.canvasToWorld(t[t.length-1]),c=l.canvasToWorld(n),h=ys.vec3.create();ys.vec3.subtract(h,c,d);const g=Math.abs(ys.vec3.dot(h,o)),u=Math.abs(ys.vec3.dot(h,a)),v=Math.max(Math.floor(g/r[0]),Math.floor(u/r[0]));if(v>1){const e=t[t.length-1],i=ys.vec2.dist(e,n),o=ys.vec2.create();ys.vec2.subtract(o,n,e),ys.vec2.set(o,o[0]/i,o[1]/i);const a=i/v;for(let n=1;n<=v;n++)t.push([e[0]+a*o[0]*n,e[1]+a*o[1]*n])}else t.push(n);return v},_h=(e,t,n,i)=>{const o=[e[0]-t[0],e[1]-t[1]],a=[n[0]-t[0],n[1]-t[1]],r=o[0]*a[0]+o[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,d=[a[0]/s,a[1]/s],c=[d[0]*l,d[1]*l],h=[t[0]+c[0],t[1]+c[1]];return!(ys.vec2.distance(e,h)>i||ys.vec2.distance(t,h)>ys.vec2.distance(t,n))};function Ch(e){const t=e.length;let n=0,i=t-1;for(let o=0;o<t;o++)n+=(e[i][0]+e[o][0])*(e[i][1]-e[o][1]),i=o;return Math.abs(n/2)}const bh=1e-6,Th=1,Dh=0;function Sh(e,t,n){const[i,o]=n;if(Math.abs(t)<bh)return e<0;const a=e/t;if(t>0){if(a>o)return 0;a>i&&(n[0]=a)}else{if(a<i)return 0;a<o&&(n[1]=a)}return 1}function yh(e,t,n,i,o){const[a,r]=e,[s,l]=t,d=s-a,c=l-r;if(void 0===i||void 0===o?(i=e,o=t):(i[0]=e[0],i[1]=e[1],o[0]=t[0],o[1]=t[1]),Math.abs(d)<bh&&Math.abs(c)<bh&&a>=n[0]&&a<=n[2]&&r>=n[1]&&r<=n[3])return Th;const h=[0,1];if(Sh(n[0]-a,d,h)&&Sh(a-n[2],-d,h)&&Sh(n[1]-r,c,h)&&Sh(r-n[3],-c,h)){const[e,t]=h;return t<1&&(o[0]=a+t*d,o[1]=r+t*c),e>0&&(i[0]+=e*d,i[1]+=e*c),Th}return Dh}var Mh=C(807),Oh=C.n(Mh);function xh(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:.25;const a=e.getCamera(),{position:r}=a,{spacingInNormalDirection:s}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(e,a,n),l=s*o,d=e.getBounds(),c=d[0],h=d[1],g=[0,0,0];let u,v=[0,0,0];Oh().subtract(t,r,g);for(let t=c;t<=h;t+=l){v=[t,0,0];const n=(t-r[0])/g[0];if(v[1]=n*g[1]+r[1],v[2]=n*g[2]+r[2],Ph(v,d)){const t=i(e.getIntensityFromWorld(v),v);t&&(u=t)}}return u}const Ph=function(e,t){const[n,i,o,a,r,s]=t;return e[0]>n&&e[0]<i&&e[1]>o&&e[1]<a&&e[2]>r&&e[2]<s},Nh={filterAnnotationsWithinSlice:nc,getWorldWidthAndHeightFromCorners:pc,filterAnnotationsForDisplay:oc,getPointInLineOfSightWithCriteria:xh};function Rh(e){let t="";const n=e[0]<0?"R":"L",i=e[1]<0?"A":"P",o=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+=i,a[1]=0;else if(a[2]>r&&a[2]>a[0]&&a[2]>a[1])t+=o,a[2]=0;else if(a[0]>r&&a[1]>r&&a[0]===a[1])t+=n+i,a[0]=0,a[1]=0;else if(a[0]>r&&a[2]>r&&a[0]===a[2])t+=n+o,a[0]=0,a[2]=0;else{if(!(a[1]>r&&a[2]>r&&a[1]===a[2]))break;t+=i+o,a[1]=0,a[2]=0}return t}function Ah(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 kh=function(e){return e.CLIP_STOPPED="CORNERSTONE_CINE_TOOL_STOPPED",e.CLIP_STARTED="CORNERSTONE_CINE_TOOL_STARTED",e}(kh||{});const Lh=kh,Uh={};function Vh(e,t){const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;Uh[i]=t}function Wh(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n}=t;return Uh[n]}const{ViewportStatus:Fh}=Q.Enums,{triggerEvent:Hh}=Q.utilities,Bh=!0,Gh=!0,qh=new Map;function jh(e,t){var n;let i,o;if(void 0===e)throw new Error("playClip: element must not be undefined");const a=(0,Q.getEnabledElement)(e);if(!a)throw new Error("playClip: element must be a valid Cornerstone enabled element");t.dynamicCineEnabled=null===(n=t.dynamicCineEnabled)||void 0===n||n;const{viewport:r}=a,s=Xh(r),l=function(e,t){var n;if(e instanceof Q.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!==Fh.RENDERED?this.waitForRenderedCount++:(this.waitForRenderedCount=0,Os(e,{delta:n,debounceLoading:Bh}))}}}(e,null!==(n=t.waitForRendered)&&void 0!==n?n:30);if(e instanceof Q.VolumeViewport){const n=Xh(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,i={viewPlaneNormal:ys.vec3.create(),scrollInfo:null},o=()=>{const t=e.getCamera();if(!i.scrollInfo||!ys.vec3.equals(t.viewPlaneNormal,i.viewPlaneNormal)){const o=Q.utilities.getVolumeViewportScrollInfo(e,n);i.viewPlaneNormal=t.viewPlaneNormal,i.scrollInfo=o}return i.scrollInfo};return{get numScrollSteps(){return o().numScrollSteps},get currentStepIndex(){return o().currentStepIndex},get frameTimeVectorEnabled(){const n=e.getCamera(),i=t.direction.slice(6,9).map((e=>-e)),o=ys.vec3.dot(i,n.viewPlaneNormal);return ys.glMatrix.equals(o,1)},scroll(t){o().currentStepIndex+=t,Os(e,{delta:t})}}}(e,n)}throw new Error("Unknown viewport type")}(r,t);let d=Wh(e);const c=t.dynamicCineEnabled&&(null==s?void 0:s.isDynamicVolume());var h,g,u,v;if(c&&Yh(e),d?Kh(e,c):(d={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!==(g=t.frameTimeVectorSpeedMultiplier)&&void 0!==g?g:1,reverse:null!==(u=t.reverse)&&void 0!==u&&u,loop:null===(v=t.loop)||void 0===v||v},Vh(e,d)),d.dynamicCineEnabled=t.dynamicCineEnabled,(t.framesPerSecond<0||t.framesPerSecond>0)&&(d.framesPerSecond=Number(t.framesPerSecond),d.reverse=d.framesPerSecond<0,d.ignoreFrameTimeVector=!0),!0!==d.ignoreFrameTimeVector&&d.frameTimeVector&&d.frameTimeVector.length===l.numScrollSteps&&l.frameTimeVectorEnabled){const{timeouts:e,isTimeVarying:t}=function(e,t){let n,i,o,a=0;const r=e.length,s=[];let l=!1;for(("number"!=typeof t||t<=0)&&(t=1),n=1;n<r;n++)o=Number(e[n])/t|0,s.push(o),1===n?i=o:o!==i&&(l=!0),a+=o;return s.length>0&&(o=l?a/s.length|0:s[0],s.push(o)),{timeouts:s,isTimeVarying:l}}(d.frameTimeVector,d.speed);i=e,o=t}const m=()=>{const{numScrollSteps:t,currentStepIndex:n}=l;let i=n+(d.reverse?-1:1);if(!Gh&&(i<0||i>=t)){Kh(e,c);const t={element:e};return void Hh(e,Lh.CLIP_STOPPED,t)}i>=t?i=0:i<0&&(i=t-1);const o=i-n;o&&l.scroll(o)};c&&qh.set(s.volumeId,e),i&&i.length>0&&o?(d.usingFrameTimeVector=!0,d.intervalId=window.setTimeout((function e(){d.intervalId=window.setTimeout(e,i[l.currentStepIndex]),m()}),0)):(d.usingFrameTimeVector=!1,d.intervalId=window.setInterval(m,1e3/Math.abs(d.framesPerSecond)));const p={element:e};Hh(e,Lh.CLIP_STARTED,p)}function zh(e){Kh(e,!0)}function Kh(e,t){const n=(0,Q.getEnabledElement)(e);if(!n)return;const{viewport:i}=n,o=Wh(i.element);o&&function(e){const t=e.intervalId;void 0!==t&&(e.intervalId=void 0,e.usingFrameTimeVector?clearTimeout(t):clearInterval(t))}(o),t&&i instanceof Q.BaseVolumeViewport&&Yh(e)}function Yh(e){const{viewport:t}=(0,Q.getEnabledElement)(e),n=Xh(t);if(null!=n&&n.isDynamicVolume()){const t=qh.get(n.volumeId);qh.delete(n.volumeId),t&&t!==e&&zh(t)}}function Xh(e){const t=function(e){return e.getActors().map((e=>Q.cache.getVolume(e.uid))).filter((e=>!!e))}(e),n=t.find((e=>e.isDynamicVolume()));return null!=n?n:t[0]}function Jh(e){var t=e.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,t-1):Math.floor(n*t),o=e[i],a=e[i+1],r=i>0?e[i-1]:2*o-a,s=i<t-1?e[i+2]:2*a-o;return function(e,t,n,i,o){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)*i+r*o)/6}((n-i/t)*t,r,o,a,s)}}function Zh(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e(i/(t-1));return n}function $h(e){return e.length}function Qh(){return function(e){if(!(o=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 i=-1;for(let o of e)null!=(o=t(o,++i,e))&&(n>o||void 0===n&&o>=o)&&(n=o)}return n}(e,$h),i=new Array(n);++t<n;)for(var o,a=-1,r=i[t]=new Array(o);++a<o;)r[a]=e[a][t];return i}(arguments)}function eg(e,t,n,i){var o,a;const r=n-t+1,s=null!==(o=Math.floor(i/100*r))&&void 0!==o?o: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 d=Math.max(0,t),c=Math.min(e.length-1,n),h=e.slice(0,d),g=e.slice(c+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,i=Jh(t.map((t=>e[t][0]))),o=Jh(t.map((t=>e[t][1])));if(3===(null===(a=e[0])||void 0===a?void 0:a.length)){const a=Jh(t.map((t=>e[t][2])));return Qh(Zh(i,n),Zh(o,n),Zh(a,n))}return Qh(Zh(i,n),Zh(o,n));var a}(e,function(e,t){const n=[],[i,o]=t,a=o-i+1,r=Math.floor(a/e);let s=0,l=Math.round((a-1)/(r-1)*s)+i;for(;l<=o;)n.push(l),s++,l=Math.round((a-1)/(r-1)*s)+i;return n}(l,[d,c])),...g]}function tg(e){var t,n;return!0===(null==e||null===(t=e.interpolation)||void 0===t?void 0:t.interpolateOnAdd)||!0===(null==e||null===(n=e.interpolation)||void 0===n?void 0:n.interpolateOnEdit)}function ng(e,t,n){return(e+t+n)%t}function ig(e,t,n,i){const[,o,a]=e,[,r,s]=t,l=a.length,d=s.length;let c=e[0],h=t[0];if(!(a[c]&&s[h]&&a[o]&&s[r]))return[void 0,void 0];for(;c!==o&&h!==r;){if(n(s[h],a[c]))return[c,h];c=ng(c,l,i),h=ng(h,d,i)}return[void 0,void 0]}function og(e,t,n){const{interpolation:i}=e,o=t;if(i){const{knotsRatioPercentageOnAdd:e,knotsRatioPercentageOnEdit:o,interpolateOnAdd:a=!1,interpolateOnEdit:r=!1}=i,s=n?o:e;if(n?r:a){const[e,i]=n?function(e,t){const[n,i]=function(e,t){for(let n=0;n<e.length;n++)for(let i=0;i<t.length;i++)if(0===lh(e[n],t[i]))return[n,i]}(e,t)||[],o=(e,t)=>!1===function(e,t){return lh(e,t)<.001}(e,t),[a,r]=ig([ng(n,e.length,1),n,e],[ng(i,t.length,1),i,t],o,1),[s]=ig([ng(a,e.length,-1),a,e],[ng(r,t.length,-1),r,t],o,-1);return[a,s]}(t,n):[0,t.length-1];return t[e]&&t[i]?eg(t,e,i,s):t}}return o}function ag(e,t){const n=e[0],i=e[e.length-1],o=ys.vec2.create();ys.vec2.set(o,i[0]-n[0],i[1]-n[1]),ys.vec2.normalize(o,o);const a=ys.vec2.create(),r=ys.vec2.create();ys.vec2.set(a,-o[1],o[0]),ys.vec2.set(r,o[1],-o[0]);const s=[(n[0]+i[0])/2,(n[1]+i[1])/2],l={dist:0,index:null};for(let t=0;t<e.length;t++){const n=e[t],i=ys.vec2.dist(n,s);i>l.dist&&(l.dist=i,l.index=t)}return[e[l.index],s].map(t.canvasToWorld)}const{addCanvasPointsToArray:rg,pointsAreWithinCloseContourProximity:sg,getFirstIntersectionWithPolyline:lg,getSubPixelSpacingAndXYDirections:dg}=M;function cg(e,t,n){this.isDrawing=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,{spacing:d,xDir:c,yDir:h}=dg(l,this.configuration.subPixelResolution);this.drawData={canvasPoints:[r],polylineIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:d,xDir:c,yDir:h,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ds(a)}function hg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpDrawCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ls(e)}function gg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{annotation:d,viewportIdsToRender:c,xDir:h,yDir:g,spacing:u,movingTextBox:v}=this.commonData,{polylineIndex:m,canvasPoints:p}=this.drawData,f=p[p.length-1],E=l.canvasToWorld(f),w=ys.vec3.create();ys.vec3.subtract(w,o,E);const I=Math.abs(ys.vec3.dot(w,h)),_=Math.abs(ys.vec3.dot(w,g));if(!(I<=u[0]&&_<=u[1])){if(v){this.isDrawing=!1;const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.data.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else{const t=this.findCrossingIndexDuringCreate(e);if(void 0!==t)this.applyCreateOnCross(e,t);else{const e=rg(i,p,a,this.commonData);this.drawData.polylineIndex=m+e}}or(s,c)}}function ug(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n}=this.drawData,i=n[0],o=n[n.length-1],a=e.detail,{element:r}=a;t&&!sg(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(r):this.completeDrawClosedContour(r)}function vg(e){this.removeCrossedLinesOnCompleteDraw();const{canvasPoints:t}=this.drawData;if(this.haltDrawing(e,t))return!1;const{annotation:n,viewportIdsToRender:i}=this.commonData,o=(0,Q.getEnabledElement)(e),{viewport:a,renderingEngine:r}=o;rg(e,t,t[0],this.commonData),t.pop();const s=(tg(this.configuration)?og(this.configuration,t):t).map((e=>a.canvasToWorld(e)));n.data.polyline=s,n.data.isOpenContour=!1;const{textBox:l}=n.data.handles;return l.hasMoved||this.triggerAnnotationCompleted(n),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(r,i),this.deactivateDraw(e),!0}function mg(){const{canvasPoints:e}=this.drawData,t=e.length,n=[e[0],e[t-1]],i=e.slice(0,-1).slice(1),o=lg(i,n[0],n[1],!1);if(o){const t=o[1];this.drawData.canvasPoints=e.splice(0,t)}}function pg(e){const{canvasPoints:t}=this.drawData;if(this.haltDrawing(e,t))return!1;const{annotation:n,viewportIdsToRender:i}=this.commonData,o=(0,Q.getEnabledElement)(e),{viewport:a,renderingEngine:r}=o,s=(tg(this.configuration)?og(this.configuration,t):t).map((e=>a.canvasToWorld(e)));n.data.polyline=s,n.data.isOpenContour=!0;const{textBox:l}=n.data.handles;return n.data.handles.points=[s[0],s[s.length-1]],n.data.isOpenUShapeContour&&(n.data.openUShapeContourVectorToPeak=ag(t,a)),l.hasMoved||this.triggerAnnotationCompleted(n),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(r,i),this.deactivateDraw(e),!0}function fg(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{canvasPoints:r}=this.drawData,s=r.slice(0,-1),l=lg(s,o,a,!1);if(void 0!==l)return l[0]}function Eg(e,t){const n=e.detail,{element:i}=n,{canvasPoints:o}=this.drawData,{annotation:a,viewportIdsToRender:r}=this.commonData;rg(i,o,o[t],this.commonData),o.pop();for(let e=0;e<t;e++)o.shift();this.completeDrawClosedContour(i)&&this.activateClosedContourEdit(e,a,r)}function wg(e){const{allowOpenContours:t}=this.configuration,{canvasPoints:n}=this.drawData,i=n[0],o=n[n.length-1];t&&!sg(i,o,this.configuration.closeContourProximity)?this.completeDrawOpenContour(e):this.completeDrawClosedContour(e)}function Ig(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,i=(0,Q.getEnabledElement)(e),{renderingEngine:o}=i;return tt(t.annotationUID),this.isDrawing=!1,this.drawData=void 0,this.commonData=void 0,or(o,n),this.deactivateDraw(e),!0}return!1}const _g=function(e){e.activateDraw=cg.bind(e),e.deactivateDraw=hg.bind(e),e.applyCreateOnCross=Eg.bind(e),e.findCrossingIndexDuringCreate=fg.bind(e),e.completeDrawOpenContour=pg.bind(e),e.removeCrossedLinesOnCompleteDraw=mg.bind(e),e.mouseDragDrawCallback=gg.bind(e),e.mouseUpDrawCallback=ug.bind(e),e.completeDrawClosedContour=vg.bind(e),e.cancelDrawing=wg.bind(e),e.haltDrawing=Ig.bind(e)},{addCanvasPointsToArray:Cg,getFirstIntersectionWithPolyline:bg}=M;function Tg(e,t){const n=e.detail,{element:i,currentPoints:o,lastPoints:a}=n,r=o.canvas,s=a.canvas,{editCanvasPoints:l,prevCanvasPoints:d}=this.editData,c=bg(d,r,s,t);if(c)this.editData.startCrossingIndex=c[0],this.removePointsUpUntilFirstCrossing(t);else if(d.length>=2)if(l.length>this.configuration.checkCanvasEditFallbackProximity){const e=l[0],t=[];for(let n=0;n<d.length;n++){const i=d[n],o=ys.vec2.distance(i,e);t.push({distance:o,index:n})}t.sort(((e,t)=>e.distance-t.distance));const n=[t[0],t[1]],i=Math.min(n[0].index,n[1].index);this.editData.startCrossingIndex=i}else{const e=ys.vec2.create();ys.vec2.subtract(e,l[1],l[0]),ys.vec2.normalize(e,e);const n=6,o=[l[0][0]-e[0]*n,l[0][1]-e[1]*n],a=bg(d,o,l[0],t);if(a){const e=[o];Cg(i,e,l[0],this.commonData),l.unshift(...e),this.removePointsUpUntilFirstCrossing(t),this.editData.editIndex=l.length-1,this.editData.startCrossingIndex=a[0]}}}function Dg(e){const{editCanvasPoints:t,prevCanvasPoints:n}=this.editData;let i=0;for(let o=0;o<t.length-1;o++){const a=[t[o],t[o+1]];if(i++,bg(n,a[0],a[1],e))break}t.splice(0,i),this.editData.editIndex=t.length-1}function Sg(e,t){const n=e.detail,{currentPoints:i,lastPoints:o}=n,a=i.canvas,r=o.canvas,{prevCanvasPoints:s}=this.editData;return!!bg(s,a,r,t)}function yg(e){const{prevCanvasPoints:t,editCanvasPoints:n}=this.editData;for(let i=n.length-1;i>0;i--){const o=[n[i],n[i-1]],a=!!bg(t,o[0],o[1],e);if(n.pop(),a)break}}function Mg(){const{editCanvasPoints:e,prevCanvasPoints:t,startCrossingIndex:n}=this.editData;if(void 0===n)return;const i=e[e.length-1],o=[];for(let e=0;e<t.length;e++){const n=t[e],a=ys.vec2.distance(n,i);o.push({distance:a,index:e})}o.sort(((e,t)=>e.distance-t.distance));const a=e.slice(0,-1);for(let n=0;n<o.length;n++){const{index:i}=o[n],r=t[i],s=e[e.length-1];if(!bg(a,r,s,!1))return i}return-1}function Og(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.canvas,{editCanvasPoints:r}=this.editData,s=r.slice(0,-2),l=bg(s,o,a,!1);if(!l)return;const d=l[0],c=r.length-d;for(let e=0;e<c;e++)r.pop()}const xg=function(e){e.checkForFirstCrossing=Tg.bind(e),e.removePointsUpUntilFirstCrossing=Dg.bind(e),e.checkForSecondCrossing=Sg.bind(e),e.findSnapIndex=Mg.bind(e),e.removePointsAfterSecondCrossing=yg.bind(e),e.checkAndRemoveCrossesOnEditLine=Og.bind(e)},{getSubPixelSpacingAndXYDirections:Pg,addCanvasPointsToArray:Ng,calculateAreaOfPoints:Rg}=M;function Ag(e,t,n){this.isEditingClosed=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,d=t.data.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:g}=Pg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:g,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpClosedContourEditCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),a.addEventListener(te.TOUCH_END,this.mouseUpClosedContourEditCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpClosedContourEditCallback),ds(a)}function kg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpClosedContourEditCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragClosedContourEditCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpClosedContourEditCallback),ls(e)}function Lg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:g}=this.commonData,{editIndex:u,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),E=ys.vec3.create();ys.vec3.subtract(E,o,f);const w=Math.abs(ys.vec3.dot(E,c)),I=Math.abs(ys.vec3.dot(E,h));if(w<=g[0]&&I<=g[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const _=u+Ng(i,v,a,this.commonData);this.editData.editIndex=_,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)),or(s,d)):this.finishEditAndStartNewEdit(e)}function Ug(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData,c=l.map((e=>o.canvasToWorld(e)));r.data.polyline=c,r.data.isOpenContour=!1,this.triggerAnnotationModified(r,i);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0,snapIndex:void 0},or(a,s)}function Vg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Ng(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=ys.vec2.distance(t[l],s[0]),h=ys.vec2.distance(t[l],s[s.length-1]),g=ys.vec2.distance(t[d],s[0]),u=ys.vec2.distance(t[d],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}let m=c+u,p=h+g;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=d;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}const f=[];for(let e=l;e<d;e++){const n=t[e];f.push([n[0],n[1]])}if(m=g+h,p=u+c,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 Rg(v)>Rg(f)?v:f}function Wg(e){const t=e.detail,{element:n}=t;this.completeClosedContourEdit(n)}function Fg(e){const t=(0,Q.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const e=(tg(this.configuration)?og(this.configuration,r,s):r).map((e=>n.canvasToWorld(e)));o.data.polyline=e,o.data.isOpenContour=!1,o.invalidated=!0,this.triggerAnnotationModified(o,t)}this.isEditingClosed=!1,this.editData=void 0,this.commonData=void 0,or(i,a),this.deactivateClosedContourEdit(e)}function Hg(e){this.completeClosedContourEdit(e)}const Bg=function(e){e.activateClosedContourEdit=Ag.bind(e),e.deactivateClosedContourEdit=kg.bind(e),e.mouseDragClosedContourEditCallback=Lg.bind(e),e.mouseUpClosedContourEditCallback=Wg.bind(e),e.finishEditAndStartNewEdit=Ug.bind(e),e.fuseEditPointsWithClosedContour=Vg.bind(e),e.cancelClosedContourEdit=Hg.bind(e),e.completeClosedContourEdit=Fg.bind(e)},{addCanvasPointsToArray:Gg,getSubPixelSpacingAndXYDirections:qg}=M;function jg(e,t,n){this.isEditingOpen=!0;const i=e.detail,{currentPoints:o,element:a}=i,r=o.canvas,s=(0,Q.getEnabledElement)(a),{viewport:l}=s,d=t.data.polyline.map(l.worldToCanvas),{spacing:c,xDir:h,yDir:g}=qg(l,this.configuration.subPixelResolution);this.editData={prevCanvasPoints:d,editCanvasPoints:[r],startCrossingIndex:void 0,editIndex:0},this.commonData={annotation:t,viewportIdsToRender:n,spacing:c,xDir:h,yDir:g,movingTextBox:!1},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpOpenContourEditCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),a.addEventListener(te.TOUCH_END,this.mouseUpOpenContourEditCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpOpenContourEditCallback),ds(a)}function zg(e){Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.MOUSE_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(te.MOUSE_CLICK,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.TOUCH_END,this.mouseUpOpenContourEditCallback),e.removeEventListener(te.TOUCH_DRAG,this.mouseDragOpenContourEditCallback),e.removeEventListener(te.TOUCH_TAP,this.mouseUpOpenContourEditCallback),ls(e)}function Kg(e){const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{renderingEngine:s,viewport:l}=r,{viewportIdsToRender:d,xDir:c,yDir:h,spacing:g}=this.commonData,{editIndex:u,editCanvasPoints:v,startCrossingIndex:m}=this.editData,p=v[v.length-1],f=l.canvasToWorld(p),E=ys.vec3.create();ys.vec3.subtract(E,o,f);const w=Math.abs(ys.vec3.dot(E,c)),I=Math.abs(ys.vec3.dot(E,h));if(w<=g[0]&&I<=g[1])return;void 0!==m&&this.checkAndRemoveCrossesOnEditLine(e);const _=u+Gg(i,v,a,this.commonData);this.editData.editIndex=_,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),or(s,d)}function Yg(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o}=i,{annotation:a,viewportIdsToRender:r}=this.commonData,s=this.fuseEditPointsForOpenContourEndEdit().map((e=>o.canvasToWorld(e)));a.data.polyline=s,a.data.isOpenContour=!0,a.data.handles.points=[s[0],s[s.length-1]],a.data.handles.activeHandleIndex=1,this.triggerAnnotationModified(a,i),this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,this.deactivateOpenContourEdit(n),this.activateOpenContourEndEdit(e,a,r,null)}function Xg(e){const t=e.detail,{currentPoints:n,lastPoints:i}=t,o=n.canvas,a=i.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 d=o,c=a,h=s[r],g=ys.vec2.create(),u=ys.vec2.create();ys.vec2.set(g,d[0]-c[0],d[1]-c[1]),ys.vec2.set(u,d[0]-h[0],d[1]-h[1]);const v=ys.vec2.dot(g,u),m=Math.sqrt(g[0]*g[0]+g[1]*g[1]),p=Math.sqrt(u[0]*u[0]+u[1]*u[1]);return Math.acos(v/(m*p))<Math.PI/2}function Jg(){const{snapIndex:e,prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i}=this.editData,o=[];if(0===e)for(let e=t.length-1;e>=i;e--){const n=t[e];o.push([n[0],n[1]])}else for(let e=0;e<i;e++){const n=t[e];o.push([n[0],n[1]])}if(ys.vec2.distance(t[i],n[0])<ys.vec2.distance(t[i],n[n.length-1]))for(let e=0;e<n.length;e++){const t=n[e];o.push([t[0],t[1]])}else for(let e=n.length-1;e>=0;e--){const t=n[e];o.push([t[0],t[1]])}return o}function Zg(e){const{prevCanvasPoints:t,editCanvasPoints:n,startCrossingIndex:i,snapIndex:o}=this.editData;if(void 0===i||void 0===o)return;const a=e.detail,{element:r}=a,s=[...n];let l,d;Gg(r,s,t[o],this.commonData),s.length>n.length&&s.pop(),i>o?(l=o,d=i):(l=i,d=o);const c=ys.vec2.distance(t[l],s[0]),h=ys.vec2.distance(t[l],s[s.length-1]),g=ys.vec2.distance(t[d],s[0]),u=ys.vec2.distance(t[d],s[s.length-1]),v=[];for(let e=0;e<l;e++){const n=t[e];v.push([n[0],n[1]])}if(c+u<h+g)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=d;e<t.length;e++){const n=t[e];v.push([n[0],n[1]])}return v}function $g(e){const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o,renderingEngine:a}=i,{annotation:r,viewportIdsToRender:s}=this.commonData,{fusedCanvasPoints:l,editCanvasPoints:d}=this.editData,c=l.map((e=>o.canvasToWorld(e)));r.data.polyline=c,r.data.isOpenContour=!0,r.data.handles.points=[c[0],c[c.length-1]],this.triggerAnnotationModified(r,i);const h=d.pop();this.editData={prevCanvasPoints:l,editCanvasPoints:[h],startCrossingIndex:void 0,editIndex:0},or(a,s)}function Qg(e){const t=e.detail,{element:n}=t;this.completeOpenContourEdit(n)}function eu(e){const t=(0,Q.getEnabledElement)(e),{viewport:n,renderingEngine:i}=t,{annotation:o,viewportIdsToRender:a}=this.commonData,{fusedCanvasPoints:r,prevCanvasPoints:s}=this.editData;if(r){const e=(tg(this.configuration)?og(this.configuration,r,s):r).map((e=>n.canvasToWorld(e)));o.data.polyline=e,o.data.isOpenContour=!0,o.data.handles.points=[e[0],e[e.length-1]],o.data.isOpenUShapeContour&&(o.data.openUShapeContourVectorToPeak=ag(r,n)),o.invalidated=!0,this.triggerAnnotationModified(o,t)}this.isEditingOpen=!1,this.editData=void 0,this.commonData=void 0,or(i,a),this.deactivateOpenContourEdit(e)}function tu(e){this.completeOpenContourEdit(e)}const nu=function(e){e.activateOpenContourEdit=jg.bind(e),e.deactivateOpenContourEdit=zg.bind(e),e.mouseDragOpenContourEditCallback=Kg.bind(e),e.mouseUpOpenContourEditCallback=Qg.bind(e),e.fuseEditPointsWithOpenContour=Zg.bind(e),e.finishEditOpenOnSecondCrossing=$g.bind(e),e.checkIfShouldOverwriteAnEnd=Xg.bind(e),e.fuseEditPointsForOpenContourEndEdit=Jg.bind(e),e.openContourEditOverwriteEnd=Yg.bind(e),e.cancelOpenContourEdit=tu.bind(e),e.completeOpenContourEdit=eu.bind(e)},{getSubPixelSpacingAndXYDirections:iu}=M;function ou(e,t,n,i){this.isDrawing=!0;const o=e.detail,{element:a}=o,r=(0,Q.getEnabledElement)(a),{viewport:s}=r,{spacing:l,xDir:d,yDir:c}=iu(s,this.configuration.subPixelResolution),h=t.data.polyline.map(s.worldToCanvas);0===t.data.handles.activeHandleIndex&&h.reverse();let g=!1;i.worldPosition&&(g=!0),this.drawData={canvasPoints:h,polylineIndex:h.length-1},this.commonData={annotation:t,viewportIdsToRender:n,spacing:l,xDir:d,yDir:c,movingTextBox:g},Ge.isInteractingWithTool=!0,a.addEventListener(te.MOUSE_UP,this.mouseUpDrawCallback),a.addEventListener(te.MOUSE_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.MOUSE_CLICK,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_END,this.mouseUpDrawCallback),a.addEventListener(te.TOUCH_DRAG,this.mouseDragDrawCallback),a.addEventListener(te.TOUCH_TAP,this.mouseUpDrawCallback),ds(a)}const au=function(e){e.activateOpenContourEndEdit=ou.bind(e)},{pointsAreWithinCloseContourProximity:ru}=M;function su(e,t){const n={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id,annotationUID:t.annotationUID},i=this.getStyle("lineWidth",n,t),o=this.getStyle("lineDash",n,t),a=this.getStyle("color",n,t);return{color:void 0===a?void 0:a,width:void 0===i?void 0:i,lineDash:void 0===o?void 0:o,connectLastToFirst:!t.data.isOpenContour}}function lu(e,t,n){var i;null!=e&&null!==(i=e.viewport)&&void 0!==i&&i.getImageData()&&(n.data.isOpenContour?n.data.isOpenUShapeContour?(function(e,t){t.data.openUShapeContourVectorToPeak||(t.data.openUShapeContourVectorToPeak=function(e,t){const{viewport:n}=e;return ag(t.data.polyline.map(n.worldToCanvas),n)}(e,t))}(e,n),this.renderOpenUShapedContour(e,t,n)):this.renderOpenContour(e,t,n):this.renderClosedContour(e,t,n))}function du(e,t,n){const{viewport:i}=e,o=this._getRenderingOptions(e,n),a=n.data.polyline.map((e=>i.worldToCanvas(e)));zs(t,n.annotationUID,"1",a,o)}function cu(e,t,n){var i;const{viewport:o}=e,a=this._getRenderingOptions(e,n),r=n.data.polyline.map((e=>o.worldToCanvas(e)));zs(t,n.annotationUID,"1",r,a);const s=n.data.handles.activeHandleIndex;if(!0===(null===(i=this.configuration.alwaysRenderOpenContourHandles)||void 0===i?void 0:i.enabled)){const e=this.configuration.alwaysRenderOpenContourHandles.radius,i="0",o=[r[0],r[r.length-1]];0===s?o.shift():1===s&&o.pop(),qs(t,n.annotationUID,i,o,{color:a.color,handleRadius:e})}if(null!==s){const e="1",i=r[0===s?0:r.length-1];qs(t,n.annotationUID,e,[i],{color:a.color})}}function hu(e,t,n){const{viewport:i}=e,{polyline:o,openUShapeContourVectorToPeak:a}=n.data;if(this.renderOpenContour(e,t,n),!a)return;const r=i.worldToCanvas(o[0]),s=i.worldToCanvas(o[o.length-1]),l=[i.worldToCanvas(a[0]),i.worldToCanvas(a[1])],d=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"first-to-last",[r,s],{color:d.color,width:d.width,connectLastToFirst:!1,lineDash:"2,2"}),zs(t,n.annotationUID,"midpoint-to-open-contour",[l[0],l[1]],{color:d.color,width:d.width,connectLastToFirst:!1,lineDash:"2,2"})}function gu(e,t,n){const i=this._getRenderingOptions(e,n),{allowOpenContours:o}=this.configuration,{canvasPoints:a}=this.drawData;if(i.connectLastToFirst=!1,zs(t,n.annotationUID,"1",a,i),o){const e=a[0],o=a[a.length-1];if(ru(e,o,this.configuration.closeContourProximity))zs(t,n.annotationUID,"2",[o,e],i);else{const o="0";qs(t,n.annotationUID,o,[e],{color:i.color,handleRadius:2})}}}function uu(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderClosedContour(e,t,n);const o=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"preview-1",i,o)}function vu(e,t,n){const{fusedCanvasPoints:i}=this.editData;if(void 0===i)return void this.renderOpenContour(e,t,n);const o=this._getRenderingOptions(e,n);zs(t,n.annotationUID,"preview-1",i,o)}const mu=function(e){e.renderContour=lu.bind(e),e.renderClosedContour=du.bind(e),e.renderOpenContour=cu.bind(e),e.renderOpenUShapedContour=hu.bind(e),e.renderContourBeingDrawn=gu.bind(e),e.renderClosedContourBeingEdited=uu.bind(e),e.renderOpenContourBeingEdited=vu.bind(e),e._getRenderingOptions=su.bind(e)},{pointCanProjectOnLine:pu}=M,{EPSILON:fu}=Q.CONSTANTS,Eu=1-fu;class wu extends dc{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,alwaysRenderOpenContourHandles:{enabled:!1,radius:2},allowOpenContours:!0,closeContourProximity:10,checkCanvasEditFallbackProximity:6,subPixelResolution:4,interpolation:{interpolateOnAdd:!1,interpolateOnEdit:!1,knotsRatioPercentageOnAdd:40,knotsRatioPercentageOnEdit:40},calculateStats:!1,getTextLines:Iu,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"commonData",void 0),ie(this,"isDrawing",!1),ie(this,"isEditingClosed",!1),ie(this,"isEditingOpen",!1),ie(this,"activateDraw",void 0),ie(this,"activateClosedContourEdit",void 0),ie(this,"activateOpenContourEdit",void 0),ie(this,"activateOpenContourEndEdit",void 0),ie(this,"cancelDrawing",void 0),ie(this,"cancelClosedContourEdit",void 0),ie(this,"cancelOpenContourEdit",void 0),ie(this,"renderContour",void 0),ie(this,"renderContourBeingDrawn",void 0),ie(this,"renderClosedContourBeingEdited",void 0),ie(this,"renderOpenContourBeingEdited",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=Qd(i,this.getToolName()),u=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h,toolName:this.getToolName()},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]}}},polyline:[[...o]],label:"",cachedStats:{}}};return Qe(v,i),this.activateDraw(e,v,g),e.preventDefault(),or(s,g),v})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,a=Qd(o,this.getToolName());this.activateOpenContourEndEdit(e,t,a,n)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n,o=Qd(i,this.getToolName());t.data.isOpenContour?this.activateOpenContourEdit(e,t,o):this.activateClosedContourEdit(e,t,o)})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,r=t.data.polyline;let s=a.worldToCanvas(r[0]);for(let e=1;e<r.length;e++){const t=s,o=a.worldToCanvas(r[e]);if(!0===pu(n,t,o,i))return!0;s=o}if(t.data.isOpenContour)return!1;const l=a.worldToCanvas(r[0]),d=a.worldToCanvas(r[r.length-1]);return!0===pu(n,l,d,i)})),ie(this,"cancel",(e=>{const t=this.isDrawing,n=this.isEditingOpen,i=this.isEditingClosed;t?this.cancelDrawing(e):n?this.cancelOpenContourEdit(e):i&&this.cancelClosedContourEdit(e)})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"triggerAnnotationCompleted",(e=>{const t=te.ANNOTATION_COMPLETED,n={annotation:e};(0,Q.triggerEvent)(Q.eventTarget,t,n)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,renderingEngine:r}=e,{element:s}=a,l=this.getTargetId(a);let d=$e(this.getToolName(),s);if(null===(n=d)||void 0===n||!n.length)return o;if(d=this.filterInteractableAnnotationsForElement(s,d),null===(i=d)||void 0===i||!i.length)return o;const c=this.isDrawing,h=this.isEditingOpen,g=this.isEditingClosed;if(c||h||g){const n=this.commonData.annotation.annotationUID;d.forEach((i=>{if(i.annotationUID===n)if(c)this.renderContourBeingDrawn(e,t,i);else if(g)this.renderClosedContourBeingEdited(e,t,i);else{if(!h)throw new Error("Unknown ".concat(this.getToolName()," annotation rendering state"));this.renderOpenContourBeingEdited(e,t,i)}else this.renderContour(e,t,i)})),o=!0}else d.forEach((n=>{this.renderContour(e,t,n)}));return this.configuration.calculateStats?(d.forEach((n=>{var i,o,s;const d=null===(i=this.commonData)||void 0===i?void 0:i.annotation.annotationUID;if(n.annotationUID!==d||null!==(o=this.commonData)&&void 0!==o&&o.movingTextBox){if(null===(s=this.commonData)||void 0===s||!s.movingTextBox){const{data:t}=n;t.cachedStats[l]&&null!=t.cachedStats[l].areaUnit?n.invalidated&&this._throttledCalculateCachedStats(n,a,r,e):(t.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(n,a,r,e))}this._renderStats(n,a,e,t)}})),o):void 0})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{cachedStats:a,polyline:r}=o,s=Object.keys(a);for(let i=0;i<s.length;i++){var l,d,c;const o=s[i],h=this.getTargetIdImage(o,n);if(!h)continue;const{imageData:g,metadata:u}=h,v=r.map((e=>t.worldToCanvas(e))),m=v[0],p=t.canvasToWorld(m),f=t.canvasToWorld([m[0]+1,m[1]]),E=t.canvasToWorld([m[0],m[1]+1]),w=ys.vec3.distance(p,f),I=ys.vec3.distance(p,E),_=El(h);let C=Ch(v)/_/_;C*=w*I;const b=Q.utilities.transformWorldToIndex(g,r[0]);b[0]=Math.floor(b[0]),b[1]=Math.floor(b[1]),b[2]=Math.floor(b[2]);let T=b[0],D=b[0],S=b[1],y=b[1],M=b[2],O=b[2];for(let e=1;e<r.length;e++){const t=Q.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]),D=Math.max(D,t[0]),S=Math.min(S,t[1]),y=Math.max(y,t[1]),M=Math.min(M,t[2]),O=Math.max(O,t[2])}const x=.01*(D-T),P=.01*(y-S),N=.01*(O-M);T=Math.floor(T-x),D=Math.ceil(D+x),S=Math.floor(S-P),y=Math.ceil(y+P),M=Math.floor(M-N),O=Math.ceil(O+N);const R=[[T,D],[S,y],[M,O]],A=g.indexToWorld([D,y,O]),k=t.worldToCanvas(A);let L=0,U=[],V=0;const W=Cl(g,((e,n)=>{let i=!0;const o=t.worldToCanvas(e);return o[1]!=L&&(V=0,L=o[1],U=ch(v,o,[k[0],o[1]]),U.sort((function(e,t){return e[0]===t[0]?0:e[0]<t[0]?-1:1}))),U.length&&o[0]>U[0][0]&&(U.shift(),V++),V%2==0&&(i=!1),i}),this.configuration.statsCalculator.statsCallback,R),F={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},H=fc(u.Modality,e.metadata.referencedImageId,F),B=this.configuration.statsCalculator.getStatistics();a[o]={Modality:u.Modality,area:C,mean:null===(l=B[1])||void 0===l?void 0:l.value,max:null===(d=B[0])||void 0===d?void 0:d.value,stdDev:null===(c=B[3])||void 0===c?void 0:c.value,statsArray:B,pointsInShape:W,areaUnit:fl(null,h),modalityUnit:H}}return this.triggerAnnotationModified(e,i),e.invalidated=!1,a})),ie(this,"_renderStats",((e,t,n,i)=>{var o;const a=e.data,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 d=this.configuration.getTextLines(a,r);if(!d||0===d.length)return;const c=a.polyline.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=mc(c);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),g=Zs(i,null!==(o=e.annotationUID)&&void 0!==o?o:"","1",d,h,c,{},l),{x:u,y:v,width:m,height:p}=g;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,v]),topRight:t.canvasToWorld([u+m,v]),bottomLeft:t.canvasToWorld([u,v+p]),bottomRight:t.canvasToWorld([u+m,v+p])}})),_g(this),xg(this),Bg(this),nu(this),au(this),mu(this),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}filterInteractableAnnotationsForElement(e,t){if(!t||!t.length)return;const n=(0,Q.getEnabledElement)(e),{viewport:i}=n;let o;if(i instanceof Q.VolumeViewport){const e=i.getCamera(),{spacingInNormalDirection:n}=Q.utilities.getTargetVolumeAndSpacingInNormalDir(i,e);o=this.filterAnnotationsWithinSlice(t,e,n)}else o=oc(i,t);return o}filterAnnotationsWithinSlice(e,t,n){const{viewPlaneNormal:i}=t,o=e.filter((e=>{const t=e.metadata.viewPlaneNormal,n=Math.abs(ys.vec3.dot(i,t))>Eu;return t&&n}));if(!o.length)return[];const a=n/2,{focalPoint:r}=t,s=[];for(const e of o){const t=e.data.polyline[0];if(!e.isVisible)continue;const n=ys.vec3.create();ys.vec3.sub(n,r,t);const o=ys.vec3.dot(n,i);Math.abs(o)<a&&s.push(e)}return s}}function Iu(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(l);c.push(e)}return o&&c.push("Mean: ".concat(mv(o)," ").concat(d)),r&&c.push("Max: ".concat(mv(r)," ").concat(d)),a&&c.push("Std Dev: ".concat(mv(a)," ").concat(d)),c}ie(wu,"toolName",void 0),wu.toolName="PlanarFreehandROI";const _u=wu;function Cu(e,t,n){if(function(e,t,n){var i;if(null==t||null===(i=t.data)||void 0===i||!i.polyline||n<=0)return!0;if(!e.viewport)return!0;const{renderingEngineId:o,viewportId:a,FrameOfReferenceUID:r}=e,s=Mi(a,o);if(t.metadata.FrameOfReferenceUID!==r)return!0;if(!s)return!0;const l=s.getToolInstance(t.metadata.toolName);return!(l instanceof _u)||l.isDrawing||l.isEditingOpen||l.isEditingClosed}(e,t,n))return!1;const{viewport:i}=e,o=t.data.polyline.map(i.worldToCanvas),a=eg(o,0,o.length,n);return a!==o&&(t.data.polyline=a.map(i.canvasToWorld),!0)}const bu={interpolateAnnotation:Cu},{isEqual:Tu}=Q.utilities,Du=[ys.vec3.fromValues(1,0,0),ys.vec3.fromValues(0,1,0),ys.vec3.fromValues(0,0,1)];function Su(e){const t=ys.vec3.subtract(ys.vec3.create(),e[0],e[1]),n=ys.vec3.subtract(ys.vec3.create(),e[0],e[2]);return[...yu(t,Du),...yu(n,Du)].every((e=>Tu(e,0)||Tu(e,90)||Tu(e,180)||Tu(e,270)))}function yu(e,t){return t.map((t=>180*ys.vec3.angle(e,t)/Math.PI))}const Mu={};function Ou(e,t){const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;Mu[i]=t}function xu(e){const t=(0,Q.getEnabledElement)(e),{viewportId:n}=t;return Mu[n]}const Pu=Q.Enums.RequestType.Prefetch,Nu=0;function Ru(e,t){e=Math.round(e)||0;const n=[];let i=(t=Math.round(t)||0)-e+1;if(i<=0)return n;for(;i--;)n[i]=t--;return n}function Au(e){const t=(0,Q.getEnabledElement)(e);if(!t)return null;const{viewport:n}=t;return n instanceof Q.StackViewport?{currentImageIdIndex:n.getCurrentImageIdIndex(),imageIds:n.getImageIds()}:(console.warn("stackPrefetch: element must be a StackViewport, VolumeViewport stackPrefetch not yet implemented"),null)}function ku(e){return function(t){const n=t.detail;let i;try{i=Au(e)}catch(e){return}if(!i||!i.imageIds||0===i.imageIds.length)return;const o=i.imageIds.indexOf(n.imageId);if(o<0)return;const a=xu(e);a&&a.data&&a.data.length&&a.indicesToRequest.push(o)}}const Lu=e=>{const t=new Set(e.imageIds);return e=>e.type!==Pu||!t.has(e.additionalDetails.imageId)};let Uu,Vu={maxImagesToPrefetch:1/0,preserveExistingPool:!0};function Wu(e){var t,n;const i=xu(e);if(!i)return;const o=i||{},a=Au(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(o.enabled&&(o.enabled=null===(n=o.indicesToRequest)||void 0===n?void 0:n.length),!1===o.enabled)return;if(i.indicesToRequest.sort(((e,t)=>e-t)),o.indicesToRequest.slice().forEach((function(e){const t=a.imageIds[e];t&&(Math.abs(r-e)<6?Q.cache.getImageLoadObject(t):Q.cache.isLoaded(t))&&function(e){const t=o.indicesToRequest.indexOf(e);t>-1&&o.indicesToRequest.splice(t,1)}(e)})),!o.indicesToRequest.length)return;Vu.preserveExistingPool||Q.imageLoadPoolManager.clearRequestStack(Pu);const s=function(e,t){let n=0,i=e.length-1;return e.forEach(((e,o)=>{e<t?n=Math.max(o,n):e>t&&(i=Math.min(o,i))})),{low:n,high:i}}(o.indicesToRequest,a.currentImageIdIndex);let l,d,c=s.low,h=s.high;const g=[];for(;c>=0||h<o.indicesToRequest.length;){const e=a.currentImageIdIndex,t=!(e-o.indicesToRequest[c]>Vu.maxImagesToPrefetch)&&c>=0,n=!(o.indicesToRequest[h]-e>Vu.maxImagesToPrefetch)&&h<o.indicesToRequest.length;if(!n&&!t)break;t&&(d=o.indicesToRequest[c--],l=a.imageIds[d],g.push(l)),n&&(d=o.indicesToRequest[h++],l=a.imageIds[d],g.push(l))}const u=(e,t)=>Q.imageLoader.loadAndCacheImage(e,t),{useNorm16Texture:v}=(0,Q.getConfiguration)().rendering;g.forEach((e=>{const t={targetBuffer:{type:v?void 0:"Float32Array"},preScale:{enabled:!0},requestType:Pu};Q.imageLoadPoolManager.addRequest(u.bind(null,e,t),Pu,{imageId:e},Nu)}))}function Fu(e){clearTimeout(Uu),Uu=setTimeout((function(){const t=e.target;try{Wu(t)}catch(e){return}}),10)}const Hu={enable:function(e){const t=Au(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const n={indicesToRequest:Ru(0,t.imageIds.length-1),enabled:!0,direction:1},i=n.indicesToRequest.indexOf(t.currentImageIdIndex);n.indicesToRequest.splice(i,1),Ou(e,n),Wu(e),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu),e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu);const o=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o),Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,o)},disable:function(e){clearTimeout(Uu),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,Fu);const t=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=xu(e);n&&n.indicesToRequest.length&&(n.enabled=!1,Q.imageLoadPoolManager.clearRequestStack(Pu))},getConfiguration:function(){return Vu},setConfiguration:function(e){Vu=e}};let Bu,Gu={maxImagesToPrefetch:1/0,minBefore:2,maxAfter:2,directionExtraImages:10,preserveExistingPool:!1};function qu(e){var t,n;const i=Au(e);if(null==i||null===(t=i.imageIds)||void 0===t||!t.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const o=xu(e);if(!o)return;const a=o||{};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}=i;if(s.forEach((e=>{const t=i.imageIds[e];t&&(Math.abs(l-e)<6?Q.cache.getImageLoadObject(t):Q.cache.isLoaded(t))&&r(e)})),!a.indicesToRequest.length)return;Gu.preserveExistingPool||Q.imageLoadPoolManager.filterRequests(Lu(i));const d=(t,n)=>Q.imageLoader.loadAndCacheImage(t,n).then((()=>function(t){var n;r(i.imageIds.indexOf(t));const o=Q.cache.getCachedImageBasedOnImageURI(t),{stats:s}=a,l=(null==o||null===(n=o.image)||void 0===n?void 0:n.decodeTimeInMS)||0;if(l){var d;s.imageIds.set(t,l),s.decodeTimeInMS+=l;const e=(null==o||null===(d=o.image)||void 0===d?void 0:d.loadTimeInMS)||0;s.loadTimeInMS+=e}if(!a.indicesToRequest.length&&null!=o&&o.sizeInBytes){const{sizeInBytes:t}=o,n=Q.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",mv(s.fillTime/e),"ms","average load",mv(s.loadTimeInMS/e),"ms","average decode",mv(s.decodeTimeInMS/e),"ms")}}else s.initialTime=Date.now()-s.start,s.initialSize=s.imageIds.size,zu(e,n),qu(e)}}(t))),{useNorm16Texture:c}=(0,Q.getConfiguration)().rendering;s.forEach((e=>{const t=i.imageIds[e],n={targetBuffer:{type:c?void 0:"Float32Array"},preScale:{enabled:!0},requestType:Pu};Q.imageLoadPoolManager.addRequest(d.bind(null,t,n),Pu,{imageId:t},Nu)}))}function ju(e){clearTimeout(Bu),Bu=setTimeout((function(){const t=e.target;try{zu(t),qu(t)}catch(e){return}}),5)}const zu=(e,t)=>{const n=Au(e);if(!n||!n.imageIds||0===n.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");const{currentImageIdIndex:i}=n;let{maxAfter:o=2,minBefore:a=2}=Gu;const{directionExtraImages:r=10}=Gu,s=xu(e)||{indicesToRequest:[],currentImageIdIndex:i,stackCount:0,enabled:!0,direction:1,stats:{start:Date.now(),imageIds:new Map,decodeTimeInMS:0,loadTimeInMS:0,totalBytes:0}},l=i-s.currentImageIdIndex;if(s.direction=l<0?-1:1,s.currentImageIdIndex=i,s.enabled=!0,s.stackCount<100&&(s.stackCount+=r),Math.abs(l)>o||!l)if(s.stackCount=0,t){const e=i/n.imageIds.length;a=Math.ceil(t*e),o=Math.ceil(t*(1-e)),s.cacheFill=!0}else s.cacheFill=!1;else l<0?(a+=s.stackCount,o=0):(o+=s.stackCount,a=0);const d=Math.max(0,i-a),c=Math.min(n.imageIds.length-1,i+o),h=[];for(let e=i+1;e<=c;e++)h.push(e);for(let e=i-1;e>=d;e--)h.push(e);s.indicesToRequest=h,Ou(e,s)},Ku={enable:e=>{const t=Au(e);if(!t||!t.imageIds||0===t.imageIds.length)return void console.warn("CornerstoneTools.stackPrefetch: No images in stack.");zu(e),qu(e),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju),e.addEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju);const n=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n),Q.eventTarget.addEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,n)},disable:function(e){clearTimeout(Bu),e.removeEventListener(Q.Enums.Events.STACK_NEW_IMAGE,ju);const t=ku(e);Q.eventTarget.removeEventListener(Q.Enums.Events.IMAGE_CACHE_IMAGE_REMOVED,t);const n=xu(e);n&&n.data.length&&(n.enabled=!1)},getConfiguration:function(){return Gu},setConfiguration:function(e){Gu=e}};function Yu(e,t){if(!(e instanceof Q.VolumeViewport))return;const{focalPoint:n}=e.getCamera(),i=[0,0,0];return ys.vec3.sub(i,t,n),function(e,t){const n=e.getCamera(),i=n.viewPlaneNormal,o=ys.vec3.dot(t,i),a=ys.vec3.fromValues(i[0],i[1],i[2]);if(ys.vec3.scale(a,a,o),Math.abs(a[0])>.001||Math.abs(a[1])>.001||Math.abs(a[2])>.001){const t=[0,0,0],i=[0,0,0];ys.vec3.add(t,n.focalPoint,a),ys.vec3.add(i,n.position,a),e.setCamera({focalPoint:t,position:i}),e.render()}}(e,i),!0}const Xu=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 i=Q.cache.getVolume(t.maskVolumeId),[o,a]=function(e,t,n){const{imageData:i}=n,o=n.getScalarData(),a=o.length,r=[];r.length=a;const s=[],l=n.dimensions;let d=0;for(let e=0,t=o.length;e<t;e++)0!==o[e]&&(s.push([e%l[0],Math.floor(e/l[0]%l[1]),Math.floor(e/(l[0]*l[1]))]),r[d++]=e);r.length=d;const c=t.getScalarDataArrays(),h=[];if(c[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 i=c[e];n.push(i[r[t]])})),h.push(n)}return[h,s]}return Cl(i,(()=>!0),(n=>{let{pointLPS:i,value:o,pointIJK:a}=n;if(0===o)return;const r=Gd(t.imageData,t.dimensions,t.spacing,i);let l=0;const d=new Map;e.forEach((e=>d.set(e,0)));Cl(t.imageData,(()=>!0),(t=>{let{index:n}=t;for(let t=0;t<e.length;t++){const i=c[t][n],o=e[t];d.set(o,d.get(o)+i)}l++}),r);const g=[];d.forEach((e=>{g.push(e/l)})),s.push(a),h.push(g)})),[h,s]}(n,e,i);return[o,a]}if(t.imageCoordinate){const i=function(e,t,n){const{dimensions:i,imageData:o}=n,a=o.worldToIndex(t);if(a[0]=Math.floor(a[0]),a[1]=Math.floor(a[1]),a[2]=Math.floor(a[2]),!Q.utilities.indexWithinDimensions(a,i))throw new Error("outside bounds");const r=i[0],s=i[0]*i[1],l=n.getScalarDataArrays(),d=[];return e.forEach((e=>{const t=l[e],n=a[2]*s+a[1]*r+a[0];d.push(t[n])})),d}(n,t.imageCoordinate,e);return i}},Ju=function(e,t,n){const i=n||[...Array(e.numTimePoints).keys()],o=i.length;if(i.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===Q.Enums.DynamicOperatorType.SUM){for(let e=0;e<o;e++){const t=a[i[e]];for(let e=0;e<r;e++)s[e]+=t[e]}return s}if(t===Q.Enums.DynamicOperatorType.SUBTRACT){if(i.length>2)throw new Error("Please provide only 2 time points for subtraction.");for(let e=0;e<r;e++)s[e]+=a[i[0]][e]-a[i[1]][e];return s}if(t===Q.Enums.DynamicOperatorType.AVERAGE){for(let e=0;e<o;e++){const t=a[i[e]];for(let e=0;e<r;e++)s[e]+=t[e]}for(let e=0;e<r;e++)s[e]=s[e]/o;return s}};function Zu(e,t){if(t<e.length/3)return[e[3*t],e[3*t+1],e[3*t+2]]}function $u(e){const t=e.getLines().getData();let n=0;const i=new Map;for(;n<t.length;){const e=t[n++],o=[];for(let i=0;i<e;i++)o.push(t[n+i]);i.set(o[0],o),n+=e}const o=[],a=e=>{for(const[t,n]of e.entries())if(void 0!==n)return t;return-1};let r=a(i);for(;-1!==r;){const e=[r];for(;i.has(r);){const t=i.get(r)[1];i.has(t)&&e.push(t),i.delete(r),r=t}o.push(e),r=a(i)}return o.length?o:void 0}function Qu(e){const t=$u(e);if(!t)return;const n=e.getPoints().getData();return t.map((e=>e.map((e=>Zu(n,e)))))}let ev=function(e){return e.Top="top",e.Left="left",e.Bottom="bottom",e.Right="right",e}({});const tv=e=>e&&e.upper>e.lower,nv=(e,t)=>!!e&&!!t&&e.lower===t.lower&&e.upper===t.upper,iv=e=>!!e&&e.width>0&&e.height>0,ov=(e,t)=>!!e&&!!t&&e.width===t.width&&e.height===t.height,{clamp:av}=Q.utilities;class rv{constructor(e){ie(this,"_canvas",void 0),ie(this,"_imageRange",void 0),ie(this,"_voiRange",void 0),ie(this,"_colormap",void 0),ie(this,"_showFullImageRange",void 0),rv.validateProps(e);const{colormap:t,size:n={width:20,height:100},imageRange:i={lower:0,upper:1},voiRange:o={lower:0,upper:1},container:a,showFullPixelValueRange:r=!1}=e;this._colormap=t,this._imageRange=i,this._voiRange=o,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;iv(e)&&!ov(t,e)&&(this._setCanvasSize(t,e),this.render())}get imageRange(){return{...this._imageRange}}set imageRange(e){tv(e)&&!nv(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){tv(e)&&!nv(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:i}=e;if(t&&!iv(t))throw new Error('Invalid "size"');if(n&&!tv(n))throw new Error('Invalid "imageRange"');if(i&&!tv(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(i,"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,i=e=>{const i=4*e;if(!(e<0||e>=n))return{index:e,position:t[i],color:[t[i+1],t[i+2],t[i+3]]}},{width:o,height:a}=this._canvas,r=this._canvas.getContext("2d"),s=o>a,l=s?o:a,{_voiRange:d}=this,c=this._showFullImageRange?this._imageRange:{...d},{windowWidth:h}=Q.utilities.windowLevel.toWindowLevel(d.lower,d.upper);let g,u=i(0);const v=(c.upper-c.lower)/(l-1);let m=c.lower;for(let e=0;e<l;e++){const t=(m-d.lower)/h;if(u)for(let e=u.index;e<n&&!(t<=u.position);e++)g=u,u=i(e+1);let l;if(g)if(u){const e=(t-g.position)/(u.position-g.position);p=g.color,f=u.color,E=e,l=[p[0]*(1-E)+f[0]*E,p[1]*(1-E)+f[1]*E,p[2]*(1-E)+f[2]*E]}else l=[...g.color];else l=[...u.color];const c=l.map((e=>av(Math.round(255*e),0,255)));r.fillStyle="rgb(".concat(c[0],", ").concat(c[1],", ").concat(c[2],")"),s?r.fillRect(e,0,1,a):r.fillRect(0,a-e-1,o,1),m+=v}var p,f,E}}const sv={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 lv{constructor(e){var t,n,i,o,a,r;ie(this,"_canvas",void 0),ie(this,"_imageRange",void 0),ie(this,"_voiRange",void 0),ie(this,"_color",void 0),ie(this,"_tickSize",void 0),ie(this,"_tickWidth",void 0),ie(this,"_labelMargin",void 0),ie(this,"_maxNumTicks",void 0),ie(this,"_rangeTextPosition",void 0),ie(this,"_showFullPixelValueRange",void 0),ie(this,"_font",void 0),lv.validateProps(e);const{top:s=0,left:l=0,size:d={width:20,height:100},imageRange:c={lower:0,upper:1},voiRange:h={lower:0,upper:1},ticks:g,container:u,showFullPixelValueRange:v=!1}=e,{style:m,position:p}=null!=g?g:{};this._imageRange=c,this._voiRange=h,this._font=null!==(t=null==m?void 0:m.font)&&void 0!==t?t:sv.FONT,this._color=null!==(n=null==m?void 0:m.color)&&void 0!==n?n:sv.COLOR,this._tickSize=null!==(i=null==m?void 0:m.tickSize)&&void 0!==i?i:sv.TICK_SIZE,this._tickWidth=null!==(o=null==m?void 0:m.tickWidth)&&void 0!==o?o:sv.TICK_WIDTH,this._labelMargin=null!==(a=null==m?void 0:m.labelMargin)&&void 0!==a?a:sv.TICK_LABEL_MARGIN,this._maxNumTicks=null!==(r=null==m?void 0:m.maxNumTicks)&&void 0!==r?r:sv.MAX_NUM_TICKS,this._rangeTextPosition=null!=p?p:ev.Right,this._showFullPixelValueRange=v,this._canvas=this._createCanvasElement(d,s,l),u&&this.appendTo(u)}get size(){const{width:e,height:t}=this._canvas;return{width:e,height:t}}set size(e){const{_canvas:t}=this;iv(e)&&!ov(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){tv(e)&&!nv(e,this._imageRange)&&(this._imageRange=e,this.render())}get voiRange(){return{...this._voiRange}}set voiRange(e){tv(e)&&!nv(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:i}=e;if(t&&!iv(t))throw new Error('Invalid "size"');if(n&&!tv(n))throw new Error('Invalid "imageRange"');if(i&&!tv(i))throw new Error('Invalid "voiRange"')}_setCanvasSize(e,t){const{width:n,height:i}=t;e.width=n,e.height=i,Object.assign(e.style,{width:"".concat(n,"px"),height:"".concat(i,"px")})}_createCanvasElement(e,t,n){const i=document.createElement("canvas");return Object.assign(i.style,{display:"none",position:"absolute",boxSizing:"border-box",top:"".concat(t,"px"),left:"".concat(n,"px")}),this._setCanvasSize(i,e),i}_getTicks(e){const{lower:t,upper:n}=e,i=(n-t)/(this._maxNumTicks-1),o=Math.pow(10,-Math.floor(Math.log10(Math.abs(i)))),a=i*o,r=sv.TICKS_STEPS.find((e=>e>=a))/o,s=Math.ceil(n/r)*r,l=Math.floor(t/r)*r,d=Math.round((s-l)/r)+1,c=[];for(let e=0;e<d;e++)c.push(l+e*r);return{scaleMin:l,scaleMax:s,step:r,ticks:c}}_getLeftTickInfo(e){let{position:t,labelMeasure:n}=e;const{width:i}=this._canvas;return{labelPoint:[i-this.tickSize-n.width-this._labelMargin,t],tickPoints:{start:[i-this._tickSize,t],end:[i,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,i=t>=n,o=i?t:n,a=e.getContext("2d"),{_voiRange:r}=this,s=this._showFullPixelValueRange?this._imageRange:{...r},l=s.upper-s.lower,{ticks:d}=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,d.forEach((e=>{let t=Math.round(o*((e-s.lower)/l));if(i||(t=n-t),t<0||t>o)return;const r=e.toString(),d=a.measureText(r);let c;c=i?this._rangeTextPosition===ev.Top?this._getTopTickInfo({position:t,labelMeasure:d}):this._getBottomTickInfo({position:t,labelMeasure:d}):this._rangeTextPosition===ev.Left?this._getLeftTickInfo({position:t,labelMeasure:d}):this._getRightTickInfo({position:t});const{labelPoint:h,tickPoints:g}=c,{start:u,end:v}=g;return a.beginPath(),a.moveTo(u[0],u[1]),a.lineTo(v[0],v[1]),a.fillText(r,h[0],h[1]),a.stroke(),t}))}}class dv{constructor(e){let{id:t,container:n}=e;ie(this,"_id",void 0),ie(this,"_rootElement",void 0),ie(this,"_containerSize",void 0),ie(this,"_containerResizeObserver",void 0),ie(this,"_containerResizeCallback",(e=>{let t,n;const{contentRect:i,contentBoxSize:o}=e[0];i?(t=i.width,n=i.height):null!=o&&o.length&&(t=o[0].inlineSize,n=o[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:i}=t;e&&e!==i&&(i&&n.unobserve(i),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 cv={MULTIPLIER:1,RANGE_TEXT_POSITION:ev.Right,TICKS_BAR_SIZE:50};class hv extends dv{constructor(e){var t,n;super(e),ie(this,"_colormaps",void 0),ie(this,"_activeColormapName",void 0),ie(this,"_eventListenersManager",void 0),ie(this,"_canvas",void 0),ie(this,"_ticksBar",void 0),ie(this,"_rangeTextPosition",void 0),ie(this,"_isMouseOver",!1),ie(this,"_isInteracting",!1),ie(this,"_mouseOverCallback",(e=>{this._isMouseOver=!0,this.showTicks(),e.stopPropagation()})),ie(this,"_mouseOutCallback",(e=>{this._isMouseOver=!1,this.hideTicks(),e.stopPropagation()})),ie(this,"_mouseDownCallback",(e=>{this._isInteracting=!0,this.showTicks(),this._addVOIEventListeners(e),e.stopPropagation()})),ie(this,"_mouseDragCallback",((e,t)=>{const n=this.getVOIMultipliers(),i=this._getPointsFromMouseEvent(e),{points:o,voiRange:a}=t,r=ys.vec2.sub(ys.vec2.create(),i.local,o.local),s=r[0]*n[0],l=r[1]*n[1];if(!s&&!l)return;const{lower:d,upper:c}=a;let{windowWidth:h,windowCenter:g}=Q.utilities.windowLevel.toWindowLevel(d,c);h=Math.max(h+s,1),g+=l;const u=Q.utilities.windowLevel.toLowHighRange(h,g);this.voiRange=u,e.stopPropagation(),e.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{this._isInteracting=!1,this.hideTicks(),this._removeVOIEventListeners(),e.stopPropagation()})),this._eventListenersManager=new Q.utilities.eventListener.MultiTargetEventListenerManager,this._colormaps=hv.getColormapsMap(e),this._activeColormapName=hv.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:cv.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;tv(e)&&!nv(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[cv.MULTIPLIER,cv.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:i}=e,o=this._colormaps.get(this._activeColormapName);return new rv({colormap:o,imageRange:t,voiRange:n,showFullPixelValueRange:i})}_createTicksBar(e){const t=e.ticks;return new lv({imageRange:e.imageRange,voiRange:e.voiRange,ticks:t,showFullPixelValueRange:e.showFullPixelValueRange})}_getPointsFromMouseEvent(e){const{rootElement:t}=this,n=[e.clientX,e.clientY],i=[e.pageX,e.pageY],o=t.getBoundingClientRect();return{client:n,page:i,local:[i[0]-o.left-window.pageXOffset,i[1]-o.top-window.pageYOffset]}}updateTicksBar(){const{width:e,height:t}=this.containerSize;if(0===e&&0===t)return;const{_ticksBar:n,_rangeTextPosition:i}=this,o=e>=t,a=o?e:cv.TICKS_BAR_SIZE,r=o?cv.TICKS_BAR_SIZE:t;if(!function(e,t,n){return(e>=t?[ev.Top,ev.Bottom]:[ev.Left,ev.Right]).includes(n)}(e,t,i))throw new Error("Invalid rangeTextPosition value for the current colobar orientation");let s,l;n.size={width:a,height:r},o?(l=0,s=i===ev.Top?-r:t):(s=0,l=i===ev.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:gv}=Q.Enums,uv={lower:-1e3,upper:1e3};class vv extends hv{constructor(e){const{element:t,volumeId:n}=e,i=vv._getImageRange(t,n),o=vv._getVOIRange(t,n);super({...e,imageRange:i,voiRange:o}),ie(this,"_element",void 0),ie(this,"_volumeId",void 0),ie(this,"_hideTicksTime",void 0),ie(this,"_hideTicksTimeoutId",void 0),ie(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)})),ie(this,"_stackNewImageCallback",(()=>{this.imageRange=vv._getImageRange(this._element)})),ie(this,"_imageVolumeModifiedCallback",(e=>{const{volumeId:t}=e.detail.imageVolume;if(t!==this._volumeId)return;const{_element:n}=this;this.imageRange=vv._getImageRange(n,t)})),ie(this,"_viewportVOIModifiedCallback",(e=>{const{viewportId:t,volumeId:n,range:i}=e.detail,{viewport:o}=this.enabledElement;t===o.id&&n===this._volumeId&&(this.voiRange=i,this.showAndAutoHideTicks())})),this._element=t,this._volumeId=n,this._addCornerstoneEventListener()}get element(){return this._element}get enabledElement(){return(0,Q.getEnabledElement)(this._element)}getVOIMultipliers(){const{viewport:e}=this.enabledElement;return function(e,t,n){if("PT"===Q.utilities.getViewportModality(e,t)){const{clientWidth:n,clientHeight:i}=e.element,o=5/Math.max(n,i),a=Ec(e,t),{fixedPTWindowWidth:r=!0}={},s=r?0:o;return a?[s,o]:[s,4]}return[4,4]}(e,this._volumeId)}onVoiChange(e){super.onVoiChange(e);const{viewport:t}=this.enabledElement;if(t instanceof Q.StackViewport)t.setProperties({voiRange:e}),t.render();else if(t instanceof Q.VolumeViewport){const{_volumeId:n}=this,i=Q.utilities.getViewportsWithVolumeId(n,t.renderingEngineId);t.setProperties({voiRange:e},n),i.forEach((e=>e.render()))}}static _getImageRange(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o)return uv;const a=o.actor.getMapper().getInputData().getPointData().getScalars().getRange();return 0===a[0]&&0===a[1]?uv:{lower:a[0],upper:a[1]}}static _getVOIRange(e,t){const n=(0,Q.getEnabledElement)(e),{viewport:i}=n,o=t?i.getActor(t):i.getDefaultActor();if(!o||!Q.utilities.isImageActor(o))return uv;const a=o.actor.getProperty().getRGBTransferFunction(0).getRange();return 0===a[0]&&0===a[1]?uv:{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;Q.eventTarget.addEventListener(gv.IMAGE_VOLUME_MODIFIED,this._imageVolumeModifiedCallback),e.addEventListener(gv.STACK_NEW_IMAGE,this._stackNewImageCallback),e.addEventListener(gv.VOI_MODIFIED,this._viewportVOIModifiedCallback)}}const mv=Q.utilities.roundNumber,pv=function(e,t){let n=ts.getDefinedCursor(t,!0);n||(n=Ar.getDefinedCursor(t)),n||(console.log("Cursor ".concat(t," is not defined either as SVG or as a standard cursor.")),n=Ar.getDefinedCursor(t)),ss(e,n)},fv=[...Jr,...Lr],Ev=function(e,t,n){const i=$r("textBoxFontSize",e,t,n),o=$r("textBoxFontFamily",e,t,n);return"".concat(i,"px ").concat(o)};class wv{constructor(){ie(this,"annotationUIDs",new Set),ie(this,"_isVisible",!0),ie(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((i=>{const o=nt(i);if(!o)return void this.annotationUIDs.delete(i);if(o.isVisible===e)return;if(!e&&!1===(null==n?void 0:n(i)))return;o.isVisible=e;const a={...t,annotation:o};(0,Q.triggerEvent)(Q.eventTarget,te.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 i=n.indexOf(e);return-1===i||i+t<0||i+t>=n.length?null:n[i+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 Iv=function(e){if(!e||!e.length)throw new Error("The segmentationInputArray is undefined or empty array");e.forEach((e=>{if(void 0===e.segmentationId)throw new Error("The segmentationInput.segmentationId is undefined, please provide a valid segmentationId");if(void 0===e.representation)throw new Error("The segmentationInput.representation is undefined, please provide a valid representation");e.representation.type===at.Labelmap&&function(e){if(!e.representation.data)throw new Error("The segmentationInput.representationData.data is undefined, please provide a valid representationData.data");const t=e.representation.data;if("volumeId"in t&&!Q.cache.getVolume(t.volumeId))throw new Error("volumeId of ".concat(t.volumeId," not found in cache, you should load and cache volume before adding segmentation"))}(e)}))},_v=function(e){Iv(e),e.map((e=>{Ct(ae()(e))}))};function Cv(e){const{type:t}=e;return t===at.Labelmap?yo():{}}const bv=async function(e,t,n){if(!xi(e))throw new Error("No tool group found for toolGroupId: ".concat(e));const i=t.map((t=>async function(e,t,n){const{segmentationId:i,options:o={}}=t,a=Q.utilities.uuidv4(),r=new Set,s=o.colorLUTOrIndex;let l;if("number"==typeof s)l=s;else{const e=Ht();Bt(Array.isArray(s)?s:Es,e),l=e}const d={segmentationId:i,segmentationRepresentationUID:a,type:t.type,segmentsHidden:r,colorLUTIndex:l,active:!0,segmentationRepresentationSpecificConfig:{},segmentSpecificConfig:{},config:Cv(t)};if(n){const t=ki(e),i=Q.utilities.deepMerge(t,n);Li(e,{renderInactiveSegmentations:i.renderInactiveSegmentations||!0,representations:{...i.representations}})}return Nt(e,d),a}(e,t,n)));return await Promise.all(i)};async function Tv(e){var t,n;let{segmentationId:i,options:o}=e;const a=It(i),{toolGroupId:r}=o,s=a.representationData.LABELMAP.imageIdReferenceMap,l=Array.from(s.values()),d={imageIdReferenceMap:s},c=null==o?void 0:o.volumeId;await Q.volumeLoader.createAndCacheVolumeFromImages(c,l,{additionalDetails:d});const h=null!==(t=null==o?void 0:o.newSegmentationId)&&void 0!==t?t:Q.utilities.uuidv4();(null===(n=null==o?void 0:o.removeOriginal)||void 0===n||n)&&Lt(i),await _v([{segmentationId:h,representation:{type:at.Labelmap,data:{volumeId:c}}}]),await bv(r,[{segmentationId:h,type:at.Labelmap}]),ko(r),Q.eventTarget.addEventListenerOnce(te.SEGMENTATION_RENDERED,(()=>ft(h)))}async function Dv(e){var t,n;let{segmentationId:i,options:o}=e;const a=It(i),{toolGroupId:r}=o,s=a.representationData.LABELMAP,l=function(e){var t,n;const i=e.imageIds;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 jc(e.referencedImageIds,i);{var o,a,r;const t=e.referencedVolumeId,n=Q.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!==(a=n.imageIds)&&void 0!==a&&a[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 i=n.imageIds;let s=e.imageIds;return null!==(r=s)&&void 0!==r&&r.length||(s=e.convertToImageSlicesAndCache()),jc(i,s)}}(Q.cache.getVolume(s.volumeId)),d=null!==(t=null==o?void 0:o.newSegmentationId)&&void 0!==t?t:Q.utilities.uuidv4();(null===(n=null==o?void 0:o.removeOriginal)||void 0===n||n)&&Lt(i),await _v([{segmentationId:d,representation:{type:at.Labelmap,data:{imageIdReferenceMap:l}}}]),await bv(r,[{segmentationId:d,type:at.Labelmap}]),ko(r),Q.eventTarget.addEventListenerOnce(te.SEGMENTATION_RENDERED,(()=>ft(d)))}class Sv extends zi{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,i=(0,Q.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ie(Sv,"toolName",void 0),Sv.toolName="Pan";const yv=Sv;class Mv extends zi{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"rotateCamera",((e,t,n,i)=>{const o=e.getVtkActiveCamera(),a=o.getViewUp(),r=o.getFocalPoint(),s=o.getPosition(),l=[0,0,0],d=[0,0,0],c=[0,0,0],h=ys.mat4.identity(new Float32Array(16));ys.mat4.translate(h,h,t),ys.mat4.rotate(h,h,i,n),ys.mat4.translate(h,h,[-t[0],-t[1],-t[2]]),ys.vec3.transformMat4(l,s,h),ys.vec3.transformMat4(d,r,h),ys.mat4.identity(h),ys.mat4.rotate(h,h,i,n),ys.vec3.transformMat4(c,a,h),e.setCamera({position:l,viewUp:c,focalPoint:d})})),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,lastPoints:i}=e.detail,o=n.canvas,a=i.canvas,{rotateIncrementDegrees:r}=this.configuration,s=(0,Q.getEnabledElement)(t),{viewport:l}=s,d=l.getCamera(),c=t.clientWidth,h=t.clientHeight,g=[o[0]/c,o[1]/h],u=[a[0]/c,a[1]/h],v=[.5*c,.5*h],m=l.canvasToWorld(v),p=(1+Math.abs(.5))**2,f=[u[0],0,0],E=[g[0],0,0],w=f[0]**2,I=E[0]**2,_=w>p?0:Math.sqrt(p-w),C=I>p?0:Math.sqrt(p-I),b=[f[0],0,_];Oh().normalize(b);const T=[E[0],0,C];Oh().normalize(T);const D=Oh().dot(b,T);if(Math.abs(D)>1e-4){const e=-2*Math.acos(Oh().clampValue(D,-1,1))*Math.sign(g[0]-u[0])*r,t=d.viewUp,n=d.viewPlaneNormal,i=[0,0,0],o=[0,0,0];Oh().cross(t,n,i),Oh().normalize(i),Oh().cross(n,i,o),Oh().normalize(o),Oh().normalize(t),this.rotateCamera(l,m,o,e);const a=(u[1]-g[1])*r;this.rotateCamera(l,m,i,a),l.render()}}}ie(Mv,"toolName",void 0),Mv.toolName="TrackballRotate";const Ov=Mv,{transformWorldToIndex:xv}=Q.utilities;class Pv extends dc{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:Nv}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"eventDispatchDetail",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={invalidated:!0,highlighted:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,newAnnotation:!0,viewportIdsToRender:v},this._activateModify(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,r=(0,Q.getEnabledElement)(n),{renderingEngine:s}=r,{viewportId:l}=r;if(this.eventDispatchDetail={viewportId:l,renderingEngineId:s.id},this._deactivateModify(n),ls(n),this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(s,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,{annotation:a,viewportIdsToRender:r}=this.editData,{data:s}=a;s.handles.points[0]=[...o],a.invalidated=!0;const l=(0,Q.getEnabledElement)(i),{renderingEngine:d}=l;or(d,r)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],r=i.annotationUID,h=i.data,g=h.handles.points[0],u=a.worldToCanvas(g);c.annotationUID=r;const v=this.getStyle("color",c,i);if(h.cachedStats[l]&&null!=h.cachedStats[l].value){if(i.invalidated&&(this._calculateCachedStats(i,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,index:null,value:null},this._calculateCachedStats(i,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;qs(t,r,"0",[u],{color:v}),o=!0;const m=this.getLinkedTextBoxStyle(c,i);if(!m.visibility)continue;const p=this.configuration.getTextLines(h,l);if(p){const e=[u[0]+6,u[1]-6];Xs(t,r,"0",p,[e[0],e[1]],m)}}return o}))}isPointNearTool(){return!1}toolSelectedCallback(){}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,s=r.handles.points[0],l=a.worldToCanvas(s);if(!0==ys.vec2.distance(n,l)<i)return s}handleSelectedCallback(e,t){const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a,viewport:r}=n,s=i.handles.points[0],{cachedStats:l}=i,d=Object.keys(l);for(let n=0;n<d.length;n++){const i=d[n],c={isPreScaled:Ec(r,i),isSuvScaled:this.isSuvScaled(r,i,e.metadata.referencedImageId)},h=this.getTargetIdImage(i,t);if(!h)continue;const{dimensions:g,imageData:u,metadata:v}=h,m="getScalarData"in h?h.getScalarData():h.scalarData,p=v.Modality,f=xv(u,s);f[0]=Math.round(f[0]),f[1]=Math.round(f[1]),f[2]=Math.round(f[2]);const E=m.length/g[2]/g[1]/g[0];if(Q.utilities.indexWithinDimensions(f,g)){this.isHandleOutsideImage=!1;const t=g[0]*E,n=g[0]*g[1]*E,o=f[2]*n+f[1]*t+f[0]*E;let r,s=E>2?[m[o],m[o+1],m[o+2]]:m[o];if(i.startsWith("imageId:")){const e=i.split("imageId:")[1],t=Q.utilities.imageIdToURI(e),n=Q.utilities.getViewportsWithImageURI(t,a)[0];f[2]=n.getCurrentImageIdIndex()}if("US"===p){const e=Il(h,[f]),t=e.values.every((e=>null!==e));s=t?e.values:s,r=t?e.units:"raw"}else r=fc(p,e.metadata.referencedImageId,c);l[i]={index:f,value:s,Modality:p,modalityUnit:r}}else this.isHandleOutsideImage=!0,l[i]={index:f,Modality:p};e.invalidated=!1;const w=te.ANNOTATION_MODIFIED,I={annotation:e,viewportId:o,renderingEngineId:a};(0,Q.triggerEvent)(Q.eventTarget,w,I)}return l}}function Nv(e,t){const n=e.cachedStats[t],{index:i,value:o,modalityUnit:a}=n;if(void 0===o)return;const r=[];if(r.push("(".concat(i[0],", ").concat(i[1],", ").concat(i[2],")")),o instanceof Array&&a instanceof Array)for(let e=0;e<o.length;e++)r.push("".concat(mv(o[e])," ").concat(a[e]));else r.push("".concat(mv(o)," ").concat(a));return r}ie(Pv,"toolName",void 0),Pv.toolName="Probe";const Rv=Pv;class Av extends Rv{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:kv}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"eventDispatchDetail",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"postMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g={invalidated:!0,highlighted:!0,isVisible:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h},data:{label:"",handles:{points:[[...o]]},cachedStats:{}}},u=Qd(i,this.getToolName());return this.editData={annotation:g,newAnnotation:!0,viewportIdsToRender:u},this._activateModify(i),ds(i),e.preventDefault(),or(s,u),g})),ie(this,"postTouchStartCallback",(e=>this.postMouseDownCallback(e))),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i}=e;if(!this.editData)return n;const o=this.filterInteractableAnnotationsForElement(i.element,[this.editData.annotation]);if(null==o||!o.length)return n;const a=this.getTargetId(i),r=i.getRenderingEngine(),s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=this.editData.annotation,d=l.annotationUID,c=l.data,h=c.handles.points[0],g=i.worldToCanvas(h);s.annotationUID=d;const u=this.getStyle("color",s,l);if(Ec(i,a),this.isSuvScaled(i,a,l.metadata.referencedImageId),c.cachedStats[a]&&null!=c.cachedStats[a].value?l.invalidated&&this._calculateCachedStats(l,r,e):(c.cachedStats[a]={Modality:null,index:null,value:null},this._calculateCachedStats(l,r,e)),!i.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),n;qs(t,d,"0",[g],{color:u}),n=!0;const v=this.configuration.getTextLines(c,a);if(v){const e=[g[0]+6,g[1]-6];Xs(t,d,"0",v,[e[0],e[1]],this.getLinkedTextBoxStyle(s,l))}return n}))}}function kv(e,t){const n=e.cachedStats[t],{index:i,value:o,modalityUnit:a}=n;if(void 0===o)return;const r=[];return r.push("(".concat(i[0],", ").concat(i[1],", ").concat(i[2],")")),r.push("".concat(o.toFixed(2)," ").concat(a)),r}ie(Av,"toolName",void 0),Av.toolName="DragProbe";const Lv=Av;class Uv extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ie(this,"_getImageDynamicRangeFromMiddleSlice",((e,t)=>{const n=Math.floor(t[2]/2),i=t[0]*t[1];let o,a;e instanceof Float32Array?(o=4,a=Float32Array):e instanceof Uint8Array?(o=1,a=Uint8Array):e instanceof Uint16Array?(o=2,a=Uint16Array):e instanceof Int16Array&&(o=2,a=Int16Array);const r=new a(e.buffer,n*i*o,i),{max:s,min:l}=this._getMinMax(r,i);return s-l}))}touchDragCallback(e){this.mouseDragCallback(e)}mouseDragCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),{renderingEngine:o,viewport:a}=i;let r,s,l,d,c,h,g=!1;const u=a.getProperties();if(a instanceof Q.VolumeViewport){r=this.getTargetId(a).split("volumeId:")[1],h=Q.utilities.getViewportsWithVolumeId(r,o.id),({lower:s,upper:l}=u.voiRange);const e=Q.cache.getVolume(r);if(!e)throw new Error("Volume not found "+r);d=e.metadata.Modality,g=e.scaling&&Object.keys(e.scaling).length>0}else{if(!u.voiRange)throw new Error("Viewport is not a valid type");{var v,m;d=a.modality,({lower:s,upper:l}=u.voiRange);const{preScale:e={scaled:!1}}=(null===(v=a.getImageData)||void 0===v?void 0:v.call(a))||{};g=e.scaled&&void 0!==(null===(m=e.scalingParameters)||void 0===m?void 0:m.suvbw)}}c="PT"===d&&g?this.getPTScaledNewRange({deltaPointsCanvas:n.canvas,lower:s,upper:l,clientHeight:t.clientHeight,isPreScaled:g,viewport:a,volumeId:r}):this.getNewRange({viewport:a,deltaPointsCanvas:n.canvas,volumeId:r,lower:s,upper:l}),a.setProperties({voiRange:c}),a.render(),a instanceof Q.VolumeViewport&&h.forEach((e=>{a!==e&&e.render()}))}getPTScaledNewRange(e){let{deltaPointsCanvas:t,lower:n,upper:i,clientHeight:o,viewport:a,volumeId:r,isPreScaled:s}=e,l=4;return l=s?5/o:this._getMultiplierFromDynamicRange(a,r)||4,i-=t[1]*l,i=s?Math.max(i,.1):i,{lower:n,upper:i}}getNewRange(e){let{viewport:t,deltaPointsCanvas:n,volumeId:i,lower:o,upper:a}=e;const r=this._getMultiplierFromDynamicRange(t,i)||4,s=n[0]*r,l=n[1]*r;let{windowWidth:d,windowCenter:c}=Q.utilities.windowLevel.toWindowLevel(o,a);return d+=s,c+=l,d=Math.max(d,1),Q.utilities.windowLevel.toLowHighRange(d,c)}_getMultiplierFromDynamicRange(e,t){let n;if(t){var i;const e=Q.cache.getVolume(t),{dimensions:o}=e,a=e.getScalarData(),r=this._getImageDynamicRangeFromMiddleSlice(a,o),s=null==e||null===(i=e.metadata)||void 0===i?void 0:i.BitsStored,l=s?2**s:1/0;n=Math.min(r,l)}else n=this._getImageDynamicRangeFromViewport(e);const o=n/1024;return o>1?Math.round(o):o}_getImageDynamicRangeFromViewport(e){const{imageData:t}=e.getImageData(),n=t.getDimensions();if(t.getRange)return t.getRange();let i,o;if(i=t.getScalarData?t.getScalarData():t.getPointData().getScalars(),1!==n[2])return this._getImageDynamicRangeFromMiddleSlice(i,n);if(i.getRange)o=i.getRange();else{const{min:e,max:t}=this._getMinMax(i,i.length);o=[e,t]}return o[1]-o[0]}_getMinMax(e,t){let n=1/0,i=-1/0;for(let o=0;o<t;o++){const t=e[o];t<n&&(n=t),t>i&&(i=t)}return{max:i,min:n}}}ie(Uv,"toolName",void 0),Uv.toolName="WindowLevel";const Vv=Uv;class Wv extends zi{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,ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"initialMousePosWorld",void 0),ie(this,"dirVec",void 0),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=i.world,a=(0,Q.getEnabledElement)(n).viewport.getCamera(),{focalPoint:r}=a;this.initialMousePosWorld=o;let s=ys.vec3.fromValues(r[0]-o[0],r[1]-o[1],r[2]-o[2]);return s=ys.vec3.normalize(ys.vec3.create(),s),this.dirVec=s,!1})),ie(this,"preTouchStartCallback",(e=>{if(!this.configuration.pinchToZoom)return this.preMouseDownCallback(e)})),ie(this,"_dragParallelProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{parallelScale:d,focalPoint:c,position:h}=i,g=s*(5/l[1])*(e.configuration.invert?-1:1),u=(1-g)*d;let v=c,m=h;if(!e.configuration.zoomToCenter){const t=ys.vec3.distance(c,e.initialMousePosWorld);m=ys.vec3.scaleAndAdd(ys.vec3.create(),h,e.dirVec,-t*g),v=ys.vec3.scaleAndAdd(ys.vec3.create(),c,e.dirVec,-t*g)}const p=n.getImageData();let f=[1,1,1];p&&(f=p.spacing);const{minZoomScale:E,maxZoomScale:w}=e.configuration,I=a.clientHeight*f[1]*.5,_=I/u;let C=u,b=!1;p&&(_<E?(C=I/E,b=!0):_>=w&&(C=I/w,b=!0)),n.setCamera({parallelScale:C,focalPoint:b?c:v,position:b?h:m})})),ie(this,"_dragPerspectiveProjection",(function(t,n,i){let o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{element:a,deltaPoints:r}=t.detail,s=o?t.detail.deltaDistance.canvas:r.canvas[1],l=[a.clientWidth,a.clientHeight],{position:d,focalPoint:c,viewPlaneNormal:h}=i,g=Oh().distance2BetweenPoints(d,c),u=Math.sqrt(g)/l[1],v=[-h[0],-h[1],-h[2]],m=e.configuration.invert?s/u:s*u;let p=m*v[0];d[0]+=p,c[0]+=p,p=m*v[1],d[1]+=p,c[1]+=p,p=m*v[2],d[2]+=p,c[2]+=p,n.setCamera({position:d,focalPoint:c})})),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,i=(0,Q.getEnabledElement)(t),{viewport:o}=i,a=o.getCamera(),r=n.world,{focalPoint:s}=a;this.initialMousePosWorld=r;let l=ys.vec3.fromValues(s[0]-r[0],s[1]-r[1],s[2]-r[2]);l=ys.vec3.normalize(ys.vec3.create(),l),this.dirVec=l,a.parallelProjection?this._dragParallelProjection(e,o,a,!0):this._dragPerspectiveProjection(e,o,a,!0),o.render()}this.configuration.pan&&this._panCallback(e)}_dragCallback(e){const{element:t}=e.detail,n=(0,Q.getEnabledElement)(t),{viewport:i}=n,o=i.getCamera();o.parallelProjection?this._dragParallelProjection(e,i,o):this._dragPerspectiveProjection(e,i,o),i.render()}_panCallback(e){const{element:t,deltaPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),o=n.world,a=i.viewport.getCamera(),{focalPoint:r,position:s}=a,l=[s[0]-o[0],s[1]-o[1],s[2]-o[2]],d=[r[0]-o[0],r[1]-o[1],r[2]-o[2]];i.viewport.setCamera({focalPoint:d,position:l}),i.viewport.render()}}ie(Wv,"toolName",void 0),Wv.toolName="Zoom";const Fv=Wv;class Hv extends zi{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}}),ie(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:i}=e.detail,{viewport:o}=(0,Q.getEnabledElementByIds)(n,i),a=this.getTargetId(o),{debounceIfNotLoaded:r,invert:s,loop:l}=this.configuration,d=t.canvas[1];let c;o instanceof Q.VolumeViewport&&(c=a.split("volumeId:")[1]);const h=this._getPixelPerImage(o),g=d+this.deltaY;if(h)if(Math.abs(g)>=h){const e=Math.round(g/h);Os(o,{delta:s?-e:e,volumeId:c,debounceLoading:r,loop:l}),this.deltaY=g%h}else this.deltaY=g}_getPixelPerImage(e){const{element:t}=e,n=e.getNumberOfSlices();return Math.max(2,t.offsetHeight/Math.max(n,8))}}ie(Hv,"toolName",void 0),Hv.toolName="StackScroll";const Bv=Hv;function Gv(e,t){return 3===e[0].length?function(e,t){const[n,i]=e,[o,a]=t,r=ys.vec3.sub(ys.vec3.create(),i,n),s=ys.vec3.sub(ys.vec3.create(),o,a),l=ys.vec3.dot(r,s)/(ys.vec3.length(r)*ys.vec3.length(s));return 180*Math.acos(l)/Math.PI}(e,t):function(e,t){const[n,i]=e,[o,a]=t,r=ys.vec2.sub(ys.vec2.create(),i,n),s=ys.vec2.sub(ys.vec2.create(),o,a),l=ys.vec2.dot(r,s)/(ys.vec2.length(r)*ys.vec2.length(s));return Math.acos(l)*(180/Math.PI)}(e,t)}class qv extends zi{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{supportedInteractionTypes:["Mouse","Touch"]}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),this.touchDragCallback=this._dragCallback.bind(this),this.mouseDragCallback=this._dragCallback.bind(this)}_dragCallback(e){const{element:t,currentPoints:n,startPoints:i}=e.detail,o=n.world,a=i.world,r=(0,Q.getEnabledElement)(t),{viewport:s}=r,l=s.getCamera(),d=[.5*t.clientWidth,.5*t.clientHeight],c=s.canvasToWorld(d);let h=Gv([a,c],[c,o]);const{viewPlaneNormal:g,viewUp:u}=l,v=ys.vec3.sub(ys.vec3.create(),c,a),m=ys.vec3.sub(ys.vec3.create(),c,o),p=ys.vec3.cross(ys.vec3.create(),v,m);if(ys.vec3.dot(g,p)>0&&(h=-h),!Number.isNaN(h)){if(s instanceof Q.BaseVolumeViewport){const e=h*Math.PI/180,t=ys.mat4.identity(new Float32Array(16));ys.mat4.rotate(t,t,e,g);const n=ys.vec3.transformMat4(ys.vec3.create(),u,t);s.setCamera({viewUp:n})}else{const{rotation:e}=s.getProperties();s.setProperties({rotation:e+h})}s.render()}}}ie(qv,"toolName",void 0),qv.toolName="PlanarRotate";const jv=qv;class zv extends zi{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}}),ie(this,"_configuration",void 0)}mouseWheelCallback(e){const{wheel:t,element:n}=e.detail,{direction:i}=t,{invert:o}=this.configuration,{viewport:a}=(0,Q.getEnabledElement)(n),r=i*(o?-1:1),s=this.getTargetId(a).split("volumeId:")[1];Os(a,{delta:r,debounceLoading:this.configuration.debounceIfNotLoaded,loop:this.configuration.loop,volumeId:s,scrollSlabs:this.configuration.scrollSlabs})}}ie(zv,"toolName",void 0),zv.toolName="StackScrollMouseWheel";const Kv=zv,Yv={X:[1,0,0],Y:[0,1,0],Z:[0,0,1],CUSTOM:[]};class Xv extends zi{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:Yv.Z,rotateIncrementDegrees:30}}),ie(this,"_configuration",void 0)}mouseWheelCallback(e){const{element:t,wheel:n}=e.detail,i=(0,Q.getEnabledElement)(t),{viewport:o}=i,{direction:a,rotateIncrementDegrees:r}=this.configuration,s=o.getCamera(),{viewUp:l,position:d,focalPoint:c}=s,{direction:h}=n,[g,u,v]=c,[m,p,f]=a,E=h*(r*Math.PI)/180,w=[0,0,0],I=[0,0,0],_=[0,0,0],C=ys.mat4.identity(new Float32Array(16));ys.mat4.translate(C,C,[g,u,v]),ys.mat4.rotate(C,C,E,[m,p,f]),ys.mat4.translate(C,C,[-g,-u,-v]),ys.vec3.transformMat4(w,d,C),ys.vec3.transformMat4(I,c,C),ys.mat4.identity(C),ys.mat4.rotate(C,C,E,[m,p,f]),ys.vec3.transformMat4(_,l,C),o.setCamera({position:w,viewUp:_,focalPoint:I}),o.render()}}ie(Xv,"toolName",void 0),Xv.toolName="VolumeRotateMouseWheel";const Jv=Xv;class Zv extends zi{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:[]}}),ie(this,"_bounds",void 0)}mouseClickCallback(e){const{element:t,currentPoints:n}=e.detail,i=(0,Q.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,r=this.getTargetId(o);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=r.split("volumeId:")[1];let l=-1/0;const d=xh(o,n.world,s,((e,t)=>{if(e>l)return l=e,t}));if(!d||!d.length)return;const{targetViewportIds:c,toolGroupId:h}=this.configuration;a.getViewports().filter((e=>{if((null==c?void 0:c.indexOf(e.id))>=0)return!0;const t=Mi(e.id,a.id);return!(!h||h!==(null==t?void 0:t.id))})).forEach((e=>{e instanceof Q.VolumeViewport?Yu(e,d):console.warn("Cannot jump to specified world coordinates for a viewport that is not a VolumeViewport")}))}}ie(Zv,"toolName",void 0),Zv.toolName="MIPJumpToClickTool";const $v=Zv,{transformWorldToIndex:Qv}=Q.utilities;class em extends dc{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:tm}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return uc([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g,activeHandleIndex:u}=h.handles;c.annotationUID=r;const v=this.getStyle("lineWidth",c,i),m=this.getStyle("lineDash",c,i),p=this.getStyle("color",c,i),f=this.getStyle("shadow",c,i),E=g.map((e=>a.worldToCanvas(e)));let w;if(h.cachedStats[l]&&null!=h.cachedStats[l].unit?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={length:null,unit:null},this._calculateCachedStats(i,d,e)),!Pe(r))continue;ce(i)||this.editData||null===u||(w=[E[u]]),w&&qs(t,r,"0",E,{color:p,lineDash:m,lineWidth:v});const I="".concat(r,"-line");if(js(t,r,"1",E[0],E[1],{color:p,width:v,lineDash:m,shadow:f},I),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;const _=this.getLinkedTextBoxStyle(c,i);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 C=this.configuration.getTextLines(h,l);if(!h.handles.textBox.hasMoved){const e=mc(E);h.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(h.handles.textBox.worldPosition),T=Zs(t,r,"1",C,b,E,{},_),{x:D,y:S,width:y,height:M}=T;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([D,S]),topRight:a.canvasToWorld([D+y,S]),bottomLeft:a.canvasToWorld([D,S+M]),bottomRight:a.canvasToWorld([D+y,S+M])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateLength(e,t){const n=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+i*i+o*o)}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n,r=i.handles.points[0],s=i.handles.points[1],{cachedStats:l}=i,d=Object.keys(l);for(let e=0;e<d.length;e++){const n=d[e],i=this.getTargetIdImage(n,t);if(!i)continue;const{imageData:o,dimensions:a}=i,c=Qv(o,r),h=Qv(o,s),g=[c,h],{scale:u,units:v}=wl(i,g),m=this._calculateLength(r,s)/u;this._isInsideVolume(c,h,a)?this.isHandleOutsideImage=!1:this.isHandleOutsideImage=!0,l[n]={length:m,unit:v}}e.invalidated=!1;const c=te.ANNOTATION_MODIFIED,h={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,c,h),l}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function tm(e,t){const n=e.cachedStats[t],{length:i,unit:o}=n;if(null!=i&&!isNaN(i))return["".concat(mv(i)," ").concat(o)]}ie(em,"toolName",void 0),em.toolName="Length";const nm=em;var im=C(847),om=C.n(im);const{RENDERING_DEFAULTS:am}=Q.CONSTANTS;function rm(){return"rgb(0, 200, 0)"}function sm(){return!0}function lm(){return!0}function dm(){return!0}class cm extends dc{constructor(){var e,t,n,i;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};super(o,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:Q.Enums.BlendModes.MAXIMUM_INTENSITY_BLEND,mobile:{enabled:!1,opacity:.8,handleRadius:9}}}),ie(this,"toolCenter",[0,0,0]),ie(this,"_getReferenceLineColor",void 0),ie(this,"_getReferenceLineControllable",void 0),ie(this,"_getReferenceLineDraggableRotatable",void 0),ie(this,"_getReferenceLineSlabThicknessControlsOn",void 0),ie(this,"editData",void 0),ie(this,"initializeViewport",(e=>{let{renderingEngineId:t,viewportId:n}=e;const i=(0,Q.getEnabledElementByIds)(n,t),{FrameOfReferenceUID:o,viewport:a}=i,{element:r}=a,{position:s,focalPoint:l,viewPlaneNormal:d}=a.getCamera();let c=this._getAnnotations(i);return c=this.filterInteractableAnnotationsForElement(r,c),c.length&&tt(c[0].annotationUID),Qe({highlighted:!1,metadata:{cameraPosition:[...s],cameraFocalPoint:[...l],FrameOfReferenceUID:o,toolName:this.getToolName()},data:{handles:{rotationPoints:[],slabThicknessPoints:[],toolCenter:this.toolCenter},activeOperation:null,activeViewportIds:[],viewportId:n}},r),{normal:d,point:a.canvasToWorld([a.canvas.clientWidth/2,a.canvas.clientHeight/2])}})),ie(this,"_getViewportsInfo",(()=>xi(this.toolGroupId).viewportsInfo)),ie(this,"computeToolCenter",(e=>{if(!e.length||1===e.length)throw new Error("For crosshairs to operate, at least two viewports must be given.");const[t,n,i]=e,{normal:o,point:a}=this.initializeViewport(t),{normal:r,point:s}=this.initializeViewport(n);let l=[0,0,0],d=ys.vec3.create();i?({normal:l,point:d}=this.initializeViewport(i)):(ys.vec3.add(d,a,s),ys.vec3.scale(d,d,.5),ys.vec3.cross(l,o,r));const c=Q.utilities.planar.planeEquation(o,a),h=Q.utilities.planar.planeEquation(r,s),g=Q.utilities.planar.planeEquation(l,d);this.toolCenter=Q.utilities.planar.threePlaneIntersection(c,h,g);const{renderingEngine:u}=(0,Q.getEnabledElementByIds)(e[0].viewportId,e[0].renderingEngineId);or(u,e.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.world,a=(0,Q.getEnabledElement)(n),{viewport:r}=a;this._jump(a,o);const s=this._getAnnotations(a),l=this.filterInteractableAnnotationsForElement(r.element,s),{data:d}=l[0],{rotationPoints:c}=d.handles,h=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],n=this._getReferenceLineControllable(t.id),i=this._getReferenceLineDraggableRotatable(t.id);n&&i&&(h.push(t.id),e++)}return d.activeViewportIds=[...h],d.handles.activeOperation=1,e.preventDefault(),ds(n),this._activateModify(n),l[0]})),ie(this,"cancel",(()=>{console.log("Not implemented yet")})),ie(this,"handleSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0,this._activateModify(i),ds(i),e.preventDefault()})),ie(this,"isPointNearTool",((e,t,n,i)=>!!this._pointNearTool(e,t,n,6))),ie(this,"toolSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i;t.highlighted=!0,this._activateModify(o),ds(o),e.preventDefault()})),ie(this,"onCameraModified",(e=>{var t;const n=e.detail,{element:i}=n,o=(0,Q.getEnabledElement)(i),{renderingEngine:a}=o,r=o.viewport,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const d=r.getCamera(),c=l.metadata.cameraPosition,h=[0,0,0];Oh().subtract(d.position,c,h);const g=l.metadata.cameraFocalPoint,u=[0,0,0];Oh().subtract(d.focalPoint,g,u),l.metadata.cameraPosition=[...d.position],l.metadata.cameraFocalPoint=[...d.focalPoint];const v=this._getReferenceLineControllable(r.id),m=this._getReferenceLineDraggableRotatable(r.id);if(!Q.utilities.isEqual(d.position,c,.001)&&v&&m){let e=!1;Q.utilities.isEqual(h,u,.001)||(e=!0);const t=Math.abs(Oh().dot(h,d.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&&Mi(r.id,a.id).getViewportIds().filter((e=>e!==r.id)).forEach((e=>{this._autoPanViewportIfNecessary(e,a)}));const p=Qd(i,this.getToolName(),!1);or(a,p)})),ie(this,"mouseMoveCallback",((e,t)=>{const{element:n,currentPoints:i}=e.detail,o=i.canvas;let a=!1;for(let e=0;e<t.length;e++){const i=t[e];if(ce(i))continue;const{data:r,highlighted:s}=i;if(!r.handles)continue;const l=r.handles.activeOperation,d=r.activeViewportIds&&r.activeViewportIds.length>0?[...r.activeViewportIds]:[];r.activeViewportIds=[],r.handles.activeOperation=null;let c=!1;c=!!this.getHandleNearImagePoint(n,i,o,6)||this._pointNearTool(n,i,o,6),c&&!s||!c&&s?(i.highlighted=!s,a=!0):r.handles.activeOperation===l&&this._areViewportIdArraysEqual(r.activeViewportIds,d)||(a=!0)}return a})),ie(this,"filterInteractableAnnotationsForElement",((e,t)=>{if(!t||!t.length)return[];const n=(0,Q.getEnabledElement)(e),{viewportId:i}=n;return t.filter((e=>e.data.viewportId===i))})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;const{viewport:i,renderingEngine:o}=e,{element:a}=i,r=this._getAnnotations(e),s=i.getCamera(),l=this.filterInteractableAnnotationsForElement(a,r)[0];if(null==r||!r.length||null==l||!l.data)return n;const d=l.annotationUID,{clientWidth:c,clientHeight:h}=i.canvas,g=Math.sqrt(c*c+h*h),u=Math.min(c,h),v=l.data,m=i.worldToCanvas(this.toolCenter),p=this._filterAnnotationsByUniqueViewportOrientations(e,r),f=[],E=[0,0,c,h];p.forEach((e=>{const{data:t}=e;t.handles.toolCenter=this.toolCenter;const n=o.getViewport(t.viewportId),a=n.getCamera(),r=this._getReferenceLineControllable(n.id),l=this._getReferenceLineDraggableRotatable(n.id),d=this._getReferenceLineSlabThicknessControlsOn(n.id),{clientWidth:c,clientHeight:h}=n.canvas,v=Math.sqrt(c*c+h*h),w=[.5*c,.5*h],I=n.canvasToWorld(w),_=[0,0,0];Oh().cross(s.viewPlaneNormal,a.viewPlaneNormal,_),Oh().normalize(_),Oh().multiplyScalar(_,v);const C=[0,0,0];Oh().add(I,_,C);const b=[0,0,0];Oh().subtract(I,_,b);const T=i.worldToCanvas(C),D=i.worldToCanvas(I),S=ys.vec2.create();ys.vec2.subtract(S,T,D),ys.vec2.normalize(S,S);const y=ys.vec2.create();ys.vec2.scale(y,S,100*g);const M=ys.vec2.create();ys.vec2.scale(M,S,.4*u);const O=ys.vec2.create();ys.vec2.scale(O,S,.2*u);const x=ys.vec2.create(),P=this.configuration.referenceLinesCenterGapRadius;ys.vec2.scale(x,S,2===p.length?P:0);const N=ys.vec2.create(),R=ys.vec2.create(),A=ys.vec2.create(),k=ys.vec2.create();let L=ys.vec2.clone(m);l&&r||(L=ys.vec2.clone(D)),ys.vec2.add(N,L,x),ys.vec2.add(R,L,y),ys.vec2.subtract(A,L,x),ys.vec2.subtract(k,L,y),yh(N,R,E),yh(A,k,E);const U=ys.vec2.create();ys.vec2.subtract(U,m,M);const V=ys.vec2.create();ys.vec2.add(V,m,M);let W=ys.vec2.clone(m);!l&&d&&(W=ys.vec2.clone(D));let F=[...this.toolCenter];!l&&d&&(F=[...I]);const H=[0,0,0];Oh().subtract(C,b,H),Oh().normalize(H);const{viewPlaneNormal:B}=s,{matrix:G}=om().buildFromDegree().rotate(90,B),q=[0,0,0];ys.vec3.transformMat4(q,H,G);const j=n.getSlabThickness(),z=[...q];Oh().multiplyScalar(z,j);const K=[0,0,0];Oh().add(F,z,K);const Y=i.worldToCanvas(K),X=ys.vec2.create();ys.vec2.subtract(X,W,Y);const J=ys.vec2.create();ys.vec2.subtract(J,W,y),ys.vec2.add(J,J,X);const Z=ys.vec2.create();ys.vec2.add(Z,W,y),ys.vec2.add(Z,Z,X),yh(J,Z,E);const $=ys.vec2.create();ys.vec2.add($,W,y),ys.vec2.subtract($,$,X);const Q=ys.vec2.create();ys.vec2.subtract(Q,W,y),ys.vec2.subtract(Q,Q,X),yh($,Q,E);const ee=ys.vec2.create(),te=ys.vec2.create(),ne=ys.vec2.create(),ie=ys.vec2.create();ys.vec2.subtract(ee,W,O),ys.vec2.add(ee,ee,X),ys.vec2.add(te,W,O),ys.vec2.add(te,te,X),ys.vec2.subtract(ne,W,O),ys.vec2.subtract(ne,ne,X),ys.vec2.add(ie,W,O),ys.vec2.subtract(ie,ie,X),f.push([n,N,R,A,k,J,Z,$,Q,U,V,ee,te,ne,ie])}));const w=[],I=[],_=this._getReferenceLineColor(i.id),C=void 0!==_?_:"rgb(200, 200, 200)";return f.forEach(((e,n)=>{var o,a;const r=e[0],s=this._getReferenceLineColor(r.id),l=this._getReferenceLineControllable(r.id),c=this._getReferenceLineDraggableRotatable(r.id)||(null===(o=this.configuration.mobile)||void 0===o?void 0:o.enabled),h=this._getReferenceLineSlabThicknessControlsOn(r.id)||(null===(a=this.configuration.mobile)||void 0===a?void 0:a.enabled),g=v.activeViewportIds.find((e=>e===r.id));let u=void 0!==s?s:"rgb(200, 200, 200)",m=1;const p=null!==v.handles.activeOperation&&1===v.handles.activeOperation&&g;p&&(m=2.5);let f="".concat(n);if(l&&c?(f="".concat(n,"One"),js(t,d,f,e[1],e[2],{color:u,lineWidth:m}),f="".concat(n,"Two"),js(t,d,f,e[3],e[4],{color:u,lineWidth:m})):js(t,d,f,e[2],e[4],{color:u,lineWidth:m}),l){var E;u=void 0!==s?s:"rgb(200, 200, 200)";const o=2===v.handles.activeOperation,a=[e[9],e[10]],l=[i.canvasToWorld(e[9]),r,e[1],e[2]],m=[i.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=[i.canvasToWorld(e[11]),r,e[5],e[6]],F=[i.canvasToWorld(e[12]),r,e[5],e[6]],H=[i.canvasToWorld(e[13]),r,e[7],e[8]],B=[i.canvasToWorld(e[14]),r,e[7],e[8]];if(I.push(W,F,H,B),(p||null!==(E=this.configuration.mobile)&&void 0!==E&&E.enabled)&&!o&&!U&&c&&h){var _,C,b,T,D,S,y,M;let e="".concat(n,"One");qs(t,d,e,a,{color:u,handleRadius:null!==(_=this.configuration.mobile)&&void 0!==_&&_.enabled?null===(C=this.configuration.mobile)||void 0===C?void 0:C.handleRadius:3,opacity:null!==(b=this.configuration.mobile)&&void 0!==b&&b.enabled?null===(T=this.configuration.mobile)||void 0===T?void 0:T.opacity:1,type:"circle"}),e="".concat(n,"Two"),qs(t,d,e,V,{color:u,handleRadius:null!==(D=this.configuration.mobile)&&void 0!==D&&D.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&&!o&&!U&&c){var O,x,P,N;const e="".concat(n);qs(t,d,e,a,{color:u,handleRadius:null!==(O=this.configuration.mobile)&&void 0!==O&&O.enabled?null===(x=this.configuration.mobile)||void 0===x?void 0:x.handleRadius:3,opacity:null!==(P=this.configuration.mobile)&&void 0!==P&&P.enabled?null===(N=this.configuration.mobile)||void 0===N?void 0:N.opacity:1,type:"circle"})}else if(g&&!o&&!U&&h){var R,A,k,L;const e="".concat(n);qs(t,d,e,V,{color:u,handleRadius:null!==(R=this.configuration.mobile)&&void 0!==R&&R.enabled?null===(A=this.configuration.mobile)||void 0===A?void 0:A.handleRadius:3,opacity:null!==(k=this.configuration.mobile)&&void 0!==k&&k.enabled?null===(L=this.configuration.mobile)||void 0===L?void 0:L.opacity:1,type:"rect"})}else if(o&&c){const e="".concat(n);qs(t,d,e,a,{color:u,handleRadius:2,fill:u,type:"circle"})}else U&&g&&h&&qs(t,d,f,V,{color:u,handleRadius:2,fill:u,type:"rect"});r.getSlabThickness()>.5&&h&&(f="".concat(n,"STOne"),js(t,d,f,e[5],e[6],{color:u,width:1,lineDash:[2,3]}),f="".concat(n,"STTwo"),js(t,d,f,e[7],e[8],{color:u,width:e,lineDash:[2,3]}))}})),n=!0,v.handles.rotationPoints=w,v.handles.slabThicknessPoints=I,this.configuration.viewportIndicators&&Fs(t,d,"0",[.95*c,.05*h],.01*g,{color:C,fill:C}),n})),ie(this,"_getAnnotations",(e=>{const{viewport:t}=e,n=$e(this.getToolName(),t.element)||[],i=this._getViewportsInfo().map((e=>{let{viewportId:t}=e;return t}));return n.filter((e=>{const{data:t}=e;return i.includes(t.viewportId)}))})),ie(this,"_onNewVolume",(e=>{const t=this._getViewportsInfo();this.computeToolCenter(t)})),ie(this,"_areViewportIdArraysEqual",((e,t)=>e.length===t.length&&(e.forEach((e=>{let n=!1;for(let i=0;i<t.length;++i)if(e===t[i]){n=!0;break}if(!1===n)return!1})),!0))),ie(this,"_getAnnotationsForViewportsWithDifferentCameras",((e,t)=>{const{viewportId:n,renderingEngine:i,viewport:o}=e,a=t.filter((e=>e.data.viewportId!==n));if(!a||!a.length)return[];const r=o.getCamera(),{viewPlaneNormal:s,position:l}=r,d=a.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera();return!(Q.utilities.isEqual(n.viewPlaneNormal,s,.01)&&Q.utilities.isEqual(n.position,l,1))}));return d})),ie(this,"_filterViewportWithSameOrientation",((e,t,n)=>{const{renderingEngine:i}=e,{data:o}=t,a=i.getViewport(o.viewportId),r=n.filter((e=>{const{data:t}=e,n=i.getViewport(t.viewportId);return!0===this._getReferenceLineControllable(n.id)}));if(!r||!r.length)return[];const s=a.getCamera(),l=s.viewPlaneNormal;return Oh().normalize(l),r.filter((e=>{const{viewportId:t}=e.data,n=i.getViewport(t).getCamera(),o=n.viewPlaneNormal;return Oh().normalize(o),Q.utilities.isEqual(l,o,.01)&&Q.utilities.isEqual(s.viewUp,n.viewUp,.01)}))})),ie(this,"_filterAnnotationsByUniqueViewportOrientations",((e,t)=>{const{renderingEngine:n,viewport:i}=e,o=i.getCamera().viewPlaneNormal;Oh().normalize(o);const a=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0===a})),r=[];for(let e=0;e<a.length;++e){const t=a[e],{viewportId:i}=t.data,s=n.getViewport(i).getCamera(),l=s.viewPlaneNormal;if(Oh().normalize(l),Q.utilities.isEqual(o,l,.01)||Q.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,s.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,s.position,1)&&(d=!0)}d||r.push(t)}const s=t.filter((e=>{const{data:t}=e,o=n.getViewport(t.viewportId),a=this._getReferenceLineControllable(o.id);return i!==o&&!0!==a}));for(let e=0;e<s.length;++e){const t=s[e],{viewportId:i}=t.data,a=n.getViewport(i).getCamera(),l=a.viewPlaneNormal;if(Oh().normalize(l),Q.utilities.isEqual(o,l,.01)||Q.utilities.isOpposite(o,l,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||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:i}=t.data,a=n.getViewport(i).getCamera(),s=a.viewPlaneNormal;if(Oh().normalize(s),Q.utilities.isEqual(o,s,.01)||Q.utilities.isOpposite(o,s,.01))continue;let d=!1;for(let e=0;e<r.length;++e){const t=r[e],{viewportId:i}=t.data,o=n.getViewport(i).getCamera();Q.utilities.isEqual(o.viewPlaneNormal,a.viewPlaneNormal,.01)&&Q.utilities.isEqual(o.position,a.position,1)&&(d=!0)}d||r.push(t)}return r})),ie(this,"_checkIfViewportsRenderingSameScene",((e,t)=>{const n=e.getActors(),i=t.getActors();let o=!0;return n.forEach((e=>{n.length===i.length&&void 0!==i.find((t=>{let{uid:n}=t;return n===e.uid}))||(o=!1)})),o})),ie(this,"_jump",((e,t)=>{Ge.isInteractingWithTool=!0;const{viewport:n,renderingEngine:i}=e,o=this._getAnnotations(e),a=[0,0,0];Oh().subtract(t,this.toolCenter,a);const r=this._getAnnotationsForViewportsWithDifferentCameras(e,o).filter((e=>{const{data:t}=e,o=i.getViewport(t.viewportId),a=this._checkIfViewportsRenderingSameScene(n,o);return this._getReferenceLineControllable(o.id)&&this._getReferenceLineDraggableRotatable(o.id)&&a}));return 0===r.length?(Ge.isInteractingWithTool=!1,!1):(this._applyDeltaShiftToSelectedViewportCameras(i,r,a),Ge.isInteractingWithTool=!1,!0)})),ie(this,"_activateModify",(e=>{var t;Ge.isInteractingWithTool=!(null!==(t=this.configuration.mobile)&&void 0!==t&&t.enabled),e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(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),ls(n),this.editData=null;const i=(0,Q.getEnabledElement)(n),{renderingEngine:o}=i,a=Qd(n,this.getToolName(),!1);or(o,a)})),ie(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:i}=t,o=(0,Q.getEnabledElement)(i),{renderingEngine:a,viewport:r}=o,s=this._getAnnotations(o),l=this.filterInteractableAnnotationsForElement(i,s)[0];if(!l)return;const{handles:d}=l.data,{currentPoints:c}=e.detail,h=c.canvas;if(1===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));this._applyDeltaShiftToSelectedViewportCameras(a,e,n)}else if(2===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineDraggableRotatable(n.id);return!0===i&&!0===o})),n=ys.vec2.create(),i=ys.vec2.create(),l=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]],d=r.worldToCanvas(l),c=t.currentPoints.canvas,h=ys.vec2.create();ys.vec2.sub(h,c,t.deltaPoints.canvas),ys.vec2.sub(n,h,d),ys.vec2.sub(i,c,d);let g=ys.vec2.angle(n,i);this._isClockWise(d,h,c)&&(g*=-1),g=Math.round(100*g)/100;const u=r.getCamera().viewPlaneNormal,{matrix:v}=om().buildFromRadian().translate(l[0],l[1],l[2]).rotate(g,u).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),i=n.getCamera(),{viewUp:o,position:r,focalPoint:s}=i;o[0]+=r[0],o[1]+=r[1],o[2]+=r[2],ys.vec3.transformMat4(s,s,v),ys.vec3.transformMat4(r,r,v),ys.vec3.transformMat4(o,o,v),o[0]-=r[0],o[1]-=r[1],o[2]-=r[2],n.setCamera({position:r,viewUp:o,focalPoint:s}),m.push(n.id)})),a.renderViewports(m)}else if(3===d.activeOperation){const e=this._getAnnotationsForViewportsWithDifferentCameras(o,s).filter((e=>{const{data:t}=e,n=a.getViewport(t.viewportId),i=this._getReferenceLineControllable(n.id),o=this._getReferenceLineSlabThicknessControlsOn(n.id);return!0===i&&!0===o&&l.data.activeViewportIds.find((e=>e===n.id))}));if(0===e.length)return;const i=this._filterViewportWithSameOrientation(o,e[0],s),d=[];d.push(r.id),i.forEach((e=>{const{data:i}=e,o=a.getViewport(i.viewportId),s=o.getCamera().viewPlaneNormal,c=Oh().dot(n,s),g=[...s];if(Oh().multiplyScalar(g,c),Math.abs(g[0])>.001||Math.abs(g[1])>.001||Math.abs(g[2])>.001){const e=Math.sqrt(g[0]*g[0]+g[1]*g[1]+g[2]*g[2]),n=t.lastPoints.world,i=[0,0,0],c=[this.toolCenter[0],this.toolCenter[1],this.toolCenter[2]];if(!this._getReferenceLineDraggableRotatable(o.id)){const{rotationPoints:e}=this.editData.annotation.data.handles,t=e.filter((e=>e[1].uid===o.id));if(2===t.length){const e=r.canvasToWorld(t[0][3]),n=r.canvasToWorld(t[1][3]);Oh().add(e,n,c),Oh().multiplyScalar(c,.5)}}Oh().subtract(n,c,i);const u=Oh().dot(i,s),v=[...s];Oh().multiplyScalar(v,u);const m=[v[0],v[1],v[2]];ys.vec3.normalize(m,m);const p=[g[0],g[1],g[2]];ys.vec3.normalize(p,p);let f=o.getSlabThickness();Q.utilities.isOpposite(m,p,.001)?f-=e:f+=e,f=Math.abs(f),f=Math.max(am.MINIMUM_SLAB_THICKNESS,f),this._pointNearReferenceLine(l,h,6,o)&&(f=am.MINIMUM_SLAB_THICKNESS),Mi(o.id,a.id).getToolInstance(this.getToolName()).setSlabThickness(o,f),d.push(o.id)}})),a.renderViewports(d)}})),ie(this,"_pointNearReferenceLine",((e,t,n,i)=>{const{data:o}=e,{rotationPoints:a}=o.handles;for(let e=0;e<a.length-1;++e){const o=a[e][1];if(o.id!==i.id)continue;if(!this._getReferenceLineControllable(o.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=uc([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]}},d=uc([l.start.x,l.start.y],[l.end.x,l.end.y],[t[0],t[1]]);if(s<=n||d<=n)return!0;e++}return!1})),this._getReferenceLineColor=(null===(e=o.configuration)||void 0===e?void 0:e.getReferenceLineColor)||rm,this._getReferenceLineControllable=(null===(t=o.configuration)||void 0===t?void 0:t.getReferenceLineControllable)||sm,this._getReferenceLineDraggableRotatable=(null===(n=o.configuration)||void 0===n?void 0:n.getReferenceLineDraggableRotatable)||lm,this._getReferenceLineSlabThicknessControlsOn=(null===(i=o.configuration)||void 0===i?void 0:i.getReferenceLineSlabThicknessControlsOn)||dm}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 i=(0,Q.getEnabledElementByIds)(n,t);if(!i)return;const o=this._getAnnotations(i);null!=o&&o.length&&o.forEach((e=>{tt(e.annotationUID)}))}))}getHandleNearImagePoint(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o;let r=this._getRotationHandleNearImagePoint(a,t,n,i);return null!==r?r:(r=this._getSlabThicknessHandleNearImagePoint(a,t,n,i),null!==r?r:void 0)}_unsubscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,Q.getEnabledElementByIds)(t,n),{element:o}=i;o.removeEventListener(Q.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_subscribeToViewportNewVolumeSet(e){e.forEach((e=>{let{viewportId:t,renderingEngineId:n}=e;const{viewport:i}=(0,Q.getEnabledElementByIds)(t,n),{element:o}=i;o.addEventListener(Q.Enums.Events.VOLUME_VIEWPORT_NEW_VOLUME,this._onNewVolume)}))}_autoPanViewportIfNecessary(e,t){const n=t.getViewport(e),{clientWidth:i,clientHeight:o}=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]>i&&(s[0]=i-r),a[1]<0?s[1]=r:a[1]>o&&(s[1]=o-r),s[0]===a[0]&&s[1]===a[1])return;const l=n.canvasToWorld(s),d=[l[0]-this.toolCenter[0],l[1]-this.toolCenter[1],l[2]-this.toolCenter[2]],c=n.getCamera(),{focalPoint:h,position:g}=c,u=[g[0]-d[0],g[1]-d[1],g[2]-d[2]],v=[h[0]-d[0],h[1]-d[1],h[2]-d[2]];n.setCamera({focalPoint:v,position:u}),n.render()}setSlabThickness(e,t){let n;const{filterActorUIDsToSetSlabThickness:i}=this.configuration;i&&i.length>0&&(n=i);let o=this.configuration.slabThicknessBlendMode;t===am.MINIMUM_SLAB_THICKNESS&&(o=Q.Enums.BlendModes.COMPOSITE),e.setBlendMode(o,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:i}=t,o=e.getViewport(i.viewportId),a=o.getCamera(),r=a.viewPlaneNormal,s=Oh().dot(n,r),l=[...r];if(Oh().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];Oh().add(a.focalPoint,l,e),Oh().add(a.position,l,t),o.setCamera({focalPoint:e,position:t}),o.render()}}_getRotationHandleNearImagePoint(e,t,n,i){const{data:o}=t,{rotationPoints:a}=o.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 d=e.worldToCanvas(s);if(ys.vec2.distance(n,d)<i)return o.handles.activeOperation=2,this.editData={annotation:t},s}return null}_getSlabThicknessHandleNearImagePoint(e,t,n,i){const{data:o}=t,{slabThicknessPoints:a}=o.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 d=e.worldToCanvas(s);if(ys.vec2.distance(n,d)<i)return o.handles.activeOperation=3,o.activeViewportIds=[l.id],this.editData={annotation:t},s}return null}_pointNearTool(e,t,n,i){const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{clientWidth:r,clientHeight:s}=a.canvas,l=Math.sqrt(r*r+s*s),{data:d}=t,{rotationPoints:c}=d.handles,{slabThicknessPoints:h}=d.handles,g=[];for(let e=0;e<c.length-1;++e){const t=c[e][1],o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineDraggableRotatable(t.id);if(!o||!a)continue;const r={start:{x:c[e][2][0],y:c[e][2][1]},end:{x:c[e][3][0],y:c[e][3][1]}},s=uc([r.start.x,r.start.y],[r.end.x,r.end.y],[n[0],n[1]]),l={start:{x:c[e+1][2][0],y:c[e+1][2][1]},end:{x:c[e+1][3][0],y:c[e+1][3][1]}},h=uc([l.start.x,l.start.y],[l.end.x,l.end.y],[n[0],n[1]]);(s<=i||h<=i)&&(g.push(t.id),d.handles.activeOperation=1),e++}for(let e=0;e<h.length-1;++e){const t=h[e][1];if(g.find((e=>e===t.id)))continue;const o=this._getReferenceLineControllable(t.id),a=this._getReferenceLineSlabThicknessControlsOn(t.id);if(!o||!a)continue;const r=h[e][2],s=h[e][3],c=ys.vec2.create();ys.vec2.add(c,r,s),ys.vec2.scale(c,c,.5);const u=ys.vec2.create();ys.vec2.subtract(u,r,c),ys.vec2.normalize(u,u);const v=ys.vec2.create();ys.vec2.scale(v,u,.05*l);const m=ys.vec2.create(),p=ys.vec2.create();ys.vec2.add(m,c,v),ys.vec2.subtract(p,c,v);const f={start:{x:m[0],y:m[1]},end:{x:r[0],y:r[1]}},E=uc([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]}},I=uc([w.start.x,w.start.y],[w.end.x,w.end.y],[n[0],n[1]]);(E<=i||I<=i)&&(g.push(t.id),d.handles.activeOperation=null),e++}return d.activeViewportIds=[...g],this.editData={annotation:t},1===d.handles.activeOperation}}ie(cm,"toolName",void 0),cm.toolName="Crosshairs";const hm=cm,{EPSILON:gm}=Q.CONSTANTS;class um extends sc{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",{}),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"_init",(()=>{const e=(0,Q.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Jd(t,this.getToolName());const n=e.getViewport(this.configuration.sourceViewportId);if(!n||!n.getImageData())return;const{element:i}=n,{viewUp:o,viewPlaneNormal:a}=n.getCamera(),r=Q.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:[...o],FrameOfReferenceUID:l,referencedImageId:null},data:{handles:{points:r}}};Qe(e,i),s=e}this.editData={sourceViewport:n,renderingEngine:e,annotation:s},or(e,t.filter((e=>e.id!==n.id)).map((e=>e.id)))})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this._init()})),ie(this,"renderAnnotation",((e,t)=>{var n;const{viewport:i}=e,{annotation:o,sourceViewport:a}=this.editData;let r=!1;if(!a)return r;if(a.id===i.id)return r;if(!o||null==o||null===(n=o.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return r;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},l=o.data.handles.points[0],d=o.data.handles.points[1],c=o.data.handles.points[2],h=o.data.handles.points[3],{focalPoint:g,viewPlaneNormal:u,viewUp:v}=i.getCamera(),{viewPlaneNormal:m}=a.getCamera();if(this.isParallel(u,m))return r;const p=Q.utilities.planar.planeEquation(u,g),f=[l,c,d,h],E=[l,d,c,h];let w=f,I=ys.vec3.subtract(ys.vec3.create(),f[0],f[1]);I=ys.vec3.normalize(ys.vec3.create(),I);let _=ys.vec3.subtract(ys.vec3.create(),f[2],f[0]);_=ys.vec3.normalize(ys.vec3.create(),_);const C=ys.vec3.cross(ys.vec3.create(),I,_);if(this.isParallel(C,u))return r;this.isPerpendicular(I,u)&&(w=E);const b=Q.utilities.planar.linePlaneIntersection(w[0],w[1],p),T=Q.utilities.planar.linePlaneIntersection(w[2],w[3],p),{annotationUID:D}=o;s.annotationUID=D;const S=this.getStyle("lineWidth",s,o),y=this.getStyle("lineDash",s,o),M=this.getStyle("color",s,o),O=this.getStyle("shadow",s,o);let x=[b,T].map((e=>i.worldToCanvas(e)));this.configuration.showFullDimension&&(x=this.handleFullDimension(i,b,u,v,T,x));const P="".concat(D,"-line");return js(t,D,"1",x[0],x[1],{color:M,width:S,lineDash:y,shadow:O},P),r=!0,r})),ie(this,"isPerpendicular",((e,t)=>{const n=ys.vec3.dot(e,t);return Math.abs(n)<gm}))}handleFullDimension(e,t,n,i,o,a){const r=e.getRenderingEngine(),s=this.getTargetId(e),l=this.getTargetIdImage(s,r),d=this.getReferencedImageId(e,t,n,i);if(d&&l)try{const{imageData:n,dimensions:i}=l,[r,s,c,h]=[n.indexToWorld([0,0,0]),n.indexToWorld([i[0]-1,0,0]),n.indexToWorld([i[0]-1,i[1]-1,0]),n.indexToWorld([0,i[1]-1,0])].map((e=>Q.utilities.worldToImageCoords(d,e))),[g,u]=[t,o].map((e=>Q.utilities.worldToImageCoords(d,e)));a=[[r,s],[s,c],[h,c],[r,h]].map((e=>{let[t,n]=e;return this.intersectInfiniteLines(t,n,g,u)})).filter((e=>e&&this.isInBound(e,i))).map((t=>{const n=Q.utilities.imageToWorldCoords(d,t);return e.worldToCanvas(n)}))}catch(e){console.log(e)}return a}intersectInfiniteLines(e,t,n,i){const[o,a]=e,[r,s]=t,[l,d]=n,[c,h]=i,g=s-a,u=o-r,v=r*a-o*s,m=h-d,p=l-c,f=c*d-l*h;if(!(Math.abs(g*p-m*u)<gm))return[(u*f-p*v)/(g*p-m*u),(m*v-g*f)/(g*p-m*u)]}isParallel(e,t){return Math.abs(ys.vec3.dot(e,t))>1-gm}isInBound(e,t){return e[0]>=0&&e[0]<=t[0]&&e[1]>=0&&e[1]<=t[1]}}ie(um,"toolName",void 0),um.toolName="ReferenceLines";const vm=um,{EPSILON:mm}=Q.CONSTANTS;class pm extends sc{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:[]}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onSetToolActive",(()=>{this._init()})),ie(this,"_init",(()=>{const e=this.configuration.sourceImageIds;if(null==e||!e.length)return void console.warn("OverlayGridTool: No sourceImageIds provided in configuration");const t=Q.metaData.get("imagePlaneModule",e[0]);if(!t)return void console.warn("OverlayGridTool: No imagePlaneModule found for sourceImageIds");const{frameOfReferenceUID:n}=t,i=xi(this.toolGroupId).viewportsInfo;if(null==i||!i.length)return void console.warn("OverlayGridTool: No viewports found");const o=$e(this.getToolName(),n);if(null==o||!o.length){const t=e.map((e=>this.calculateImageIdPointSets(e)));Qe({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:n,referencedImageId:null},data:{viewportData:new Map,pointSets:t}},n)}or((0,Q.getRenderingEngine)(i[0].renderingEngineId),i.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"calculateImageIdPointSets",(e=>{const{imagePositionPatient:t,rows:n,columns:i,rowCosines:o,columnCosines:a,rowPixelSpacing:r,columnPixelSpacing:s}=Q.metaData.get("imagePlaneModule",e),l=[...t],d=[...t],c=[...t],h=[...t];return ys.vec3.scaleAndAdd(d,t,a,i*s),ys.vec3.scaleAndAdd(c,t,o,n*r),ys.vec3.scaleAndAdd(h,c,a,i*s),{pointSet1:[l,c,d,h],pointSet2:[l,d,c,h]}})),ie(this,"renderAnnotation",((e,t)=>{const n=this.configuration.sourceImageIds;let i=!1;if(null==n||!n.length)return i;const{viewport:o,FrameOfReferenceUID:a}=e;if(o.getImageIds().length<2)return i;const r=$e(this.getToolName(),a);if(null==r||!r.length)return i;const s=r[0],{annotationUID:l}=s,{focalPoint:d,viewPlaneNormal:c}=o.getCamera(),h={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},g=this.getImageIdNormal(n[0]);if(this.isParallel(c,g))return i;const u=Q.utilities.planar.planeEquation(c,d),v=s.data.pointSets,m=s.data.viewportData;for(let e=0;e<n.length;e++){const{pointSet1:n,pointSet2:i}=v[e],a=m.get(o.id)||this.initializeViewportData(m,o.id);if(!a.pointSetsToUse[e]){let t=n,o=ys.vec3.subtract(ys.vec3.create(),n[0],n[1]);o=ys.vec3.normalize(ys.vec3.create(),o),this.isPerpendicular(o,c)&&(t=i),a.pointSetsToUse[e]=t,a.lineStartsWorld[e]=Q.utilities.planar.linePlaneIntersection(t[0],t[1],u),a.lineEndsWorld[e]=Q.utilities.planar.linePlaneIntersection(t[2],t[3],u)}const r=a.lineStartsWorld[e],d=a.lineEndsWorld[e];h.annotationUID=l;const g=this.getStyle("lineWidth",h,s),p=this.getStyle("lineDash",h,s),f=this.getStyle("color",h,s),E=this.getStyle("shadow",h,s),w=[r,d].map((e=>o.worldToCanvas(e))),I="".concat(l,"-line");js(t,l,"".concat(e),w[0],w[1],{color:f,width:g,lineDash:p,shadow:E},I)}return i=!0,i})),ie(this,"initializeViewportData",((e,t)=>(e.set(t,{pointSetsToUse:[],lineStartsWorld:[],lineEndsWorld:[]}),e.get(t)))),ie(this,"isPerpendicular",((e,t)=>{const n=ys.vec3.dot(e,t);return Math.abs(n)<mm}))}isParallel(e,t){return Math.abs(ys.vec3.dot(e,t))>1-mm}getImageIdNormal(e){const{imageOrientationPatient:t}=Q.metaData.get("imagePlaneModule",e),n=ys.vec3.fromValues(t[0],t[1],t[2]),i=ys.vec3.fromValues(t[3],t[4],t[5]);return ys.vec3.cross(ys.vec3.create(),n,i)}}ie(pm,"toolName",void 0),pm.toolName="OverlayGrid";const fm=pm;class Em extends sc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{opacity:.5}}),ie(this,"_init",(()=>{var e;const t=xi(this.toolGroupId).viewportsInfo;if(null==t||!t.length)return void console.warn(this.getToolName()+"Tool: No viewports found");const n=null===(e=(0,Q.getRenderingEngine)(t[0].renderingEngineId))||void 0===e?void 0:e.getViewport(t[0].viewportId);if(!n)return;const i=n.getFrameOfReferenceUID(),o=$e(this.getToolName(),i);if(null==o||!o.length){const e=new Map;!function(e,t){t.forEach((t=>{var n;let{viewportId:i,renderingEngineId:o}=t;const a=null===(n=(0,Q.getRenderingEngine)(o))||void 0===n?void 0:n.getViewport(i);wm(e,a)}))}(e,t),Qe({highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),FrameOfReferenceUID:i,referencedImageId:null},data:{actorsWorldPointsMap:e}},i)}or((0,Q.getRenderingEngine)(t[0].renderingEngineId),t.map((e=>{let{viewportId:t}=e;return t})))})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this._init()})),ie(this,"renderAnnotation",((e,t)=>{const{viewport:n,FrameOfReferenceUID:i}=e;let o=!1;const a=$e(this.getToolName(),i);if(null==a||!a.length)return o;const r=a[0],{annotationUID:s}=r,l=r.data.actorsWorldPointsMap;wm(l,n);const d=n.getActors(),c=Im(n);return d.forEach((e=>{if(null==e||!e.clippingFilter)return;const i=l.get(e.uid);if(!i)return;if(!i.get(c))return;let o=1;const{worldPointsSet:a,color:r}=i.get(c);for(let i=0;i<a.length;i++){const l=a[i].map((e=>n.worldToCanvas(e))),d={color:r,fillColor:r,fillOpacity:this.configuration.opacity,connectLastToFirst:!0},c=e.uid+"#"+o;zs(t,s,c,l,d),o++}})),o=!0,o}))}}function wm(e,t){const n=t.getActors(),i=Im(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(i)){const e=Qu(t.clippingFilter.getOutputData());if(!e)return;const o=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(i,{worldPointsSet:e,color:o})}}))}function Im(e){const{viewPlaneNormal:t}=e.getCamera(),n=e.getCurrentImageIdIndex();return"".concat(e.id,"-").concat(oo(t),"-").concat(n)}ie(Em,"toolName",void 0),Em.toolName="SegmentationIntersection";const _m=Em;function Cm(e,t,n,i){const o=ys.vec3.create();ys.vec3.cross(o,t,e);const a=ys.vec3.fromValues(...n),r=ys.vec3.fromValues(...i),s=ys.vec3.create();ys.vec3.subtract(s,a,r);const l=ys.vec3.length(s);if(l<1e-4)return{worldWidth:0,worldHeight:0};const d=ys.vec3.dot(s,o)/(l*ys.vec3.length(o));return{worldWidth:Math.sqrt(1-d*d)*l,worldHeight:d*l}}const{transformWorldToIndex:bm}=Q.utilities;class Tm extends dc{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:Dm,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,Q.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,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:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},initialRotation:r.getRotation()}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,centerWorld:o,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=ud(s.map((e=>a.worldToCanvas(e)))),[d,c]=l,h={left:Math.min(d[0],c[0])+i/2,top:Math.min(d[1],c[1])+i/2,width:Math.abs(d[0]-c[0])-i,height:Math.abs(d[1]-c[1])-i},g={left:Math.min(d[0],c[0])-i/2,top:Math.min(d[1],c[1])-i/2,width:Math.abs(d[0]-c[0])+i,height:Math.abs(d[1]-c[1])+i},u=this._pointInEllipseCanvas(h,n);return!(!this._pointInEllipseCanvas(g,n)||u)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s,l,d,c,h,g=!1;if(n.worldPosition)g=!0;else{const{points:e}=a.handles,{viewport:t}=(0,Q.getEnabledElement)(o),{worldToCanvas:i,canvasToWorld:g}=t;r=e.findIndex((e=>e===n));const u=e.map(i);h=u[r],d=Math.abs(u[2][0]-u[3][0]),c=Math.abs(u[0][1]-u[1][1]),s=[(u[2][0]+u[3][0])/2,(u[0][1]+u[1][1])/2],l=g(s)}const u=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:u,handleIndex:r,canvasWidth:d,canvasHeight:c,centerWorld:l,originalHandleCanvas:h,movingTextBox:g},this._activateModify(o),ds(o);const v=(0,Q.getEnabledElement)(o),{renderingEngine:m}=v;or(m,u),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerWorld:h}=this.editData,g=s.worldToCanvas(h),{data:u}=d,v=Math.abs(o[0]-g[0]),m=Math.abs(o[1]-g[1]),p=[g[0],g[1]-m],f=[g[0],g[1]+m],E=[g[0]-v,g[1]],w=[g[0]+v,g[1]];u.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,{viewport:i}=(0,Q.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i,{annotation:r,canvasWidth:s,canvasHeight:l,handleIndex:d,centerWorld:c,originalHandleCanvas:h}=this.editData,g=i.worldToCanvas(c),{data:u}=r,{points:v}=u.handles,{currentPoints:m}=t,p=m.canvas;if(0===d||1===d){const e=Math.abs(p[1]-g[1]),t=[g[0],g[1]-e],n=[g[0],g[1]+e];v[0]=o(t),v[1]=o(n);const i=s/2+(p[0]-h[0]),a=[g[0]-i,g[1]],r=[g[0]+i,g[1]];v[2]=o(a),v[3]=o(r)}else{const e=Math.abs(p[0]-g[0]),t=[g[0]-e,g[1]],n=[g[0]+e,g[1]];v[2]=o(t),v[3]=o(n);const i=l/2+(p[1]-h[1]),a=[g[0],g[1]-i],r=[g[0],g[1]+i];v[0]=o(a),v[1]=o(r)}})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{handles:g}=h,{points:u,activeHandleIndex:v}=g;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e))),w=(Math.abs(a.getRotation()-(h.initialRotation||0)),ud(E)),{centerPointRadius:I}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,a,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==n}))&&delete h.cachedStats[t]}}else h.cachedStats[l]={Modality:null,area:null,max:null,mean:null,stdDev:null,areaUnit:null},this._calculateCachedStats(i,a,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let _;if(!Pe(r))continue;ce(i)||this.editData||null===v||(_=[E[v]]),_&&qs(t,r,"0",_,{color:f});const C="".concat(r,"-ellipse"),b="0";if(Hs(t,r,b,E,{color:f,lineDash:p,lineWidth:m},C),I>0&&Math.min(Math.abs(w[0][0]-w[1][0])/2,Math.abs(w[0][1]-w[1][1])/2)>3*I){const e=this._getCanvasEllipseCenter(E);Fs(t,r,"".concat(b,"-center"),e,I,{color:f,lineDash:p,lineWidth:m})}o=!0;const T=this.getLinkedTextBoxStyle(c,i);if(!T.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 D=this.configuration.getTextLines(h,l);if(!D||0===D.length)continue;let S;h.handles.textBox.hasMoved||(S=mc(w),h.handles.textBox.worldPosition=a.canvasToWorld(S));const y=a.worldToCanvas(h.handles.textBox.worldPosition),M=Zs(t,r,"1",D,y,E,{},T),{x:O,y:x,width:P,height:N}=M;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([O,x]),topRight:a.canvasToWorld([O+P,x]),bottomLeft:a.canvasToWorld([O,x+N]),bottomRight:a.canvasToWorld([O+P,x+N])}}return o})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{viewportId:a,renderingEngineId:r}=i,{points:s}=o.handles,l=s.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:d,viewUp:c}=t.getCamera(),[h,g]=ud(l),u=t.canvasToWorld(h),v=t.canvasToWorld(g),{cachedStats:m}=o,p=Object.keys(m),f=u,E=v;for(let i=0;i<p.length;i++){const o=p[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:l,hasPixelSpacing:h}=a,g=bm(s,f);g[0]=Math.floor(g[0]),g[1]=Math.floor(g[1]),g[2]=Math.floor(g[2]);const C=bm(s,E);if(C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]),this._isInsideVolume(g,C,r)){var w,I,_;const n=[[Math.min(g[0],C[0]),Math.max(g[0],C[0])],[Math.min(g[1],C[1]),Math.max(g[1],C[1])],[Math.min(g[2],C[2]),Math.max(g[2],C[2])]],i={center:[(u[0]+v[0])/2,(u[1]+v[1])/2,(u[2]+v[2])/2],xRadius:Math.abs(u[0]-v[0])/2,yRadius:Math.abs(u[1]-v[1])/2,zRadius:Math.abs(u[2]-v[2])/2},{worldWidth:r,worldHeight:h}=Cm(d,c,f,E),p=0===r&&0===h,b=El(a),T=Math.abs(Math.PI*(r/2)*(h/2))/b/b,D={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},S=fc(l.Modality,e.metadata.referencedImageId,D),y=Cl(s,(e=>vd(i,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),M=this.configuration.statsCalculator.getStatistics();m[o]={Modality:l.Modality,area:T,mean:null===(w=M[1])||void 0===w?void 0:w.value,max:null===(I=M[0])||void 0===I?void 0:I.value,stdDev:null===(_=M[2])||void 0===_?void 0:_.value,statsArray:M,pointsInShape:y,isEmptyArea:p,areaUnit:fl(null,a),modalityUnit:S}}else this.isHandleOutsideImage=!0,m[o]={Modality:l.Modality}}e.invalidated=!1;const C=te.ANNOTATION_MODIFIED,b={annotation:e,viewportId:a,renderingEngineId:r};return(0,Q.triggerEvent)(Q.eventTarget,C,b),m})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}_pointInEllipseCanvas(e,t){const n=e.width/2,i=e.height/2;if(n<=0||i<=0)return!1;const o=[e.left+n,e.top+i],a=[t[0]-o[0],t[1]-o[1]];return a[0]*a[0]/(n*n)+a[1]*a[1]/(i*i)<=1}_getCanvasEllipseCenter(e){const[t,n,i,o]=e,a=[i[0],n[1]],r=[o[0],t[1]];return[(a[0]+r[0])/2,(a[1]+r[1])/2]}}function Dm(e,t){const n=e.cachedStats[t],{area:i,mean:o,stdDev:a,max:r,isEmptyArea:s,areaUnit:l,modalityUnit:d}=n,c=[];if(i){const e=s?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(l);c.push(e)}return o&&c.push("Mean: ".concat(mv(o)," ").concat(d)),r&&c.push("Max: ".concat(mv(r)," ").concat(d)),a&&c.push("Std Dev: ".concat(mv(a)," ").concat(d)),c}ie(Tm,"toolName",void 0),Tm.toolName="EllipticalROI";const Sm=Tm;function ym(e){const[t,n]=e;return lh(t,n)}function Mm(e){const[t,n]=e,i=lh(t,n);return[[t[0]-i,t[1]-i],[t[0]+i,t[1]+i]]}const{transformWorldToIndex:Om}=Q.utilities;class xm extends dc{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:Pm,statsCalculator:Cc}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(n.canvas,(0,Q.getEnabledElement)(i)),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,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:[[...o],[...o]],activeHandleIndex:null},cachedStats:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=ym(l),c=ym([l[0],n]);return Math.abs(c-d)<i/2})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{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=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;i.highlighted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c}=this.editData,{data:h}=d;h.handles.points=[h.handles.points[0],l(o)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{canvasToWorld:o,worldToCanvas:a}=i.viewport,{annotation:r,handleIndex:s}=this.editData,{data:l}=r,{points:d}=l.handles,c=d.map((e=>a(e))),{currentPoints:h}=t,g=h.canvas;if(0===s){const e=g[0]-c[0][0],t=g[1]-c[0][1],n=g,i=[c[1][0]+e,c[1][1]+t];d[0]=o(n),d[1]=o(i)}else d[1]=o(g)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.addEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragDrawCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragDrawCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragDrawCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{handles:g}=h,{points:u,activeHandleIndex:v}=g;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e))),w=E[0],I=ym(E),_=Mm(E),{centerPointRadius:C}=this.configuration;if(h.cachedStats[l]&&null!=h.cachedStats[l].areaUnit){if(i.invalidated&&(this._throttledCalculateCachedStats(i,a,d,e),a instanceof Q.VolumeViewport)){const{referencedImageId:e}=i.metadata;for(const t in h.cachedStats)t.startsWith("imageId")&&d.getStackViewports().find((t=>{const n=Q.utilities.imageIdToURI(e),i=t.hasImageURI(n),o=Q.utilities.imageIdToURI(t.getCurrentImageId());return i&&o!==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(i,a,d,e);if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let b;if(!Pe(r))continue;ce(i)||this.editData||null===v||(b=[E[v]]),b&&qs(t,r,"0",b,{color:f});const T="".concat(r,"-circle"),D="0";Fs(t,r,D,w,I,{color:f,lineDash:p,lineWidth:m},T),C>0&&I>3*C&&Fs(t,r,"".concat(D,"-center"),w,C,{color:f,lineDash:p,lineWidth:m}),o=!0;const S=this.getLinkedTextBoxStyle(c,i);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=mc(_),h.handles.textBox.worldPosition=a.canvasToWorld(M));const O=a.worldToCanvas(h.handles.textBox.worldPosition),x=Zs(t,r,"1",y,O,E,{},S),{x:P,y:N,width:R,height:A}=x;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([P,N]),topRight:a.canvasToWorld([P+R,N]),bottomLeft:a.canvasToWorld([P,N+A]),bottomRight:a.canvasToWorld([P+R,N+A])}}return o})),ie(this,"_calculateCachedStats",((e,t,n,i)=>{const o=e.data,{viewportId:a,renderingEngineId:r}=i,{points:s}=o.handles,l=s.map((e=>t.worldToCanvas(e))),{viewPlaneNormal:d,viewUp:c}=t.getCamera(),[h,g]=Mm(l),u=t.canvasToWorld(h),v=t.canvasToWorld(g),{cachedStats:m}=o,p=Object.keys(m),f=u,E=v;for(let i=0;i<p.length;i++){const o=p[i],a=this.getTargetIdImage(o,n);if(!a)continue;const{dimensions:r,imageData:s,metadata:l,hasPixelSpacing:h}=a,g=Om(s,f);g[0]=Math.floor(g[0]),g[1]=Math.floor(g[1]),g[2]=Math.floor(g[2]);const C=Om(s,E);if(C[0]=Math.floor(C[0]),C[1]=Math.floor(C[1]),C[2]=Math.floor(C[2]),this._isInsideVolume(g,C,r)){var w,I,_;const n=[[Math.min(g[0],C[0]),Math.max(g[0],C[0])],[Math.min(g[1],C[1]),Math.max(g[1],C[1])],[Math.min(g[2],C[2]),Math.max(g[2],C[2])]],i={center:[(u[0]+v[0])/2,(u[1]+v[1])/2,(u[2]+v[2])/2],xRadius:Math.abs(u[0]-v[0])/2,yRadius:Math.abs(u[1]-v[1])/2,zRadius:Math.abs(u[2]-v[2])/2},{worldWidth:r,worldHeight:h}=Cm(d,c,f,E),p=0===r&&0===h,b=El(a),T=_l(a),D=Math.abs(Math.PI*(r/b/2)*(h/T/b/2)),S={isPreScaled:Ec(t,o),isSuvScaled:this.isSuvScaled(t,o,e.metadata.referencedImageId)},y=fc(l.Modality,e.metadata.referencedImageId,S),M=Cl(s,(e=>vd(i,e,{fast:!0})),this.configuration.statsCalculator.statsCallback,n),O=this.configuration.statsCalculator.getStatistics();m[o]={Modality:l.Modality,area:D,mean:null===(w=O[1])||void 0===w?void 0:w.value,max:null===(I=O[0])||void 0===I?void 0:I.value,stdDev:null===(_=O[2])||void 0===_?void 0:_.value,statsArray:O,pointsInShape:M,isEmptyArea:p,areaUnit:fl(null,a),radius:r/2/b,radiusUnit:ml(null,a),perimeter:2*Math.PI*(r/2)/b,modalityUnit:y}}else this.isHandleOutsideImage=!0,m[o]={Modality:l.Modality}}e.invalidated=!1;const C=te.ANNOTATION_MODIFIED,b={annotation:e,viewportId:a,renderingEngineId:r};return(0,Q.triggerEvent)(Q.eventTarget,C,b),m})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}}function Pm(e,t){const n=e.cachedStats[t],{radius:i,radiusUnit:o,area:a,mean:r,stdDev:s,max:l,isEmptyArea:d,Modality:c,areaUnit:h,modalityUnit:g}=n,u=[];if(i){const e=d?"Radius: Oblique not supported":"Radius: ".concat(mv(i)," ").concat(o);u.push(e)}if(a){const e=d?"Area: Oblique not supported":"Area: ".concat(mv(a)," ").concat(h);u.push(e)}return r&&u.push("Mean: ".concat(mv(r)," ").concat(g)),l&&u.push("Max: ".concat(mv(l)," ").concat(g)),s&&u.push("Std Dev: ".concat(mv(s)," ").concat(g)),u}ie(xm,"toolName",void 0),xm.toolName="CircleROI";const Nm=xm;class Rm{constructor(e){var t,n;ie(this,"_controlPoints",[]),ie(this,"_resolution",void 0),ie(this,"_closed",void 0),ie(this,"_invalidated",!1),ie(this,"_curveSegments",void 0),ie(this,"_aabb",void 0),ie(this,"_length",0),this._controlPoints=[],this._resolution=null!==(t=null==e?void 0:e.resolution)&&void 0!==t?t:20,this._closed=null!==(n=null==e?void 0:e.closed)&&void 0!==n&&n,this._invalidated=!0}get controlPoints(){return this._controlPoints}get numControlPoints(){return this._controlPoints.length}get resolution(){return this._resolution}set resolution(e){this._resolution!==e&&(this._resolution=e,this.invalidated=!0)}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:i}=t.points,o=Math.floor(e),a=this._curveSegments[o],r=e-Math.floor(o),s=[n[0]+r*(i[0]-n[0]),n[1]+r*(i[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,i=-1;for(let o=0,a=t.length;o<a;o++){const a=t[o],r=e[0]-a[0],s=e[1]-a[1],l=r*r+s*s;l<n&&(n=l,i=o)}return{index:i,point:-1===i?void 0:[...t[i]],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 i,o,a=-1,r=1/0;for(let s=0;s<t.length;s++){const l=t[s];if(l.distanceSquared>r)continue;const{curveSegmentIndex:d,curveSegment:c}=l,{lineSegments:h}=c;for(let t=0;t<h.length;t++){const s=h[t],{point:c,distanceSquared:g}=hc(s.points.start,s.points.end,e);g<r&&(o=s,a=d,i=l.curveSegment,n=c,r=g)}}return{point:n,uValue:a+(o.previousLineSegmentsLength+lh(o.points.start,n))/i.length,distance:Math.sqrt(r)}}getClosestPointOnControlPointLines(e){const t=[...this._controlPoints];if(this._closed&&t.push(this._controlPoints[0]),!t.length)return;let n,i=1/0,o=t[0];for(let a=1,r=t.length;a<r;a++){const r=t[a],{point:s,distanceSquared:l}=hc(o,r,e);l<i&&(n=s,i=l),o=r}return{point:n,distance:Math.sqrt(i)}}getPolylinePoints(){return this._update(),this._convertCurveSegmentsToPolyline(this._curveSegments)}getPreviewPolylinePoints(e,t){if(this._closed)return[];this._update();const n=this.getClosestControlPointWithinDistance(e,t),i=0===(null==n?void 0:n.index),o=this.getPreviewCurveSegments(e,i);return null!=o&&o.length?this._convertCurveSegmentsToPolyline(o):[]}isPointNearCurve(e,t){this._update();const n=this._getCurveSegmmentsWithinDistance(e,t),i=t*t;for(let t=0;t<n.length;t++){const{lineSegments:o}=n[t];for(let t=0;t<o.length;t++){const n=o[t];if(gc(n.points.start,n.points.end,e)<=i)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 i=0;for(let n=0;n<t.length;n++){const o=t[n],{aabb:a}=o;if(!(e[0]<=a.maxX&&e[1]>=a.minY&&e[1]<a.maxY))continue;const{lineSegments:r}=o;for(let t=0;t<r.length;t++){const n=r[t],{aabb:o}=n;if(e[0]<=o.maxX&&e[1]>=o.minY&&e[1]<o.maxY){const{start:t,end:o}=n.points,a=t[0]===o[0],r=(e[1]-t[1])*(o[0]-t[0])/(o[1]-t[1])+t[0];i+=a||e[0]<=r?1:0}}}return i%2==1}_update(){if(!this._invalidated)return;const e=this.getSplineCurves();let t=0,n=1/0,i=1/0,o=-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,i=i<=s.minY?i:s.minY,o=o>=s.maxX?o:s.maxX,a=a>=s.maxY?a:s.maxY,t+=l}this._curveSegments=e,this._aabb={minX:n,minY:i,maxX:o,maxY:a},this._length=t,this._invalidated=!1}_convertCurveSegmentsToPolyline(e){this._update();const t=[];return e.forEach(((e,n)=>{let{lineSegments:i}=e;i.forEach(((e,i)=>{0===n&&0===i&&t.push([...e.points.start]),t.push([...e.points.end])}))})),t}_getCurveSegmmentsDistanceSquaredInfo(e){this._update();const t=[],{_curveSegments:n}=this;for(let i=0;i<n.length;i++){const o=n[i],a=rh(o.aabb,e);t.push({curveSegmentIndex:i,curveSegment:o,distanceSquared:a})}return t}_getCurveSegmmentsWithinDistance(e,t){this._update();const n=t*t;if(rh(this.aabb,e)>n)return[];const i=this._getCurveSegmmentsDistanceSquaredInfo(e),o=[];for(let e=0,t=i.length;e<t;e++){const{curveSegment:t,distanceSquared:a}=i[e];a<=n&&o.push(t)}return o}_getLineSegmentAt(e){this._update();const t=Math.floor(e),n=e-t,i=this._curveSegments[t],{lineSegments:o}=i,a=i.length*n;for(let e=0;e<o.length;e++){const t=o[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],i={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:i.aabb.minX,minY:i.aabb.minY,maxX:i.aabb.maxX,maxY:i.aabb.maxY},lineSegments:[i]}}}class Am extends Rm{getPreviewCurveSegments(e,t){const n=this._getNumCurveSegments()+1,i=Math.max(0,n-2),o=t?n:n-1,a=this.getTransformMatrix(),r=[...this.controlPoints],s=[];t||r.push(e);for(let e=i;e<=o;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 i=0;for(let o=0;o<e;o++){const e=this._getCurveSegment(o,n);e.previousCurveSegmentsLength=i,t[o]=e,i+=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,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=Math.floor(e);let r=a%o;const s=e-a;if(r<0||r>=o){if(!this.closed)return;r=(o+r)%o}const{p0:l,p1:d,p2:c,p3:h}=this._getCurveSegmentPoints(r,n,i),g=s*s,u=g*s,v=ys.vec4.fromValues(1,s,g,u),m=ys.vec4.transformMat4(ys.vec4.create(),v,t);return[ys.vec4.dot(m,ys.vec4.fromValues(l[0],d[0],c[0],h[0])),ys.vec4.dot(m,ys.vec4.fromValues(l[1],d[1],c[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 i=this._getNumCurveSegments(t,n),o=e-1,a=n?(e+1)%i:e+1,r=a+1,s=t[e],l=t[a];let d,c;return d=o>=0?t[o]:n?t[t.length-1]:dh(l,s),c=r<t.length?t[r]:n?t[0]:dh(s,l),{p0:d,p1:s,p2:l,p3:c}}_getLineSegments(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.controlPoints,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const o=this._getNumCurveSegments(n,i),a=this.resolution+1,r=1/a;let s=e+1;i||e!==o-1||(s-=1e-8);const l=[];let d,c,h=0;for(let o=0,g=e;o<=a;o++,g+=r){g=g>s?s:g;const e=this._getPoint(g,t,n,i);if(!o){d=e;continue}c=e;const a=c[0]-d[0],r=c[1]-d[1],u=Math.sqrt(a**2+r**2),v={minX:d[0]<=c[0]?d[0]:c[0],maxX:d[0]>=c[0]?d[0]:c[0],minY:d[1]<=c[1]?d[1]:c[1],maxY:d[1]>=c[1]?d[1]:c[1]};l.push({points:{start:d,end:c},aabb:v,length:u,previousLineSegmentsLength:h}),d=c,h+=u}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,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.closed;const{p0:o,p1:a,p2:r,p3:s}=this._getCurveSegmentPoints(e,n,i),l=this._getLineSegments(e,t,n,i);let d=0,c=1/0,h=1/0,g=-1/0,u=-1/0;return l.forEach((e=>{let{aabb:t,length:n}=e;c=Math.min(c,t.minX),h=Math.min(h,t.minY),g=Math.max(g,t.maxX),u=Math.max(u,t.maxY),d+=n})),{controlPoints:{p0:o,p1:a,p2:r,p3:s},aabb:{minX:c,minY:h,maxX:g,maxY:u},length:d,previousCurveSegmentsLength:0,lineSegments:l}}}class km extends Am{constructor(e){var t,n;super(e),ie(this,"_scale",void 0),ie(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 Lm extends km{constructor(){super({scale:0,fixedScale:!0})}}class Um extends km{constructor(){super({scale:.5,fixedScale:!0})}}const Vm=ys.mat4.multiplyScalar(ys.mat4.create(),ys.mat4.fromValues(1,4,1,0,-3,0,3,0,3,-6,3,0,-1,3,-3,1),1/6);class Wm extends Am{getTransformMatrix(){return Vm}}const Fm={resolution:20,controlPointAdditionDistance:6,controlPointDeletionDistance:6,showControlPointsConnectors:!1,controlPointAdditionEnabled:!0,controlPointDeletionEnabled:!0};var Hm=function(e){return e.Cardinal="CARDINAL",e.Linear="LINEAR",e.CatmullRom="CATMULLROM",e.BSpline="BSPLINE",e}(Hm||{}),Bm=function(e){return e.AddControlPoint="addControlPoint",e.DeleteControlPoint="deleteControlPoint",e}(Bm||{});class Gm extends dc{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,calculateStats:!0,getTextLines:qm,spline:{configuration:{[Hm.Cardinal]:{Class:km,scale:.5},[Hm.CatmullRom]:{Class:Um},[Hm.Linear]:{Class:Lm},[Hm.BSpline]:{Class:Wm,controlPointAdditionEnabled:!1,controlPointDeletionEnabled:!1,showControlPointsConnectors:!0}},type:Hm.CatmullRom,drawPreviewEnabled:!0,lastControlPointDeletionKeys:["Backspace","Delete"]},actions:{[Bm.AddControlPoint]:{method:"addControlPointCallback",bindings:[{mouseButton:ma.Primary,modifierKey:pa.Shift}]},[Bm.DeleteControlPoint]:{method:"deleteControlPointCallback",bindings:[{mouseButton:ma.Primary,modifierKey:pa.Ctrl}]}}}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,{world:o,canvas:a}=n,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,{type:g}=this.configuration.spline,u=this._getSplineConfig(g),v=new u.Class,m=this.getReferencedImageId(s,o,c,h),p=s.getFrameOfReferenceUID(),f={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:p,referencedImageId:m},data:{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:[[...o]],activeHandleIndex:null},spline:{type:u.type,instance:v,resolution:u.resolution,closed:!1,polyline:[]},cachedStats:{}}};Qe(f,i);const E=Qd(i,this.getToolName());return this.editData={annotation:f,viewportIdsToRender:E,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:a},this._activateDraw(i),e.preventDefault(),or(l,E),f})),ie(this,"isPointNearTool",((e,t,n,i)=>{const{instance:o}=t.data.spline;return o.isPointNearCurve(n,i)})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1};const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{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=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_keyDownCallback",(e=>{var t;const n=e.detail,{element:i}=n,o=null!==(t=n.key)&&void 0!==t?t:"",{lastControlPointDeletionKeys:a}=this.configuration.spline;if(!a.includes(o))return;const{annotation:r}=this.editData,{data:s}=r;if(3!==s.handles.points.length){{const e=s.handles.points.length-1;this._deleteControlPointByIndex(i,r,e)}e.preventDefault()}else this.cancel(i)})),ie(this,"_mouseMoveCallback",(e=>{const{drawPreviewEnabled:t}=this.configuration.spline;if(!t)return;const{element:n}=e.detail,{renderingEngine:i}=(0,Q.getEnabledElement)(n),o=Qd(n,this.getToolName());this.editData.lastCanvasPoint=e.detail.currentPoints.canvas,or(i,o),e.preventDefault()})),ie(this,"_mouseDownCallback",(e=>{const t=e.type===te.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i}=this.editData,{data:o}=n;if(o.spline.closed)return;const a=e.detail,{element:r}=a,{currentPoints:s}=a,{canvas:l,world:d}=s,c=(0,Q.getEnabledElement)(r),{renderingEngine:h}=c;let g=o.handles.points.length>=2&&t,u=!0;if(o.handles.points.length>=3){const{instance:e}=o.spline,t=e.getClosestControlPointWithinDistance(l,10);0===(null==t?void 0:t.index)&&(u=!1,g=!0)}u&&o.handles.points.push(d),o.spline.closed=o.spline.closed||g,n.invalidated=!0,or(h,i),o.spline.closed&&this._endCallback(e),e.preventDefault()})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&tt(t.annotationUID);const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,t.annotationUID})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.KEY_DOWN,this._keyDownCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.KEY_DOWN,this._keyDownCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o;let a=!1;const{viewport:r}=e,{worldToCanvas:s}=r,{element:l}=r;if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let d=$e(this.getToolName(),l);if(null===(n=d)||void 0===n||!n.length)return a;if(d=this.filterInteractableAnnotationsForElement(l,d),null===(i=d)||void 0===i||!i.length)return a;const c=this.getTargetId(r),h=null===(o=this.editData)||void 0===o?void 0:o.newAnnotation,g={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<d.length;n++){var u;const i=d[n],{annotationUID:o,data:v,highlighted:m}=i,{handles:p}=v,{points:f,activeHandleIndex:E}=p;g.annotationUID=o;const w=this.getStyle("lineWidth",g,i),I=this.getStyle("lineDash",g,i),_=this.getStyle("color",g,i),C=f.map((e=>s(e))),{drawPreviewEnabled:b}=this.configuration.spline,T=i.data.spline.type,D=this._getSplineConfig(T),S=this._updateSplineInstance(l,i),y=S.getPolylinePoints(),M=[];for(let e=0,t=y.length;e<t;e++)M.push(r.canvasToWorld(y[e]));let O;if(v.spline.polyline=M,v.cachedStats[c]&&null!=v.cachedStats[c].areaUnit?i.invalidated&&this._throttledCalculateCachedStats(i,l):(v.cachedStats[c]={Modality:null,area:null,areaUnit:null},this._calculateCachedStats(i,l)),Pe(o)){if(ce(i)||this.editData||null===E||(O=[C[E]]),(O||h||m)&&qs(t,o,"0",C,{color:_,lineDash:I,lineWidth:w,handleRadius:"3"}),b&&S.numControlPoints>1&&null!==(u=this.editData)&&void 0!==u&&u.lastCanvasPoint&&!S.closed){const{lastCanvasPoint:e}=this.editData;zs(t,o,"previewSplineChange",S.getPreviewPolylinePoints(e,10),{color:"#9EA0CA",lineDash:I,lineWidth:w})}if(D.showControlPointsConnectors){const e=[...C];S.closed&&e.push(C[0]),zs(t,o,"controlPointsConnectors",e,{color:"rgba(255, 255, 255, 0.5)",lineDash:I,lineWidth:w})}zs(t,o,"lineSegments",y,{color:_,lineDash:I,lineWidth:w}),this._renderStats(i,r,e,t),a=!0,i.invalidated=!1}}return a})),ie(this,"_renderStats",((e,t,n,i)=>{var o;const a=e.data,r=this.getTargetId(t);if(!a.spline.closed)return;const s={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:n.viewport.id},l=this.getLinkedTextBoxStyle(s,e);if(!l.visibility)return;const d=this.configuration.getTextLines(a,r);if(!d||0===d.length)return;const c=a.handles.points.map((e=>t.worldToCanvas(e)));if(!a.handles.textBox.hasMoved){const e=mc(c);a.handles.textBox.worldPosition=t.canvasToWorld(e)}const h=t.worldToCanvas(a.handles.textBox.worldPosition),g=Zs(i,null!==(o=e.annotationUID)&&void 0!==o?o:"","textBox",d,h,c,{},l),{x:u,y:v,width:m,height:p}=g;a.handles.textBox.worldBoundingBox={topLeft:t.canvasToWorld([u,v]),topRight:t.canvasToWorld([u+m,v]),bottomLeft:t.canvasToWorld([u,v+p]),bottomRight:t.canvasToWorld([u+m,v+p])}})),ie(this,"addControlPointCallback",((e,t)=>{const{data:n}=t,i=n.spline.type,o=this._getSplineConfig(i),a=o.controlPointAdditionDistance;if(!1===o.controlPointAdditionEnabled)return;const r=e.detail,{element:s}=r,l=(0,Q.getEnabledElement)(s),{renderingEngine:d,viewport:c}=l,{canvasToWorld:h}=c,{instance:g}=n.spline,u=e.detail.currentPoints.canvas,v=g.getClosestPoint(u);if(v.distance>a)return;const{index:m,point:p}=g.addControlPointAtU(v.uValue);n.handles.points.splice(m,0,h(p)),t.invalidated=!0;const f=Qd(s,this.getToolName());or(d,f)})),ie(this,"deleteControlPointCallback",((e,t)=>{const n=t.data.spline.type,i=this._getSplineConfig(n),o=i.controlPointDeletionDistance;if(!1===i.controlPointDeletionEnabled)return;const a=e.detail,{element:r,currentPoints:s}=a,{canvas:l}=s,{instance:d}=t.data.spline,c=d.getClosestControlPointWithinDistance(l,o);c&&this._deleteControlPointByIndex(r,t,c.index)})),ie(this,"_calculateCachedStats",((e,t)=>{if(!this.configuration.calculateStats)return;const n=e.data;if(!n.spline.closed)return;const i=(0,Q.getEnabledElement)(t),{viewport:o,renderingEngine:a}=i,{cachedStats:r}=n,{polyline:s}=n.spline,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:i}=n,d=s.map((e=>o.worldToCanvas(e))),c=d[0],h=o.canvasToWorld(c),g=o.canvasToWorld([c[0]+1,c[1]]),u=o.canvasToWorld([c[0],c[1]+1]),v=ys.vec3.distance(h,g),m=ys.vec3.distance(h,u),p=El(n);let f=Ch(d)/p/p;f*=v*m,r[t]={Modality:i.Modality,area:f,areaUnit:fl(null,n)}}return this.triggerAnnotationModified(e,i),r})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}_deleteControlPointByIndex(e,t,n){const i=(0,Q.getEnabledElement)(e),{points:o}=t.data.handles;3===o.length?tt(t.annotationUID):o.splice(n,1);const{renderingEngine:a}=i,r=Qd(e,this.getToolName());t.invalidated=!0,or(a,r)}_getSplineConfig(e){const{configuration:t}=this,n=t.spline.configuration;return Object.assign({type:e},Fm,n[e])}_updateSplineScale(e,t){const n=t.data.spline.type,i=this._getSplineConfig(n);e instanceof km&&!e.fixedScale&&void 0!==i.scale&&e.scale!==i.scale&&(e.scale=i.scale,t.invalidated=!0)}_updateSplineInstance(e,t){var n;const i=(0,Q.getEnabledElement)(e),{viewport:o}=i,{worldToCanvas:a}=o,{data:r}=t,{type:s,instance:l}=t.data.spline,d=this._getSplineConfig(s),c=r.handles.points.map(a);return l.setControlPoints(c),l.closed=!(null===(n=r.spline)||void 0===n||!n.closed),l.resolution!==d.resolution&&(l.resolution=parseInt(d.resolution),t.invalidated=!0),l instanceof km&&!l.fixedScale&&void 0!==d.scale&&l.scale!==d.scale&&(l.scale=d.scale,t.invalidated=!0),l}}function qm(e,t){const n=e.cachedStats[t],{area:i,isEmptyArea:o,areaUnit:a}=n,r=[];if(i){const e=o?"Area: Oblique not supported":"Area: ".concat(mv(i)," ").concat(a);r.push(e)}return r}ie(Gm,"toolName",void 0),ie(Gm,"SplineTypes",Hm),ie(Gm,"Actions",Bm),Gm.toolName="SplineROI";const jm=Gm;class zm{constructor(e){let{numBits:t,getPriority:n,areEqual:i}=e;ie(this,"_bucketCount",void 0),ie(this,"_mask",void 0),ie(this,"_size",void 0),ie(this,"_currentBucketIndex",void 0),ie(this,"_getPriority",void 0),ie(this,"_areEqual",void 0),ie(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 i?i:(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 i,o=n;for(;null!==o&&!this._areEqual(e,o.value);)i=o,o=o.next;return null!==o&&(o===n?this._buckets[t]=o.next:i.next=o.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 Km=4294967295,Ym=2/(3*Math.PI);class Xm{constructor(e,t,n){ie(this,"searchGranularityBits",void 0),ie(this,"searchGranularity",void 0),ie(this,"width",void 0),ie(this,"height",void 0),ie(this,"grayscalePixelData",void 0),ie(this,"laplace",void 0),ie(this,"gradMagnitude",void 0),ie(this,"gradXNew",void 0),ie(this,"gradYNew",void 0),ie(this,"startPoint",void 0),ie(this,"visited",void 0),ie(this,"parents",void 0),ie(this,"costs",void 0),ie(this,"priorityQueueNew",void 0),ie(this,"_getPointIndex",((e,t)=>{const{width:n}=this;return e*n+t})),ie(this,"_getPointCoordinate",(e=>[e%this.width,Math.floor(e/this.width)])),ie(this,"_getPointCost",(e=>Math.round(this.searchGranularity*this.costs[e])));const i=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(i),this.parents=new Uint32Array(i),this.costs=new Float32Array(i)}startSearch(e){const t=this._getPointIndex(e[1],e[0]);this.startPoint=null,this.visited.fill(!1),this.parents.fill(Km),this.costs.fill(1/0),this.priorityQueueNew=new zm({numBits:this.searchGranularityBits,getPriority:this._getPointCost}),this.startPoint=e,this.costs[t]=0,this.priorityQueueNew.push(t)}findPathToPoint(e){if(!this.startPoint)throw new Error("There is no search in progress");const{startPoint:t,_getPointIndex:n,_getPointCoordinate:i}=this,o=n(t[1],t[0]),a=n(e[1],e[0]),{visited:r,parents:s,costs:l,priorityQueueNew:d}=this;if(a===o)return[];for(;!d.isEmpty()&&s[a]===Km;){const e=d.pop();if(r[e])continue;const t=i(e),o=this._getNeighborPoints(t);r[e]=!0;for(let i=0,a=o.length;i<a;i++){const a=o[i],r=n(a[1],a[0]),c=this._getWeightedDistance(t,a),h=l[e]+c;h<l[r]&&(l[r]!==1/0&&d.remove(r),l[r]=h,s[r]=e,d.push(r))}}const c=[];let h=a;for(;h!==Km;)c.push(i(h)),h=s[h];return c.reverse()}_getDeltaX(e,t){const{grayscalePixelData:n,width:i}=this;let o=this._getPointIndex(t,e);return e+1===i&&o--,n[o+1]-n[o]}_getDeltaY(e,t){const{grayscalePixelData:n,width:i,height:o}=this;let a=this._getPointIndex(t,e);return t+1===o&&(a-=o),n[a]-n[a+i]}_getGradientMagnitude(e,t){const n=this._getDeltaX(e,t),i=this._getDeltaY(e,t);return Math.sqrt(n*n+i*i)}_getLaplace(e,t){const{grayscalePixelData:n,_getPointIndex:i}=this;let o=n[i(t-2,e)];return o+=n[i(t-1,e-1)]+2*n[i(t-1,e)]+n[i(t-1,e+1)],o+=n[i(t,e-2)]+2*n[i(t,e-1)]-16*n[i(t,e)]+2*n[i(t,e+1)]+n[i(t,e+2)],o+=n[i(t+1,e-1)]+2*n[i(t+1,e)]+n[i(t+1,e+1)],o+=n[i(t+2,e)],o}_computeGradient(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0,o=0,a=0,r=0;for(r=0;r<t-1;r++){for(a=0;a<e-1;a++)n[i]=this._getGradientMagnitude(a,r),o=Math.max(n[i],o),i++;n[i]=n[i-1],i++}for(let t=n.length;i<t;i++)n[i]=n[i-e];for(let e=0,t=n.length;e<t;e++)n[e]=1-n[e]/o;return n}_computeLaplace(){const{width:e,height:t,_getPointIndex:n}=this,i=new Float32Array(e*t);i.fill(1,0,n(2,0));for(let o=2;o<t-2;o++){i[n(o,0)]=1,i[n(o,1)]=1;for(let t=2;t<e-2;t++)i[n(o,t)]=this._getLaplace(t,o)>.33?0:1;i[n(o,e-2)]=1,i[n(o,e-1)]=1}return i.fill(1,n(t-2,0)),i}_computeGradientX(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t;o++){for(let t=0;t<e-1;t++)n[i++]=this._getDeltaX(t,o);n[i]=n[i-1],i++}return n}_computeGradientY(){const{width:e,height:t}=this,n=new Float32Array(e*t);let i=0;for(let o=0;o<t-1;o++)for(let t=0;t<e;t++)n[i++]=this._getDeltaY(t,o);for(let t=n.length;i<t;i++)n[i]=n[i-e];return n}_getGradientUnitVector(e,t){const{gradXNew:n,gradYNew:i,_getPointIndex:o}=this,a=n[o(t,e)],r=i[o(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,i){const o=this._getGradientUnitVector(e,t),a=this._getGradientUnitVector(n,i);let r=o[1]*(n-e)-o[0]*(i-t),s=a[1]*(n-e)-a[0]*(i-t);return r<0&&(r=-r,s=-s),e!==n&&t!==i&&(r*=Math.SQRT1_2,s*=Math.SQRT1_2),Ym*(Math.acos(r)+Math.acos(s))}_getWeightedDistance(e,t){const{_getPointIndex:n}=this,[i,o]=e,[a,r]=t,s=n(r,a);let l=this.gradMagnitude[s];return i!==a&&o!==r||(l*=Math.SQRT1_2),.43*l+.43*this.laplace[s]+.11*this._getGradientDirection(i,o,a,r)}_getNeighborPoints(e){const{width:t,height:n}=this,i=[],o=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=o;n<=r;n++)n===e[0]&&t===e[1]||i.push([n,t]);return i}static createInstanceFromRawPixelData(e,t,n,i){const o=e.length,a=new Float32Array(o),{lower:r,upper:s}=i,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 Xm(a,t,n)}static createInstanceFromRGBAPixelData(e,t,n){const i=e.length/4,o=new Float32Array(i);for(let t=0,n=0;t<i;t++,n+=4){const i=e[n],a=e[n],r=e[n];o[t]=.00130718954248366*(i+a+r)}return new Xm(o,t,n)}}class Jm{constructor(e,t){ie(this,"pointArray",void 0),ie(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()}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)}}class Zm extends dc{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}}),ie(this,"scissors",void 0),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",!1),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,{world:o,canvas:a}=n,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.getReferencedImageId(s,o,c,h),u=s.getFrameOfReferenceUID(),v=s.getDefaultActor();if(!v||!Q.utilities.isImageActor(v))throw new Error("Default actor must be an image actor");const m=s.getImageData(),{imageData:p}=m;let f,E,w,I,_;if(s instanceof Q.StackViewport)w=m.scalarData,I=m.dimensions[0],_=m.dimensions[1],f=e=>{const t=Q.utilities.transformWorldToIndex(p,e);return[t[0],t[1]]},E=e=>Q.utilities.transformIndexToWorld(p,[e[0],e[1],0]);else{if(!(s instanceof Q.VolumeViewport))throw new Error("Viewport not supported");{const e=Q.utilities.getCurrentVolumeViewportSlice(s),{sliceToIndexMatrix:t,indexToSliceMatrix:n}=e;f=e=>{const t=Q.utilities.transformWorldToIndex(p,e),i=ys.vec3.transformMat4([0,0,0],t,n);return[i[0],i[1]]},E=e=>{const n=ys.vec3.transformMat4([0,0,0],[e[0],e[1],0],t);return Q.utilities.transformIndexToWorld(p,n)},w=e.scalarData,I=e.width,_=e.height}}const{voiRange:C}=s.getProperties(),b=f(o);this.scissors=Xm.createInstanceFromRawPixelData(w,I,_,C),this.scissors.startSearch(b);const T=new Jm,D=new Jm;T.addPoint(b),T.addControlPoint(b);const S={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:u,referencedImageId:g},data:{polyline:[],handles:{points:[[...o]],activeHandleIndex:null}}};Qe(S,i);const y=Qd(i,this.getToolName());return this.editData={annotation:S,viewportIdsToRender:y,newAnnotation:!0,hasMoved:!1,lastCanvasPoint:a,confirmedPath:T,currentPath:D,closed:!1,worldToSlice:f,sliceToWorld:E},this._activateDraw(i),e.preventDefault(),or(l,y),S})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,r=i*i,s=t.data.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(gc(l,t,n)<=r)return!0;l=t}return!1})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o};const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;this._activateModify(i),or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.scissors=null,this.isDrawing=!1})),ie(this,"_mouseDownCallback",(e=>{const t=e.type===te.MOUSE_DOUBLE_CLICK,{annotation:n,viewportIdsToRender:i,worldToSlice:o,sliceToWorld:a}=this.editData;if(this.editData.closed)return;const r=e.detail,{element:s}=r,{currentPoints:l}=r,{canvas:d,world:c}=l,h=(0,Q.getEnabledElement)(s),{viewport:g,renderingEngine:u}=h,v=this.editData.currentPath.getControlPoints();let m=v.length>=2&&t;if(v.length>=2){const e={index:-1,distSquared:1/0};for(let t=0,n=v.length;t<n;t++){const n=a(v[t]),i=cc(d,g.worldToCanvas(n));i<=100&&i<e.distSquared&&(e.distSquared=i,e.index=t)}0===e.index&&(m=!0)}this.editData.closed=this.editData.closed||m,this.editData.confirmedPath=this.editData.currentPath,this.editData.confirmedPath.addControlPoint(this.editData.currentPath.getLastPoint()),this.scissors.startSearch(o(c)),n.invalidated=!0,or(u,i),this.editData.closed&&(this._updateAnnotation(s,this.editData.confirmedPath),this._endCallback(e)),e.preventDefault()})),ie(this,"_mouseMoveCallback",(e=>{const{element:t,currentPoints:n}=e.detail,{world:i,canvas:o}=n,{renderingEngine:a}=(0,Q.getEnabledElement)(t),r=Qd(t,this.getToolName());this.editData.lastCanvasPoint=o;const{width:s,height:l}=this.scissors,{worldToSlice:d}=this.editData,c=d(i);if(c[0]<0||c[1]<0||c[0]>=s||c[1]>=l)return;const h=this.scissors.findPathToPoint(c),g=new Jm;for(let e=0,t=h.length;e<t;e++)g.addPoint(h[e]);g.prependPath(this.editData.confirmedPath),this.editData.currentPath=g,or(a,r),e.preventDefault()})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world;r.polyline.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;r.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData;i&&tt(t.annotationUID);const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,this.scissors=null,t.annotationUID})),ie(this,"triggerAnnotationModified",((e,t)=>{const{viewportId:n,renderingEngineId:i}=t,o=te.ANNOTATION_MODIFIED,a={annotation:e,viewportId:n,renderingEngineId:i};(0,Q.triggerEvent)(Q.eventTarget,o,a)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.addEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.addEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_MOVE,this._mouseMoveCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback),e.removeEventListener(te.MOUSE_DOUBLE_CLICK,this._mouseDownCallback),e.removeEventListener(te.TOUCH_TAP,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o,a;let r=!1;const{viewport:s}=e,{worldToCanvas:l}=s,{element:d}=s;if(!s.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),r;let c=$e(this.getToolName(),d);if(null===(n=c)||void 0===n||!n.length)return r;if(c=this.filterInteractableAnnotationsForElement(d,c),null===(i=c)||void 0===i||!i.length)return r;const h=null===(o=this.editData)||void 0===o?void 0:o.newAnnotation,g={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};this._updateAnnotation(d,null===(a=this.editData)||void 0===a?void 0:a.currentPath);for(let e=0;e<c.length;e++){var u;const n=c[e],{annotationUID:i,data:o}=n,{handles:a}=o,{points:d}=a;g.annotationUID=i;const v=this.getStyle("lineWidth",g,n),m=this.getStyle("lineDash",g,n),p=this.getStyle("color",g,n),f=d.map((e=>l(e)));Pe(i)&&(h&&n.annotationUID===(null===(u=this.editData)||void 0===u||null===(u=u.annotation)||void 0===u?void 0:u.annotationUID)&&qs(t,i,"0",[f[0]],{color:p,lineDash:m,lineWidth:v}),zs(t,i,"polyline",o.polyline.map((e=>s.worldToCanvas(e))),{color:p,lineDash:m,lineWidth:v}),r=!0,n.invalidated=!1)}return r}))}_updateAnnotation(e,t){if(!this.editData||!t)return;const{pointArray:n}=t,i=[],{sliceToWorld:o}=this.editData;for(let e=0,t=n.length;e<t;e++){const t=o(n[e]);i.push(t)}i.length>1&&i.push([...i[0]]),this.editData.annotation.data.polyline=i}}ie(Zm,"toolName",void 0),Zm.toolName="LivewireContour";const $m=Zm;class Qm extends dc{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:ep,changeTextCallback:tp,preventHandleOutsideImage:!1,arrowFirst:!0}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),{arrowFirst:g}=this.configuration,u=r.getFrameOfReferenceUID(),v={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:u,referencedImageId:h},data:{text:"",handles:{points:[[...o],[...o]],activeHandleIndex:null,arrowFirst:g,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:""}};Qe(v,i);const m=Qd(i,this.getToolName());return this.editData={annotation:v,viewportIdsToRender:m,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,m),v})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l]=r.handles.points,d=a.worldToCanvas(s),c=a.worldToCanvas(l),h={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}};return uc([h.start.x,h.start.y],[h.end.x,h.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{viewportId:d,renderingEngineId:c,renderingEngine:h}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),a)this.configuration.getTextCallback((e=>{if(!e)return tt(i.annotationUID),or(h,o),this.editData=null,void(this.isDrawing=!1);i.data.text=e;const t=te.ANNOTATION_COMPLETED,n={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,t,n),or(h,o)}));else{const e=te.ANNOTATION_MODIFIED,t={annotation:i,viewportId:d,renderingEngineId:c};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"touchTapCallback",(e=>{2==e.detail.taps&&this.doubleClickCallback(e)})),ie(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:i}=n;let o=$e(this.getToolName(),i);if(o=this.filterInteractableAnnotationsForElement(i,o),null===(t=o)||void 0===t||!t.length)return;const a=o.find((e=>this.isPointNearTool(i,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,i,r)),this.editData=null,this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;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:i,data:r}=n,{handles:d,text:c}=r,{points:h,activeHandleIndex:g}=d;l.annotationUID=i;const u=this.getStyle("lineWidth",l,n),v=this.getStyle("lineDash",l,n),m=this.getStyle("color",l,n),p=h.map((e=>a.worldToCanvas(e)));let f;ce(n)||this.editData||null===g||(f=[p[g]]),f&&qs(t,i,"0",p,{color:m,lineWidth:u});const E="1";if(this.configuration.arrowFirst?Qs(t,i,E,p[1],p[0],{color:m,width:u,lineDash:v}):Qs(t,i,E,p[0],p[1],{color:m,width:u,lineDash:v}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!c)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 I=a.worldToCanvas(r.handles.textBox.worldPosition),_=Zs(t,i,"1",[c],I,p,{},w),{x:C,y:b,width:T,height:D}=_;r.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([C,b]),topRight:a.canvasToWorld([C+T,b]),bottomLeft:a.canvasToWorld([C,b+D]),bottomRight:a.canvasToWorld([C+T,b+D])}}return o}))}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_doneChangingTextCallback(e,t,n){t.data.text=n;const{renderingEngine:i,viewportId:o,renderingEngineId:a}=(0,Q.getEnabledElement)(e),r=Qd(e,this.getToolName());or(i,r);const s=te.ANNOTATION_MODIFIED;(0,Q.triggerEvent)(Q.eventTarget,s,{annotation:t,viewportId:o,renderingEngineId:a})}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function ep(e){return e(prompt("Enter your annotation:"))}function tp(e,t,n){return n(prompt("Enter your annotation:"))}ie(Qm,"toolName",void 0),Qm.toolName="ArrowAnnotate";const np=Qm;class ip extends dc{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:op}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"angleStartedNotYetCompleted",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,[s,l,d]=r.handles.points,c=a.worldToCanvas(s),h=a.worldToCanvas(l),g={start:{x:c[0],y:c[1]},end:{x:h[0],y:h[1]}};if(uc([g.start.x,g.start.y],[g.end.x,g.end.y],[n[0],n[1]])<=i)return!0;if(!d)return!1;const u=a.worldToCanvas(d),v={start:{x:h[0],y:h[1]},end:{x:u[0],y:u[1]}};return uc([v.start.x,v.start.y],[v.end.x,v.end.y],[n[0],n[1]])<=i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o,movingTextBox:!1},this._activateModify(i),ds(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;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),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const i=s[n],{annotationUID:r,data:g}=i,{points:u,activeHandleIndex:v}=g.handles;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e)));let w;if(g.cachedStats[l]&&null!=g.cachedStats[l].angle?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(g.cachedStats[l]={angle:null},this._calculateCachedStats(i,d,e)),ce(i)||this.editData||null===v||(w=[E[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;w&&qs(t,r,"0",E,{color:f,lineDash:p,lineWidth:m});let I="1";if(js(t,r,I,E[0],E[1],{color:f,width:m,lineDash:p}),o=!0,3!==E.length)return o;if(I="2",js(t,r,I,E[1],E[2],{color:f,width:m,lineDash:p}),null===(h=g.cachedStats[l])||void 0===h||!h.angle)continue;const _=this.getLinkedTextBoxStyle(c,i);if(!_.visibility){g.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 C=this.configuration.getTextLines(g,l);if(!g.handles.textBox.hasMoved){const e=E[1];g.handles.textBox.worldPosition=a.canvasToWorld(e)}const b=a.worldToCanvas(g.handles.textBox.worldPosition),T=Zs(t,r,"1",C,b,E,{},_),{x:D,y:S,width:y,height:M}=T;g.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([D,S]),topRight:a.canvasToWorld([D+y,S]),bottomLeft:a.canvasToWorld([D,S+M]),bottomRight:a.canvasToWorld([D+y,S+M])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(3!==i.handles.points.length)return;const r=i.handles.points[0],s=i.handles.points[1],l=i.handles.points[2],{cachedStats:d}=i,c=Object.keys(d);for(let e=0;e<c.length;e++){const t=c[e],n=Gv([r,s],[s,l]);d[t]={angle:isNaN(n)?"Incomplete Angle":n}}e.invalidated=!1;const h=te.ANNOTATION_MODIFIED,g={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,h,g),d}}function op(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return["".concat(mv(i)," ").concat(String.fromCharCode(176))]}ie(ip,"toolName",void 0),ip.toolName="Angle";const ap=ip,rp=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const i=2===t[0].length?[0,0]:[0,0,0],o=t.length;for(const e of t)i[0]+=e[0]/o,i[1]+=e[1]/o,3===i.length&&(i[2]+=e[2]/o);return i};class sp extends dc{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:lp}}),e=this,ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"angleStartedNotYetCompleted",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.angleStartedNotYetCompleted)return;this.angleStartedNotYetCompleted=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{distanceToPoint:s,distanceToPoint2:l}=this.distanceToLines({viewport:a,points:r.handles.points,canvasCoords:n,proximity:i});return s<=i||l<=i})),ie(this,"toolSelectedCallback",(function(t,n,i,o){let a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:6;const r=t.detail,{element:s}=r;n.highlighted=!0;const l=Qd(s,e.getToolName()),d=(0,Q.getEnabledElement)(s),{renderingEngine:c,viewport:h}=d,{isNearFirstLine:g,isNearSecondLine:u}=e.distanceToLines({viewport:h,points:n.data.handles.points,canvasCoords:o,proximity:a});e.editData={annotation:n,viewportIdsToRender:l,movingTextBox:!1,isNearFirstLine:g,isNearSecondLine:u},e._activateModify(s),ds(s),or(c,l),t.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;if(this.angleStartedNotYetCompleted&&s.handles.points.length<4)return ls(n),void(this.editData.handleIndex=s.handles.points.length);this.angleStartedNotYetCompleted=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_mouseDownCallback",(e=>{const{annotation:t,handleIndex:n}=this.editData,i=e.detail,{element:o,currentPoints:a}=i,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,ds(o),s.handles.points[2]=s.handles.points[3]=r,void(this.editData.handleIndex=s.handles.points.length-1))})),ie(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r,isNearFirstLine:s,isNearSecondLine:l}=this.editData,{data:d}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=d.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.hasMoved=!0}else if(void 0===a&&(s||l)){const{deltaPoints:e}=t,n=e.world,o=d.handles.points;s?[o[0],o[1]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})):l&&[o[2],o[3]].forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;d.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const c=(0,Q.getEnabledElement)(n),{renderingEngine:h}=c;or(h,o)})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;o.handles.points.length<4&&tt(t.annotationUID),t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.angleStartedNotYetCompleted=!1,t.annotationUID})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.MOUSE_DOWN,this._mouseDownCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DOWN,this._mouseDownCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){var h;const i=s[n],{annotationUID:r,data:g}=i,{points:u,activeHandleIndex:v}=g.handles;c.annotationUID=r;const m=this.getStyle("lineWidth",c,i),p=this.getStyle("lineDash",c,i),f=this.getStyle("color",c,i),E=u.map((e=>a.worldToCanvas(e)));let w;if(g.cachedStats[l]&&null!=g.cachedStats[l].angle?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(g.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(i,d,e)),ce(i)||this.editData||null===v||(w=[E[v]]),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;w&&qs(t,r,"0",E,{color:f,lineDash:p,lineWidth:m});const I=[E[0],E[1]],_=[E[2],E[3]];let C="line1";if(js(t,r,C,I[0],I[1],{color:f,width:m,lineDash:p}),o=!0,E.length<4)return o;C="line2",js(t,r,C,_[0],_[1],{color:f,width:m,lineDash:p}),C="linkLine",js(t,r,C,rp(I[0],I[1]),rp(_[0],_[1]),{color:f,lineWidth:"1",lineDash:"1,4"});const{arc1Start:b,arc1End:T,arc2End:D,arc2Start:S}=g.cachedStats[l].points.canvas,{arc1Angle:y,arc2Angle:M}=g.cachedStats[l];if(C="arc1",js(t,r,C,b,T,{color:f,lineWidth:"1"}),C="arc2",js(t,r,C,S,D,{color:f,lineWidth:"1"}),null===(h=g.cachedStats[l])||void 0===h||!h.angle)continue;const O=this.getLinkedTextBoxStyle(c,i);if(!O.visibility){g.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 x=this.configuration.getTextLines(g,l);if(!g.handles.textBox.hasMoved){const e=mc(E);g.handles.textBox.worldPosition=a.canvasToWorld(e)}const P=a.worldToCanvas(g.handles.textBox.worldPosition),N=Zs(t,r,"cobbAngleText",x,P,E,{},O),{x:R,y:A,width:k,height:L}=N;g.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([R,A]),topRight:a.canvasToWorld([R+k,A]),bottomLeft:a.canvasToWorld([R,A+L]),bottomRight:a.canvasToWorld([R+k,A+L])};const U="arcAngle1",V=["".concat(y.toFixed(2)," ").concat(String.fromCharCode(176))],W=rp(b,T);Xs(t,r,U,V,W,{...O,padding:3});const F="arcAngle2",H=["".concat(M.toFixed(2)," ").concat(String.fromCharCode(176))],B=rp(S,D);Xs(t,r,F,H,B,{...O,padding:3})}return o})),ie(this,"distanceToLines",(e=>{let{viewport:t,points:n,canvasCoords:i,proximity:o}=e;const[a,r,s,l]=n,d=t.worldToCanvas(a),c=t.worldToCanvas(r),h=t.worldToCanvas(s),g=t.worldToCanvas(l),u={start:{x:d[0],y:d[1]},end:{x:c[0],y:c[1]}},v={start:{x:h[0],y:h[1]},end:{x:g[0],y:g[1]}},m=uc([u.start.x,u.start.y],[u.end.x,u.end.y],[i[0],i[1]]),p=uc([v.start.x,v.start.y],[v.end.x,v.end.y],[i[0],i[1]]);let f=!1,E=!1;return m<=o?f=!0:p<=o&&(E=!0),{distanceToPoint:m,distanceToPoint2:p,isNearFirstLine:f,isNearSecondLine:E}})),ie(this,"getArcsStartEndPoints",(e=>{let{firstLine:t,secondLine:n,mid1:i,mid2:o}=e;const a=[i,o],r=Gv(t,a),s=Gv(n,a),l=r>90?1:0,d=s>90?0:1,c=rp(a[0],a[1]),h=Math.sqrt((a[1][0]-a[0][0])**2+(a[1][1]-a[0][1])**2),g=.1,u=rp(t[0],t[1]),v=rp(n[0],n[1]),m=[t[l][0]-u[0],t[l][1]-u[1]],p=Math.sqrt(m[0]**2+m[1]**2),f=[m[0]/p,m[1]/p],E=[u[0]+f[0]*h*g,u[1]+f[1]*h*g],w=[c[0]-i[0],c[1]-i[1]],I=Math.sqrt(w[0]**2+w[1]**2),_=[w[0]/I,w[1]/I],C=[i[0]+_[0]*h*g,i[1]+_[1]*h*g],b=[n[d][0]-v[0],n[d][1]-v[1]],T=Math.sqrt(b[0]**2+b[1]**2),D=[b[0]/T,b[1]/T],S=[v[0]+D[0]*h*g,v[1]+D[1]*h*g],y=[c[0]-o[0],c[1]-o[1]],M=Math.sqrt(y[0]**2+y[1]**2),O=[y[0]/M,y[1]/M];return{arc1Start:E,arc1End:C,arc2Start:S,arc2End:[o[0]+O[0]*h*g,o[1]+O[1]*h*g],arc1Angle:r>90?180-r:r,arc2Angle:s>90?180-s:s}})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,25,{trailing:!0})}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;let r,s=!1;n.worldPosition?s=!0:r=a.handles.points.findIndex((e=>e===n));const l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:r,movingTextBox:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(4!==i.handles.points.length)return;const r=[null,null],s=[null,null];let l=Number.MAX_VALUE;for(let e=0;e<2;e+=1)for(let t=2;t<4;t+=1){const n=ys.vec3.distance(i.handles.points[e],i.handles.points[t]);n<l&&(l=n,r[1]=i.handles.points[e],r[0]=i.handles.points[(e+1)%2],s[0]=i.handles.points[t],s[1]=i.handles.points[2+(t-1)%2])}const{viewport:d}=n,c=i.handles.points.map((e=>d.worldToCanvas(e))),h=[c[0],c[1]],g=[c[2],c[3]],u=rp(h[0],h[1]),v=rp(g[0],g[1]),{arc1Start:m,arc1End:p,arc2End:f,arc2Start:E,arc1Angle:w,arc2Angle:I}=this.getArcsStartEndPoints({firstLine:h,secondLine:g,mid1:u,mid2:v}),{cachedStats:_}=i,C=Object.keys(_);for(let e=0;e<C.length;e++)_[C[e]]={angle:Gv(r,s),arc1Angle:w,arc2Angle:I,points:{canvas:{arc1Start:m,arc1End:p,arc2End:f,arc2Start:E},world:{arc1Start:d.canvasToWorld(m),arc1End:d.canvasToWorld(p),arc2End:d.canvasToWorld(f),arc2Start:d.canvasToWorld(E)}}};e.invalidated=!1;const b=te.ANNOTATION_MODIFIED,T={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,b,T),_}}function lp(e,t){const n=e.cachedStats[t],{angle:i}=n;if(void 0!==i)return["".concat(i.toFixed(2)," ").concat(String.fromCharCode(176))]}ie(sp,"toolName",void 0),sp.toolName="CobbAngle";const dp=sp,{transformWorldToIndex:cp}=Q.utilities;class hp extends dc{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:gp,displayBothAxesDistances:!1}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"startedDrawing",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{if(this.startedDrawing)return;this.startedDrawing=!0;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;if(!(r instanceof Q.StackViewport))throw new Error("UltrasoundDirectionalTool can only be used on a StackViewport");ds(i),this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},data:{handles:{points:[[...o],[...o]],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:{}}};Qe(u,i);const v=Qd(i,this.getToolName());return this.editData={annotation:u,viewportIdsToRender:v,handleIndex:1,movingTextBox:!1,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),e.preventDefault(),or(s,v),u})),ie(this,"isPointNearTool",((e,t,n,i)=>!1)),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;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),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;if(this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}this.editData=null,this.isDrawing=!1})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a,movingTextBox:r}=this.editData,{data:s}=i;if(r){const{deltaPoints:e}=t,n=e.world,{textBox:i}=s.handles,{worldPosition:o}=i;o[0]+=n[0],o[1]+=n[1],o[2]+=n[2],i.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]})),i.invalidated=!0}else{const{currentPoints:e}=t,n=e.world;s.handles.points[a]=[...n],i.invalidated=!0}this.editData.hasMoved=!0;const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;or(d,o)})),ie(this,"cancel",(e=>{if(this.isDrawing){this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,this.startedDrawing=!1,t.annotationUID}})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;const l=this.getTargetId(a),d=a.getRenderingEngine(),c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let n=0;n<s.length;n++){const i=s[n],{annotationUID:r,data:h}=i,{points:g}=h.handles;c.annotationUID=r;const u=this.getStyle("color",c,i),v=g.map((e=>a.worldToCanvas(e)));if(h.cachedStats[l]&&null!=h.cachedStats[l].xValues?i.invalidated&&this._throttledCalculateCachedStats(i,d,e):(h.cachedStats[l]={xValues:[0,0],yValues:[0,0],isHorizontal:!1,units:[""],isUnitless:!1},this._calculateCachedStats(i,d,e)),!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;let m="0";if(Gs(t,r,m,v[0],{color:u},0),o=!0,2!==v.length)return o;if(m="1",Gs(t,r,m,v[1],{color:u},1),h.cachedStats[l].isUnitless){const e="".concat(r,"-line-1");js(t,r,"1",v[0],v[1],{color:u,width:1,shadow:this.configuration.shadow},e)}else{const e=v[0],n=v[1],i=n[1]-e[1],o=n[0]-e[0];let a=[0,0];a=h.cachedStats[l].isHorizontal?[e[0]+o,e[1]]:[e[0],e[1]+i];let s="".concat(r,"-line-1"),d="1";js(t,r,d,v[0],a,{color:u,width:1,shadow:this.configuration.shadow},s),s="".concat(r,"-line-2"),d="2",js(t,r,d,v[1],a,{color:u,width:1,lineDash:[1,1],shadow:this.configuration.shadow},s)}const p=this.getLinkedTextBoxStyle(c,i);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 E=a.worldToCanvas(h.handles.textBox.worldPosition),w=Zs(t,r,"1",f,E,v,{},p),{x:I,y:_,width:C,height:b}=w;h.handles.textBox.worldBoundingBox={topLeft:a.canvasToWorld([I,_]),topRight:a.canvasToWorld([I+C,_]),bottomLeft:a.canvasToWorld([I,_+b]),bottomRight:a.canvasToWorld([I+C,_+b])}}return o})),this._throttledCalculateCachedStats=rl(this._calculateCachedStats,100,{trailing:!0})}toolSelectedCallback(e,t,n,i){}handleSelectedCallback(e,t,n){const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const r=Qd(o,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(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,r),e.preventDefault()}_calculateCachedStats(e,t,n){const i=e.data,{viewportId:o,renderingEngineId:a}=n;if(2!==i.handles.points.length)return;const{cachedStats:r}=i,s=Object.keys(r);for(let e=0;e<s.length;e++){const o=s[e],a=this.getTargetIdImage(o,t);if(!a)continue;const{imageData:l}=a,d=i.handles.points[0],c=i.handles.points[1],h=cp(l,d),g=cp(l,c),{values:u,units:v}=Il(a,[h]),{values:m,units:p}=Il(a,[g]);let f,E,w,I,_=!1;if(v[0]!==p[0]||v[1]!==p[1]||"raw"===v[0]&&"raw"===p[0]){const e=lh(d,c);f=[e,0],E=[e,0],w=["px"],_=!0}else{const e=n.viewport.worldToCanvas(d),t=n.viewport.worldToCanvas(c),i=t[1]-e[1],o=t[0]-e[0];I=Math.abs(o)>Math.abs(i),f=[u[0],m[0]],E=[u[1],m[1]],w=[v[0],v[1]]}r[o]={xValues:f,yValues:E,isHorizontal:I,units:w,isUnitless:_}}e.invalidated=!1;const l=te.ANNOTATION_MODIFIED,d={annotation:e,viewportId:o,renderingEngineId:a};return(0,Q.triggerEvent)(Q.eventTarget,l,d),r}}function gp(e,t,n){const i=e.cachedStats[t],{xValues:o,yValues:a,units:r,isUnitless:s,isHorizontal:l}=i;if(s)return["".concat(mv(o[0])," px")];if(n.displayBothAxesDistances){const e=Math.abs(o[1]-o[0]),t=Math.abs(a[1]-a[0]);return["".concat(mv(e)," ").concat(r[0]),"".concat(mv(t)," ").concat(r[1])]}if(l){const e=Math.abs(o[1]-o[0]);return["".concat(mv(e)," ").concat(r[0])]}{const e=Math.abs(a[1]-a[0]);return["".concat(mv(e)," ").concat(r[1])]}}ie(hp,"toolName",void 0),hp.toolName="UltrasoundDirectionalTool";const up=hp;class vp extends dc{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:mp,changeTextCallback:pp,canvasPosition:[10,10],canvasSize:10}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a,l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g=r.getFrameOfReferenceUID(),u={annotationUID:null,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:g,referencedImageId:h},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:""}};Qe(u,i);const v=Qd(i,this.getToolName());return e.preventDefault(),or(s,v),this.configuration.getTextCallback((e=>{if(!e)return tt(u.annotationUID),or(s,v),void(this.isDrawing=!1);u.data.text=e;const t=te.ANNOTATION_COMPLETED,n={annotation:u};(0,Q.triggerEvent)(Q.eventTarget,t,n),or(s,v)})),u})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{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})),ie(this,"toolSelectedCallback",((e,t)=>{t.highlighted=!0,e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t;this._deactivateModify(n),ls(n)})),ie(this,"doubleClickCallback",(e=>{var t;const n=e.detail,{element:i}=n;let o=$e(this.getToolName(),i);if(o=this.filterInteractableAnnotationsForElement(i,o),null===(t=o)||void 0===t||!t.length)return;const a=o.find((e=>this.isPointNearTool(i,e,n.currentPoints.canvas,6)));if(!a)return;const r=a;this.configuration.changeTextCallback(a,e.detail,this._doneChangingTextCallback.bind(this,i,r)),this.isDrawing=!1,e.stopImmediatePropagation(),e.preventDefault()})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a}=e,{element:r}=a;let s=$e(this.getToolName(),r);if(null===(n=s)||void 0===n||!n.length)return o;if(s=this.filterInteractableAnnotationsForElement(r,s),null===(i=s)||void 0===i||!i.length)return o;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:i}=n;l.annotationUID=i;const r=this.getStyle("color",l,n),{canvasPosition:d,canvasSize:c}=this.configuration;if(null!=d&&d.length&&Qs(t,i,"1",d.map((e=>e+c)),d,{color:r,width:1}),o=!0,!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o}return o}))}cancel(){}handleSelectedCallback(e,t,n){}_doneChangingTextCallback(e,t,n){t.data.text=n;const{renderingEngine:i,viewportId:o,renderingEngineId:a}=(0,Q.getEnabledElement)(e),r=Qd(e,this.getToolName());or(i,r);const s=te.ANNOTATION_MODIFIED;(0,Q.triggerEvent)(Q.eventTarget,s,{annotation:t,viewportId:o,renderingEngineId:a})}_isInsideVolume(e,t,n){return Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n)}}function mp(e){return e(prompt("Enter your annotation:"))}function pp(e,t,n){return n(prompt("Enter your annotation:"))}ie(vp,"toolName",void 0),vp.toolName="KeyImage";const fp=vp,Ep="magnify-viewport";class wp extends zi{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}}),ie(this,"_bounds",void 0),ie(this,"editData",void 0),ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{element:n,currentPoints:i}=t,o=(0,Q.getEnabledElement)(n),{viewport:a,renderingEngine:r}=o;if(!(a instanceof Q.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=Qd(n,this.getToolName());return this.editData={referencedImageId:s,viewportIdsToRender:l,enabledElement:o,renderingEngine:r,currentPoints:i},this._createMagnificationViewport(),this._activateDraw(n),ds(n),e.preventDefault(),or(r,l),!0})),ie(this,"preTouchStartCallback",(e=>{this.preMouseDownCallback(e)})),ie(this,"_createMagnificationViewport",(()=>{const{enabledElement:e,referencedImageId:t,viewportIdsToRender:n,renderingEngine:i,currentPoints:o}=this.editData,{viewport:a}=e,{element:r}=a,s=a.getProperties(),{canvas:l,world:d}=o;let c;if(c=r.querySelector(".magnifyTool"),null===c){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",c=e,r.querySelector(".viewport-element").appendChild(e);const t={viewportId:Ep,type:Q.Enums.ViewportType.STACK,element:c};i.enableElement(t)}c.style.top="".concat(l[1]-this.configuration.magnifyHeight/2,"px"),c.style.left="".concat(l[0]-this.configuration.magnifyWidth/2,"px");const h=i.getViewport(Ep);h.setStack([t]).then((()=>{h.setProperties(s);const{parallelScale:e}=a.getCamera(),{focalPoint:t,position:n,viewPlaneNormal:i}=h.getCamera(),o=Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2)+Math.pow(t[2]-n[2],2)),r=[d[0],d[1],d[2]],l=[r[0]+o*i[0],r[1]+o*i[1],r[2]+o*i[2]];h.setCamera({parallelScale:e*(1/this.configuration.magnifySize),focalPoint:r,position:l}),h.render()})),c.style.display="block",or(i,n)})),ie(this,"_dragCallback",(e=>{const t=e.detail,{deltaPoints:n,element:i,currentPoints:o}=t,a=n.world,r=o.canvas,s=(0,Q.getEnabledElement)(i),{renderingEngine:l}=s,d=l.getViewport(Ep),c=i.querySelector(".magnifyTool");if(!c)return;c.style.top="".concat(r[1]-this.configuration.magnifyHeight/2,"px"),c.style.left="".concat(r[0]-this.configuration.magnifyWidth/2,"px");const{focalPoint:h,position:g}=d.getCamera(),u=[g[0]+a[0],g[1]+a[1],g[2]+a[2]],v=[h[0]+a[0],h[1]+a[1],h[2]+a[2]];d.setCamera({focalPoint:v,position:u}),d.render()})),ie(this,"_dragEndCallback",(e=>{const{element:t}=e.detail,n=(0,Q.getEnabledElement)(t),{renderingEngine:i}=n;i.disableElement(Ep);const o=t.querySelector(".viewport-element"),a=o.querySelector(".magnifyTool");o.removeChild(a),this._deactivateDraw(t),ls(t)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._dragEndCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._dragEndCallback),e.addEventListener(te.TOUCH_END,this._dragEndCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._dragEndCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._dragEndCallback),e.removeEventListener(te.TOUCH_END,this._dragEndCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)}))}_getReferencedImageId(e){const t=this.getTargetId(e);let n;return e instanceof Q.StackViewport&&(n=t.split("imageId:")[1]),n}}ie(wp,"toolName",void 0),wp.toolName="Magnify";const Ip=wp,_p=125,Cp=e=>e.uid!==e.referenceId;class bp{constructor(e){let{magnifyViewportId:t,sourceEnabledElement:n,radius:i=_p,position:o=[0,0],zoomFactor:a,autoPan:r}=e;ie(this,"_viewportId",void 0),ie(this,"_sourceEnabledElement",void 0),ie(this,"_enabledElement",null),ie(this,"_sourceToolGroup",null),ie(this,"_magnifyToolGroup",null),ie(this,"_isViewportReady",!1),ie(this,"_radius",0),ie(this,"_resized",!1),ie(this,"_resizeViewportAsync",void 0),ie(this,"_canAutoPan",!1),ie(this,"_autoPan",void 0),ie(this,"position",void 0),ie(this,"zoomFactor",void 0),ie(this,"visible",void 0),this._viewportId=null!=t?t:Q.utilities.uuidv4(),this._sourceEnabledElement=n,this._autoPan=r,this.radius=i,this.position=o,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=al(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:i}=this._enabledElement,{element:o}=i,a=2*e,[r,s]=t;this._resized&&(this._resizeViewportAsync(),this._resized=!1),Object.assign(o.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(),i.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:i,toolName:o,mode:a,toolBindingsOptions:r}=e.detail;if((null===(t=this._sourceToolGroup)||void 0===t?void 0:t.id)===i)switch(a){case je.Active:n.setToolActive(o,r);break;case je.Passive:n.setToolPassive(o);break;case je.Enabled:n.setToolEnabled(o);break;case je.Disabled:n.setToolDisabled(o);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:i}=e.getCamera();return i*(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(),i="".concat(t.id,"-toolGroup"),o=Mi(e.id,e.renderingEngineId),a=o.clone(i,(e=>{const t=o.getToolInstance(e);return t instanceof dc&&!(t instanceof Mp)||e===Ro.toolName}));return a.addViewport(t.id,t.renderingEngineId),n.filter(Cp).forEach((e=>{bv(i,[{segmentationId:e.referenceId,type:at.Labelmap}])})),{sourceToolGroup:o,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=>!Cp(e))).map((e=>({volumeId:e.uid})));return t.setVolumes(n).then((()=>{this._isViewportReady=!0,this.update()})),t}_cloneViewport(e,t){const{viewportId:n}=this,i=e.getRenderingEngine(),{options:o}=e,a={element:t,viewportId:n,type:e.type,defaultOptions:{...o}};i.enableElement(a);const r=i.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(!Ge.isInteractingWithTool)return;const{_autoPan:t}=this;if(!t.enabled||!this._canAutoPan)return;const{currentPoints:n}=e.detail,{viewport:i}=this._enabledElement,{canvasToWorld:o}=i,{canvas:a}=n,{radius:r}=this,s=[r,r],l=lh(s,a),d=r-t.padding;if(l<=d)return;const c=l-d,h=ys.vec2.sub(ys.vec2.create(),a,s);ys.vec2.normalize(h,h),ys.vec2.scale(h,h,c);const g=ys.vec2.add(ys.vec2.create(),this.position,h),u=o(this.position),v=o(g),m=ys.vec3.sub(ys.vec3.create(),v,u),p={points:{currentPosition:{canvas:this.position,world:u},newPosition:{canvas:g,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){Q.eventTarget.addEventListener(te.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),this._addBrowserEventListeners(e)}_removeEventListeners(e){Q.eventTarget.removeEventListener(te.TOOL_MODE_CHANGED,this._handleToolModeChanged),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),this._removeBrowserEventListeners(e)}_initialize(){const{_sourceEnabledElement:e}=this,{viewport:t}=e,{canvas:n}=t,i=this._createViewportNode();n.parentNode.appendChild(i),this._addEventListeners(i),this._cloneViewport(t,i),this._enabledElement=(0,Q.getEnabledElement)(i)}_syncViewportsCameras(e,t){const n=e.canvasToWorld(this.position),i=this._convertZoomFactorToParalellScale(e,t,this.zoomFactor),{focalPoint:o,position:a,viewPlaneNormal:r}=t.getCamera(),s=Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2)+Math.pow(o[2]-a[2],2)),l=[n[0],n[1],n[2]],d=[l[0]+s*r[0],l[1]+s*r[1],l[2]+s*r[2]];t.setCamera({parallelScale:i,focalPoint:l,position:d})}_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 Tp=1-Q.CONSTANTS.EPSILON,{Events:Dp}=Q.Enums;class Sp{constructor(){ie(this,"_magnifyViewportsMap",void 0),ie(this,"createViewport",((e,t)=>{const{magnifyViewportId:n,sourceEnabledElement:i,position:o,radius:a,zoomFactor:r,autoPan:s}=t,{viewport:l}=i,{element:d}=l,c=new bp({magnifyViewportId:n,sourceEnabledElement:i,radius:a,position:o,zoomFactor:r,autoPan:s});return this._addSourceElementEventListener(d),this._magnifyViewportsMap.set(c.viewportId,{annotation:e,magnifyViewport:c}),c})),ie(this,"_annotationRemovedCallback",(e=>{const{annotation:t}=e.detail;"AdvancedMagnify"===t.metadata.toolName&&this._destroyViewport(t.data.magnifyViewportId)})),ie(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}))})),ie(this,"_newVolumeImageCallback",(e=>{const{renderingEngineId:t,viewportId:n}=e.detail,i=(0,Q.getRenderingEngine)(t).getViewport(n),{viewPlaneNormal:o}=i.getCamera();this._getMagnifyViewportsMapEntriesBySourceViewportId(n).forEach((e=>{let{annotation:t}=e;const{viewPlaneNormal:n}=t.metadata;if(!(Math.abs(ys.vec3.dot(n,o))>Tp))return;const{handles:a}=t.data,r=i.canvasToWorld([0,0]),s=ys.vec3.sub(ys.vec3.create(),r,a.points[0]),l=ys.vec3.dot(s,o),d=ys.vec3.scale(ys.vec3.create(),o,l);for(let e=0,t=a.points.length;e<t;e++){const t=a.points[e];t[0]+=d[0],t[1]+=d[1],t[2]+=d[2]}t.invalidated=!0}))})),this._magnifyViewportsMap=new Map,this._initialize()}static getInstance(){var e;return Sp._singleton=null!==(e=Sp._singleton)&&void 0!==e?e:new Sp,Sp._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:i}=n.sourceEnabledElement,{element:o}=i;this._removeSourceElementEventListener(o),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:i}=n.sourceEnabledElement;return i.id===e}))}_addEventListeners(){Q.eventTarget.addEventListener(te.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_removeEventListeners(){Q.eventTarget.removeEventListener(te.ANNOTATION_REMOVED,this._annotationRemovedCallback)}_addSourceElementEventListener(e){e.addEventListener(Dp.STACK_NEW_IMAGE,this._newStackImageCallback),e.addEventListener(Dp.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_removeSourceElementEventListener(e){e.removeEventListener(Dp.STACK_NEW_IMAGE,this._newStackImageCallback),e.removeEventListener(Dp.VOLUME_NEW_IMAGE,this._newVolumeImageCallback)}_initialize(){this._addEventListeners()}}ie(Sp,"_singleton",void 0);var yp=function(e){return e.ShowZoomFactorsList="showZoomFactorsList",e}(yp||{});class Mp extends dc{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:ma.Secondary,modifierKey:pa.Shift}]}}}}),ie(this,"magnifyViewportManager",void 0),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=(0,Q.getEnabledElement)(i),{viewport:a,renderingEngine:r}=o,s=n.world,l=n.canvas,{magnifyingGlass:d}=this.configuration,{radius:c,zoomFactor:h,autoPan:g}=d,u=this._getWorldHandlesPoints(a,l,c),v=a.getCamera(),{viewPlaneNormal:m,viewUp:p}=v,f=this.getReferencedImageId(a,s,m,p),E=Q.utilities.uuidv4(),w=Q.utilities.uuidv4(),I=a.getFrameOfReferenceUID(),_={annotationUID:E,highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...m],viewUp:[...p],FrameOfReferenceUID:I,referencedImageId:f},data:{sourceViewportId:a.id,magnifyViewportId:w,zoomFactor:h,handles:{points:u,activeHandleIndex:null}}};this.magnifyViewportManager.createViewport(_,{magnifyViewportId:w,sourceEnabledElement:o,position:l,radius:c,zoomFactor:h,autoPan:{enabled:g.enabled,padding:g.padding,callback:e=>{const t=_.data.handles.points,{world:n}=e.delta;for(let e=0,i=t.length;e<i;e++)t[e][0]+=n[0],t[e][1]+=n[1],t[e][2]+=n[2]}}}),Qe(_,i);const C=Qd(i,this.getToolName());return e.preventDefault(),or(r,C),_})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=s.map((e=>a.worldToCanvas(e))),d=l[0],c=l[2],h=l[3],g=.5*Math.abs(c[1]-d[1]),u=ym([[h[0]+g,d[1]+g],n]);return Math.abs(u-g)<1.5*i})),ie(this,"toolSelectedCallback",((e,t)=>{const n=e.detail,{element:i}=n;t.highlighted=!0;const o=Qd(i,this.getToolName());this.editData={annotation:t,viewportIdsToRender:o},ds(i),this._activateModify(i);const a=(0,Q.getEnabledElement)(i),{renderingEngine:r}=a;or(r,o),e.preventDefault()})),ie(this,"handleSelectedCallback",((e,t,n)=>{const i=e.detail,{element:o}=i,{data:a}=t;t.highlighted=!0;const{points:r}=a.handles,s=r.findIndex((e=>e===n)),l=Qd(o,this.getToolName());this.editData={annotation:t,viewportIdsToRender:l,handleIndex:s},this._activateModify(o),ds(o);const d=(0,Q.getEnabledElement)(o),{renderingEngine:c}=d;or(c,l),e.preventDefault()})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,newAnnotation:a}=this.editData,{data:r}=i;r.handles.activeHandleIndex=null,this._deactivateModify(n),ls(n);const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;if(this.editData=null,this.isDrawing=!1,or(l,o),a){const e=te.ANNOTATION_COMPLETED,t={annotation:i};(0,Q.triggerEvent)(Q.eventTarget,e,t)}})),ie(this,"_dragDrawCallback",(e=>{var t;this.isDrawing=!0;const n=e.detail,{element:i,deltaPoints:o}=n,a=null!==(t=null==o?void 0:o.world)&&void 0!==t?t:[0,0,0],r=(0,Q.getEnabledElement)(i),{renderingEngine:s}=r,{annotation:l,viewportIdsToRender:d}=this.editData,{points:c}=l.data.handles;c.forEach((e=>{e[0]+=a[0],e[1]+=a[1],e[2]+=a[2]})),l.invalidated=!0,this.editData.hasMoved=!0,or(s,d)})),ie(this,"_dragModifyCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i;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]})),i.invalidated=!0}else this._dragHandle(e),i.invalidated=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"_dragHandle",(e=>{const t=e.detail,{element:n}=t,i=(0,Q.getEnabledElement)(n),{viewport:o}=i,{worldToCanvas:a}=o,{annotation:r}=this.editData,{data:s}=r,{points:l}=s.handles,d=l.map((e=>a(e))),c=d[0],h=d[2],g=d[3],u=.5*Math.abs(h[1]-c[1]),v=[g[0]+u,c[1]+u],{currentPoints:m}=t,p=ym([v,m.canvas]),f=this._getWorldHandlesPoints(o,v,p);l[0]=f[0],l[1]=f[1],l[2]=f[2],l[3]=f[3]})),ie(this,"cancel",(e=>{if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateModify(e),ls(e);const{annotation:t,viewportIdsToRender:n,newAnnotation:i}=this.editData,{data:o}=t;t.highlighted=!1,o.handles.activeHandleIndex=null;const a=(0,Q.getEnabledElement)(e),{renderingEngine:r}=a;if(or(r,n),i){const e=te.ANNOTATION_COMPLETED,n={annotation:t};(0,Q.triggerEvent)(Q.eventTarget,e,n)}return this.editData=null,t.annotationUID})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragModifyCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragModifyCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i,o;let a=!1;const{viewport:r}=e,{element:s}=r;let l=$e(this.getToolName(),s);if(null===(n=l)||void 0===n||!n.length)return a;if(l=this.filterInteractableAnnotationsForElement(s,l),l=null===(i=l)||void 0===i?void 0:i.filter((e=>e.data.sourceViewportId===r.id)),null===(o=l)||void 0===o||!o.length)return a;const d={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<l.length;e++){const n=l[e],{annotationUID:i,data:o}=n,{magnifyViewportId:s,zoomFactor:c,handles:h}=o,{points:g,activeHandleIndex:u}=h;d.annotationUID=i;const v=this.getStyle("lineWidth",d,n),m=this.getStyle("lineDash",d,n),p=this.getStyle("color",d,n),f=g.map((e=>r.worldToCanvas(e))),E=f[0],w=f[2],I=f[3],_=.5*Math.abs(w[1]-E[1]),C=[I[0]+_,E[1]+_];if(!r.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),a;let b;if(!Pe(i))continue;ce(n)||this.editData||null===u||(b=[f[u]]),b&&qs(t,i,"0",b,{color:p});const T="".concat(i,"-advancedMagnify");Fs(t,i,"0",C,_,{color:p,lineDash:m,lineWidth:v},T);const D=this.magnifyViewportManager.getViewport(s);D.position=C,D.radius=_,D.zoomFactor=c,D.update(),a=!0}return a})),ie(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=Sp.getInstance()}showZoomFactorsList(e,t){const{element:n,currentPoints:i}=e.detail,o=(0,Q.getEnabledElement)(n),{viewport:a}=o,{canvas:r}=i,s=n.querySelector(":scope .viewport-element"),l=t.data.zoomFactor,d=this._getZoomFactorsListDropdown(l,(e=>{void 0!==e&&(t.data.zoomFactor=Number.parseFloat(e),t.invalidated=!0),d.parentElement.removeChild(d),a.render()}));Object.assign(d.style,{left:"".concat(r[0],"px"),top:"".concat(r[1],"px")}),s.appendChild(d),d.focus()}_getZoomFactorsListDropdown(e,t){const{zoomFactorList:n}=this.configuration.magnifyingGlass,i=document.createElement("select");return i.size=5,Object.assign(i.style,{width:"50px",position:"absolute"}),["mousedown","mouseup","mousemove","click"].forEach((e=>{i.addEventListener(e,(e=>e.stopPropagation()))})),i.addEventListener("change",(e=>{e.stopPropagation(),t(i.value)})),i.addEventListener("keydown",(e=>{var n,i;((null!==(n=e.keyCode)&&void 0!==n?n:27===e.which)||"escape"===(null===(i=e.key)||void 0===i?void 0:i.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,i.add(n)})),i}}ie(Mp,"toolName",void 0),ie(Mp,"Actions",yp),Mp.toolName="AdvancedMagnify";class Op extends sc{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}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"isDrawing",!1),ie(this,"isHandleOutsideImage",!1),ie(this,"_elementWithCursor",null),ie(this,"_currentCursorWorldPosition",null),ie(this,"_currentCanvasPosition",null),ie(this,"_disableCursorEnabled",!1),ie(this,"mouseMoveCallback",(e=>{const{detail:t}=e,{element:n,currentPoints:i}=t;this._currentCursorWorldPosition=i.world,this._currentCanvasPosition=i.canvas,this._elementWithCursor=n;const o=this.getActiveAnnotation(n);return null===o?(this.createInitialAnnotation(i.world,n),!1):(this.updateAnnotationPosition(n,o),!1)})),ie(this,"createInitialAnnotation",((e,t)=>{const n=(0,Q.getEnabledElement)(t);if(!n)throw new Error("No enabled element found");const{viewport:i,renderingEngine:o}=n;this.isDrawing=!0;const a=i.getCamera(),{viewPlaneNormal:r,viewUp:s}=a;if(!r||!s)throw new Error("Camera not found");const l=this.getReferencedImageId(i,e,r,s),d=i.getFrameOfReferenceUID(),c={highlighted:!0,invalidated:!0,metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...s],FrameOfReferenceUID:d,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($e(this.getToolName(),t).length>0)return null;if(null===Qe(c,t))return;const h=Qd(t,this.getToolName(),!1);or(o,h)})),ie(this,"onCameraModified",(e=>{const t=e.detail,{element:n,previousCamera:i,camera:o}=t,a=(0,Q.getEnabledElement)(n).viewport;if(n!==this._elementWithCursor)return;const r=i.focalPoint,s=o.viewPlaneNormal,l=o.focalPoint,d=[0,0,0];if(Oh().subtract(l,r,d),0===d.reduce(((e,t)=>e+t),0))return;const c=Oh().dot(d,s);if(Math.abs(c)<.01)return;if(!this._currentCanvasPosition)return;const h=a.canvasToWorld(this._currentCanvasPosition);this._currentCursorWorldPosition=h,this.updateAnnotationPosition(n,this.getActiveAnnotation(n))})),ie(this,"renderAnnotation",((e,t)=>{var n,i;let o=!1;const{viewport:a,FrameOfReferenceUID:r}=e,s=this._elementWithCursor===a.element;this.configuration.positionSync&&!s&&this.updateViewportImage(a);const{element:l}=a;let d=$e(this.getToolName(),l);if(null===(n=d)||void 0===n||!n.length)return o;if(d=this.filterInteractableAnnotationsForElement(l,d),null===(i=d)||void 0===i||!i.length)return o;const c={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id};for(let e=0;e<d.length;e++){const n=d[e],{annotationUID:i,data:r}=n,{handles:l}=r,{points:h}=l;if(!i)return o;c.annotationUID=i;const g=parseFloat(this.getStyle("lineWidth",c,n)),u=this.getStyle("lineDash",c,n),v=this.getStyle("color",c,n);if(h[0].some((e=>isNaN(e))))return o;const m=h.map((e=>a.worldToCanvas(e)));if(!a.getRenderingEngine())return console.warn("Rendering Engine has been destroyed"),o;if(!Pe(i))continue;const p={upper:"upper",right:"right",lower:"lower",left:"left"},[f,E]=m[0],w=s?20:7,I=s?5:7;js(t,i,p.upper,[f,E-(w/2+I)],[f,E-w/2],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.lower,[f,E+(w/2+I)],[f,E+w/2],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.right,[f+(w/2+I),E],[f+w/2,E],{color:v,lineDash:u,lineWidth:g}),js(t,i,p.left,[f-(w/2+I),E],[f-w/2,E],{color:v,lineDash:u,lineWidth:g}),o=!0}return o})),this._disableCursorEnabled=this.configuration.disableCursor}onSetToolActive(){if(this._disableCursorEnabled=this.configuration.disableCursor,!this._disableCursorEnabled)return;const e=xi(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&ds(e.viewport.element)}))}onSetToolDisabled(){if(!this._disableCursorEnabled)return;const e=xi(this.toolGroupId).viewportsInfo;e&&e.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId))).forEach((e=>{e&&ls(e.viewport.element)}))}getActiveAnnotation(e){const t=$e(this.getToolName(),e);return t.length?t[0]:null}updateAnnotationPosition(e,t){var n;const i=this._currentCursorWorldPosition;if(!i)return;if(null===(n=t.data)||void 0===n||null===(n=n.handles)||void 0===n||!n.points)return;t.data.handles.points=[[...i]],t.invalidated=!0;const o=Qd(e,this.getToolName(),!1),a=(0,Q.getEnabledElement)(e);if(!a)return;const{renderingEngine:r}=a;or(r,o)}filterInteractableAnnotationsForElement(e,t){var n,i;if(!(t instanceof Array)||0===t.length)return[];const o=t[0],a=null===(n=(0,Q.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 d=null===(i=o.data)||void 0===i||null===(i=i.handles)||void 0===i?void 0:i.points;if(!(d instanceof Array)||1!==d.length)return[];const c=d[0],h=Q.utilities.planar.planeEquation(s,l);return Q.utilities.planar.planeDistanceToPoint(h,c)<this.configuration.displayThreshold?[o]:[]}updateViewportImage(e){const t=this._currentCursorWorldPosition;if(t&&!t.some((e=>isNaN(e))))if(e instanceof Q.StackViewport){const n=Q.utilities.getClosestStackImageIndexForPoint(t,e);if(null===n)return;n!==e.getCurrentImageIdIndex()&&e.setImageIdIndex(n)}else if(e instanceof Q.VolumeViewport){const{focalPoint:n,viewPlaneNormal:i}=e.getCamera();if(!n||!i)return;const o=Q.utilities.planar.planeEquation(i,n),a=Q.utilities.planar.planeDistanceToPoint(o,t,!0);if(Math.abs(a)<.5)return;const r=ys.vec3.normalize(ys.vec3.create(),ys.vec3.fromValues(...i)),s=ys.vec3.scale(ys.vec3.create(),r,a),l=ys.vec3.add(ys.vec3.create(),ys.vec3.fromValues(...n),s);{e.setCamera({focalPoint:l});const t=e.getRenderingEngine();t&&t.renderViewport(e.id)}}}}ie(Op,"toolName",void 0),Op.toolName="ReferenceCursors";const xp=Op,Pp=[];class Np extends sc{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{configuration:{viewportId:"",scaleLocation:"bottom"}}),ie(this,"touchDragCallback",void 0),ie(this,"mouseDragCallback",void 0),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",{}),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"_init",(()=>{const e=(0,Q.getRenderingEngines)()[0];if(!e)return;const t=xi(this.toolGroupId).viewportsInfo;if(!t)return;const n=t.map((e=>(0,Q.getEnabledElementByIds)(e.viewportId,e.renderingEngineId)));let{viewport:i}=n[0];const{FrameOfReferenceUID:o}=n[0];if(this.configuration.viewportId&&n.forEach((e=>{e.viewport.id==this.configuration.viewportId&&(i=e.viewport)})),!i)return;const{viewUp:a,viewPlaneNormal:r}=i.getCamera(),s=Q.utilities.getViewportImageCornersInWorld(i);let l=this.editData.annotation;const d=$e(this.getToolName(),i.element);if(d.length&&(l=d.filter((e=>e.data.viewportId==i.id))[0]),Pp.includes(i.id))this.editData.annotation.data.viewportId==i.id&&(this.editData.annotation.data.handles.points=s,this.editData.annotation.data.viewportId=i.id);else{const e={metadata:{toolName:this.getToolName(),viewPlaneNormal:[...r],viewUp:[...a],FrameOfReferenceUID:o,referencedImageId:null},data:{handles:{points:s},viewportId:i.id}};Pp.push(i.id),Qe(e,i.element),l=e}this.editData={viewport:i,renderingEngine:e,annotation:l}})),ie(this,"onSetToolEnabled",(()=>{this._init()})),ie(this,"onCameraModified",(e=>{this.configuration.viewportId=e.detail.viewportId,this._init()})),ie(this,"computeScaleSize",((e,t,n)=>{const i=[16e3,8e3,4e3,2e3,1e3,500,250,100,50,25,10,5,2];let o;return o="top"==n||"bottom"==n?i.filter((t=>t<.6*e&&t>.2*e)):i.filter((e=>e<.6*t&&e>.2*t)),o[0]})),ie(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]]]}})),ie(this,"computeInnerScaleTicks",((e,t,n,i,o)=>{let a;"bottom"==t||"top"==t?a=o[0][0]-i[0][0]:"left"!=t&&"right"!=t||(a=o[0][1]-i[0][1]);const r=[],s=[],l=[];let d=e;e>=50&&(d=e/10);const c=a/d;for(let e=0;e<d-1;e++){const o={bottom:[[c*(e+1),0],[c*(e+1),5]],top:[[c*(e+1),0],[c*(e+1),-5]],left:[[0,c*(e+1)],[-5,c*(e+1)]],right:[[0,c*(e+1)],[5,c*(e+1)]]};r.push("".concat(n,"-tick").concat(e)),s.push("tick".concat(e)),(e+1)%5==0?l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][0][0],i[1][1]+o[t][0][1]]]):l.push([[i[0][0]+o[t][0][0],i[0][1]+o[t][0][1]],[i[1][0]+o[t][1][0],i[1][1]+o[t][1][1]]])}return{tickIds:r,tickUIDs:s,tickCoordinates:l}})),ie(this,"computeWorldScaleCoordinates",((e,t,n)=>{let i,o=ys.vec3.subtract(ys.vec3.create(),n[0],n[1]);o=ys.vec3.normalize(ys.vec3.create(),o);let a=ys.vec3.subtract(ys.vec3.create(),n[2],n[0]);a=ys.vec3.normalize(ys.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=ys.vec3.add(ys.vec3.create(),r[t][0],r[t][0]).map((e=>e/2)),l=e/2/Math.sqrt(Math.pow(o[0],2)+Math.pow(o[1],2)+Math.pow(o[2],2));return"top"==t||"bottom"==t?i=[ys.vec3.subtract(ys.vec3.create(),s,a.map((e=>e*l))),ys.vec3.add(ys.vec3.create(),s,a.map((e=>e*l)))]:"left"!=t&&"right"!=t||(i=[ys.vec3.add(ys.vec3.create(),s,o.map((e=>e*l))),ys.vec3.subtract(ys.vec3.create(),s,o.map((e=>e*l)))]),i})),ie(this,"computeCanvasScaleCoordinates",((e,t,n,i,o)=>{let a;if("top"==o||"bottom"==o){const i=t[0][0]-t[1][0];a=[[e.width/2-i/2,n.height],[e.width/2+i/2,n.height]]}else if("left"==o||"right"==o){const n=t[0][1]-t[1][1];a=[[i.width,e.height/2-n/2],[i.width,e.height/2+n/2]]}return a})),ie(this,"computeScaleBounds",((e,t,n,i)=>{const o=t*Math.min(1e3,e.width),a=n*Math.min(1e3,e.height),r={bottom:[-a,-o],top:[a,o],left:[a,o],right:[-a,-o]},s={bottom:[e.height,e.width],top:[0,e.width],left:[e.height,0],right:[e.height,e.width]};return{height:s[i][0]+r[i][0],width:s[i][1]+r[i][1]}}))}renderAnnotation(e,t){if(!this.editData.viewport)return;const n=this.configuration.scaleLocation,{viewport:i}=e,o=$e(this.getToolName(),i.element).filter((e=>e.data.viewportId==i.id))[0],a=e.viewport.canvas;if(!i)return!1;const r={toolGroupId:this.toolGroupId,toolName:this.getToolName(),viewportId:e.viewport.id},s={width:a.width,height:a.height},l=o.data.handles.points[0],d=o.data.handles.points[1],c=o.data.handles.points[2],h=o.data.handles.points[3],g=[l,c,d,h],u=ys.vec3.distance(c,h),v=ys.vec3.distance(l,c),m=this.computeScaleBounds(s,.05,.05,n),p=this.computeScaleBounds(s,.05,.05,n),f=this.computeScaleSize(u,v,n),E=this.computeWorldScaleCoordinates(f,n,g).map((e=>i.worldToCanvas(e))),w=this.computeCanvasScaleCoordinates(s,E,p,m,n),I=this.computeEndScaleTicks(w,n),{annotationUID:_}=o;r.annotationUID=_;const C=this.getStyle("lineWidth",r,o),b=this.getStyle("lineDash",r,o),T=this.getStyle("color",r,o),D=this.getStyle("shadow",r,o),S="".concat(_,"-scaleline");js(t,_,"1",w[0],w[1],{color:T,width:C,lineDash:b,shadow:D},S);const y="".concat(_,"-left");js(t,_,"2",I.endTick1[0],I.endTick1[1],{color:T,width:C,lineDash:b,shadow:D},y);const M="".concat(_,"-right");js(t,_,"3",I.endTick2[0],I.endTick2[1],{color:T,width:C,lineDash:b,shadow:D},M);const O={bottom:[-10,-42],top:[-12,-35],left:[-40,-20],right:[-50,-20]},x=[w[0][0]+O[n][0],w[0][1]+O[n][1]],P=this._getTextLines(f),{tickIds:N,tickUIDs:R,tickCoordinates:A}=this.computeInnerScaleTicks(f,n,_,I.endTick1,I.endTick2);for(let e=0;e<R.length;e++)js(t,_,R[e],A[e][0],A[e][1],{color:T,width:C,lineDash:b,shadow:D},N[e]);return Xs(t,_,"text0",P,[x[0],x[1]],{fontFamily:"Helvetica Neue, Helvetica, Arial, sans-serif",fontSize:"14px",lineDash:"2,3",lineWidth:"1",shadow:!0,color:T}),!1}_getTextLines(e){let t,n;return e>=50?(t=e/10,n=" cm"):(t=e,n=" mm"),[t.toString().concat(n)]}}ie(Np,"toolName",void 0),Np.toolName="ScaleOverlay";const Rp=Np,{transformWorldToIndex:Ap}=Q.utilities;function kp(e,t){!function(e,t){const{points:n,segmentsLocked:i,segmentIndex:o,segmentationId:a}=t,{viewport:r}=e,s=ld({operationData:t,viewport:e.viewport});if(!s)return void console.warn("No data found for fillRectangle");const{segmentationImageData:l,segmentationScalarData:d}=s;let c=n.map((e=>Ap(l,e)));c=c.map((e=>e.map((e=>Math.round(e)))));const h=Dl(c,l.getDimensions()),g=r instanceof Q.StackViewport||Su(c),u=l.getDirection(),v=l.getSpacing(),{viewPlaneNormal:m}=r.getCamera(),p=Q.utilities.getSpacingInNormalDirection({direction:u,spacing:v},m),f=Sl(n);let[[E,w],[I,_],[C,b]]=f;E-=p,w+=p,I-=p,_+=p,C-=p,b+=p,Cl(l,g?()=>!0:e=>{const[t,n,i]=e;return t>=E&&t<=w&&n>=I&&n<=_&&i>=C&&i<=b},(e=>{let{value:t,index:n}=e;i.includes(t)||(d[n]=o)}),h),ft(a)}(e,t)}function Lp(e,t){!function(e,t){kp(e,Object.assign({},t,{segmentIndex:0}))}(e,t)}class Up extends zi{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:kp,ERASE_INSIDE:Lp},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.toolGroupId,g=Pd(h);if(!g)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:u,segmentationId:v,type:m}=g,p=Wd(v),f=Ld(v),E=od(h,u,p),{representationData:w}=It(v),I=w[at.Labelmap],_={highlighted:!0,invalidated:!0,metadata:{viewPlaneNormal:[...d],viewUp:[...c],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:E},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null}}},C=Qd(i,this.getToolName());if(this.editData={annotation:_,segmentIndex:p,segmentationId:v,segmentsLocked:f,segmentColor:E,viewportIdsToRender:C,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:u},Oi(I)){const{volumeId:e}=I,t=Q.cache.getVolume(e);this.editData={...this.editData,volumeId:e,referencedVolumeId:t.referencedVolumeId}}else{const{imageIdReferenceMap:e}=I;this.editData={...this.editData,imageIdReferenceMap:e}}return this._activateDraw(i),ds(i),e.preventDefault(),or(s,C),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportIdsToRender:o,handleIndex:a}=this.editData,{data:r}=i,{currentPoints:s}=t,l=(0,Q.getEnabledElement)(n),{worldToCanvas:d,canvasToWorld:c}=l.viewport,h=s.world,{points:g}=r.handles;let u,v,m,p,f,E,w,I;switch(g[a]=[...h],a){case 0:case 3:u=d(g[0]),p=d(g[3]),v=[p[0],u[1]],m=[u[0],p[1]],E=c(v),w=c(m),g[1]=E,g[2]=w;break;case 1:case 2:v=d(g[1]),m=d(g[2]),u=[m[0],v[1]],p=[v[0],m[1]],f=c(u),I=c(p),g[0]=f,g[3]=I}i.invalidated=!0,this.editData.hasMoved=!0;const{renderingEngine:_}=l;or(_,o)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const s=(0,Q.getEnabledElement)(n),l={...this.editData,points:r.handles.points};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(s,l)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{annotation:o}=this.editData,a=o.metadata,r=o.annotationUID,s=o.data,{points:l}=s.handles,d=l.map((e=>i.worldToCanvas(e))),c="rgb(".concat(a.segmentColor.slice(0,3),")");return i.getRenderingEngine()?($s(t,r,"0",d[0],d[3],{color:c}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Up,"toolName",void 0),Up.toolName="RectangleScissor";const Vp=Up;class Wp extends zi{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:Cd,ERASE_INSIDE:xd},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.toolGroupId,u=Pd(g);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m,type:p}=u,f=Wd(m),E=Ld(m),w=od(g,v,f),{representationData:I}=It(m),_=I[p];if(!_)throw new Error("No labelmap data found for the active segmentation, create one before using scissors tool");const C={invalidated:!0,highlighted:!0,metadata:{viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:w},data:{handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},isDrawing:!0,cachedStats:{}}},b=[s.id];if(this.editData={annotation:C,centerCanvas:a,segmentIndex:f,segmentationId:m,segmentsLocked:E,segmentColor:w,viewportIdsToRender:b,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1,segmentationRepresentationUID:v},Oi(_)){const{volumeId:e}=_,t=Q.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(i),ds(i),e.preventDefault(),or(l,b),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:g}=d,u=Math.abs(o[0]-h[0]),v=Math.abs(o[1]-h[1]),m=Math.sqrt(u*u+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],E=[h[0]-m,h[1]],w=[h[0]+m,h[1]];g.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a}=this.editData,{data:r}=i,{viewPlaneNormal:s,viewUp:l}=i.metadata;if(o&&!a)return;r.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const d=(0,Q.getEnabledElement)(n),c={...this.editData,points:r.handles.points,viewPlaneNormal:s,viewUp:l,strategySpecificConfiguration:{}};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(d,c)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback),e.addEventListener(te.TOUCH_END,this._endCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],g=c[1],u=[Math.floor((h[0]+g[0])/2),Math.floor((h[1]+g[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+g[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return i.getRenderingEngine()?(Fs(t,s,"0",u,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Wp,"toolName",void 0),Wp.toolName="CircleScissor";const Fp=Wp;class Hp extends zi{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:yd,ERASE_INSIDE:Od},defaultStrategy:"FILL_INSIDE",activeStrategy:"FILL_INSIDE"}}),ie(this,"editData",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"preMouseDownCallback",(e=>{if(!0===this.isDrawing)return;const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=n.canvas,r=(0,Q.getEnabledElement)(i),{viewport:s,renderingEngine:l}=r;this.isDrawing=!0;const d=s.getCamera(),{viewPlaneNormal:c,viewUp:h}=d,g=this.toolGroupId,u=Pd(g);if(!u)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationRepresentationUID:v,segmentationId:m}=u,p=Wd(m),f=Ld(m),E=od(g,v,p);this.isDrawing=!0;const w={metadata:{viewPlaneNormal:[...c],viewUp:[...h],FrameOfReferenceUID:s.getFrameOfReferenceUID(),referencedImageId:"",toolName:this.getToolName(),segmentColor:E},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},highlighted:!0}},I=[s.id];this.editData={annotation:w,centerCanvas:a,segmentationRepresentationUID:v,segmentIndex:p,segmentationId:m,segmentsLocked:f,segmentColor:E,toolGroupId:g,viewportIdsToRender:I,handleIndex:3,movingTextBox:!1,newAnnotation:!0,hasMoved:!1};const{representationData:_}=It(m),C=_[at.Labelmap];if(Oi(C)){const{volumeId:e}=C,t=Q.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(i),ds(i),e.preventDefault(),or(l,I),!0})),ie(this,"_dragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{currentPoints:i}=t,o=i.canvas,a=(0,Q.getEnabledElement)(n),{renderingEngine:r,viewport:s}=a,{canvasToWorld:l}=s,{annotation:d,viewportIdsToRender:c,centerCanvas:h}=this.editData,{data:g}=d,u=Math.abs(o[0]-h[0]),v=Math.abs(o[1]-h[1]),m=Math.sqrt(u*u+v*v),p=[h[0],h[1]+m],f=[h[0],h[1]-m],E=[h[0]-m,h[1]],w=[h[0]+m,h[1]];g.handles.points=[l(p),l(f),l(E),l(w)],d.invalidated=!0,this.editData.hasMoved=!0,or(r,c)})),ie(this,"_endCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,newAnnotation:o,hasMoved:a,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l}=this.editData,{data:d}=i,{viewPlaneNormal:c,viewUp:h}=i.metadata;if(o&&!a)return;i.highlighted=!1,d.handles.activeHandleIndex=null,this._deactivateDraw(n),ls(n);const g=(0,Q.getEnabledElement)(n),u={...this.editData,points:d.handles.points,segmentIndex:r,segmentationRepresentationUID:s,segmentsLocked:l,viewPlaneNormal:c,viewUp:h};this.editData=null,this.isDrawing=!1,this.applyActiveStrategy(g,u)})),ie(this,"_activateDraw",(e=>{e.addEventListener(te.MOUSE_UP,this._endCallback),e.addEventListener(te.MOUSE_DRAG,this._dragCallback),e.addEventListener(te.MOUSE_CLICK,this._endCallback),e.addEventListener(te.MOUSE_MOVE,this._dragCallback),e.addEventListener(te.TOUCH_END,this._endCallback),e.addEventListener(te.TOUCH_TAP,this._endCallback),e.addEventListener(te.TOUCH_DRAG,this._dragCallback)})),ie(this,"_deactivateDraw",(e=>{e.removeEventListener(te.MOUSE_UP,this._endCallback),e.removeEventListener(te.MOUSE_DRAG,this._dragCallback),e.removeEventListener(te.MOUSE_CLICK,this._endCallback),e.removeEventListener(te.MOUSE_MOVE,this._dragCallback),e.removeEventListener(te.TOUCH_END,this._endCallback),e.removeEventListener(te.TOUCH_DRAG,this._dragCallback),e.removeEventListener(te.TOUCH_TAP,this._endCallback)})),ie(this,"renderAnnotation",((e,t)=>{let n=!1;if(!this.editData)return n;const{viewport:i}=e,{viewportIdsToRender:o}=this.editData;if(!o.includes(i.id))return n;const{annotation:a}=this.editData,r=a.metadata,s=a.annotationUID,l=a.data,{points:d}=l.handles,c=d.map((e=>i.worldToCanvas(e))),h=c[0],g=c[1],u=[Math.floor((h[0]+g[0])/2),Math.floor((h[1]+g[1])/2)],v=Math.abs(h[1]-Math.floor((h[1]+g[1])/2)),m="rgb(".concat(r.segmentColor.slice(0,3),")");return i.getRenderingEngine()?(Fs(t,s,"0",u,v,{color:m}),n=!0,n):(console.warn("Rendering Engine has been destroyed"),n)}))}}ie(Hp,"toolName",void 0),Hp.toolName="SphereScissor";const Bp=Hp;var Gp=C(518),qp=C.n(Gp),jp=C(744),zp=C.n(jp),Kp=C(424),Yp=C.n(Kp),Xp=C(614),Jp=C.n(Xp);const Zp={ANNOTATED_CUBE:1,AXES:2,CUSTOM:3};class $p extends zi{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:qp().Corners.BOTTOM_RIGHT,viewportSize:.15,minPixelSize:100,maxPixelSize:300},overlayMarkerType:$p.OVERLAY_MARKER_TYPES.ANNOTATED_CUBE,overlayConfiguration:{[$p.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}},[$p.OVERLAY_MARKER_TYPES.AXES]:{},[$p.OVERLAY_MARKER_TYPES.CUSTOM]:{polyDataURL:"https://raw.githubusercontent.com/Slicer/Slicer/80ad0a04dacf134754459557bf2638c63f3d1d1b/Base/Logic/Resources/OrientationMarkers/Human.vtp"}}}}),ie(this,"orientationMarkers",void 0),ie(this,"polyDataURL",void 0),ie(this,"configuration_invalidated",!0),ie(this,"onSetToolEnabled",(()=>{this.initViewports(),this.configuration_invalidated=!0})),ie(this,"onSetToolActive",(()=>{this.initViewports()})),ie(this,"onSetToolDisabled",(()=>{this.cleanUpData()})),this.orientationMarkers={},this.configuration_invalidated=!0}cleanUpData(){(0,Q.getRenderingEngines)()[0].getViewports().forEach((e=>{const t=this.orientationMarkers[e.id];if(!t)return;const{actor:n,orientationWidget:i}=t;null==i||i.setEnabled(!1),null==i||i.delete(),null==n||n.delete(),e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow().render(),e.getRenderingEngine().render(),delete this.orientationMarkers[e.id]}))}initViewports(){const e=(0,Q.getRenderingEngines)()[0];if(!e)return;let t=e.getViewports();t=Jd(t,this.getToolName()),t.forEach((e=>this.addAxisActorInViewport(e)))}async addAxisActorInViewport(e){const t=e.id,n=this.configuration.overlayMarkerType,i=this.configuration.overlayConfiguration[n];if(this.orientationMarkers[t]){const{actor:n,orientationWidget:i}=this.orientationMarkers[t];e.getRenderer().removeActor(n),i.setEnabled(!1)}let o;1===n?o=this.createAnnotationCube(i):2===n?o=Yp().newInstance():3===n&&(o=await this.createCustomActor());const a=e.getRenderer(),r=e.getRenderingEngine().offscreenMultiRenderWindow.getRenderWindow(),{enabled:s,viewportCorner:l,viewportSize:d,minPixelSize:c,maxPixelSize:h}=this.configuration.orientationWidget,g=qp().newInstance({actor:o,interactor:r.getInteractor(),parentRenderer:a});g.setEnabled(s),g.setViewportCorner(l),g.setViewportSize(d),g.setMinPixelSize(c),g.setMaxPixelSize(h),g.updateMarkerOrientation(),this.orientationMarkers[t]={orientationWidget:g,actor:o},r.render(),e.getRenderingEngine().render(),this.configuration_invalidated=!1}async createCustomActor(){const e=this.configuration.overlayConfiguration[Zp.CUSTOM].polyDataURL,t=await fetch(e),n=await t.arrayBuffer(),i=Jp().newInstance();i.parseAsArrayBuffer(n),i.update();const o=to().newInstance();o.shallowCopy(i.getOutputData()),o.getPointData().setActiveScalars("Color");const a=Xi().newInstance();a.setInputData(o),a.setColorModeToDirectScalars();const r=Zi().newInstance();return r.setMapper(a),r.rotateZ(180),r}createAnnotationCube(e){const t=zp().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=zp().newInstance(),{faceProperties:t,defaultStyle:n}=this.configuration.annotatedCube;return e.setDefaultStyle(n),Object.keys(t).forEach((n=>{const i="set".concat(n.charAt(0).toUpperCase()+n.slice(1),"FaceProperty");e[i](t[n])})),e}}ie($p,"toolName",void 0),ie($p,"CUBE",1),ie($p,"AXIS",2),ie($p,"VTPFILE",3),ie($p,"OVERLAY_MARKER_TYPES",Zp),$p.toolName="OrientationMarker";const Qp=$p;class ef extends zi{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:750}}),ie(this,"hoverTimer",void 0),ie(this,"mouseMoveCallback",(e=>(this.hoverTimer&&clearTimeout(this.hoverTimer),this.hoverTimer=setTimeout((()=>{this._setActiveSegment(e),this.hoverTimer=null}),this.configuration.hoverTimeout),!0))),ie(this,"onSetToolEnabled",(()=>{this.onSetToolActive()})),ie(this,"onSetToolActive",(()=>{this.hoverTimer=null})),ie(this,"onSetToolDisabled",(()=>{this.hoverTimer=null})),this.hoverTimer=null}_setActiveSegment(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{element:t,currentPoints:n}=e.detail,i=n.world,o=(0,Q.getEnabledElement)(t);if(!o)return;const{viewport:a}=o,r=Nd(this.toolGroupId);if(r.type!==at.Labelmap)throw Error("non-labelmap segmentation not supported yet");this._setActiveSegmentLabelmap(r,i,a)}_setActiveSegmentLabelmap(e,t,n){if(!n.getImageData())return;const i=e.representationData.LABELMAP;let o;if(Oi(e.representationData.LABELMAP)){const{volumeId:e}=i,n=Q.cache.getVolume(e);if(!n)return;o=n.imageData.getScalarValueFromWorld(t)}else{const{imageIdReferenceMap:e}=i,a=n.getCurrentImageId(),r=e.get(a),s=Q.cache.getImage(r);if(!s)return;const l=Pd(this.toolGroupId);if(!l)return;const d=n.getActor(l.segmentationRepresentationUID),c=null==d?void 0:d.actor.getMapper().getInputData(),h=Q.utilities.transformWorldToIndex(c,t),g=h[0]+h[1]*s.columns;o=c.getPointData().getScalars().getData()[g]}if(!o||0===o)return;Vd(e.segmentationId,o);const a=n.getRenderingEngine();pt(e.segmentationId),or(a,a.getViewports().map((e=>e.id)))}}ie(ef,"toolName",void 0),ef.toolName="SegmentSelectTool";const tf=ef,{transformWorldToIndex:nf,isEqual:of}=Q.utilities;class af extends zi{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,ie(this,"preMouseDownCallback",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r}=a,s=r.getCamera(),{viewPlaneNormal:l}=s,d=Pd(this.toolGroupId);if(!d)throw new Error("No active segmentation detected, create one before using scissors tool");const{segmentationId:c,type:h}=d,g=Wd(c),u=Ld(c),{representationData:v}=It(c),m=v[at.Labelmap];let p,f,E,w;if(Oi(m)){const{volumeId:e}=v[h],t=Q.cache.getVolume(e);({dimensions:p,direction:f}=t),E=t.getScalarData(),w=nf(t.imageData,o)}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 i=Q.cache.getImage(n);E=i.getPixelData();const{imageData:s}=r.getImageData();p=s.getDimensions(),f=s.getDirection(),w=nf(s,o)}const I=this.getFixedDimension(l,f);if(void 0===I)return void console.warn("Oblique paint fill not yet supported");const{floodFillGetter:_,getLabelValue:C,getScalarDataPositionFromPlane:b,inPlaneSeedPoint:T,fixedDimensionValue:D}=this.generateHelpers(E,p,w,I);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=C(w[0],w[1],w[2]);if(u.includes(S))return;const y=td(_,T),{flooded:M}=y;return M.forEach((e=>{const t=b(e[0],e[1]);E[t]=g})),ft(c,this.getFramesModified(I,D,y)),!0})),ie(this,"getFramesModified",((e,t,n)=>{const{boundaries:i}=n;if(2===e)return[t];let o=1/0,a=-1/0;for(let e=0;e<i.length;e++){const t=i[e][1];t<o&&(o=t),t>a&&(a=t)}const r=[];for(let e=o;e<=a;e++)r.push(e);return r})),ie(this,"generateHelpers",(function(t,n,i){let o,a,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:2;switch(r){case 0:o=i[0],a=[i[1],i[2]];break;case 1:o=i[1],a=[i[0],i[2]];break;case 2:o=i[2],a=[i[0],i[1]];break;default:throw new Error("Invalid fixedDimension: ".concat(r))}const s=(e,t,i)=>i*n[1]*n[0]+t*n[0]+e,l=(e,n,i)=>t[s(e,n,i)],d=e.generateFloodFillGetter(n,r,o,l);return{getScalarDataPositionFromPlane:e.generateGetScalarDataPositionFromPlane(s,r,o),getLabelValue:l,floodFillGetter:d,inPlaneSeedPoint:a,fixedDimensionValue:o}})),ie(this,"generateFloodFillGetter",((e,t,n,i)=>{let o;switch(t){case 0:o=(t,o)=>{if(!(t>=e[1]||t<0||o>=e[2]||o<0))return i(n,t,o)};break;case 1:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[2]||o<0))return i(t,n,o)};break;case 2:o=(t,o)=>{if(!(t>=e[0]||t<0||o>=e[1]||o<0))return i(t,o,n)};break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return o})),ie(this,"generateGetScalarDataPositionFromPlane",((e,t,n)=>{let i;switch(t){case 0:i=(t,i)=>e(n,t,i);break;case 1:i=(t,i)=>e(t,n,i);break;case 2:i=(t,i)=>e(t,i,n);break;default:throw new Error("Invalid fixedDimension: ".concat(t))}return i}))}getFixedDimension(e,t){const n=t.slice(0,3),i=t.slice(3,6),o=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(of(a,r))return 0;const s=[Math.abs(i[0]),Math.abs(i[1]),Math.abs(i[2])];if(of(a,s))return 1;const l=[Math.abs(o[0]),Math.abs(o[1]),Math.abs(o[2])];return of(a,l)?2:void 0}}ie(af,"toolName",void 0),af.toolName="PaintFill";const rf=af;class sf extends dc{constructor(){var e;super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{supportedInteractionTypes:["Mouse","Touch"],configuration:{shadow:!0,preventHandleOutsideImage:!1}}),e=this,ie(this,"_throttledCalculateCachedStats",void 0),ie(this,"editData",void 0),ie(this,"_configuration",void 0),ie(this,"isDrawing",void 0),ie(this,"isHandleOutsideImage",void 0),ie(this,"addNewAnnotation",(e=>{const t=e.detail,{currentPoints:n,element:i}=t,o=n.world,a=(0,Q.getEnabledElement)(i),{viewport:r,renderingEngine:s}=a;this.isDrawing=!0;const l=r.getCamera(),{viewPlaneNormal:d,viewUp:c}=l,h=this.getReferencedImageId(r,o,d,c),g={metadata:{viewPlaneNormal:[0,0,1],viewUp:[0,1,0],FrameOfReferenceUID:r.getFrameOfReferenceUID(),referencedImageId:h,toolName:this.getToolName()},data:{invalidated:!0,handles:{points:[[...o],[...o],[...o],[...o]],activeHandleIndex:null},cachedStats:{},active:!0}};Qe(g,i);const u=Qd(i,this.getToolName(),!1);return this.editData={annotation:g,viewportUIDsToRender:u,handleIndex:3,newAnnotation:!0,hasMoved:!1},this._activateDraw(i),ds(i),e.preventDefault(),or(s,u),g})),ie(this,"getHandleNearImagePoint",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles;for(let e=0;e<s.length;e++){const t=s[e],o=a.worldToCanvas(t);if(!0==ys.vec2.distance(n,o)<i)return r.handles.activeHandleIndex=e,t}r.handles.activeHandleIndex=null})),ie(this,"isPointNearTool",((e,t,n,i)=>{const o=(0,Q.getEnabledElement)(e),{viewport:a}=o,{data:r}=t,{points:s}=r.handles,l=a.worldToCanvas(s[0]),d=a.worldToCanvas(s[3]),c=this._getRectangleImageCoordinates([l,d]),h=[n[0],n[1]],{left:g,top:u,width:v,height:m}=c;if(vc([g,u,v,m],h)<=i)return!0})),ie(this,"toolSelectedCallback",(function(t,n){const i=t.detail,{element:o}=i,{data:a}=n;a.active=!0;const r=Qd(o,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:r},e._activateModify(o),ds(o);const s=(0,Q.getEnabledElement)(o),{renderingEngine:l}=s;or(l,r),t.preventDefault()})),ie(this,"handleSelectedCallback",(function(t,n,i){const o=t.detail,{element:a}=o,{data:r}=n;r.active=!0;let s,l=!1;i.worldPosition||(s=r.handles.points.findIndex((e=>e===i)));const d=Qd(a,e.getToolName(),!1);e.editData={annotation:n,viewportUIDsToRender:d,handleIndex:s},e._activateModify(a),ds(a);const c=(0,Q.getEnabledElement)(a),{renderingEngine:h}=c;or(h,d),t.preventDefault()})),ie(this,"_mouseUpCallback",(e=>{const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,newAnnotation:a,hasMoved:r}=this.editData,{data:s}=i;if(a&&!r)return;s.active=!1,s.handles.activeHandleIndex=null,this._deactivateModify(n),this._deactivateDraw(n),ls(n);const l=(0,Q.getEnabledElement)(n),{renderingEngine:d}=l;this.editData=null,this.isDrawing=!1,this.isHandleOutsideImage&&this.configuration.preventHandleOutsideImage&&tt(i.annotationUID),or(d,o)})),ie(this,"_mouseDragCallback",(e=>{this.isDrawing=!0;const t=e.detail,{element:n}=t,{annotation:i,viewportUIDsToRender:o,handleIndex:a}=this.editData,{data:r}=i;if(void 0===a){const{deltaPoints:e}=t,n=e.world,{points:i}=r.handles;i.forEach((e=>{e[0]+=n[0],e[1]+=n[1],e[2]+=n[2]})),r.invalidated=!0}else{const{currentPoints:e}=t,i=(0,Q.getEnabledElement)(n),{worldToCanvas:o,canvasToWorld:s}=i.viewport,l=e.world,{points:d}=r.handles;let c,h,g,u,v,m,p,f;switch(d[a]=[...l],a){case 0:case 3:c=o(d[0]),u=o(d[3]),h=[u[0],c[1]],g=[c[0],u[1]],m=s(h),p=s(g),d[1]=m,d[2]=p;break;case 1:case 2:h=o(d[1]),g=o(d[2]),c=[g[0],h[1]],u=[h[0],g[1]],v=s(c),f=s(u),d[0]=v,d[3]=f}r.invalidated=!0}this.editData.hasMoved=!0;const s=(0,Q.getEnabledElement)(n),{renderingEngine:l}=s;or(l,o)})),ie(this,"_activateDraw",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.TOUCH_END,this._mouseUpCallback),e.addEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_deactivateDraw",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_MOVE,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.TOUCH_END,this._mouseUpCallback),e.removeEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_activateModify",(e=>{Ge.isInteractingWithTool=!0,e.addEventListener(te.MOUSE_UP,this._mouseUpCallback),e.addEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.addEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.addEventListener(te.TOUCH_END,this._mouseUpCallback),e.addEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"_deactivateModify",(e=>{Ge.isInteractingWithTool=!1,e.removeEventListener(te.MOUSE_UP,this._mouseUpCallback),e.removeEventListener(te.MOUSE_DRAG,this._mouseDragCallback),e.removeEventListener(te.MOUSE_CLICK,this._mouseUpCallback),e.removeEventListener(te.TOUCH_END,this._mouseUpCallback),e.removeEventListener(te.TOUCH_DRAG,this._mouseDragCallback)})),ie(this,"renderAnnotation",((e,t)=>{var n,i;const{viewport:o}=e,{element:a}=o;let r=$e(this.getToolName(),a);if(null===(n=r)||void 0===n||!n.length)return!1;if(r=this.filterInteractableAnnotationsForElement(a,r),null===(i=r)||void 0===i||!i.length)return!1;this.getTargetId(o),o.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:i}=n,a=(n.metadata,n.data),{points:l,activeHandleIndex:d}=a.handles,c=l.map((e=>o.worldToCanvas(e))),h=this.getStyle("lineWidth",s,n),g=this.getStyle("lineDash",s,n),u=this.getStyle("color",s,n);if(!o.getRenderingEngine())return void console.warn("Rendering Engine has been destroyed");let v;this.editData||null===d||(v=[c[d]]),v&&qs(t,i,"0",v,{color:u}),el(t,i,"0",c[0],c[3],{color:"black",lineDash:g,lineWidth:h})}})),ie(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])}})),ie(this,"_calculateCachedStats",((e,t,n,i,o)=>{const{data:a}=e,{viewportUID:r,renderingEngineUID:s,sceneUID:l}=o,d=a.handles.points[0],c=a.handles.points[3],{cachedStats:h}=a,g=Object.keys(h);for(let e=0;e<g.length;e++){const o=g[e],{imageVolume:a}=this._getImageVolumeFromTargetUID(o,i),{dimensions:r,scalarData:s,vtkImageData:l,metadata:u}=a,v=ys.vec3.fromValues(0,0,0),m=ys.vec3.fromValues(0,0,0);if(l.worldToIndexVec3(d,v),v[0]=Math.floor(v[0]),v[1]=Math.floor(v[1]),v[2]=Math.floor(v[2]),l.worldToIndexVec3(c,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]),i=Math.max(v[0],m[0]),a=Math.min(v[1],m[1]),l=Math.max(v[1],m[1]),g=Math.min(v[2],m[2]),p=Math.max(v[2],m[2]),{worldWidth:f,worldHeight:E}=Cm(t,n,d,c),w=f*E;let I=0,_=0,C=0;const b=r[0],T=r[0]*r[1];for(let t=g;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++)I++,_+=s[t*T+n*b+o];_/=I;for(let t=g;t<=p;t++)for(let n=a;n<=l;n++)for(let o=e;o<=i;o++){const e=s[t*T+n*b+o]-_;C+=e*e}C/=I,C=Math.sqrt(C),h[o]={Modality:u.Modality,area:w,mean:_,stdDev:C}}else this.isHandleOutsideImage=!0,h[o]={Modality:u.Modality}}a.invalidated=!1;const u=te.ANNOTATION_MODIFIED,v={annotation:e,viewportUID:r,renderingEngineUID:s,sceneUID:l};return(0,Q.triggerEvent)(Q.eventTarget,u,v),h})),ie(this,"_isInsideVolume",((e,t,n)=>Q.utilities.indexWithinDimensions(e,n)&&Q.utilities.indexWithinDimensions(t,n))),ie(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=rl(this._calculateCachedStats,100,{trailing:!0})}cancel(e){if(!this.isDrawing)return;this.isDrawing=!1,this._deactivateDraw(e),this._deactivateModify(e),ls(e);const{annotation:t,viewportUIDsToRender:n}=this.editData,{data:i}=t;i.active=!1,i.handles.activeHandleIndex=null;const o=(0,Q.getEnabledElement)(e),{renderingEngine:a}=o;return or(a,n),this.editData=null,t.metadata.annotationUID}_getImageVolumeFromTargetUID(e,t){let n;if(e.startsWith("stackTarget")){const i=e.indexOf(":"),o=e.substring(i+1);n=t.getViewport(o).getImageData()}else n=Q.cache.getVolume(e);return{imageVolume:n,viewport:void 0}}_getTargetStackUID(e){return"stackTarget:".concat(e.uid)}}sf.toolName="VideoRedaction";const lf=sf})(),b})()));
3
3
  //# sourceMappingURL=index.js.map