@ohif/extension-tmtv 3.9.0-beta.82 → 3.9.0-beta.83
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see ohif-extension-tmtv.umd.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@ohif/core"),require("@ohif/ui"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@ohif/core","@ohif/ui","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-tmtv"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@ohif/core"),require("@ohif/ui"),require("dcmjs")):e["ohif-extension-tmtv"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@ohif/core"],e["@ohif/ui"],e.dcmjs)}(globalThis,((e,t,n,a,o,r)=>(()=>{var i={337:(e,t,n)=>{"use strict";var a=n(287);function o(){}function r(){}r.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:r,resetWarningCache:o};return n.PropTypes=n,n}},827:(e,t,n)=>{e.exports=n(337)()},287:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},977:(e,t)=>{"use strict";var n=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),d=Symbol.iterator;var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,y={};function h(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||f}function v(){}function S(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||f}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var b=S.prototype=new v;b.constructor=S,g(b,h.prototype),b.isPureReactComponent=!0;var T=Array.isArray,I=Object.prototype.hasOwnProperty,w={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,a){var o,r={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)I.call(t,o)&&!x.hasOwnProperty(o)&&(r[o]=t[o]);var c=arguments.length-2;if(1===c)r.children=a;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];r.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===r[o]&&(r[o]=c[o]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:w.current}}function R(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var D=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function O(e,t,o,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case a:c=!0}}if(c)return i=i(c=e),e=""===r?"."+C(c,0):r,T(i)?(o="",null!=e&&(o=e.replace(D,"$&/")+"/"),O(i,t,o,"",(function(e){return e}))):null!=i&&(R(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(D,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",T(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=O(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=d&&e[d]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=O(s=s.value,t,o,u=r+C(s,l++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function N(e,t,n){if(null==e)return e;var a=[],o=0;return O(e,a,"","",(function(e){return t.call(n,e,o++)})),a}function M(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},L={transition:null},k={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:L,ReactCurrentOwner:w};function V(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!R(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=h,t.Fragment=o,t.Profiler=i,t.PureComponent=S,t.StrictMode=r,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=k,t.act=V,t.cloneElement=function(e,t,a){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),r=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=w.current),void 0!==t.key&&(r=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)I.call(t,l)&&!x.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=a;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}return{$$typeof:n,type:e.type,key:r,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=R,t.lazy=function(e){return{$$typeof:m,_payload:{_status:-1,_result:e},_init:M}},t.memo=function(e,t){return{$$typeof:p,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=L.transition;L.transition={};try{e()}finally{L.transition=t}},t.unstable_act=V,t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.3.1"},1:(e,t,n)=>{"use strict";e.exports=n(977)},165:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},32:t=>{"use strict";t.exports=e},464:e=>{"use strict";e.exports=t},867:e=>{"use strict";e.exports=n},762:e=>{"use strict";e.exports=a},369:e=>{"use strict";e.exports=o},836:e=>{"use strict";e.exports=r}},s={};function c(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return i[e](n,n.exports,c),n.exports}c.m=i,c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},c.d=(e,t)=>{for(var n in t)c.o(t,n)&&!c.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},c.u=e=>"dist/"+e+".ohif-extension-tmtv.umd.js",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.p="/",c.b=document.baseURI||self.location.href;var l={};return(()=>{"use strict";c.r(l),c.d(l,{default:()=>Ee});const e=JSON.parse('{"u2":"@ohif/extension-tmtv"}').u2,t={viewportOptions:{viewportId:"ctAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"ctToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},n={viewportOptions:{viewportId:"ctSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"ctToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},a={viewportOptions:{viewportId:"ctCORONAL",viewportType:"volume",orientation:"coronal",toolGroupId:"ctToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},o={viewportOptions:{viewportId:"ptAXIAL",viewportType:"volume",background:[1,1,1],orientation:"axial",toolGroupId:"ptToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},r={viewportOptions:{viewportId:"ptSAGITTAL",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},i={viewportOptions:{viewportId:"ptCORONAL",viewportType:"volume",orientation:"coronal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},s={viewportOptions:{viewportId:"fusionAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"fusionToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},u={viewportOptions:{viewportId:"fusionSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"fusionToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},p={viewportOptions:{viewportId:"fusionCoronal",viewportType:"volume",orientation:"coronal",toolGroupId:"fusionToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},m={viewportOptions:{viewportId:"mipSagittal",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"mipToolGroup",syncGroups:[{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}],customViewportProps:{hideOverlays:!0}},displaySets:[{options:{blendMode:"MIP",slabThickness:"fullVolume",voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},d={id:"@ohif/extension-tmtv.hangingProtocolModule.ptCT",locked:!0,name:"Default",createdDate:"2021-02-23T19:22:08.894Z",modifiedDate:"2022-10-04T19:22:08.894Z",availableTo:{},editableBy:{},imageLoadStrategy:"interleaveTopToBottom",protocolMatchingRules:[{attribute:"ModalitiesInStudy",constraint:{contains:["CT","PT"]}},{attribute:"StudyDescription",constraint:{contains:"PETCT"}},{attribute:"StudyDescription",constraint:{contains:"PET/CT"}}],displaySetSelectors:{ctDisplaySet:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:{value:"CT"}},required:!0},{attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0},{attribute:"SeriesDescription",constraint:{contains:"CT"}},{attribute:"SeriesDescription",constraint:{contains:"CT WB"}}]},ptDisplaySet:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"PT"},required:!0},{attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0},{attribute:"SeriesDescription",constraint:{contains:"Corrected"}},{weight:2,attribute:"SeriesDescription",constraint:{doesNotContain:{value:"Uncorrected"}}}]}},stages:[{name:"default",viewportStructure:{layoutType:"grid",properties:{rows:3,columns:4,layoutOptions:[{x:0,y:0,width:1/4,height:1/3},{x:1/4,y:0,width:1/4,height:1/3},{x:.5,y:0,width:1/4,height:1/3},{x:0,y:1/3,width:1/4,height:1/3},{x:1/4,y:1/3,width:1/4,height:1/3},{x:.5,y:1/3,width:1/4,height:1/3},{x:0,y:2/3,width:1/4,height:1/3},{x:1/4,y:2/3,width:1/4,height:1/3},{x:.5,y:2/3,width:1/4,height:1/3},{x:3/4,y:0,width:1/4,height:1}]}},viewports:[t,n,a,o,r,i,s,u,p,m],createdDate:"2021-02-23T18:32:42.850Z"},{name:"Fusion 2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[t,s,o,m]},{name:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[t,n,a,o,r,i]},{name:"2x4-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:4,layoutOptions:[{x:0,y:0,width:1/4,height:.5},{x:1/4,y:0,width:1/4,height:.5},{x:.5,y:0,width:1/4,height:.5},{x:3/4,y:0,width:1/4,height:1},{x:0,y:.5,width:1/4,height:.5},{x:1/4,y:.5,width:1/4,height:.5},{x:.5,y:.5,width:1/4,height:.5}]}},viewports:[i,r,o,m,p,u,s]}],numberOfPriorsReferenced:-1};const f=function(){return[{name:d.id,protocol:d}]};var g=c(1),y=c(827),h=c.n(y),v=c(369),S=c(762),b=c.n(S);function T(e){return T="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},T(e)}function I(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=T(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==T(t)?t:t+""}function w(e,t,n){return(t=I(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}c(165);Object.create(null);function x(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var E={};function R(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&E[t[0]]||("string"==typeof t[0]&&(E[t[0]]=new Date),x.apply(void 0,t))}var D=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function C(e,t,n){e.loadNamespaces(t,D(e,n))}function O(e,t,n,a){"string"==typeof n&&(n=[n]),n.forEach((function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,D(e,a))}var N=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,M={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},P=function(e){return M[e]};var L,k={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(N,P)}};function V(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,I(a.key),a)}}var U=(0,g.createContext)(),j=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&V(e.prototype,t),n&&V(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,o,r,i,s=[],c=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(s.push(a.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_(Object(n),!0).forEach((function(t){w(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var G=function(e,t){var n=(0,g.useRef)();return(0,g.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function W(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,a=(0,g.useContext)(U)||{},o=a.i18n,r=a.defaultNS,i=n||o||L;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new j),!i){R("You will need to pass in an i18next instance by using initReactI18next");var s=function(e,t){return"string"==typeof t?t:t&&"object"===T(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},c=[s,{},!1];return c.t=s,c.i18n={},c.ready=!1,c}i.options.react&&void 0!==i.options.react.wait&&R("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=q(q(q({},k),i.options.react),t),u=l.useSuspense,p=l.keyPrefix,m=e||r||i.options&&i.options.defaultNS;m="string"==typeof m?[m]:m||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(m);var d=(i.isInitialized||i.initializedStoreOnce)&&m.every((function(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.languages&&t.languages.length?void 0!==t.options.ignoreJSONStructure?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,a){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=t.languages[0],o=!!t.options&&t.options.fallbackLng,r=t.languages[t.languages.length-1];if("cimode"===a.toLowerCase())return!0;var i=function(e,n){var a=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===a||2===a};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!i(t.isLanguageChangingTo,e)||!t.hasResourceBundle(a,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!i(a,e)||o&&!i(r,e)))}(e,t,n):(R("i18n.languages were undefined or empty",t.languages),!0)}(e,i,l)}));function f(){return i.getFixedT(t.lng||null,"fallback"===l.nsMode?m:m[0],p)}var y=F((0,g.useState)(f),2),h=y[0],v=y[1],S=m.join();t.lng&&(S="".concat(t.lng).concat(S));var b=G(S),I=(0,g.useRef)(!0);(0,g.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function a(){I.current&&v(f)}return I.current=!0,d||u||(t.lng?O(i,t.lng,m,(function(){I.current&&v(f)})):C(i,m,(function(){I.current&&v(f)}))),d&&b&&b!==S&&I.current&&v(f),e&&i&&i.on(e,a),n&&i&&i.store.on(n,a),function(){I.current=!1,e&&i&&e.split(" ").forEach((function(e){return i.off(e,a)})),n&&i&&n.split(" ").forEach((function(e){return i.store.off(e,a)}))}}),[i,S]);var w=(0,g.useRef)(!0);(0,g.useEffect)((function(){I.current&&!w.current&&v(f),w.current=!1}),[i,p]);var x=[h,i,d];if(x.t=h,x.i18n=i,x.ready=d,d)return x;if(!d&&!u)return x;throw new Promise((function(e){t.lng?O(i,t.lng,m,(function(){return e()})):C(i,m,(function(){return e()}))}))}const $={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}};function B({servicesManager:e,commandsManager:t}){const{t:n}=W("PanelSUV"),{displaySetService:a,toolGroupService:o,toolbarService:r,hangingProtocolService:i}=e.services,[s,c]=(0,g.useState)($),[l,u]=(0,g.useState)(null),p=e=>{c((t=>{const n={...t};return Object.keys(e).forEach((a=>{"object"==typeof e[a]?n[a]={...t[a],...e[a]}:n[a]=e[a]})),n}))},m=e=>{const n=t.runCommand("getMatchingPTDisplaySet",{viewportMatchDetails:e});if(!n)return;return{ptDisplaySet:n,metadata:t.runCommand("getPTMetadata",{ptDisplaySet:n})}};return(0,g.useEffect)((()=>{const e=a.getActiveDisplaySets(),{viewportMatchDetails:t}=i.getMatchDetails();if(!e.length)return;const n=m(t);if(!n)return;const{ptDisplaySet:o,metadata:r}=n;u(o),c(r)}),[]),(0,g.useEffect)((()=>{const{unsubscribe:e}=i.subscribe(i.EVENTS.PROTOCOL_CHANGED,(({viewportMatchDetails:e})=>{const t=m(e);if(!t)return;const{ptDisplaySet:n,metadata:a}=t;u(n),c(a)}));return()=>{e()}}),[]),g.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},g.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-black text-[13px] font-[300]"},g.createElement(v.PanelSection,{title:n("Patient Information")},g.createElement("div",{className:"flex flex-col"},g.createElement("div",{className:"bg-primary-dark flex flex-col gap-4 p-2"},g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Patient Sex"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.PatientSex||"",onChange:e=>{p({PatientSex:e.target.value})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Weight"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," kg"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.PatientWeight||"",onChange:e=>{p({PatientWeight:e.target.value})},id:"weight-input"}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Total Dose"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," bq"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Half Life"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadionuclideHalfLife:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Injection Time"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadiopharmaceuticalStartTime:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Acquisition Time"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:s.SeriesTime||"",onChange:()=>{}}),g.createElement(v.Button,{className:"!h-[26px] !w-[115px] self-end !p-0",onClick:function(){if(!l)throw new Error("No ptDisplaySet found");S.DicomMetadataStore.updateMetadataForSeries(l.StudyInstanceUID,l.SeriesInstanceUID,s),a.setDisplaySetMetadataInvalidated(l.displaySetInstanceUID),setTimeout((()=>{t.runCommand("resetCrosshairs")}),0)}},"Reload Data"))))))}B.propTypes={servicesManager:h().shape({services:h().shape({measurementService:h().shape({getMeasurements:h().func.isRequired,subscribe:h().func.isRequired,EVENTS:h().object.isRequired,VALUE_TYPES:h().object.isRequired}).isRequired}).isRequired}).isRequired};var H=c(464),z=c(867);function Y({servicesManager:e,commandsManager:t}){const{segmentationService:n,uiNotificationService:a}=e.services,{t:o}=W("PanelSUVExport"),[r,i]=(0,g.useState)((()=>n.getSegmentations())),[s,c]=(0,g.useState)(null);if((0,g.useEffect)((()=>{const e=n.EVENTS.SEGMENTATION_ADDED,t=n.EVENTS.SEGMENTATION_UPDATED,a=n.EVENTS.SEGMENTATION_REMOVED,o=[];return[e,t,a].forEach((e=>{const{unsubscribe:t}=n.subscribe(e,(()=>{const e=n.getSegmentations();i(e);const t=e.filter((e=>e.isActive));c(t[0])}));o.push(t)})),()=>{o.forEach((e=>{e()}))}}),[]),(0,g.useEffect)((()=>{const e=async e=>{const{detail:o}=e,{segmentationId:r}=o;if(!r)return;await(async({segmentationId:e,commandsManager:t,segmentationService:n,config:a={}})=>{const o=n.getSegmentation(e),r={};o.segments=await Promise.all(o.segments.map((async n=>{if(!n||!n.segmentIndex)return n;const a=H.cache.getVolume(e),o=n.segmentIndex,i=t.run("getLesionStats",{labelmap:a,segmentIndex:o}),s=await t.run("calculateSuvPeak",{labelmap:a,segmentIndex:o}),c={lesionStats:i,suvPeak:s,lesionGlyoclysisStats:i.volume*i.meanValue};return n.cachedStats=c,n.displayText=[`SUV Peak: ${s.suvPeak.toFixed(2)}`,`Volume: ${i.volume.toFixed(2)} mm3`],r[o]=c,n})));const i=n.getSegmentations(),s=t.run("calculateTMTV",{segmentations:i});o.cachedStats=Object.assign(o.cachedStats,r,{tmtv:{value:s.toFixed(3),config:{...a}}}),n.addOrUpdateSegmentation({...o},!1,!0)})({segmentationId:r,commandsManager:t,segmentationService:n});const i=n.getSegmentation(r),{cachedStats:s}=i;if(!s)return;const c=s?.[1]?.suvPeak?.suvPeak;Number.isNaN(c)&&a.show({title:"SUV Peak",message:"Segmented volume does not allow SUV Peak calculation",type:"warning"})};return H.eventTarget.addEventListenerDebounced(z.Enums.Events.SEGMENTATION_DATA_MODIFIED,e,250),()=>{H.eventTarget.removeEventListenerDebounced(z.Enums.Events.SEGMENTATION_DATA_MODIFIED,e)}}),[]),!s)return null;const l=s.cachedStats?.tmtv?.value||null,u=s.cachedStats?.tmtv?.config||{},p=[{label:"Export CSV",onClick:()=>{t.runCommand("exportTMTVReportCSV",{segmentations:r,tmtv:l,config:u})},disabled:null===l},{label:"Export RT Report",onClick:()=>{t.runCommand("createTMTVRTReport")},disabled:null===l}];return g.createElement(g.Fragment,null,g.createElement("div",{className:"mt-2 mb-10 flex flex-col"},g.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},null!==l?g.createElement("div",{className:"bg-secondary-dark flex items-baseline justify-between px-2 py-1"},g.createElement("span",{className:"text-base font-bold uppercase tracking-widest text-white"},"TMTV:"),g.createElement("div",{className:"text-white"},`${l} mL`)):null,g.createElement("div",{className:"mt-2 flex justify-center"},g.createElement(v.ActionButtons,{actions:p,t:o})))),g.createElement("div",{className:"absolute bottom-1 left-[50px] flex cursor-pointer items-center justify-center text-blue-400 opacity-50 hover:opacity-80",onClick:()=>{window.open("https://github.com/OHIF/Viewers/blob/master/modes/tmtv/README.md","_blank")}},g.createElement(v.Icon,{width:"15px",height:"15px",name:"info",className:"text-primary-active ml-4 mr-3"}),g.createElement("span",null,"User Guide")))}Y.propTypes={commandsManager:h().shape({runCommand:h().func.isRequired}),servicesManager:h().shape({services:h().shape({segmentationService:h().shape({getSegmentation:h().func.isRequired,getSegmentations:h().func.isRequired,toggleSegmentationVisibility:h().func.isRequired,subscribe:h().func.isRequired,EVENTS:h().object.isRequired}).isRequired}).isRequired}).isRequired};const J=Y;const K=function({commandsManager:e,extensionManager:t,servicesManager:n}){return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:()=>g.createElement(B,{commandsManager:e,servicesManager:n})},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:()=>g.createElement(g.Fragment,null,g.createElement(v.Toolbox,{commandsManager:e,servicesManager:n,extensionManager:t,buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools"}))},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>g.createElement(g.Fragment,null,g.createElement(J,{commandsManager:e,servicesManager:n}))}]},X=["RectangleROIStartEndThreshold"];function Z(e){if(e)return function(e){const t=H.metaData.get("instance",e);return{SOPInstanceUID:t.SOPInstanceUID,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,frameNumber:t.frameNumber||1}}(e)}const Q={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:a,viewportId:o}=e,{metadata:r,data:i,annotationUID:s}=a;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!X.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=Z(l);let f;return f=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m),{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"RectangleROIStartEndThreshold"}}},ee={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:a,viewportId:o}=e,{metadata:r,data:i,annotationUID:s}=a;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!X.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=Z(l);let f;f=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m);const{cachedStats:g}=i;return{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"CircleROIStartEndThreshold"}}},te=(e,t,n)=>({RectangleROIStartEndThreshold:{toAnnotation:Q.toAnnotation,toMeasurement:e=>Q.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:ee.toAnnotation,toMeasurement:e=>ee.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}});function ne(e,t){const{imageData:n}=e,a=n.getPointData().getScalars().getData(),{fn:o,baseValue:r}=function(e){const t=-1/0,n=(e,t)=>(e>t&&(t=e),t);return{fn:n,baseValue:t}}();let i=r;const s=z.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations(t,e),[[c,l],[u,p],[m,d]]=s;for(let e=c;e<=l;e++)for(let t=u;t<=p;t++)for(let r=m;r<=d;r++){i=o(a[n.computeOffsetIndex([e,t,r])],i)}return i}const ae=function(e,t,n){if("range"===n.strategy)return{ptLower:Number(n.ptLower),ptUpper:Number(n.ptUpper),ctLower:Number(n.ctLower),ctUpper:Number(n.ctUpper)};const{weight:a}=n,o=e.map((e=>z.annotation.state.getAnnotation(e)));return{ctLower:-1/0,ctUpper:1/0,ptLower:a*ne(t[0],o),ptUpper:1/0}};const oe=function(e,t=1){const n=z.utilities.segmentation.createMergedLabelmapForIndex(e,t,"mergedLabelmap"),{imageData:a,spacing:o}=n;return.001*a.getPointData().getScalars().getData().reduce(((e,t)=>t>0?e+1:e),0)*o[0]*o[1]*o[2]};var re=c(836),ie=c.n(re),se=c(32);const{datasetToBlob:ce}=ie().data,le=S.classes.MetadataProvider;const ue=function(e){const t=se.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,le,S.DicomMetadataStore),n=ce(t);var a=URL.createObjectURL(n);window.location.assign(a)},pe=S.classes.MetadataProvider,me=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],de=z.Enums.SegmentationRepresentations.Labelmap,fe=(0,H.getWebWorkerManager)(),ge={maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:3e3}},ye=()=>new Worker(new URL(c.p+c.u(607),c.b),{name:"suv-peak-worker"}),he=({servicesManager:e,commandsManager:t,extensionManager:n})=>{const{viewportGridService:a,uiNotificationService:o,displaySetService:r,hangingProtocolService:i,toolGroupService:s,cornerstoneViewportService:c,segmentationService:l}=e.services,u=n.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{getEnabledElement:p}=u.exports;function m(){const{activeViewportId:e}=a.getState(),{element:t}=p(e)||{};return H.getEnabledElement(t)}function d(){const{viewportMatchDetails:e}=i.getMatchDetails(),t=[];return e.forEach((e=>{const{viewportOptions:n}=e,{toolGroupId:a}=n;-1===t.indexOf(a)&&t.push(a)})),t}function f(e){return e.reduce(((e,t)=>{const n=z.annotation.selection.getAnnotationsSelectedByToolName(t);return e.concat(n)}),[])}const g={getMatchingPTDisplaySet:({viewportMatchDetails:e})=>{let t=null;for(const[n,a]of e){const{displaySetsInfo:e}=a,n=e.map((({displaySetInstanceUID:e})=>r.getDisplaySetByUID(e)));if(n&&0!==n.length&&(t=n.find((e=>"PT"===e.Modality)),t))break}return t},getPTMetadata:({ptDisplaySet:e})=>{const t=n.getDataSources()[0].getImageIdsForDisplaySet(e)[0],a=pe.get("instance",t);if("PT"!==a.Modality)return;return{SeriesTime:a.SeriesTime,Modality:a.Modality,PatientSex:a.PatientSex,PatientWeight:a.PatientWeight,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:a.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,RadionuclideHalfLife:a.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,RadiopharmaceuticalStartTime:a.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,RadiopharmaceuticalStartDateTime:a.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime}}},createNewLabelmapFromPT:async({label:e})=>{const{viewportMatchDetails:t}=i.getMatchDetails(),n=g.getMatchingPTDisplaySet({viewportMatchDetails:t});if(!n)return void o.error("No matching PT display set found");const a=l.getSegmentations(),r=await l.createSegmentationForDisplaySet(n.displaySetInstanceUID,{label:`Segmentation ${a.length+1}`}),s=d(),c=de;for(const e of s){const t=!0;await l.addSegmentationRepresentationToToolGroup(e,r,t,c),l.setActiveSegmentationForToolGroup(r,e)}return l.addSegment(r,{segmentIndex:1,properties:{label:"Segment 1"}}),r},setSegmentationActiveForToolGroups:({segmentationId:e})=>{d().forEach((t=>{l.setActiveSegmentationForToolGroup(e,t)}))},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{const r=z.segmentation.state.getSegmentation(e),{representationData:s}=r,{displaySetMatchDetails:c}=i.getMatchDetails(),l=`cornerstoneStreamingImageVolume:${c.get("ctDisplaySet").displaySetInstanceUID}`,{volumeId:u}=s[de],{referencedVolumeId:p}=H.cache.getVolume(u),m=f(me);if(0===m.length)return void o.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});const d=H.cache.getVolume(e);let g=H.cache.getVolume(p);const y=H.cache.getVolume(l);if(!g)throw new Error("No Reference volume found");if(!d)throw new Error("No Reference labelmap found");const h=z.annotation.state.getAnnotation(m[0]),{metadata:{enabledElement:{viewport:v}}}=h;if(!v.hasVolumeId(p)){a.getDisplaySetsUIDsForViewport(v.id).forEach((e=>{const t=H.cache.getVolumes().find((t=>t.volumeId.includes(e)));H.utilities.isEqual(t.dimensions,d.dimensions)&&H.utilities.isEqual(t.spacing,d.spacing)&&(g=t)}))}const{ptLower:S,ptUpper:b,ctLower:T,ctUpper:I}=ae(m,[g,y],t);return z.utilities.segmentation.rectangleROIThresholdVolumeByRange(m,d,[{volume:g,lower:S,upper:b},{volume:y,lower:T,upper:I}],{overwrite:!0,segmentIndex:n})},calculateSuvPeak:async({labelmap:e,segmentIndex:t})=>{fe.registerWorker("suv-peak-worker",ye,ge);const{referencedVolumeId:n}=e,a=H.cache.getVolume(n),o=f(me).map((e=>z.annotation.state.getAnnotation(e))),r={dimensions:e.dimensions,origin:e.origin,direction:e.direction,spacing:e.spacing,scalarData:e.scalarData,metadata:e.metadata},i={dimensions:a.dimensions,origin:a.origin,direction:a.direction,spacing:a.spacing,scalarData:a.scalarData,metadata:a.metadata},s=o.map((e=>({...e,metadata:{...e.metadata,enabledElement:{...e.metadata.enabledElement,viewport:null,renderingEngine:null,element:null}}}))),c=await fe.executeTask("suv-peak-worker","calculateSuvPeak",{labelmapProps:r,referenceVolumeProps:i,annotations:s,segmentIndex:t});return{suvPeak:c.mean,suvMax:c.max,suvMaxIJK:c.maxIJK,suvMaxLPS:c.maxLPS}},getLesionStats:({labelmap:e,segmentIndex:t=1})=>{const{scalarData:n,spacing:a}=e,o=H.cache.getVolume(e.referencedVolumeId).getScalarData();let r=-1/0,i=1/0;const s=[];let c=0;for(let e=0;e<n.length;e++)if(n[e]===t){const t=o[e];s.push(t),t>r&&(r=t),t<i&&(i=t),c++}const l=s.reduce(((e,t)=>e+t),0)/c;return{minValue:i,maxValue:r,meanValue:l,stdValue:Math.sqrt(s.map((e=>(e-l)**2)).reduce(((e,t)=>e+t),0)/c),volume:c*a[0]*a[1]*a[2]*.001}},calculateLesionGlycolysis:({lesionStats:e})=>{const{meanValue:t,volume:n}=e;return{lesionGlyoclysisStats:n*t}},calculateTMTV:({segmentations:e})=>{const t=e.map((e=>l.getLabelmapVolume(e.id)));if(t.length)return oe(t)},exportTMTVReportCSV:({segmentations:e,tmtv:n,config:a,options:o})=>{const r=t.runCommand("getSegmentationCSVReport",{segmentations:e}),i=[{key:"Total Lesion Glycolysis",value:{tlg:g.getTotalLesionGlycolysis({segmentations:e}).toFixed(4)}},{key:"Threshold Configuration",value:{...a}}];void 0!==n&&i.unshift({key:"Total Metabolic Tumor Volume",value:{tmtv:n}}),function(e,t,n={}){const a=e[Object.keys(e)[0]],o=Object.keys(a),r=[o.join(",")];Object.values(e).forEach((e=>{const t=[];o.forEach((n=>{t.push(Array.isArray(e[n])?e[n].join(" "):e[n])})),r.push(t.join(","))})),r.push(""),r.push(""),r.push(""),r.push(`Patient ID,${a.PatientID}`),r.push(`Study Date,${a.StudyDate}`),r.push(""),t.forEach((({key:e,value:t})=>{const n=[];n.push(`${e}`),Object.keys(t).forEach((e=>{n.push(`${e}`),n.push(`${t[e]}`)})),r.push(n.join(","))}));const i=new Blob([r.join("\n")],{type:"text/csv;charset=utf-8"}),s=URL.createObjectURL(i),c=document.createElement("a");c.href=s,c.download=n.filename??`${a.PatientID}_tmtv.csv`,c.click()}(r,i,o)},getTotalLesionGlycolysis:({segmentations:e})=>{const t=e.map((e=>l.getLabelmapVolume(e.id)));let n;try{n=z.utilities.segmentation.createMergedLabelmapForIndex(t)}catch(e){return void console.error("commandsModule::getTotalLesionGlycolysis",e)}const{referencedVolumeId:a,spacing:o}=t[0];a||console.error("commandsModule::getTotalLesionGlycolysis:No referencedVolumeId found");const r=H.cache.getVolume(a),i=n.getScalarData();i.length!==r.getScalarData().length&&console.error("commandsModule::getTotalLesionGlycolysis:Labelmap and ptVolume are not the same size");let s=0,c=0;for(let e=0;e<i.length;e++)0!==i[e]&&(s+=r.getScalarData()[e],c+=1);return s/c*c*o[0]*o[1]*o[2]*.001},setStartSliceForROIThresholdTool:()=>{const{viewport:e}=m(),{focalPoint:t}=e.getCamera(),n=f(me)[0],a=z.annotation.state.getAnnotation(n);a.data.startCoordinate=t,a.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{const{viewport:e}=m(),t=f(me)[0],n=z.annotation.state.getAnnotation(t),a=e.getCamera().focalPoint;n.data.endCoordinate=a,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{const e=z.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach((t=>{const a=e.annotations[t],o=me.reduce(((e,t)=>[...e,...a[t]??[]]),[]);n.push(...o)})),t.runCommand("exportRTReportForAnnotations",{annotations:n})},getSegmentationCSVReport:({segmentations:e})=>{e&&e.length||(e=l.getSegmentations());const t={};for(const n of e){const{id:e,label:a,cachedStats:o}=n,r={id:e,label:a};if(!o){t[e]=r;continue}Object.keys(o).forEach((e=>{"object"!=typeof o[e]?r[e]=o[e]:Object.keys(o[e]).forEach((t=>{r[`${e}_${t}`]=o[e][t]}))}));const i=l.getLabelmapVolume(e);if(!i){t[e]=r;continue}const s=i.referencedVolumeId;r.referencedVolumeId=s;const c=l.getLabelmapVolume(s);if(!c){t[e]=r;continue}if(!c.imageIds||!c.imageIds.length){t[e]=r;continue}const u=c.imageIds[0],p=b().classes.MetadataProvider.get("instance",u);p?t[e]={...r,PatientID:p.PatientID??"000000",PatientName:p.PatientName.Alphabetic,StudyInstanceUID:p.StudyInstanceUID,SeriesInstanceUID:p.SeriesInstanceUID,StudyDate:p.StudyDate}:t[e]=r}return t},exportRTReportForAnnotations:({annotations:e})=>{ue(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{const a=s.getToolGroup(e),{viewportMatchDetails:o}=i.getMatchDetails(),r=g.getMatchingPTDisplaySet({viewportMatchDetails:o});if(!r)return;const l=a.getViewportIds(),u=[];l.forEach((e=>{t.runCommand("setViewportColormap",{viewportId:e,displaySetInstanceUID:r.displaySetInstanceUID,colormap:{name:n}}),u.push(c.getCornerstoneViewport(e))})),u.forEach((e=>{e.render()}))}},y={setEndSliceForROIThresholdTool:{commandFn:g.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:g.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:g.getMatchingPTDisplaySet},getPTMetadata:{commandFn:g.getPTMetadata},createNewLabelmapFromPT:{commandFn:g.createNewLabelmapFromPT},setSegmentationActiveForToolGroups:{commandFn:g.setSegmentationActiveForToolGroups},thresholdSegmentationByRectangleROITool:{commandFn:g.thresholdSegmentationByRectangleROITool},getTotalLesionGlycolysis:{commandFn:g.getTotalLesionGlycolysis},calculateSuvPeak:{commandFn:g.calculateSuvPeak},getLesionStats:{commandFn:g.getLesionStats},calculateTMTV:{commandFn:g.calculateTMTV},exportTMTVReportCSV:{commandFn:g.exportTMTVReportCSV},createTMTVRTReport:{commandFn:g.createTMTVRTReport},getSegmentationCSVReport:{commandFn:g.getSegmentationCSVReport},exportRTReportForAnnotations:{commandFn:g.exportRTReportForAnnotations},setFusionPTColormap:{commandFn:g.setFusionPTColormap}};return{actions:g,definitions:y,defaultContext:"TMTV:CORNERSTONE"}},ve="roi_stat",Se=[{value:ve,label:"Max",placeHolder:"Max"},{value:"range",label:"Range",placeHolder:"Range"}];const be=function({config:e,dispatch:t,runCommand:n}){const{t:a}=W("ROIThresholdConfiguration");return g.createElement("div",{className:"bg-primary-dark flex flex-col space-y-4"},g.createElement("div",{className:"flex items-end space-x-2"},g.createElement("div",{className:"flex w-1/2 flex-col"},g.createElement(v.Select,{label:a("Strategy"),closeMenuOnSelect:!0,className:"border-primary-main mr-2 bg-black text-white ",options:Se,placeholder:Se.find((t=>t.value===e.strategy)).placeHolder,value:e.strategy,onChange:({value:e})=>{t({type:"setStrategy",payload:{strategy:e}})}})),g.createElement("div",{className:"w-1/2"},g.createElement(v.LegacyButtonGroup,null,g.createElement(v.LegacyButton,{size:"initial",className:"px-2 py-2 text-base text-white",color:"primaryLight",variant:"outlined",onClick:()=>n("setStartSliceForROIThresholdTool")},a("Start")),g.createElement(v.LegacyButton,{size:"initial",color:"primaryLight",variant:"outlined",className:"px-2 py-2 text-base text-white",onClick:()=>n("setEndSliceForROIThresholdTool")},a("End"))))),e.strategy===ve&&g.createElement(v.Input,{label:a("Percentage of Max SUV"),labelClassName:"text-[13px] font-inter text-white",className:"border-primary-main bg-black",type:"text",containerClassName:"mr-2",value:e.weight,onChange:e=>{t({type:"setWeight",payload:{weight:e.target.value}})}}),e.strategy!==ve&&g.createElement("div",{className:"mr-2 text-sm"},g.createElement("table",null,g.createElement("tbody",null,g.createElement("tr",{className:"mt-2"},g.createElement("td",{className:"pr-4",colSpan:"3"},g.createElement(v.Label,{className:"font-inter text-[13px] text-white",text:"Lower & Upper Ranges"}))),g.createElement("tr",{className:"mt-2"},g.createElement("td",{className:"pr-4 pt-2 text-center"},g.createElement(v.Label,{className:"text-white",text:"CT"})),g.createElement("td",null,g.createElement("div",{className:"flex justify-between"},g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ctLower,onChange:e=>{t({type:"setThreshold",payload:{ctLower:e.target.value}})}}),g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ctUpper,onChange:e=>{t({type:"setThreshold",payload:{ctUpper:e.target.value}})}})))),g.createElement("tr",null,g.createElement("td",{className:"pr-4 pt-2 text-center"},g.createElement(v.Label,{className:"text-white",text:"PT"})),g.createElement("td",null,g.createElement("div",{className:"flex justify-between"},g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ptLower,onChange:e=>{t({type:"setThreshold",payload:{ptLower:e.target.value}})}}),g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ptUpper,onChange:e=>{t({type:"setThreshold",payload:{ptUpper:e.target.value}})}}))))))))},Te=ve;function Ie(e,t){const{payload:n}=t,{strategy:a,ctLower:o,ctUpper:r,ptLower:i,ptUpper:s,weight:c}=n;switch(t.type){case"setStrategy":return{...e,strategy:a};case"setThreshold":return{...e,ctLower:o||e.ctLower,ctUpper:r||e.ctUpper,ptLower:i||e.ptLower,ptUpper:s||e.ptUpper};case"setWeight":return{...e,weight:c};default:return e}}const we=function({servicesManager:e,commandsManager:t}){const{segmentationService:n}=e.services,[a,o]=(0,g.useState)(null),r=(0,g.useCallback)(((e,n={})=>t.runCommand(e,n)),[t]),[i,s]=(0,g.useReducer)(Ie,{strategy:Te,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),c=(0,g.useCallback)((()=>{const e=a,t=z.segmentation.segmentIndex.getActiveSegmentIndex(e);r("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:i,segmentIndex:t})}),[a,i]);return(0,g.useEffect)((()=>{const e=n.getSegmentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}),[]),(0,g.useEffect)((()=>{const e=n.EVENTS.SEGMENTATION_ADDED,t=n.EVENTS.SEGMENTATION_UPDATED,a=[];return[e,t].forEach((e=>{const{unsubscribe:t}=n.subscribe(e,(()=>{const e=n.getSegmentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}));a.push(t)})),()=>{a.forEach((e=>{e()}))}}),[]),g.createElement("div",{className:"invisible-scrollbar mb-2 flex flex-col overflow-y-auto overflow-x-hidden"},g.createElement(be,{config:i,dispatch:s,runCommand:r}),null!==a&&g.createElement(v.Button,{className:"mt-2 !h-[26px] !w-[75px]",onClick:c},"Run"))};const xe={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a={}}){!function({servicesManager:e}){const{measurementService:t,displaySetService:n,cornerstoneViewportService:a}=e.services;(0,z.addTool)(z.RectangleROIStartEndThresholdTool),(0,z.addTool)(z.CircleROIStartEndThresholdTool);const{RectangleROIStartEndThreshold:o,CircleROIStartEndThreshold:r}=te(t,n,a),i=t.getSource("Cornerstone3DTools","0.1");t.addMapping(i,"RectangleROIStartEndThreshold",o.matchingCriteria,o.toAnnotation,o.toMeasurement),t.addMapping(i,"CircleROIStartEndThreshold",r.matchingCriteria,r.toAnnotation,r.toMeasurement)}({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a})},getToolbarModule:function({commandsManager:e,servicesManager:t}){return[{name:"tmtv.RectangleROIThresholdOptions",defaultComponent:()=>we({commandsManager:e,servicesManager:t})}]},getPanelModule:K,getHangingProtocolModule:f,getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>he({servicesManager:e,commandsManager:t,extensionManager:n})},Ee=xe})(),l})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@ohif/core"),require("@ohif/ui"),require("@ohif/ui-next"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@ohif/core","@ohif/ui","@ohif/ui-next","dcmjs"],t):"object"==typeof exports?exports["ohif-extension-tmtv"]=t(require("@cornerstonejs/adapters"),require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@ohif/core"),require("@ohif/ui"),require("@ohif/ui-next"),require("dcmjs")):e["ohif-extension-tmtv"]=t(e["@cornerstonejs/adapters"],e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@ohif/core"],e["@ohif/ui"],e["@ohif/ui-next"],e.dcmjs)}(globalThis,((e,t,n,a,o,r,i)=>(()=>{var s={337:(e,t,n)=>{"use strict";var a=n(287);function o(){}function r(){}r.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,r,i){if(i!==a){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:r,resetWarningCache:o};return n.PropTypes=n,n}},827:(e,t,n)=>{e.exports=n(337)()},287:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},977:(e,t)=>{"use strict";var n=Symbol.for("react.element"),a=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),l=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),d=Symbol.iterator;var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,y={};function h(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||f}function v(){}function S(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||f}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var b=S.prototype=new v;b.constructor=S,g(b,h.prototype),b.isPureReactComponent=!0;var T=Array.isArray,I=Object.prototype.hasOwnProperty,x={current:null},w={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,a){var o,r={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)I.call(t,o)&&!w.hasOwnProperty(o)&&(r[o]=t[o]);var c=arguments.length-2;if(1===c)r.children=a;else if(1<c){for(var l=Array(c),u=0;u<c;u++)l[u]=arguments[u+2];r.children=l}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===r[o]&&(r[o]=c[o]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:x.current}}function R(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var D=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function O(e,t,o,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case n:case a:c=!0}}if(c)return i=i(c=e),e=""===r?"."+C(c,0):r,T(i)?(o="",null!=e&&(o=e.replace(D,"$&/")+"/"),O(i,t,o,"",(function(e){return e}))):null!=i&&(R(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(D,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",T(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=O(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=d&&e[d]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=O(s=s.value,t,o,u=r+C(s,l++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function N(e,t,n){if(null==e)return e;var a=[],o=0;return O(e,a,"","",(function(e){return t.call(n,e,o++)})),a}function M(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},L={transition:null},k={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:L,ReactCurrentOwner:x};function V(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!R(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=h,t.Fragment=o,t.Profiler=i,t.PureComponent=S,t.StrictMode=r,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=k,t.act=V,t.cloneElement=function(e,t,a){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=g({},e.props),r=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=x.current),void 0!==t.key&&(r=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)I.call(t,l)&&!w.hasOwnProperty(l)&&(o[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)o.children=a;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}return{$$typeof:n,type:e.type,key:r,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=R,t.lazy=function(e){return{$$typeof:m,_payload:{_status:-1,_result:e},_init:M}},t.memo=function(e,t){return{$$typeof:p,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=L.transition;L.transition={};try{e()}finally{L.transition=t}},t.unstable_act=V,t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.3.1"},1:(e,t,n)=>{"use strict";e.exports=n(977)},165:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},32:t=>{"use strict";t.exports=e},464:e=>{"use strict";e.exports=t},867:e=>{"use strict";e.exports=n},762:e=>{"use strict";e.exports=a},369:e=>{"use strict";e.exports=o},750:e=>{"use strict";e.exports=r},836:e=>{"use strict";e.exports=i}},c={};function l(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return s[e](n,n.exports,l),n.exports}l.m=s,l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.u=e=>"dist/"+e+".ohif-extension-tmtv.umd.js",l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.p="/",l.b=document.baseURI||self.location.href;var u={};return(()=>{"use strict";l.r(u),l.d(u,{default:()=>Oe});const e=JSON.parse('{"u2":"@ohif/extension-tmtv"}').u2,t={viewportOptions:{viewportId:"ctAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"ctToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},n={viewportOptions:{viewportId:"ctSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"ctToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},a={viewportOptions:{viewportId:"ctCORONAL",viewportType:"volume",orientation:"coronal",toolGroupId:"ctToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}}]},displaySets:[{id:"ctDisplaySet"}]},o={viewportOptions:{viewportId:"ptAXIAL",viewportType:"volume",background:[1,1,1],orientation:"axial",toolGroupId:"ptToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},r={viewportOptions:{viewportId:"ptSAGITTAL",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},i={viewportOptions:{viewportId:"ptCORONAL",viewportType:"volume",orientation:"coronal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},s={viewportOptions:{viewportId:"fusionAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"fusionToolGroup",initialImageOptions:{preset:"first"},syncGroups:[{type:"cameraPosition",id:"axialSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},c={viewportOptions:{viewportId:"fusionSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"fusionToolGroup",syncGroups:[{type:"cameraPosition",id:"sagittalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},p={viewportOptions:{viewportId:"fusionCoronal",viewportType:"volume",orientation:"coronal",toolGroupId:"fusionToolGroup",syncGroups:[{type:"cameraPosition",id:"coronalSync",source:!0,target:!0},{type:"voi",id:"ctWLSync",source:!1,target:!0},{type:"voi",id:"fusionWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!1,target:!0,options:{syncColormap:!1}}]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.9},{value:1,opacity:.95}]},voi:{custom:"getPTVOIRange"}}}]},m={viewportOptions:{viewportId:"mipSagittal",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"mipToolGroup",syncGroups:[{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1}}],customViewportProps:{hideOverlays:!0}},displaySets:[{options:{blendMode:"MIP",slabThickness:"fullVolume",voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},d={id:"@ohif/extension-tmtv.hangingProtocolModule.ptCT",locked:!0,name:"Default",createdDate:"2021-02-23T19:22:08.894Z",modifiedDate:"2022-10-04T19:22:08.894Z",availableTo:{},editableBy:{},imageLoadStrategy:"interleaveTopToBottom",protocolMatchingRules:[{attribute:"ModalitiesInStudy",constraint:{contains:["CT","PT"]}},{attribute:"StudyDescription",constraint:{contains:"PETCT"}},{attribute:"StudyDescription",constraint:{contains:"PET/CT"}}],displaySetSelectors:{ctDisplaySet:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:{value:"CT"}},required:!0},{attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0},{attribute:"SeriesDescription",constraint:{contains:"CT"}},{attribute:"SeriesDescription",constraint:{contains:"CT WB"}}]},ptDisplaySet:{seriesMatchingRules:[{attribute:"Modality",constraint:{equals:"PT"},required:!0},{attribute:"isReconstructable",constraint:{equals:{value:!0}},required:!0},{attribute:"SeriesDescription",constraint:{contains:"Corrected"}},{weight:2,attribute:"SeriesDescription",constraint:{doesNotContain:{value:"Uncorrected"}}}]}},stages:[{name:"default",viewportStructure:{layoutType:"grid",properties:{rows:3,columns:4,layoutOptions:[{x:0,y:0,width:1/4,height:1/3},{x:1/4,y:0,width:1/4,height:1/3},{x:.5,y:0,width:1/4,height:1/3},{x:0,y:1/3,width:1/4,height:1/3},{x:1/4,y:1/3,width:1/4,height:1/3},{x:.5,y:1/3,width:1/4,height:1/3},{x:0,y:2/3,width:1/4,height:1/3},{x:1/4,y:2/3,width:1/4,height:1/3},{x:.5,y:2/3,width:1/4,height:1/3},{x:3/4,y:0,width:1/4,height:1}]}},viewports:[t,n,a,o,r,i,s,c,p,m],createdDate:"2021-02-23T18:32:42.850Z"},{name:"Fusion 2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[t,s,o,m]},{name:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[t,n,a,o,r,i]},{name:"2x4-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:4,layoutOptions:[{x:0,y:0,width:1/4,height:.5},{x:1/4,y:0,width:1/4,height:.5},{x:.5,y:0,width:1/4,height:.5},{x:3/4,y:0,width:1/4,height:1},{x:0,y:.5,width:1/4,height:.5},{x:1/4,y:.5,width:1/4,height:.5},{x:.5,y:.5,width:1/4,height:.5}]}},viewports:[i,r,o,m,p,c,s]}],numberOfPriorsReferenced:-1};const f=function(){return[{name:d.id,protocol:d}]};var g=l(1),y=l(827),h=l.n(y),v=l(369),S=l(762),b=l.n(S);function T(e){return T="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},T(e)}function I(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,t||"default");if("object"!=T(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==T(t)?t:t+""}function x(e,t,n){return(t=I(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}l(165);Object.create(null);function w(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),a=0;a<t;a++)n[a]=arguments[a];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var E={};function R(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&E[t[0]]||("string"==typeof t[0]&&(E[t[0]]=new Date),w.apply(void 0,t))}var D=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function C(e,t,n){e.loadNamespaces(t,D(e,n))}function O(e,t,n,a){"string"==typeof n&&(n=[n]),n.forEach((function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,D(e,a))}var N=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,M={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},P=function(e){return M[e]};var L,k={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(N,P)}};function V(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,I(a.key),a)}}var j=(0,g.createContext)(),U=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&V(e.prototype,t),n&&V(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,o,r,i,s=[],c=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(s.push(a.value),s.length!==t);c=!0);}catch(e){l=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?A(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function q(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_(Object(n),!0).forEach((function(t){x(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var G=function(e,t){var n=(0,g.useRef)();return(0,g.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function W(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,a=(0,g.useContext)(j)||{},o=a.i18n,r=a.defaultNS,i=n||o||L;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new U),!i){R("You will need to pass in an i18next instance by using initReactI18next");var s=function(e,t){return"string"==typeof t?t:t&&"object"===T(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},c=[s,{},!1];return c.t=s,c.i18n={},c.ready=!1,c}i.options.react&&void 0!==i.options.react.wait&&R("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=q(q(q({},k),i.options.react),t),u=l.useSuspense,p=l.keyPrefix,m=e||r||i.options&&i.options.defaultNS;m="string"==typeof m?[m]:m||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(m);var d=(i.isInitialized||i.initializedStoreOnce)&&m.every((function(e){return function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return t.languages&&t.languages.length?void 0!==t.options.ignoreJSONStructure?t.hasLoadedNamespace(e,{lng:n.lng,precheck:function(t,a){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=t.languages[0],o=!!t.options&&t.options.fallbackLng,r=t.languages[t.languages.length-1];if("cimode"===a.toLowerCase())return!0;var i=function(e,n){var a=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===a||2===a};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!i(t.isLanguageChangingTo,e)||!t.hasResourceBundle(a,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!i(a,e)||o&&!i(r,e)))}(e,t,n):(R("i18n.languages were undefined or empty",t.languages),!0)}(e,i,l)}));function f(){return i.getFixedT(t.lng||null,"fallback"===l.nsMode?m:m[0],p)}var y=F((0,g.useState)(f),2),h=y[0],v=y[1],S=m.join();t.lng&&(S="".concat(t.lng).concat(S));var b=G(S),I=(0,g.useRef)(!0);(0,g.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function a(){I.current&&v(f)}return I.current=!0,d||u||(t.lng?O(i,t.lng,m,(function(){I.current&&v(f)})):C(i,m,(function(){I.current&&v(f)}))),d&&b&&b!==S&&I.current&&v(f),e&&i&&i.on(e,a),n&&i&&i.store.on(n,a),function(){I.current=!1,e&&i&&e.split(" ").forEach((function(e){return i.off(e,a)})),n&&i&&n.split(" ").forEach((function(e){return i.store.off(e,a)}))}}),[i,S]);var x=(0,g.useRef)(!0);(0,g.useEffect)((function(){I.current&&!x.current&&v(f),x.current=!1}),[i,p]);var w=[h,i,d];if(w.t=h,w.i18n=i,w.ready=d,d)return w;if(!d&&!u)return w;throw new Promise((function(e){t.lng?O(i,t.lng,m,(function(){return e()})):C(i,m,(function(){return e()}))}))}var $=l(750);const B={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}};function H({servicesManager:e,commandsManager:t,renderHeader:n,getCloseIcon:a,tab:o}){const{t:r}=W("PanelSUV"),{displaySetService:i,toolGroupService:s,toolbarService:c,hangingProtocolService:l}=e.services,[u,p]=(0,g.useState)(B),[m,d]=(0,g.useState)(null),f=e=>{p((t=>{const n={...t};return Object.keys(e).forEach((a=>{"object"==typeof e[a]?n[a]={...t[a],...e[a]}:n[a]=e[a]})),n}))},y=e=>{const n=t.runCommand("getMatchingPTDisplaySet",{viewportMatchDetails:e});if(!n)return;return{ptDisplaySet:n,metadata:t.runCommand("getPTMetadata",{ptDisplaySet:n})}};return(0,g.useEffect)((()=>{const e=i.getActiveDisplaySets(),{viewportMatchDetails:t}=l.getMatchDetails();if(!e.length)return;const n=y(t);if(!n)return;const{ptDisplaySet:a,metadata:o}=n;d(a),p(o)}),[]),(0,g.useEffect)((()=>{const{unsubscribe:e}=l.subscribe(l.EVENTS.PROTOCOL_CHANGED,(({viewportMatchDetails:e})=>{const t=y(e);if(!t)return;const{ptDisplaySet:n,metadata:a}=t;d(n),p(a)}));return()=>{e()}}),[]),g.createElement(g.Fragment,null,n&&g.createElement(g.Fragment,null,g.createElement("div",{className:"bg-primary-dark flex select-none rounded-t pt-1.5 pb-[2px]"},g.createElement("div",{className:"flex h-[24px] w-full cursor-pointer select-none justify-center self-center text-[14px]"},g.createElement("div",{className:"text-primary-active flex grow cursor-pointer select-none justify-center self-center text-[13px]"},g.createElement("span",null,o.label))),a()),g.createElement($.Separator,{orientation:"horizontal",className:"bg-black",thickness:"2px"})),g.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},g.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-black text-[13px] font-[300]"},g.createElement(v.PanelSection,{title:r("Patient Information")},g.createElement("div",{className:"flex flex-col"},g.createElement("div",{className:"bg-primary-dark flex flex-col gap-4 p-2"},g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Patient Sex"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.PatientSex||"",onChange:e=>{f({PatientSex:e.target.value})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Weight"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," kg"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.PatientWeight||"",onChange:e=>{f({PatientWeight:e.target.value})},id:"weight-input"}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Total Dose"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," bq"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||"",onChange:e=>{f({RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Half Life"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||"",onChange:e=>{f({RadiopharmaceuticalInformationSequence:{RadionuclideHalfLife:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Injection Time"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime||"",onChange:e=>{f({RadiopharmaceuticalInformationSequence:{RadiopharmaceuticalStartTime:e.target.value}})}}),g.createElement(v.Input,{containerClassName:"!flex-row !justify-between items-center",label:r("Acquisition Time"),labelChildren:g.createElement("span",{className:"text-aqua-pale"}," s"),labelClassName:"text-[13px] font-inter text-white",className:"!m-0 !h-[26px] !w-[117px]",value:u.SeriesTime||"",onChange:()=>{}}),g.createElement(v.Button,{className:"!h-[26px] !w-[115px] self-end !p-0",onClick:function(){if(!m)throw new Error("No ptDisplaySet found");S.DicomMetadataStore.updateMetadataForSeries(m.StudyInstanceUID,m.SeriesInstanceUID,u),i.setDisplaySetMetadataInvalidated(m.displaySetInstanceUID),setTimeout((()=>{t.runCommand("resetCrosshairs")}),0)}},"Reload Data")))))))}H.propTypes={servicesManager:h().shape({services:h().shape({measurementService:h().shape({getMeasurements:h().func.isRequired,subscribe:h().func.isRequired,EVENTS:h().object.isRequired,VALUE_TYPES:h().object.isRequired}).isRequired}).isRequired}).isRequired};var z=l(464),Y=l(867);function J({servicesManager:e,commandsManager:t}){const{segmentationService:n,uiNotificationService:a}=e.services,{t:o}=W("PanelSUVExport"),[r,i]=(0,g.useState)((()=>n.getSegmentations())),[s,c]=(0,g.useState)(null);if((0,g.useEffect)((()=>{const e=n.EVENTS.SEGMENTATION_ADDED,t=n.EVENTS.SEGMENTATION_UPDATED,a=n.EVENTS.SEGMENTATION_REMOVED,o=[];return[e,t,a].forEach((e=>{const{unsubscribe:t}=n.subscribe(e,(()=>{const e=n.getSegmentations();i(e);const t=e.filter((e=>e.isActive));c(t[0])}));o.push(t)})),()=>{o.forEach((e=>{e()}))}}),[]),(0,g.useEffect)((()=>{const e=async e=>{const{detail:o}=e,{segmentationId:r}=o;if(!r)return;await(async({segmentationId:e,commandsManager:t,segmentationService:n,config:a={}})=>{const o=n.getSegmentation(e),r={};o.segments=await Promise.all(o.segments.map((async n=>{if(!n||!n.segmentIndex)return n;const a=z.cache.getVolume(e),o=n.segmentIndex,i=t.run("getLesionStats",{labelmap:a,segmentIndex:o}),s=await t.run("calculateSuvPeak",{labelmap:a,segmentIndex:o}),c={lesionStats:i,suvPeak:s,lesionGlyoclysisStats:i.volume*i.meanValue};return n.cachedStats=c,n.displayText=[`SUV Peak: ${s.suvPeak.toFixed(2)}`,`Volume: ${i.volume.toFixed(2)} mm3`],r[o]=c,n})));const i=n.getSegmentations(),s=t.run("calculateTMTV",{segmentations:i});o.cachedStats=Object.assign(o.cachedStats,r,{tmtv:{value:s.toFixed(3),config:{...a}}}),n.addOrUpdateSegmentation({...o},!1,!0)})({segmentationId:r,commandsManager:t,segmentationService:n});const i=n.getSegmentation(r),{cachedStats:s}=i;if(!s)return;const c=s?.[1]?.suvPeak?.suvPeak;Number.isNaN(c)&&a.show({title:"SUV Peak",message:"Segmented volume does not allow SUV Peak calculation",type:"warning"})};return z.eventTarget.addEventListenerDebounced(Y.Enums.Events.SEGMENTATION_DATA_MODIFIED,e,250),()=>{z.eventTarget.removeEventListenerDebounced(Y.Enums.Events.SEGMENTATION_DATA_MODIFIED,e)}}),[]),!s)return null;const l=s.cachedStats?.tmtv?.value||null,u=s.cachedStats?.tmtv?.config||{},p=[{label:"Export CSV",onClick:()=>{t.runCommand("exportTMTVReportCSV",{segmentations:r,tmtv:l,config:u})},disabled:null===l},{label:"Export RT Report",onClick:()=>{t.runCommand("createTMTVRTReport")},disabled:null===l}];return g.createElement(g.Fragment,null,g.createElement("div",{className:"mt-2 mb-10 flex flex-col"},g.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},null!==l?g.createElement("div",{className:"bg-secondary-dark flex items-baseline justify-between px-2 py-1"},g.createElement("span",{className:"text-base font-bold uppercase tracking-widest text-white"},"TMTV:"),g.createElement("div",{className:"text-white"},`${l} mL`)):null,g.createElement("div",{className:"mt-2 flex justify-center"},g.createElement(v.ActionButtons,{actions:p,t:o})))),g.createElement("div",{className:"absolute bottom-1 left-[50px] flex cursor-pointer items-center justify-center text-blue-400 opacity-50 hover:opacity-80",onClick:()=>{window.open("https://github.com/OHIF/Viewers/blob/master/modes/tmtv/README.md","_blank")}},g.createElement(v.Icon,{width:"15px",height:"15px",name:"info",className:"text-primary-active ml-4 mr-3"}),g.createElement("span",null,"User Guide")))}J.propTypes={commandsManager:h().shape({runCommand:h().func.isRequired}),servicesManager:h().shape({services:h().shape({segmentationService:h().shape({getSegmentation:h().func.isRequired,getSegmentations:h().func.isRequired,toggleSegmentationVisibility:h().func.isRequired,subscribe:h().func.isRequired,EVENTS:h().object.isRequired}).isRequired}).isRequired}).isRequired};const K=J,X=(0,g.createContext)(null),{Provider:Z}=X;function Q({children:e,value:t}){const[n,a]=(0,g.useState)(t);return g.createElement(Z,{value:[n]},e)}Q.propTypes={children:h().any,value:h().any};const ee=function({commandsManager:e,extensionManager:t,servicesManager:n}){return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:({renderHeader:a,getCloseIcon:o,tab:r})=>g.createElement(H,{commandsManager:e,servicesManager:n,extensionManager:t,renderHeader:a,getCloseIcon:o,tab:r})},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:({renderHeader:a,getCloseIcon:o,tab:r})=>{const[i]=(0,g.useContext)(X),s=i.useExperimentalUI?$.Toolbox:v.Toolbox;return g.createElement(g.Fragment,null,g.createElement(s,{commandsManager:e,servicesManager:n,extensionManager:t,buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools",renderHeader:a,getCloseIcon:o,tab:r}))}},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>g.createElement(g.Fragment,null,g.createElement(K,{commandsManager:e,servicesManager:n}))}]},te=["RectangleROIStartEndThreshold"];function ne(e){if(e)return function(e){const t=z.metaData.get("instance",e);return{SOPInstanceUID:t.SOPInstanceUID,SeriesInstanceUID:t.SeriesInstanceUID,StudyInstanceUID:t.StudyInstanceUID,frameNumber:t.frameNumber||1}}(e)}const ae={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:a,viewportId:o}=e,{metadata:r,data:i,annotationUID:s}=a;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!te.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=ne(l);let f;return f=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m),{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"RectangleROIStartEndThreshold"}}},oe={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:a,viewportId:o}=e,{metadata:r,data:i,annotationUID:s}=a;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!te.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=ne(l);let f;f=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m);const{cachedStats:g}=i;return{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"CircleROIStartEndThreshold"}}},re=(e,t,n)=>({RectangleROIStartEndThreshold:{toAnnotation:ae.toAnnotation,toMeasurement:e=>ae.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:oe.toAnnotation,toMeasurement:e=>oe.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}});function ie(e,t){const{imageData:n}=e,a=n.getPointData().getScalars().getData(),{fn:o,baseValue:r}=function(e){const t=-1/0,n=(e,t)=>(e>t&&(t=e),t);return{fn:n,baseValue:t}}();let i=r;const s=Y.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations(t,e),[[c,l],[u,p],[m,d]]=s;for(let e=c;e<=l;e++)for(let t=u;t<=p;t++)for(let r=m;r<=d;r++){i=o(a[n.computeOffsetIndex([e,t,r])],i)}return i}const se=function(e,t,n){if("range"===n.strategy)return{ptLower:Number(n.ptLower),ptUpper:Number(n.ptUpper),ctLower:Number(n.ctLower),ctUpper:Number(n.ctUpper)};const{weight:a}=n,o=e.map((e=>Y.annotation.state.getAnnotation(e)));return{ctLower:-1/0,ctUpper:1/0,ptLower:a*ie(t[0],o),ptUpper:1/0}};const ce=function(e,t=1){const n=Y.utilities.segmentation.createMergedLabelmapForIndex(e,t,"mergedLabelmap"),{imageData:a,spacing:o}=n;return.001*a.getPointData().getScalars().getData().reduce(((e,t)=>t>0?e+1:e),0)*o[0]*o[1]*o[2]};var le=l(836),ue=l.n(le),pe=l(32);const{datasetToBlob:me}=ue().data,de=S.classes.MetadataProvider;const fe=function(e){const t=pe.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,de,S.DicomMetadataStore),n=me(t);var a=URL.createObjectURL(n);window.location.assign(a)},ge=S.classes.MetadataProvider,ye=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],he=Y.Enums.SegmentationRepresentations.Labelmap,ve=(0,z.getWebWorkerManager)(),Se={maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:3e3}},be=()=>new Worker(new URL(l.p+l.u(607),l.b),{name:"suv-peak-worker"}),Te=({servicesManager:e,commandsManager:t,extensionManager:n})=>{const{viewportGridService:a,uiNotificationService:o,displaySetService:r,hangingProtocolService:i,toolGroupService:s,cornerstoneViewportService:c,segmentationService:l}=e.services,u=n.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),{getEnabledElement:p}=u.exports;function m(){const{activeViewportId:e}=a.getState(),{element:t}=p(e)||{};return z.getEnabledElement(t)}function d(){const{viewportMatchDetails:e}=i.getMatchDetails(),t=[];return e.forEach((e=>{const{viewportOptions:n}=e,{toolGroupId:a}=n;-1===t.indexOf(a)&&t.push(a)})),t}function f(e){return e.reduce(((e,t)=>{const n=Y.annotation.selection.getAnnotationsSelectedByToolName(t);return e.concat(n)}),[])}const g={getMatchingPTDisplaySet:({viewportMatchDetails:e})=>{let t=null;for(const[n,a]of e){const{displaySetsInfo:e}=a,n=e.map((({displaySetInstanceUID:e})=>r.getDisplaySetByUID(e)));if(n&&0!==n.length&&(t=n.find((e=>"PT"===e.Modality)),t))break}return t},getPTMetadata:({ptDisplaySet:e})=>{const t=n.getDataSources()[0].getImageIdsForDisplaySet(e)[0],a=ge.get("instance",t);if("PT"!==a.Modality)return;return{SeriesTime:a.SeriesTime,Modality:a.Modality,PatientSex:a.PatientSex,PatientWeight:a.PatientWeight,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:a.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,RadionuclideHalfLife:a.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,RadiopharmaceuticalStartTime:a.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,RadiopharmaceuticalStartDateTime:a.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime}}},createNewLabelmapFromPT:async({label:e})=>{const{viewportMatchDetails:t}=i.getMatchDetails(),n=g.getMatchingPTDisplaySet({viewportMatchDetails:t});if(!n)return void o.error("No matching PT display set found");const a=l.getSegmentations(),r=await l.createSegmentationForDisplaySet(n.displaySetInstanceUID,{label:`Segmentation ${a.length+1}`}),s=d(),c=he;for(const e of s){const t=!0;await l.addSegmentationRepresentationToToolGroup(e,r,t,c),l.setActiveSegmentationForToolGroup(r,e)}return l.addSegment(r,{segmentIndex:1,properties:{label:"Segment 1"}}),r},setSegmentationActiveForToolGroups:({segmentationId:e})=>{d().forEach((t=>{l.setActiveSegmentationForToolGroup(e,t)}))},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{const r=Y.segmentation.state.getSegmentation(e),{representationData:s}=r,{displaySetMatchDetails:c}=i.getMatchDetails(),l=`cornerstoneStreamingImageVolume:${c.get("ctDisplaySet").displaySetInstanceUID}`,{volumeId:u}=s[he],{referencedVolumeId:p}=z.cache.getVolume(u),m=f(ye);if(0===m.length)return void o.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});const d=z.cache.getVolume(e);let g=z.cache.getVolume(p);const y=z.cache.getVolume(l);if(!g)throw new Error("No Reference volume found");if(!d)throw new Error("No Reference labelmap found");const h=Y.annotation.state.getAnnotation(m[0]),{metadata:{enabledElement:{viewport:v}}}=h;if(!v.hasVolumeId(p)){a.getDisplaySetsUIDsForViewport(v.id).forEach((e=>{const t=z.cache.getVolumes().find((t=>t.volumeId.includes(e)));z.utilities.isEqual(t.dimensions,d.dimensions)&&z.utilities.isEqual(t.spacing,d.spacing)&&(g=t)}))}const{ptLower:S,ptUpper:b,ctLower:T,ctUpper:I}=se(m,[g,y],t);return Y.utilities.segmentation.rectangleROIThresholdVolumeByRange(m,d,[{volume:g,lower:S,upper:b},{volume:y,lower:T,upper:I}],{overwrite:!0,segmentIndex:n})},calculateSuvPeak:async({labelmap:e,segmentIndex:t})=>{ve.registerWorker("suv-peak-worker",be,Se);const{referencedVolumeId:n}=e,a=z.cache.getVolume(n),o=f(ye).map((e=>Y.annotation.state.getAnnotation(e))),r={dimensions:e.dimensions,origin:e.origin,direction:e.direction,spacing:e.spacing,scalarData:e.scalarData,metadata:e.metadata},i={dimensions:a.dimensions,origin:a.origin,direction:a.direction,spacing:a.spacing,scalarData:a.scalarData,metadata:a.metadata},s=o.map((e=>({...e,metadata:{...e.metadata,enabledElement:{...e.metadata.enabledElement,viewport:null,renderingEngine:null,element:null}}}))),c=await ve.executeTask("suv-peak-worker","calculateSuvPeak",{labelmapProps:r,referenceVolumeProps:i,annotations:s,segmentIndex:t});return{suvPeak:c.mean,suvMax:c.max,suvMaxIJK:c.maxIJK,suvMaxLPS:c.maxLPS}},getLesionStats:({labelmap:e,segmentIndex:t=1})=>{const{scalarData:n,spacing:a}=e,o=z.cache.getVolume(e.referencedVolumeId).getScalarData();let r=-1/0,i=1/0;const s=[];let c=0;for(let e=0;e<n.length;e++)if(n[e]===t){const t=o[e];s.push(t),t>r&&(r=t),t<i&&(i=t),c++}const l=s.reduce(((e,t)=>e+t),0)/c;return{minValue:i,maxValue:r,meanValue:l,stdValue:Math.sqrt(s.map((e=>(e-l)**2)).reduce(((e,t)=>e+t),0)/c),volume:c*a[0]*a[1]*a[2]*.001}},calculateLesionGlycolysis:({lesionStats:e})=>{const{meanValue:t,volume:n}=e;return{lesionGlyoclysisStats:n*t}},calculateTMTV:({segmentations:e})=>{const t=e.map((e=>l.getLabelmapVolume(e.id)));if(t.length)return ce(t)},exportTMTVReportCSV:({segmentations:e,tmtv:n,config:a,options:o})=>{const r=t.runCommand("getSegmentationCSVReport",{segmentations:e}),i=[{key:"Total Lesion Glycolysis",value:{tlg:g.getTotalLesionGlycolysis({segmentations:e}).toFixed(4)}},{key:"Threshold Configuration",value:{...a}}];void 0!==n&&i.unshift({key:"Total Metabolic Tumor Volume",value:{tmtv:n}}),function(e,t,n={}){const a=e[Object.keys(e)[0]],o=Object.keys(a),r=[o.join(",")];Object.values(e).forEach((e=>{const t=[];o.forEach((n=>{t.push(Array.isArray(e[n])?e[n].join(" "):e[n])})),r.push(t.join(","))})),r.push(""),r.push(""),r.push(""),r.push(`Patient ID,${a.PatientID}`),r.push(`Study Date,${a.StudyDate}`),r.push(""),t.forEach((({key:e,value:t})=>{const n=[];n.push(`${e}`),Object.keys(t).forEach((e=>{n.push(`${e}`),n.push(`${t[e]}`)})),r.push(n.join(","))}));const i=new Blob([r.join("\n")],{type:"text/csv;charset=utf-8"}),s=URL.createObjectURL(i),c=document.createElement("a");c.href=s,c.download=n.filename??`${a.PatientID}_tmtv.csv`,c.click()}(r,i,o)},getTotalLesionGlycolysis:({segmentations:e})=>{const t=e.map((e=>l.getLabelmapVolume(e.id)));let n;try{n=Y.utilities.segmentation.createMergedLabelmapForIndex(t)}catch(e){return void console.error("commandsModule::getTotalLesionGlycolysis",e)}const{referencedVolumeId:a,spacing:o}=t[0];a||console.error("commandsModule::getTotalLesionGlycolysis:No referencedVolumeId found");const r=z.cache.getVolume(a),i=n.getScalarData();i.length!==r.getScalarData().length&&console.error("commandsModule::getTotalLesionGlycolysis:Labelmap and ptVolume are not the same size");let s=0,c=0;for(let e=0;e<i.length;e++)0!==i[e]&&(s+=r.getScalarData()[e],c+=1);return s/c*c*o[0]*o[1]*o[2]*.001},setStartSliceForROIThresholdTool:()=>{const{viewport:e}=m(),{focalPoint:t}=e.getCamera(),n=f(ye)[0],a=Y.annotation.state.getAnnotation(n);a.data.startCoordinate=t,a.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{const{viewport:e}=m(),t=f(ye)[0],n=Y.annotation.state.getAnnotation(t),a=e.getCamera().focalPoint;n.data.endCoordinate=a,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{const e=Y.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach((t=>{const a=e.annotations[t],o=ye.reduce(((e,t)=>[...e,...a[t]??[]]),[]);n.push(...o)})),t.runCommand("exportRTReportForAnnotations",{annotations:n})},getSegmentationCSVReport:({segmentations:e})=>{e&&e.length||(e=l.getSegmentations());const t={};for(const n of e){const{id:e,label:a,cachedStats:o}=n,r={id:e,label:a};if(!o){t[e]=r;continue}Object.keys(o).forEach((e=>{"object"!=typeof o[e]?r[e]=o[e]:Object.keys(o[e]).forEach((t=>{r[`${e}_${t}`]=o[e][t]}))}));const i=l.getLabelmapVolume(e);if(!i){t[e]=r;continue}const s=i.referencedVolumeId;r.referencedVolumeId=s;const c=l.getLabelmapVolume(s);if(!c){t[e]=r;continue}if(!c.imageIds||!c.imageIds.length){t[e]=r;continue}const u=c.imageIds[0],p=b().classes.MetadataProvider.get("instance",u);p?t[e]={...r,PatientID:p.PatientID??"000000",PatientName:p.PatientName.Alphabetic,StudyInstanceUID:p.StudyInstanceUID,SeriesInstanceUID:p.SeriesInstanceUID,StudyDate:p.StudyDate}:t[e]=r}return t},exportRTReportForAnnotations:({annotations:e})=>{fe(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{const a=s.getToolGroup(e),{viewportMatchDetails:o}=i.getMatchDetails(),r=g.getMatchingPTDisplaySet({viewportMatchDetails:o});if(!r)return;const l=a.getViewportIds(),u=[];l.forEach((e=>{t.runCommand("setViewportColormap",{viewportId:e,displaySetInstanceUID:r.displaySetInstanceUID,colormap:{name:n}}),u.push(c.getCornerstoneViewport(e))})),u.forEach((e=>{e.render()}))}},y={setEndSliceForROIThresholdTool:{commandFn:g.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:g.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:g.getMatchingPTDisplaySet},getPTMetadata:{commandFn:g.getPTMetadata},createNewLabelmapFromPT:{commandFn:g.createNewLabelmapFromPT},setSegmentationActiveForToolGroups:{commandFn:g.setSegmentationActiveForToolGroups},thresholdSegmentationByRectangleROITool:{commandFn:g.thresholdSegmentationByRectangleROITool},getTotalLesionGlycolysis:{commandFn:g.getTotalLesionGlycolysis},calculateSuvPeak:{commandFn:g.calculateSuvPeak},getLesionStats:{commandFn:g.getLesionStats},calculateTMTV:{commandFn:g.calculateTMTV},exportTMTVReportCSV:{commandFn:g.exportTMTVReportCSV},createTMTVRTReport:{commandFn:g.createTMTVRTReport},getSegmentationCSVReport:{commandFn:g.getSegmentationCSVReport},exportRTReportForAnnotations:{commandFn:g.exportRTReportForAnnotations},setFusionPTColormap:{commandFn:g.setFusionPTColormap}};return{actions:g,definitions:y,defaultContext:"TMTV:CORNERSTONE"}},Ie="roi_stat",xe=[{value:Ie,label:"Max",placeHolder:"Max"},{value:"range",label:"Range",placeHolder:"Range"}];const we=function({config:e,dispatch:t,runCommand:n}){const{t:a}=W("ROIThresholdConfiguration");return g.createElement("div",{className:"bg-primary-dark flex flex-col space-y-4"},g.createElement("div",{className:"flex items-end space-x-2"},g.createElement("div",{className:"flex w-1/2 flex-col"},g.createElement(v.Select,{label:a("Strategy"),closeMenuOnSelect:!0,className:"border-primary-main mr-2 bg-black text-white ",options:xe,placeholder:xe.find((t=>t.value===e.strategy)).placeHolder,value:e.strategy,onChange:({value:e})=>{t({type:"setStrategy",payload:{strategy:e}})}})),g.createElement("div",{className:"w-1/2"},g.createElement(v.LegacyButtonGroup,null,g.createElement(v.LegacyButton,{size:"initial",className:"px-2 py-2 text-base text-white",color:"primaryLight",variant:"outlined",onClick:()=>n("setStartSliceForROIThresholdTool")},a("Start")),g.createElement(v.LegacyButton,{size:"initial",color:"primaryLight",variant:"outlined",className:"px-2 py-2 text-base text-white",onClick:()=>n("setEndSliceForROIThresholdTool")},a("End"))))),e.strategy===Ie&&g.createElement(v.Input,{label:a("Percentage of Max SUV"),labelClassName:"text-[13px] font-inter text-white",className:"border-primary-main bg-black",type:"text",containerClassName:"mr-2",value:e.weight,onChange:e=>{t({type:"setWeight",payload:{weight:e.target.value}})}}),e.strategy!==Ie&&g.createElement("div",{className:"mr-2 text-sm"},g.createElement("table",null,g.createElement("tbody",null,g.createElement("tr",{className:"mt-2"},g.createElement("td",{className:"pr-4",colSpan:"3"},g.createElement(v.Label,{className:"font-inter text-[13px] text-white",text:"Lower & Upper Ranges"}))),g.createElement("tr",{className:"mt-2"},g.createElement("td",{className:"pr-4 pt-2 text-center"},g.createElement(v.Label,{className:"text-white",text:"CT"})),g.createElement("td",null,g.createElement("div",{className:"flex justify-between"},g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ctLower,onChange:e=>{t({type:"setThreshold",payload:{ctLower:e.target.value}})}}),g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ctUpper,onChange:e=>{t({type:"setThreshold",payload:{ctUpper:e.target.value}})}})))),g.createElement("tr",null,g.createElement("td",{className:"pr-4 pt-2 text-center"},g.createElement(v.Label,{className:"text-white",text:"PT"})),g.createElement("td",null,g.createElement("div",{className:"flex justify-between"},g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ptLower,onChange:e=>{t({type:"setThreshold",payload:{ptLower:e.target.value}})}}),g.createElement(v.Input,{label:a(""),labelClassName:"text-white",className:"border-primary-main mt-2 bg-black",type:"text",containerClassName:"mr-2",value:e.ptUpper,onChange:e=>{t({type:"setThreshold",payload:{ptUpper:e.target.value}})}}))))))))},Ee=Ie;function Re(e,t){const{payload:n}=t,{strategy:a,ctLower:o,ctUpper:r,ptLower:i,ptUpper:s,weight:c}=n;switch(t.type){case"setStrategy":return{...e,strategy:a};case"setThreshold":return{...e,ctLower:o||e.ctLower,ctUpper:r||e.ctUpper,ptLower:i||e.ptLower,ptUpper:s||e.ptUpper};case"setWeight":return{...e,weight:c};default:return e}}const De=function({servicesManager:e,commandsManager:t}){const{segmentationService:n}=e.services,[a,o]=(0,g.useState)(null),r=(0,g.useCallback)(((e,n={})=>t.runCommand(e,n)),[t]),[i,s]=(0,g.useReducer)(Re,{strategy:Ee,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),c=(0,g.useCallback)((()=>{const e=a,t=Y.segmentation.segmentIndex.getActiveSegmentIndex(e);r("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:i,segmentIndex:t})}),[a,i]);return(0,g.useEffect)((()=>{const e=n.getSegmentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}),[]),(0,g.useEffect)((()=>{const e=n.EVENTS.SEGMENTATION_ADDED,t=n.EVENTS.SEGMENTATION_UPDATED,a=[];return[e,t].forEach((e=>{const{unsubscribe:t}=n.subscribe(e,(()=>{const e=n.getSegmentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}));a.push(t)})),()=>{a.forEach((e=>{e()}))}}),[]),g.createElement("div",{className:"invisible-scrollbar mb-2 flex flex-col overflow-y-auto overflow-x-hidden"},g.createElement(we,{config:i,dispatch:s,runCommand:r}),null!==a&&g.createElement(v.Button,{className:"mt-2 !h-[26px] !w-[75px]",onClick:c},"Run"))};const Ce={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a={}}){!function({servicesManager:e}){const{measurementService:t,displaySetService:n,cornerstoneViewportService:a}=e.services;(0,Y.addTool)(Y.RectangleROIStartEndThresholdTool),(0,Y.addTool)(Y.CircleROIStartEndThresholdTool);const{RectangleROIStartEndThreshold:o,CircleROIStartEndThreshold:r}=re(t,n,a),i=t.getSource("Cornerstone3DTools","0.1");t.addMapping(i,"RectangleROIStartEndThreshold",o.matchingCriteria,o.toAnnotation,o.toMeasurement),t.addMapping(i,"CircleROIStartEndThreshold",r.matchingCriteria,r.toAnnotation,r.toMeasurement)}({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a})},getToolbarModule:function({commandsManager:e,servicesManager:t}){return[{name:"tmtv.RectangleROIThresholdOptions",defaultComponent:()=>De({commandsManager:e,servicesManager:t})}]},getPanelModule:ee,getHangingProtocolModule:f,getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>Te({servicesManager:e,commandsManager:t,extensionManager:n})},Oe=Ce})(),u})()));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-tmtv",
|
|
3
|
-
"version": "3.9.0-beta.
|
|
3
|
+
"version": "3.9.0-beta.83",
|
|
4
4
|
"description": "OHIF extension for Total Metabolic Tumor Volume",
|
|
5
5
|
"author": "OHIF",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@ohif/core": "3.9.0-beta.
|
|
34
|
-
"@ohif/ui": "3.9.0-beta.
|
|
33
|
+
"@ohif/core": "3.9.0-beta.83",
|
|
34
|
+
"@ohif/ui": "3.9.0-beta.83",
|
|
35
35
|
"dcmjs": "*",
|
|
36
36
|
"dicom-parser": "^1.8.9",
|
|
37
37
|
"hammerjs": "^2.0.8",
|