@ohif/extension-tmtv 3.10.0-beta.98 → 3.10.0
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/core/src/utils"),require("@ohif/extension-cornerstone"),require("@ohif/i18n"),require("@ohif/ui"),require("@ohif/ui-next"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@ohif/core","@ohif/core/src/utils","@ohif/extension-cornerstone","@ohif/i18n","@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/core/src/utils"),require("@ohif/extension-cornerstone"),require("@ohif/i18n"),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/core/src/utils"],e["@ohif/extension-cornerstone"],e["@ohif/i18n"],e["@ohif/ui"],e["@ohif/ui-next"],e.dcmjs)}(globalThis,((e,t,n,a,o,r,i,s,c,l)=>(()=>{var u={856:(e,t,n)=>{"use strict";var a=n(183);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}},598:(e,t,n)=>{e.exports=n(856)()},183:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},249:(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 g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},f=Object.assign,y={};function h(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||g}function v(){}function S(e,t,n){this.props=e,this.context=t,this.refs=y,this.updater=n||g}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,f(b,h.prototype),b.isPureReactComponent=!0;var I=Array.isArray,x=Object.prototype.hasOwnProperty,T={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)x.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:T.current}}function R(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var O=/\/+/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 M(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,I(i)?(o="",null!=e&&(o=e.replace(O,"$&/")+"/"),M(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(O,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",I(e))for(var l=0;l<e.length;l++){var u=r+C(s=e[l],l);c+=M(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+=M(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 D(e,t,n){if(null==e)return e;var a=[],o=0;return M(e,a,"","",(function(e){return t.call(n,e,o++)})),a}function N(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:T};function j(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:D,forEach:function(e,t,n){D(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return D(e,(function(){t++})),t},toArray:function(e){return D(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=j,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=f({},e.props),r=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=T.current),void 0!==t.key&&(r=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(l in t)x.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:N}},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=j,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"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741: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}},142:t=>{"use strict";t.exports=e},557:e=>{"use strict";e.exports=t},713:e=>{"use strict";e.exports=n},2:e=>{"use strict";e.exports=a},141:e=>{"use strict";e.exports=o},669:e=>{"use strict";e.exports=r},545:e=>{"use strict";e.exports=i},307:e=>{"use strict";e.exports=s},55:e=>{"use strict";e.exports=c},111:e=>{"use strict";e.exports=l}},p={};function m(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return u[e](n,n.exports,m),n.exports}m.m=u,m.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return m.d(t,{a:t}),t},m.d=(e,t)=>{for(var n in t)m.o(t,n)&&!m.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},m.u=e=>"dist/"+e+".ohif-extension-tmtv.umd.js",m.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),m.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},m.p="/",m.b=document.baseURI||self.location.href;var d={};return(()=>{"use strict";m.r(d),m.d(d,{default:()=>Ue});const e=JSON.parse('{"UU":"@ohif/extension-tmtv"}').UU,t=e=>({type:"cameraPosition",id:e,source:!0,target:!0}),n={type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}},a={viewportOptions:{viewportId:"ctAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"ctToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},o={viewportOptions:{viewportId:"ctSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"ctToolGroup",syncGroups:[t("sagittalSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},r={viewportOptions:{viewportId:"ctCORONAL",viewportType:"volume",orientation:"coronal",toolGroupId:"ctToolGroup",syncGroups:[t("coronalSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},i={viewportOptions:{viewportId:"ptAXIAL",viewportType:"volume",background:[1,1,1],orientation:"axial",toolGroupId:"ptToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},s={viewportOptions:{viewportId:"ptSAGITTAL",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[t("sagittalSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},c={viewportOptions:{viewportId:"ptCORONAL",viewportType:"volume",orientation:"coronal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[t("coronalSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},l={viewportOptions:{viewportId:"fusionAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"fusionToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},u={viewportOptions:{viewportId:"fusionSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"fusionToolGroup",syncGroups:[t("sagittalSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},p={viewportOptions:{viewportId:"fusionCoronal",viewportType:"volume",orientation:"coronal",toolGroupId:"fusionToolGroup",syncGroups:[t("coronalSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},g={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,syncInvertState:!1}},n],customViewportProps:{hideOverlays:!0}},displaySets:[{options:{blendMode:"MIP",slabThickness:"fullVolume",voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},f={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",id:"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:[a,o,r,i,s,c,l,u,p,g],createdDate:"2021-02-23T18:32:42.850Z"},{name:"Fusion 2x2",id:"Fusion-2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[a,l,i,g]},{name:"2x3-layout",id:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[a,o,r,i,s,c]},{name:"2x4-layout",id:"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:[c,s,i,g,p,u,l]}],numberOfPriorsReferenced:-1};const y=function(){return[{name:f.id,protocol:f}]};var h=m(326),v=m(598),S=m.n(v),b=m(307),I=m(2),x=m.n(I);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 w(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 E(e,t,n){return(t=w(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}m(741);Object.create(null);function R(){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 O={};function C(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&O[t[0]]||("string"==typeof t[0]&&(O[t[0]]=new Date),R.apply(void 0,t))}var M=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function D(e,t,n){e.loadNamespaces(t,M(e,n))}function N(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,M(e,a))}var P=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,L={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},k=function(e){return L[e]};var j,U={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(P,k)}};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,w(a.key),a)}}var _=(0,h.createContext)(),A=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 F(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 q(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 F(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)?F(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 G(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 W(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?G(Object(n),!0).forEach((function(t){E(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):G(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,a=(0,h.useContext)(_)||{},o=a.i18n,r=a.defaultNS,i=n||o||j;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new A),!i){C("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&&C("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=W(W(W({},U),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):(C("i18n.languages were undefined or empty",t.languages),!0)}(e,i,l)}));function g(){return i.getFixedT(t.lng||null,"fallback"===l.nsMode?m:m[0],p)}var f=q((0,h.useState)(g),2),y=f[0],v=f[1],S=m.join();t.lng&&(S="".concat(t.lng).concat(S));var b,I,x,w=(b=S,x=(0,h.useRef)(),(0,h.useEffect)((function(){x.current=I?x.current:b}),[b,I]),x.current),E=(0,h.useRef)(!0);(0,h.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function a(){E.current&&v(g)}return E.current=!0,d||u||(t.lng?N(i,t.lng,m,(function(){E.current&&v(g)})):D(i,m,(function(){E.current&&v(g)}))),d&&w&&w!==S&&E.current&&v(g),e&&i&&i.on(e,a),n&&i&&i.store.on(n,a),function(){E.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 R=(0,h.useRef)(!0);(0,h.useEffect)((function(){E.current&&!R.current&&v(g),R.current=!1}),[i,p]);var O=[y,i,d];if(O.t=y,O.i18n=i,O.ready=d,d)return O;if(!d&&!u)return O;throw new Promise((function(e){t.lng?N(i,t.lng,m,(function(){return e()})):D(i,m,(function(){return e()}))}))}const B={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}};function H({servicesManager:e,commandsManager:t}){const{t:n}=$("PanelSUV"),{displaySetService:a,toolGroupService:o,toolbarService:r,hangingProtocolService:i}=e.services,[s,c]=(0,h.useState)(B),[l,u]=(0,h.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,h.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,h.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()}}),[]),h.createElement(h.Fragment,null,h.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},h.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-black text-[13px] font-[300]"},h.createElement(b.PanelSection,{title:n("Patient Information")},h.createElement("div",{className:"flex flex-col"},h.createElement("div",{className:"bg-primary-dark flex flex-col gap-4 p-2"},h.createElement(b.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})}}),h.createElement(b.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Weight"),labelChildren:h.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"}),h.createElement(b.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Total Dose"),labelChildren:h.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}})}}),h.createElement(b.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Half Life"),labelChildren:h.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}})}}),h.createElement(b.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Injection Time"),labelChildren:h.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}})}}),h.createElement(b.Input,{containerClassName:"!flex-row !justify-between items-center",label:n("Acquisition Time"),labelChildren:h.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:()=>{}}),h.createElement(b.Button,{className:"!h-[26px] !w-[115px] self-end !p-0",onClick:function(){if(!l)throw new Error("No ptDisplaySet found");I.DicomMetadataStore.updateMetadataForSeries(l.StudyInstanceUID,l.SeriesInstanceUID,s),a.setDisplaySetMetadataInvalidated(l.displaySetInstanceUID),setTimeout((()=>{t.runCommand("resetCrosshairs")}),0)}},"Reload Data")))))))}H.propTypes={servicesManager:S().shape({services:S().shape({measurementService:S().shape({getMeasurements:S().func.isRequired,subscribe:S().func.isRequired,EVENTS:S().object.isRequired,VALUE_TYPES:S().object.isRequired}).isRequired}).isRequired}).isRequired};var z=m(669),K=m(557);const Y=async({segmentationId:e,commandsManager:t,segmentationService:n})=>{const a=n.getSegmentation(e);(0,K.triggerEvent)(K.eventTarget,K.Enums.Events.WEB_WORKER_PROGRESS,{progress:0,type:"Calculate Lesion Stats",id:e});const o={};for(const[n,r]of Object.entries(a.segments)){if(!r)continue;const i=Number(n),s=await t.run("getLesionStats",{segmentationId:e,segmentIndex:i}),c={lesionStats:s,suvPeak:await t.run("calculateSuvPeak",{segmentationId:e,segmentIndex:i}),lesionGlyoclysisStats:s.volume*s.meanValue},l={...r,cachedStats:{...r.cachedStats,...c}};o[i]=c,a.segments[n]=l}const r=n.getSegmentations(),i=await t.run("calculateTMTV",{segmentations:r});(0,K.triggerEvent)(K.eventTarget,K.Enums.Events.WEB_WORKER_PROGRESS,{progress:100,type:"Calculate Lesion Stats",id:e}),r.forEach((e=>{e.cachedStats={...e.cachedStats,tmtv:i},Object.keys(e.segments).forEach((t=>{e.segments[t].cachedStats={...e.segments[t].cachedStats,tmtv:i}}));const t={...e,segments:{...e.segments}};n.addOrUpdateSegmentation(t)}))};var J=m(141);const X=function({servicesManager:e,commandsManager:t}){const{segmentationService:n}=e.services,{segmentationsWithRepresentations:a}=(0,z.useActiveViewportSegmentationRepresentations)({servicesManager:e});(0,h.useEffect)((()=>{const e=a.map((e=>e.segmentation.segmentationId));(async()=>{for(const a of e)await Y({segmentationId:a,commandsManager:t,segmentationService:n})})()}),[]),(0,h.useEffect)((()=>{const e=(0,J.debounce)((async e=>{const{segmentationId:a}=e;await Y({segmentationId:a,commandsManager:t,segmentationService:n})}),100),a=n.subscribe(n.EVENTS.SEGMENTATION_DATA_MODIFIED,(t=>{e(t)}));return()=>{a.unsubscribe()}}),[t,n]);const o=a.find((e=>void 0!==e.segmentation.cachedStats?.tmtv)),r=o?.segmentation.cachedStats?.tmtv;return h.createElement("div",{className:"mt-2 mb-10 flex flex-col"},h.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},null!=r?h.createElement("div",{className:"bg-secondary-dark flex items-baseline justify-between px-2 py-1"},h.createElement("span",{className:"text-base font-bold uppercase tracking-widest text-white"},"TMTV:"),h.createElement("div",{className:"text-white"},`${r?.toFixed(3)} mL`)):null))};var Z=m(55);function Q({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a}){return h.createElement(h.Fragment,null,h.createElement(z.PanelSegmentation,{servicesManager:e,commandsManager:t,extensionManager:n,configuration:a},h.createElement(ee,{servicesManager:e,commandsManager:t})))}const ee=({servicesManager:e,commandsManager:t})=>{const{segmentationsWithRepresentations:n}=(0,z.useActiveViewportSegmentationRepresentations)({servicesManager:e}),a=n[0]?.segmentation.cachedStats?.tmtv,o=n.map((e=>e.segmentation));return o.length?h.createElement("div",{className:"flex h-8 w-full items-center rounded pr-0.5"},h.createElement(Z.Button,{size:"sm",variant:"ghost",className:"pl-1.5",onClick:()=>{t.runCommand("exportTMTVReportCSV",{segmentations:o,tmtv:a,config:{}})}},h.createElement(Z.Icons.Download,null),h.createElement("span",{className:"pl-1"},"CSV"))):null};const te=function({commandsManager:e,extensionManager:t,servicesManager:n}){return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:()=>h.createElement(H,{commandsManager:e,servicesManager:n,extensionManager:t})},{name:"tmtv",iconName:"tab-segmentation",iconLabel:"Segmentation",component:()=>h.createElement(h.Fragment,null,h.createElement(Z.Toolbox,{commandsManager:e,servicesManager:n,extensionManager:t,buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools"}),h.createElement(Q,{commandsManager:e,servicesManager:n}),h.createElement(X,{commandsManager:e,servicesManager:n}))},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:()=>h.createElement(Z.Toolbox,{commandsManager:e,servicesManager:n,extensionManager:t,buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools"})},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>h.createElement(X,{commandsManager:e,servicesManager:n})}]};var ne=m(713);const ae=["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(!ae.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=(0,z.getSOPInstanceAttributes)(l,n,o);let g;return g=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m),{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:g.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"RectangleROIStartEndThreshold"}}},re={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(!ae.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:m,StudyInstanceUID:d}=(0,z.getSOPInstanceAttributes)(l,n,o);let g;g=p?t.getDisplaySetForSOPInstanceUID(p,m):t.getDisplaySetsForSeries(m);const{cachedStats:f}=i;return{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:m,referenceStudyUID:d,toolName:r.toolName,displaySetInstanceUID:g.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"CircleROIStartEndThreshold"}}},ie=(e,t,n)=>({RectangleROIStartEndThreshold:{toAnnotation:oe.toAnnotation,toMeasurement:e=>oe.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:re.toAnnotation,toMeasurement:e=>re.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}}),{CORNERSTONE_3D_TOOLS_SOURCE_NAME:se,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:ce}=z.Enums;var le=m(545),ue=m.n(le);function pe(e,t){const{imageData:n}=e,a=n.getPointData().getScalars().getData(),{fn:o,baseValue:r}=function(){const e=-1/0,t=(e,t)=>(e>t&&(t=e),t);return{fn:t,baseValue:e}}();let i=r;const s=ne.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 me=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=>ne.annotation.state.getAnnotation(e)));return{ctLower:-1/0,ctUpper:1/0,ptLower:a*pe(t[0],o),ptUpper:1/0}};var de=m(111),ge=m.n(de),fe=m(142);const{datasetToBlob:ye}=ge().data,he=I.classes.MetadataProvider;const ve=function(e){const t=fe.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,he,I.DicomMetadataStore),n=ye(t);var a=URL.createObjectURL(n);window.location.assign(a)},{SegmentationRepresentations:Se}=ne.Enums,{formatPN:be}=I.utils,Ie=I.classes.MetadataProvider,xe=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],Te=(0,K.getWebWorkerManager)(),we={maxWorkerInstances:1,autoTerminateOnIdle:{enabled:!0,idleTimeThreshold:3e3}},Ee=()=>new Worker(new URL(m.p+m.u(584),m.b),{name:"suv-peak-worker"});function Re(e){const t=ne.segmentation.state.getSegmentation(e).representationData[Se.Labelmap],{volumeId:n,referencedVolumeId:a}=t;return{labelmapVolume:K.cache.getVolume(n),referencedVolume:K.cache.getVolume(a)}}function Oe(e){const{representationData:t}=e,{volumeId:n}=t[Se.Labelmap];return K.cache.getVolume(n)}const Ce=({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 K.getEnabledElement(t)}function d(e){return e.reduce(((e,t)=>{const n=ne.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=Ie.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});let a=null;for(const[e,{displaySetsInfo:o}]of t.entries()){if(o.some((({displaySetInstanceUID:e})=>e===n.displaySetInstanceUID))){a=e;break}}if(!n)return void o.error("No matching PT display set found");const s=l.getSegmentationRepresentations(a),c=r.getDisplaySetByUID(n.displaySetInstanceUID),u=await l.createLabelmapForDisplaySet(c,{label:`Segmentation ${s.length+1}`,segments:{1:{label:`${ue().t("Segment")} 1`,active:!0}}});return l.addSegmentationRepresentation(a,{segmentationId:u}),u},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{const r=ne.segmentation.state.getSegmentation(e),{representationData:s}=r,{displaySetMatchDetails:c}=i.getMatchDetails(),l=`cornerstoneStreamingImageVolume:${c.get("ctDisplaySet").displaySetInstanceUID}`,{volumeId:u}=s[Se.Labelmap],{referencedVolumeId:p}=K.cache.getVolume(u),m=d(xe);if(0===m.length)return void o.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});const g=K.cache.getVolume(e);let f=K.cache.getVolume(p);const y=K.cache.getVolume(l);if(!f)throw new Error("No Reference volume found");if(!g)throw new Error("No Reference labelmap found");const h=ne.annotation.state.getAnnotation(m[0]),{metadata:{enabledElement:{viewport:v}}}=h;if(!v.hasVolumeId(p)){a.getDisplaySetsUIDsForViewport(v.id).forEach((e=>{const t=K.cache.getVolumes().find((t=>t.volumeId.includes(e)));K.utilities.isEqual(t.dimensions,g.dimensions)&&K.utilities.isEqual(t.spacing,g.spacing)&&(f=t)}))}const{ptLower:S,ptUpper:b,ctLower:I,ctUpper:x}=me(m,[f,y],t);return ne.utilities.segmentation.rectangleROIThresholdVolumeByRange(m,g,[{volume:f,lower:S,upper:b},{volume:y,lower:I,upper:x}],{overwrite:!0,segmentIndex:n})},calculateSuvPeak:async({segmentationId:e,segmentIndex:t})=>{const n=l.getSegmentation(e),{representationData:a}=n,{volumeId:o,referencedVolumeId:r}=a[Se.Labelmap],i=K.cache.getVolume(o),s=K.cache.getVolume(r);Te.registerWorker("suv-peak-worker",Ee,we);const c=d(xe).map((e=>ne.annotation.state.getAnnotation(e))),u={dimensions:i.dimensions,origin:i.origin,direction:i.direction,spacing:i.spacing,metadata:i.metadata,scalarData:i.voxelManager.getCompleteScalarDataArray()},p={dimensions:s.dimensions,origin:s.origin,direction:s.direction,spacing:s.spacing,metadata:s.metadata,scalarData:s.voxelManager.getCompleteScalarDataArray()},m=c.map((e=>({...e,metadata:{...e.metadata,enabledElement:{...e.metadata.enabledElement,viewport:null,renderingEngine:null,element:null}}}))),g=await Te.executeTask("suv-peak-worker","calculateSuvPeak",{labelmapProps:u,referenceVolumeProps:p,annotations:m,segmentIndex:t})||{};return{suvPeak:g.mean,suvMax:g.max,suvMaxIJK:g.maxIJK,suvMaxLPS:g.maxLPS}},getLesionStats:({segmentationId:e,segmentIndex:t=1})=>{const{labelmapVolume:n,referencedVolume:a}=Re(e),{voxelManager:o,imageData:r,spacing:i}=n,{voxelManager:s}=a;let c=-1/0,l=1/0;const u=[];let p=0;o.forEach((({value:e,index:n})=>{if(e===t){const e=s.getAtIndex(n);u.push(e),e>c&&(c=e),e<l&&(l=e),p++}}),{imageData:r});const m=u.reduce(((e,t)=>e+t),0)/p;return{minValue:l,maxValue:c,meanValue:m,stdValue:Math.sqrt(u.map((e=>(e-m)**2)).reduce(((e,t)=>e+t),0)/p),volume:p*i[0]*i[1]*i[2]*.001}},calculateLesionGlycolysis:({lesionStats:e})=>{const{meanValue:t,volume:n}=e;return{lesionGlyoclysisStats:n*t}},calculateTMTV:async({segmentations:e})=>{const t=e.map((e=>{const t=Oe(e);return{dimensions:t.dimensions,spacing:t.spacing,scalarData:t.voxelManager.getCompleteScalarDataArray(),origin:t.origin,direction:t.direction}}));if(!t.length)return;return await Te.executeTask("suv-peak-worker","calculateTMTV",t)},exportTMTVReportCSV:async({segmentations:e,tmtv:n,config:a,options:o})=>{const r=t.runCommand("getSegmentationCSVReport",{segmentations:e}),i=[{key:"Total Lesion Glycolysis",value:{tlg:(await 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:async({segmentations:e})=>{const t=e.map((e=>{const t=Oe(e);return{dimensions:t.dimensions,spacing:t.spacing,scalarData:t.voxelManager.getCompleteScalarDataArray(),origin:t.origin,direction:t.direction}})),{referencedVolume:n}=Re(e[0].segmentationId),a={dimensions:n.dimensions,spacing:n.spacing,scalarData:n.voxelManager.getCompleteScalarDataArray(),origin:n.origin,direction:n.direction};return await Te.executeTask("suv-peak-worker","getTotalLesionGlycolysis",{labelmapProps:t,referenceVolumeProps:a})},setStartSliceForROIThresholdTool:()=>{const{viewport:e}=m(),{focalPoint:t}=e.getCamera(),n=d(xe)[0],a=ne.annotation.state.getAnnotation(n);a.data.startCoordinate=t,a.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{const{viewport:e}=m(),t=d(xe)[0],n=ne.annotation.state.getAnnotation(t),a=e.getCamera().focalPoint;n.data.endCoordinate=a,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{const e=ne.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach((t=>{const a=e.annotations[t],o=xe.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{label:e,segmentationId:a,representationData:o}=n,r=a,i={id:r,label:e};if(!o){t[r]=i;continue}const{cachedStats:s}=n.segments[1]||{};s&&Object.entries(s).forEach((([e,t])=>{"object"!=typeof t?i[e]=t:Object.entries(t).forEach((([t,n])=>{i[`${e}_${t}`]=n}))}));const c=n.representationData[Se.Labelmap];if(!c){t[r]=i;continue}const l=c.referencedVolumeId,u=K.cache.getVolume(l);if(!u){t[r]=i;continue}if(!u.imageIds||!u.imageIds.length){t[r]=i;continue}const p=u.imageIds[0],m=x().classes.MetadataProvider.get("instance",p);m?t[r]={...i,PatientID:m.PatientID??"000000",PatientName:be(m.PatientName),StudyInstanceUID:m.StudyInstanceUID,SeriesInstanceUID:m.SeriesInstanceUID,StudyDate:m.StudyDate}:t[r]=i}return t},exportRTReportForAnnotations:({annotations:e})=>{ve(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{const a=s.getToolGroup(e);if(!a)return;const{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()}))}},f={setEndSliceForROIThresholdTool:{commandFn:g.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:g.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:g.getMatchingPTDisplaySet},getPTMetadata:{commandFn:g.getPTMetadata},createNewLabelmapFromPT:{commandFn:g.createNewLabelmapFromPT},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:f,defaultContext:"TMTV:CORNERSTONE"}},Me="roi_stat",De=[{value:Me,label:"Max",placeHolder:"Max"},{value:"range",label:"Range",placeHolder:"Range"}];const Ne=function({config:e,dispatch:t,runCommand:n}){const{t:a}=$("ROIThresholdConfiguration");return h.createElement("div",{className:"bg-primary-dark flex flex-col space-y-4"},h.createElement("div",{className:"flex items-end space-x-2"},h.createElement("div",{className:"flex w-1/2 flex-col"},h.createElement(b.Select,{label:a("Strategy"),closeMenuOnSelect:!0,className:"border-primary-main mr-2 bg-black text-white ",options:De,placeholder:De.find((t=>t.value===e.strategy)).placeHolder,value:e.strategy,onChange:({value:e})=>{t({type:"setStrategy",payload:{strategy:e}})}})),h.createElement("div",{className:"w-1/2"},h.createElement(b.LegacyButtonGroup,null,h.createElement(b.LegacyButton,{size:"initial",className:"px-2 py-2 text-base text-white",color:"primaryLight",variant:"outlined",onClick:()=>n("setStartSliceForROIThresholdTool")},a("Start")),h.createElement(b.LegacyButton,{size:"initial",color:"primaryLight",variant:"outlined",className:"px-2 py-2 text-base text-white",onClick:()=>n("setEndSliceForROIThresholdTool")},a("End"))))),e.strategy===Me&&h.createElement(b.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!==Me&&h.createElement("div",{className:"mr-2 text-sm"},h.createElement("table",null,h.createElement("tbody",null,h.createElement("tr",{className:"mt-2"},h.createElement("td",{className:"pr-4",colSpan:"3"},h.createElement(b.Label,{className:"font-inter text-[13px] text-white",text:"Lower & Upper Ranges"}))),h.createElement("tr",{className:"mt-2"},h.createElement("td",{className:"pr-4 pt-2 text-center"},h.createElement(b.Label,{className:"text-white",text:"CT"})),h.createElement("td",null,h.createElement("div",{className:"flex justify-between"},h.createElement(b.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}})}}),h.createElement(b.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}})}})))),h.createElement("tr",null,h.createElement("td",{className:"pr-4 pt-2 text-center"},h.createElement(b.Label,{className:"text-white",text:"PT"})),h.createElement("td",null,h.createElement("div",{className:"flex justify-between"},h.createElement(b.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}})}}),h.createElement(b.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}})}}))))))))},Pe=Me;function Le(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 ke=function({servicesManager:e,commandsManager:t}){const{segmentationService:n}=e.services,[a,o]=(0,h.useState)(null),r=(0,h.useCallback)(((e,n={})=>t.runCommand(e,n)),[t]),[i,s]=(0,h.useReducer)(Le,{strategy:Pe,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),c=(0,h.useCallback)((()=>{const e=a,t=ne.segmentation.segmentIndex.getActiveSegmentIndex(e);r("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:i,segmentIndex:t})}),[a,i]);return(0,h.useEffect)((()=>{const e=n.getSegmentationRepresentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}),[]),(0,h.useEffect)((()=>{const e=n.EVENTS.SEGMENTATION_MODIFIED,t=[];return[e].forEach((e=>{const{unsubscribe:a}=n.subscribe(e,(()=>{const e=n.getSegmentationRepresentations();if(!e.length)return;const t=e.find((e=>e.isActive));o(t.id)}));t.push(a)})),()=>{t.forEach((e=>{e()}))}}),[]),h.createElement("div",{className:"invisible-scrollbar mb-2 flex flex-col overflow-y-auto overflow-x-hidden"},h.createElement(Ne,{config:i,dispatch:s,runCommand:r}),null!==a&&h.createElement(b.Button,{className:"mt-2 !h-[26px] !w-[75px]",onClick:c},"Run"))};const je={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:a={}}){!function({servicesManager:e}){const{measurementService:t,displaySetService:n,cornerstoneViewportService:a}=e.services;(0,ne.addTool)(ne.RectangleROIStartEndThresholdTool),(0,ne.addTool)(ne.CircleROIStartEndThresholdTool);const{RectangleROIStartEndThreshold:o,CircleROIStartEndThreshold:r}=ie(t,n,a),i=t.getSource(se,ce);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:()=>ke({commandsManager:e,servicesManager:t})}]},getPanelModule:te,getHangingProtocolModule:y,getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>Ce({servicesManager:e,commandsManager:t,extensionManager:n})},Ue=je})(),d})()));
|
|
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/core/src"),require("@ohif/core/src/utils"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),require("@ohif/ui-next"),require("dcmjs")):"function"==typeof define&&define.amd?define(["@cornerstonejs/adapters","@cornerstonejs/core","@cornerstonejs/tools","@ohif/core","@ohif/core/src","@ohif/core/src/utils","@ohif/extension-cornerstone","@ohif/extension-default","@ohif/i18n","@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/core/src"),require("@ohif/core/src/utils"),require("@ohif/extension-cornerstone"),require("@ohif/extension-default"),require("@ohif/i18n"),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/core/src"],e["@ohif/core/src/utils"],e["@ohif/extension-cornerstone"],e["@ohif/extension-default"],e["@ohif/i18n"],e["@ohif/ui-next"],e.dcmjs)}(globalThis,((e,t,n,o,a,r,i,s,c,l,u)=>(()=>{var p={856:(e,t,n)=>{"use strict";var o=n(183);function a(){}function r(){}r.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,r,i){if(i!==o){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:a};return n.PropTypes=n,n}},598:(e,t,n)=>{e.exports=n(856)()},183:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},249:(e,t)=>{"use strict";var n=Symbol.for("react.element"),o=Symbol.for("react.portal"),a=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"),d=Symbol.for("react.lazy"),m=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 I=S.prototype=new v;I.constructor=S,g(I,h.prototype),I.isPureReactComponent=!0;var b=Array.isArray,T=Object.prototype.hasOwnProperty,w={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function x(e,t,o){var a,r={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)T.call(t,a)&&!E.hasOwnProperty(a)&&(r[a]=t[a]);var c=arguments.length-2;if(1===c)r.children=o;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(a in c=e.defaultProps)void 0===r[a]&&(r[a]=c[a]);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 O=/\/+/g;function D(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 C(e,t,a,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 o:c=!0}}if(c)return i=i(c=e),e=""===r?"."+D(c,0):r,b(i)?(a="",null!=e&&(a=e.replace(O,"$&/")+"/"),C(i,t,a,"",(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,a+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(O,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",b(e))for(var l=0;l<e.length;l++){var u=r+D(s=e[l],l);c+=C(s,t,a,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=m&&e[m]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),l=0;!(s=e.next()).done;)c+=C(s=s.value,t,a,u=r+D(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 M(e,t,n){if(null==e)return e;var o=[],a=0;return C(e,o,"","",(function(e){return t.call(n,e,a++)})),o}function N(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},U={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:L,ReactCurrentOwner:w};function j(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:M,forEach:function(e,t,n){M(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return M(e,(function(){t++})),t},toArray:function(e){return M(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=a,t.Profiler=i,t.PureComponent=S,t.StrictMode=r,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=U,t.act=j,t.cloneElement=function(e,t,o){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var a=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)T.call(t,l)&&!E.hasOwnProperty(l)&&(a[l]=void 0===t[l]&&void 0!==c?c[l]:t[l])}var l=arguments.length-2;if(1===l)a.children=o;else if(1<l){c=Array(l);for(var u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}return{$$typeof:n,type:e.type,key:r,ref:i,props:a,_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=x,t.createFactory=function(e){var t=x.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:d,_payload:{_status:-1,_result:e},_init:N}},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=j,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"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741: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}},142:t=>{"use strict";t.exports=e},557:e=>{"use strict";e.exports=t},713:e=>{"use strict";e.exports=n},2:e=>{"use strict";e.exports=o},459:e=>{"use strict";e.exports=a},141:e=>{"use strict";e.exports=r},669:e=>{"use strict";e.exports=i},438:e=>{"use strict";e.exports=s},545:e=>{"use strict";e.exports=c},55:e=>{"use strict";e.exports=l},111:e=>{"use strict";e.exports=u}},d={};function m(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return p[e](n,n.exports,m),n.exports}m.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return m.d(t,{a:t}),t},m.d=(e,t)=>{for(var n in t)m.o(t,n)&&!m.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},m.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),m.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var f={};return(()=>{"use strict";m.r(f),m.d(f,{default:()=>Ue});const e=JSON.parse('{"UU":"@ohif/extension-tmtv"}').UU,t=e=>({type:"cameraPosition",id:e,source:!0,target:!0}),n={type:"hydrateseg",id:"sameFORId",source:!0,target:!0,options:{matchingRules:["sameFOR"]}},o={viewportOptions:{viewportId:"ctAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"ctToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},a={viewportOptions:{viewportId:"ctSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"ctToolGroup",syncGroups:[t("sagittalSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},r={viewportOptions:{viewportId:"ctCORONAL",viewportType:"volume",orientation:"coronal",toolGroupId:"ctToolGroup",syncGroups:[t("coronalSync"),{type:"voi",id:"ctWLSync",source:!0,target:!0,options:{syncColormap:!0}},n]},displaySets:[{id:"ctDisplaySet"}]},i={viewportOptions:{viewportId:"ptAXIAL",viewportType:"volume",background:[1,1,1],orientation:"axial",toolGroupId:"ptToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},s={viewportOptions:{viewportId:"ptSAGITTAL",viewportType:"volume",orientation:"sagittal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[t("sagittalSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},c={viewportOptions:{viewportId:"ptCORONAL",viewportType:"volume",orientation:"coronal",background:[1,1,1],toolGroupId:"ptToolGroup",syncGroups:[t("coronalSync"),{type:"voi",id:"ptWLSync",source:!0,target:!0,options:{syncColormap:!0}},{type:"voi",id:"ptFusionWLSync",source:!0,target:!1,options:{syncColormap:!1,syncInvertState:!1}},n]},displaySets:[{options:{voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},l={viewportOptions:{viewportId:"fusionAXIAL",viewportType:"volume",orientation:"axial",toolGroupId:"fusionToolGroup",initialImageOptions:{preset:"first"},syncGroups:[t("axialSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},u={viewportOptions:{viewportId:"fusionSAGITTAL",viewportType:"volume",orientation:"sagittal",toolGroupId:"fusionToolGroup",syncGroups:[t("sagittalSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},p={viewportOptions:{viewportId:"fusionCoronal",viewportType:"volume",orientation:"coronal",toolGroupId:"fusionToolGroup",syncGroups:[t("coronalSync"),{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,syncInvertState:!1}},n]},displaySets:[{id:"ctDisplaySet"},{id:"ptDisplaySet",options:{colormap:{name:"hsv",opacity:[{value:0,opacity:0},{value:.1,opacity:.8},{value:1,opacity:.9}]},voi:{custom:"getPTVOIRange"}}}]},d={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,syncInvertState:!1}},n],customViewportProps:{hideOverlays:!0}},displaySets:[{options:{blendMode:"MIP",slabThickness:"fullVolume",voi:{custom:"getPTVOIRange"},voiInverted:!0},id:"ptDisplaySet"}]},g={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",id:"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:[o,a,r,i,s,c,l,u,p,d],createdDate:"2021-02-23T18:32:42.850Z"},{name:"Fusion 2x2",id:"Fusion-2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[o,l,i,d]},{name:"2x3-layout",id:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[o,a,r,i,s,c]},{name:"2x4-layout",id:"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:[c,s,i,d,p,u,l]}],numberOfPriorsReferenced:-1};const y=function(){return[{name:g.id,protocol:g}]};var h=m(326),v=m(598),S=m.n(v),I=m(2),b=m.n(I);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 w(e){var t=function(e,t){if("object"!=T(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=T(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==T(t)?t:t+""}function E(e,t,n){return(t=w(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}m(741);Object.create(null);function x(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),o=0;o<t;o++)n[o]=arguments[o];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var R={};function O(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&R[t[0]]||("string"==typeof t[0]&&(R[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 M(e,t,n,o){"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,o))}var N=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,P={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},L=function(e){return P[e]};var U,j={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(N,L)}};function _(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,w(o.key),o)}}var k=(0,h.createContext)(),F=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&&_(e.prototype,t),n&&_(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 V(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);n<t;n++)o[n]=e[n];return o}function A(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 o,a,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=(o=r.call(n)).done)&&(s.push(o.value),s.length!==t);c=!0);}catch(e){l=!0,a=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw a}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return V(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)?V(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 q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function G(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?q(Object(n),!0).forEach((function(t){E(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,h.useContext)(k)||{},a=o.i18n,r=o.defaultNS,i=n||a||U;if(i&&!i.reportNamespaces&&(i.reportNamespaces=new F),!i){O("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&&O("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=G(G(G({},j),i.options.react),t),u=l.useSuspense,p=l.keyPrefix,d=e||r||i.options&&i.options.defaultNS;d="string"==typeof d?[d]:d||["translation"],i.reportNamespaces.addUsedNamespaces&&i.reportNamespaces.addUsedNamespaces(d);var m=(i.isInitialized||i.initializedStoreOnce)&&d.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,o){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!o(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.languages[0],a=!!t.options&&t.options.fallbackLng,r=t.languages[t.languages.length-1];if("cimode"===o.toLowerCase())return!0;var i=function(e,n){var o=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===o||2===o};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!i(t.isLanguageChangingTo,e)||!t.hasResourceBundle(o,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!i(o,e)||a&&!i(r,e)))}(e,t,n):(O("i18n.languages were undefined or empty",t.languages),!0)}(e,i,l)}));function f(){return i.getFixedT(t.lng||null,"fallback"===l.nsMode?d:d[0],p)}var g=A((0,h.useState)(f),2),y=g[0],v=g[1],S=d.join();t.lng&&(S="".concat(t.lng).concat(S));var I,b,w,E=(I=S,w=(0,h.useRef)(),(0,h.useEffect)((function(){w.current=b?w.current:I}),[I,b]),w.current),x=(0,h.useRef)(!0);(0,h.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function o(){x.current&&v(f)}return x.current=!0,m||u||(t.lng?M(i,t.lng,d,(function(){x.current&&v(f)})):C(i,d,(function(){x.current&&v(f)}))),m&&E&&E!==S&&x.current&&v(f),e&&i&&i.on(e,o),n&&i&&i.store.on(n,o),function(){x.current=!1,e&&i&&e.split(" ").forEach((function(e){return i.off(e,o)})),n&&i&&n.split(" ").forEach((function(e){return i.store.off(e,o)}))}}),[i,S]);var R=(0,h.useRef)(!0);(0,h.useEffect)((function(){x.current&&!R.current&&v(f),R.current=!1}),[i,p]);var D=[y,i,m];if(D.t=y,D.i18n=i,D.ready=m,m)return D;if(!m&&!u)return D;throw new Promise((function(e){t.lng?M(i,t.lng,d,(function(){return e()})):C(i,d,(function(){return e()}))}))}var W=m(55),B=m(459);function H(){return H=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},H.apply(null,arguments)}const z={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}},Y=({children:e,className:t,...n})=>h.createElement("div",H({className:`flex flex-row items-center space-x-4 ${t||""}`},n),e);function J({servicesManager:e}){const{commandsManager:t}=(0,B.useSystem)(),{t:n}=$("PanelSUV"),{displaySetService:o,toolGroupService:a,toolbarService:r,hangingProtocolService:i}=e.services,[s,c]=(0,h.useState)(z),[l,u]=(0,h.useState)(null),p=e=>{c((t=>{const n={...t};return Object.keys(e).forEach((o=>{"object"==typeof e[o]?n[o]={...t[o],...e[o]}:n[o]=e[o]})),n}))},d=e=>{const n=t.runCommand("getMatchingPTDisplaySet",{viewportMatchDetails:e});if(!n)return;return{ptDisplaySet:n,metadata:t.runCommand("getPTMetadata",{ptDisplaySet:n})}};return(0,h.useEffect)((()=>{const e=o.getActiveDisplaySets(),{viewportMatchDetails:t}=i.getMatchDetails();if(!e.length)return;const n=d(t);if(!n)return;const{ptDisplaySet:a,metadata:r}=n;u(a),c(r)}),[]),(0,h.useEffect)((()=>{const{unsubscribe:e}=i.subscribe(i.EVENTS.PROTOCOL_CHANGED,(({viewportMatchDetails:e})=>{const t=d(e);if(!t)return;const{ptDisplaySet:n,metadata:o}=t;u(n),c(o)}));return()=>{e()}}),[]),h.createElement(h.Fragment,null,h.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},h.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-black text-base"},h.createElement(W.PanelSection,{defaultOpen:!0},h.createElement(W.PanelSection.Header,null,n("Patient Information")),h.createElement(W.PanelSection.Content,null,h.createElement("div",{className:"bg-primary-dark flex flex-col gap-3 p-2"},h.createElement(Y,null,h.createElement(Y.Label,null,n("Patient Sex")),h.createElement(Y.Input,{value:s.PatientSex||"",onChange:e=>{p({PatientSex:e.target.value})}})),h.createElement(Y,null,h.createElement(Y.Label,{unit:"kg"},n("Weight")),h.createElement(Y.Input,{value:s.PatientWeight||"",onChange:e=>{p({PatientWeight:e.target.value})},id:"weight-input"})),h.createElement(Y,null,h.createElement(Y.Label,{unit:"bq"},n("Total Dose")),h.createElement(Y.Input,{value:s.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:e.target.value}})}})),h.createElement(Y,null,h.createElement(Y.Label,{unit:"s"},n("Half Life")),h.createElement(Y.Input,{value:s.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadionuclideHalfLife:e.target.value}})}})),h.createElement(Y,null,h.createElement(Y.Label,{unit:"s"},n("Injection Time")),h.createElement(Y.Input,{value:s.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime||"",onChange:e=>{p({RadiopharmaceuticalInformationSequence:{RadiopharmaceuticalStartTime:e.target.value}})}})),h.createElement(Y,null,h.createElement(Y.Label,{unit:"s"},n("Acquisition Time")),h.createElement(Y.Input,{value:s.SeriesTime||"",onChange:()=>{}})),h.createElement(W.Button,{variant:"default",size:"sm",className:"w-28 self-end",onClick:function(){if(!l)throw new Error("No ptDisplaySet found");I.DicomMetadataStore.updateMetadataForSeries(l.StudyInstanceUID,l.SeriesInstanceUID,s),o.setDisplaySetMetadataInvalidated(l.displaySetInstanceUID),setTimeout((()=>{t.runCommand("resetCrosshairs")}),0)}},"Reload Data")))))))}Y.Label=({children:e,unit:t,className:n,...o})=>h.createElement(W.Label,H({className:`min-w-32 flex-shrink-0 ${n||""}`},o),e,t&&h.createElement("span",{className:"text-muted-foreground"}," ",t)),Y.Input=({className:e,...t})=>h.createElement(W.Input,H({className:`h-7 flex-1 ${e||""}`},t)),Y.Label.displayName="InputRow.Label",Y.Input.displayName="InputRow.Input",J.propTypes={servicesManager:S().shape({services:S().shape({measurementService:S().shape({getMeasurements:S().func.isRequired,subscribe:S().func.isRequired,EVENTS:S().object.isRequired,VALUE_TYPES:S().object.isRequired}).isRequired}).isRequired}).isRequired};var K=m(669);const X=async({commandsManager:e,segmentationService:t})=>{const n=t.getSegmentations(),o=await e.run("calculateTMTV",{segmentations:n});n.forEach((e=>{e.cachedStats={...e.cachedStats,tmtv:o},t.addOrUpdateSegmentation(e)}))};var Z=m(141);function Q(){const{commandsManager:e,servicesManager:t}=(0,B.useSystem)(),{segmentationService:n}=t.services,{segmentationsWithRepresentations:o}=(0,K.useActiveViewportSegmentationRepresentations)({servicesManager:t}),a=o?.map((e=>e.segmentation.segmentationId))||[],r=o?.map((e=>e.segmentation))||[];(0,h.useEffect)((()=>{(async()=>{for(const t of a)await X({segmentationId:t,commandsManager:e,segmentationService:n})})()}),[]),(0,h.useEffect)((()=>{const t=(0,Z.debounce)((async t=>{const{segmentationId:o}=t;await X({segmentationId:o,commandsManager:e,segmentationService:n})}),100),o=n.subscribe(n.EVENTS.SEGMENTATION_DATA_MODIFIED,(e=>{t(e)}));return()=>{o.unsubscribe()}}),[e,n]);const i=n.getSegmentationGroupStats(a),s=i?.tmtv;return h.createElement("div",{className:"mb-1 flex flex-col"},h.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},h.createElement("div",{className:"bg-secondary-dark flex items-baseline justify-between px-2 py-1"},h.createElement("div",{className:"py-1"},h.createElement("span",{className:"text-muted-foreground text-base font-bold uppercase"},"TMTV: "),h.createElement("span",{className:"text-foreground"},s?`${s.toFixed(3)} mL`:"")),h.createElement("div",{className:"flex items-center"},h.createElement(W.Button,{size:"sm",variant:"ghost",className:"text-blue-500",onClick:()=>{r.length&&e.runCommand("exportTMTVReportCSV",{segmentations:r,tmtv:s,config:{}})}},h.createElement("span",{className:"pl-1"},"CSV"))))))}const ee=Q;var te=m(438);function ne({configuration:e}){return h.createElement(h.Fragment,null,h.createElement(K.PanelSegmentation,{configuration:e},h.createElement(Q,null)))}const oe=function({commandsManager:e,extensionManager:t,servicesManager:n}){return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:()=>h.createElement(J,null)},{name:"tmtv",iconName:"tab-segmentation",iconLabel:"Segmentation",component:()=>h.createElement(h.Fragment,null,h.createElement(te.Toolbox,{buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools"}),h.createElement(ne,{commandsManager:e,servicesManager:n}))},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:()=>h.createElement(te.Toolbox,{buttonSectionId:"ROIThresholdToolbox",title:"Threshold Tools"})},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>h.createElement(ee,null)}]};var ae=m(713);const re=["RectangleROIStartEndThreshold","CircleROIStartEndThreshold"],ie={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:o,viewportId:a}=e,{metadata:r,data:i,annotationUID:s}=o;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!re.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:d,StudyInstanceUID:m}=(0,K.getSOPInstanceAttributes)(l,n,a);let f;return f=p?t.getDisplaySetForSOPInstanceUID(p,d):t.getDisplaySetsForSeries(d),{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:d,referenceStudyUID:m,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"RectangleROIStartEndThreshold"}}},se={toAnnotation:(e,t)=>{},toMeasurement:(e,t,n)=>{const{annotation:o,viewportId:a}=e,{metadata:r,data:i,annotationUID:s}=o;if(!r||!i)return console.warn("Length tool: Missing metadata or data"),null;const{toolName:c,referencedImageId:l,FrameOfReferenceUID:u}=r;if(!re.includes(c))throw new Error("Tool not supported");const{SOPInstanceUID:p,SeriesInstanceUID:d,StudyInstanceUID:m}=(0,K.getSOPInstanceAttributes)(l,n,a);let f;f=p?t.getDisplaySetForSOPInstanceUID(p,d):t.getDisplaySetsForSeries(d);const{cachedStats:g}=i;return{uid:s,SOPInstanceUID:p,FrameOfReferenceUID:u,metadata:r,referenceSeriesUID:d,referenceStudyUID:m,toolName:r.toolName,displaySetInstanceUID:f.displaySetInstanceUID,label:r.label,data:i.cachedStats,type:"CircleROIStartEndThreshold"}}},ce=(e,t,n)=>({RectangleROIStartEndThreshold:{toAnnotation:ie.toAnnotation,toMeasurement:e=>ie.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:se.toAnnotation,toMeasurement:e=>se.toMeasurement(e,t,n),matchingCriteria:[{valueType:e.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}}),{CORNERSTONE_3D_TOOLS_SOURCE_NAME:le,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:ue}=K.Enums;var pe=m(557),de=m(545),me=m.n(de);function fe(e,t){const{imageIds:n}=e,o=pe.cache.getVolumeContainingImageId(n[0]);if(!o)throw new Error("No volume found for display set");const{volume:a}=o,{voxelManager:r}=a,{fn:i,baseValue:s}=function(){const e=-1/0,t=(e,t)=>(e>t&&(t=e),t);return{fn:t,baseValue:e}}();let c=s;const l=ae.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations(t,a);return r.forEach((({value:e})=>{c=i(e,c)}),{boundsIJK:l}),c}const ge=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:o}=n;return{ctLower:-1/0,ctUpper:1/0,ptLower:o*fe(t,e.map((e=>ae.annotation.state.getAnnotation(e)))),ptUpper:1/0}};var ye=m(111),he=m.n(ye),ve=m(142);const{datasetToBlob:Se}=he().data,Ie=I.classes.MetadataProvider;const be=function(e){const t=ve.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,Ie,I.DicomMetadataStore),n=Se(t);var o=URL.createObjectURL(n);window.location.assign(o)},{SegmentationRepresentations:Te}=ae.Enums,{formatPN:we}=I.utils,Ee=I.classes.MetadataProvider,xe=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],Re=({servicesManager:e,commandsManager:t,extensionManager:n})=>{const{viewportGridService:o,uiNotificationService:a,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 d(){const{activeViewportId:e}=o.getState(),{element:t}=p(e)||{};return pe.getEnabledElement(t)}function m(e){return e.reduce(((e,t)=>{const n=ae.annotation.selection.getAnnotationsSelectedByToolName(t);return e.concat(n)}),[])}const f={getMatchingPTDisplaySet:({viewportMatchDetails:e})=>{let t=null;for(const[,n]of e){const{displaySetsInfo:e}=n,o=e.map((({displaySetInstanceUID:e})=>r.getDisplaySetByUID(e)));if(o&&0!==o.length&&(t=o.find((e=>"PT"===e.Modality)),t))break}return t},getPTMetadata:({ptDisplaySet:e})=>{const t=n.getDataSources()[0].getImageIdsForDisplaySet(e)[0],o=Ee.get("instance",t);if("PT"!==o.Modality)return;return{SeriesTime:o.SeriesTime,Modality:o.Modality,PatientSex:o.PatientSex,PatientWeight:o.PatientWeight,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:o.RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose,RadionuclideHalfLife:o.RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife,RadiopharmaceuticalStartTime:o.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime,RadiopharmaceuticalStartDateTime:o.RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartDateTime}}},createNewLabelmapFromPT:async({label:e})=>{const{viewportMatchDetails:t}=i.getMatchDetails(),n=f.getMatchingPTDisplaySet({viewportMatchDetails:t});let o=null;for(const[e,{displaySetsInfo:a}]of t.entries()){if(a.some((({displaySetInstanceUID:e})=>e===n.displaySetInstanceUID))){o=e;break}}if(!n)return void a.error("No matching PT display set found");const s=l.getSegmentationRepresentations(o),c=r.getDisplaySetByUID(n.displaySetInstanceUID),u=await l.createLabelmapForDisplaySet(c,{label:`Segmentation ${s.length+1}`,segments:{1:{label:`${me().t("Segment")} 1`,active:!0}}});return l.addSegmentationRepresentation(o,{segmentationId:u}),u},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{const o=ae.segmentation.state.getSegmentation(e),{representationData:s}=o,{displaySetMatchDetails:c}=i.getMatchDetails(),l=c.get("ctDisplaySet"),u=c.get("ptDisplaySet"),p=r.getDisplaySetByUID(l.displaySetInstanceUID),d=r.getDisplaySetByUID(u.displaySetInstanceUID),{volumeId:f}=s[Te.Labelmap],g=pe.cache.getVolume(f),y=m(xe);if(0===y.length)return void a.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});const{ptLower:h,ptUpper:v,ctLower:S,ctUpper:I}=ge(y,d,t),{imageIds:b}=d,T=pe.cache.getVolumeContainingImageId(b[0]);if(!T)return void a.error("No PT volume found");const{imageIds:w}=p,E=pe.cache.getVolumeContainingImageId(w[0]);if(!E)return void a.error("No CT volume found");const x=T.volume,R=E.volume;return ae.utilities.segmentation.rectangleROIThresholdVolumeByRange(y,g,[{volume:x,lower:h,upper:v},{volume:R,lower:S,upper:I}],{overwrite:!0,segmentIndex:n,segmentationId:e})},calculateTMTV:async({segmentations:e})=>{const t=e.map((e=>e.segmentationId)),n=await ae.utilities.segmentation.computeMetabolicStats({segmentationIds:t,segmentIndex:1});return l.setSegmentationGroupStats(t,n),n},exportTMTVReportCSV:async({segmentations:e,tmtv:n,config:o,options:a})=>{const r=t.runCommand("getSegmentationCSVReport",{segmentations:e});let i=0;for(const e in r){i+=r[e].namedStats_lesionGlycolysis.value}const s=[{key:"Total Lesion Glycolysis",value:{tlg:i.toFixed(4)}},{key:"Threshold Configuration",value:{...o}}];void 0!==n&&s.unshift({key:"Total Metabolic Tumor Volume",value:{tmtv:n}}),function(e,t,n={}){const o=e[Object.keys(e)[0]],a=Object.keys(o),r=[a.join(",")];Object.values(e).forEach((e=>{const t=[];a.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,${o.PatientID}`),r.push(`Study Date,${o.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??`${o.PatientID}_tmtv.csv`,c.click()}(r,s,a)},setStartSliceForROIThresholdTool:()=>{const{viewport:e}=d(),{focalPoint:t}=e.getCamera(),n=m(xe)[0],o=ae.annotation.state.getAnnotation(n);o.data.startCoordinate=t,o.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{const{viewport:e}=d(),t=m(xe)[0],n=ae.annotation.state.getAnnotation(t),o=e.getCamera().focalPoint;n.data.endCoordinate=o,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{const e=ae.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach((t=>{const o=e.annotations[t],a=xe.reduce(((e,t)=>[...e,...o[t]??[]]),[]);n.push(...a)})),t.runCommand("exportRTReportForAnnotations",{annotations:n})},getSegmentationCSVReport:({segmentations:e})=>{e&&e.length||(e=l.getSegmentations());const t={};for(const n of e){const{label:e,segmentationId:o,representationData:a}=n,r=o,i={id:r,label:e};if(!a){t[r]=i;continue}const{cachedStats:s}=n.segments[1]||{};s&&Object.entries(s).forEach((([e,t])=>{"object"!=typeof t?i[e]=t:Object.entries(t).forEach((([t,n])=>{i[`${e}_${t}`]=n}))}));if(!n.representationData[Te.Labelmap]){t[r]=i;continue}const c=ae.utilities.segmentation.getReferenceVolumeForSegmentationVolume(o);if(!c){t[r]=i;continue}if(!c.imageIds||!c.imageIds.length){t[r]=i;continue}const l=c.imageIds[0],u=b().classes.MetadataProvider.get("instance",l);u?t[r]={...i,PatientID:u.PatientID??"000000",PatientName:we(u.PatientName),StudyInstanceUID:u.StudyInstanceUID,SeriesInstanceUID:u.SeriesInstanceUID,StudyDate:u.StudyDate}:t[r]=i}return t},exportRTReportForAnnotations:({annotations:e})=>{be(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{const o=s.getToolGroup(e);if(!o)return;const{viewportMatchDetails:a}=i.getMatchDetails(),r=f.getMatchingPTDisplaySet({viewportMatchDetails:a});if(!r)return;const l=o.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()}))}},g={setEndSliceForROIThresholdTool:{commandFn:f.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:f.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:f.getMatchingPTDisplaySet},getPTMetadata:{commandFn:f.getPTMetadata},createNewLabelmapFromPT:{commandFn:f.createNewLabelmapFromPT},thresholdSegmentationByRectangleROITool:{commandFn:f.thresholdSegmentationByRectangleROITool},calculateTMTV:{commandFn:f.calculateTMTV},exportTMTVReportCSV:{commandFn:f.exportTMTVReportCSV},createTMTVRTReport:{commandFn:f.createTMTVRTReport},getSegmentationCSVReport:{commandFn:f.getSegmentationCSVReport},exportRTReportForAnnotations:{commandFn:f.exportRTReportForAnnotations},setFusionPTColormap:{commandFn:f.setFusionPTColormap}};return{actions:f,definitions:g,defaultContext:"TMTV:CORNERSTONE"}},Oe="roi_stat",De=[{value:Oe,label:"Max",placeHolder:"Max"},{value:"range",label:"Range",placeHolder:"Range"}];const Ce=function({config:e,dispatch:t,runCommand:n}){const{t:o}=$("ROIThresholdConfiguration");return h.createElement("div",{className:"bg-primary-dark flex flex-col space-y-4 p-px"},h.createElement("div",{className:"flex items-end space-x-3"},h.createElement("div",{className:"flex min-w-0 flex-1 flex-col"},h.createElement(W.Select,{value:e.strategy,onValueChange:e=>{t({type:"setStrategy",payload:{strategy:e}})}},h.createElement(W.SelectTrigger,{className:"w-full"},h.createElement(W.SelectValue,{placeholder:De.find((t=>t.value===e.strategy))?.placeHolder})),h.createElement(W.SelectContent,{className:""},De.map((e=>h.createElement(W.SelectItem,{key:e.value,value:e.value},e.label)))))),h.createElement("div",{className:"flex-shrink-0"},h.createElement("div",{className:"flex justify-end space-x-2"},h.createElement(W.Button,{variant:"secondary",onClick:()=>n("setStartSliceForROIThresholdTool")},o("Start")),h.createElement(W.Button,{variant:"secondary",onClick:()=>n("setEndSliceForROIThresholdTool")},o("End"))))),e.strategy===Oe&&h.createElement("div",{className:"mr-0"},h.createElement("div",{className:"mb-2"},h.createElement(W.Label,null,o("Percentage of Max SUV"))),h.createElement(W.Input,{className:"w-full",type:"text",value:e.weight,onChange:e=>{t({type:"setWeight",payload:{weight:e.target.value}})}})),e.strategy!==Oe&&h.createElement("div",{className:"mr-2 text-sm"},h.createElement("div",{className:"flex flex-col space-y-2"},h.createElement(W.Label,null,"Lower & Upper Ranges"),h.createElement("div",{className:"flex items-center"},h.createElement("div",{className:"w-10 text-left"},h.createElement(W.Label,null,"CT")),h.createElement("div",{className:"flex flex-1 space-x-2"},h.createElement("div",{className:"flex-1"},h.createElement(W.Input,{className:"w-full",type:"text",value:e.ctLower,onChange:e=>{t({type:"setThreshold",payload:{ctLower:e.target.value}})}})),h.createElement("div",{className:"flex-1"},h.createElement(W.Input,{className:"w-full",type:"text",value:e.ctUpper,onChange:e=>{t({type:"setThreshold",payload:{ctUpper:e.target.value}})}})))),h.createElement("div",{className:"flex items-center"},h.createElement("div",{className:"w-10 text-left"},h.createElement(W.Label,null,"PT")),h.createElement("div",{className:"flex flex-1 space-x-2"},h.createElement("div",{className:"flex-1"},h.createElement(W.Input,{className:"w-full",type:"text",value:e.ptLower,onChange:e=>{t({type:"setThreshold",payload:{ptLower:e.target.value}})}})),h.createElement("div",{className:"flex-1"},h.createElement(W.Input,{className:"w-full",type:"text",value:e.ptUpper,onChange:e=>{t({type:"setThreshold",payload:{ptUpper:e.target.value}})}})))))))},Me=Oe;function Ne(e,t){const{payload:n}=t,{strategy:o,ctLower:a,ctUpper:r,ptLower:i,ptUpper:s,weight:c}=n;switch(t.type){case"setStrategy":return{...e,strategy:o};case"setThreshold":return{...e,ctLower:a||e.ctLower,ctUpper:r||e.ctUpper,ptLower:i||e.ptLower,ptUpper:s||e.ptUpper};case"setWeight":return{...e,weight:c};default:return e}}const Pe=function(){const{commandsManager:e}=(0,I.useSystem)(),t=(0,K.useSegmentations)()[0],n=(0,h.useCallback)(((t,n={})=>e.runCommand(t,n)),[e]),[o,a]=(0,h.useReducer)(Ne,{strategy:Me,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),r=(0,h.useCallback)((()=>{if(!t)return;const e=t.segmentationId,a=ae.segmentation.segmentIndex.getActiveSegmentIndex(e);n("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:o,segmentIndex:a})}),[t,o]);return h.createElement("div",{className:"invisible-scrollbar mb-1 flex flex-col overflow-y-auto overflow-x-hidden"},h.createElement(Ce,{config:o,dispatch:a,runCommand:n}),t&&h.createElement(W.Button,{variant:"default",className:"my-3 mr-auto w-20",onClick:r},"Run"))};const Le={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:o={}}){!function({servicesManager:e}){const{measurementService:t,displaySetService:n,cornerstoneViewportService:o}=e.services;(0,ae.addTool)(ae.RectangleROIStartEndThresholdTool),(0,ae.addTool)(ae.CircleROIStartEndThresholdTool);const{RectangleROIStartEndThreshold:a,CircleROIStartEndThreshold:r}=ce(t,n,o),i=t.getSource(le,ue);t.addMapping(i,"RectangleROIStartEndThreshold",a.matchingCriteria,a.toAnnotation,a.toMeasurement),t.addMapping(i,"CircleROIStartEndThreshold",r.matchingCriteria,r.toAnnotation,r.toMeasurement)}({servicesManager:e,commandsManager:t,extensionManager:n,configuration:o})},getToolbarModule:function(){return[{name:"tmtv.RectangleROIThresholdOptions",defaultComponent:Pe}]},getPanelModule:oe,getHangingProtocolModule:y,getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>Re({servicesManager:e,commandsManager:t,extensionManager:n})},Ue=Le})(),f})()));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-tmtv",
|
|
3
|
-
"version": "3.10.0
|
|
3
|
+
"version": "3.10.0",
|
|
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.10.0
|
|
34
|
-
"@ohif/ui": "3.10.0
|
|
33
|
+
"@ohif/core": "3.10.0",
|
|
34
|
+
"@ohif/ui": "3.10.0",
|
|
35
35
|
"dcmjs": "*",
|
|
36
36
|
"dicom-parser": "^1.8.9",
|
|
37
37
|
"hammerjs": "^2.0.8",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 584.ohif-extension-tmtv.umd.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("gl-matrix")):"function"==typeof define&&define.amd?define(["@cornerstonejs/core","@cornerstonejs/tools","@kitware/vtk.js/Common/Core/DataArray","@kitware/vtk.js/Common/DataModel/ImageData","gl-matrix"],t):"object"==typeof exports?exports["ohif-extension-tmtv"]=t(require("@cornerstonejs/core"),require("@cornerstonejs/tools"),require("@kitware/vtk.js/Common/Core/DataArray"),require("@kitware/vtk.js/Common/DataModel/ImageData"),require("gl-matrix")):e["ohif-extension-tmtv"]=t(e["@cornerstonejs/core"],e["@cornerstonejs/tools"],e["@kitware/vtk.js/Common/Core/DataArray"],e["@kitware/vtk.js/Common/DataModel/ImageData"],e["gl-matrix"])}(globalThis,((e,t,n,r,a)=>(()=>{"use strict";var o={557:t=>{t.exports=e},713:e=>{e.exports=t},670:e=>{e.exports=n},322:e=>{e.exports=r},155:e=>{e.exports=a}},s={};function i(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return o[e](n,n.exports,i),n.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var c=i(557),l=i(713),u=i(155),m=i(322),g=i.n(m),p=i(670),d=i.n(p);const f=Symbol("Comlink.proxy"),v=Symbol("Comlink.endpoint"),h=Symbol("Comlink.releaseProxy"),y=Symbol("Comlink.finalizer"),x=Symbol("Comlink.thrown"),b=e=>"object"==typeof e&&null!==e||"function"==typeof e,w={canHandle:e=>b(e)&&e[f],serialize(e){const{port1:t,port2:n}=new MessageChannel;return M(e,t),[n,[n]]},deserialize:e=>(e.start(),function(e,t){const n=new Map;return e.addEventListener("message",(function(e){const{data:t}=e;if(!t||!t.id)return;const r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}})),A(e,n,[],t)}(e))},k=new Map([["proxy",w],["throw",{canHandle:e=>b(e)&&x in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function M(e,t=globalThis,n=["*"]){t.addEventListener("message",(function r(a){if(!a||!a.data)return;if(!function(e,t){for(const n of e){if(t===n||"*"===n)return!0;if(n instanceof RegExp&&n.test(t))return!0}return!1}(n,a.origin))return void console.warn(`Invalid origin '${a.origin}' for comlink proxy`);const{id:o,type:s,path:i}=Object.assign({path:[]},a.data),c=(a.data.argumentList||[]).map(L);let l;try{const t=i.slice(0,-1).reduce(((e,t)=>e[t]),e),n=i.reduce(((e,t)=>e[t]),e);switch(s){case"GET":l=n;break;case"SET":t[i.slice(-1)[0]]=L(a.data.value),l=!0;break;case"APPLY":l=n.apply(t,c);break;case"CONSTRUCT":l=function(e){return Object.assign(e,{[f]:!0})}(new n(...c));break;case"ENDPOINT":{const{port1:t,port2:n}=new MessageChannel;M(e,n),l=function(e,t){return I.set(e,t),e}(t,[t])}break;case"RELEASE":l=void 0;break;default:return}}catch(e){l={value:e,[x]:0}}Promise.resolve(l).catch((e=>({value:e,[x]:0}))).then((n=>{const[a,i]=T(n);t.postMessage(Object.assign(Object.assign({},a),{id:o}),i),"RELEASE"===s&&(t.removeEventListener("message",r),j(t),y in e&&"function"==typeof e[y]&&e[y]())})).catch((e=>{const[n,r]=T({value:new TypeError("Unserializable return value"),[x]:0});t.postMessage(Object.assign(Object.assign({},n),{id:o}),r)}))})),t.start&&t.start()}function j(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function E(e){if(e)throw new Error("Proxy has been released and is not useable")}function S(e){return O(e,new Map,{type:"RELEASE"}).then((()=>{j(e)}))}const D=new WeakMap,P="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(D.get(e)||0)-1;D.set(e,t),0===t&&S(e)}));function A(e,t,n=[],r=function(){}){let a=!1;const o=new Proxy(r,{get(r,s){if(E(a),s===h)return()=>{!function(e){P&&P.unregister(e)}(o),S(e),t.clear(),a=!0};if("then"===s){if(0===n.length)return{then:()=>o};const r=O(e,t,{type:"GET",path:n.map((e=>e.toString()))}).then(L);return r.then.bind(r)}return A(e,t,[...n,s])},set(r,o,s){E(a);const[i,c]=T(s);return O(e,t,{type:"SET",path:[...n,o].map((e=>e.toString())),value:i},c).then(L)},apply(r,o,s){E(a);const i=n[n.length-1];if(i===v)return O(e,t,{type:"ENDPOINT"}).then(L);if("bind"===i)return A(e,t,n.slice(0,-1));const[c,l]=C(s);return O(e,t,{type:"APPLY",path:n.map((e=>e.toString())),argumentList:c},l).then(L)},construct(r,o){E(a);const[s,i]=C(o);return O(e,t,{type:"CONSTRUCT",path:n.map((e=>e.toString())),argumentList:s},i).then(L)}});return function(e,t){const n=(D.get(t)||0)+1;D.set(t,n),P&&P.register(e,t,e)}(o,e),o}function C(e){const t=e.map(T);return[t.map((e=>e[0])),(n=t.map((e=>e[1])),Array.prototype.concat.apply([],n))];var n}const I=new WeakMap;function T(e){for(const[t,n]of k)if(n.canHandle(e)){const[r,a]=n.serialize(e);return[{type:"HANDLER",name:t,value:r},a]}return[{type:"RAW",value:e},I.get(e)||[]]}function L(e){switch(e.type){case"HANDLER":return k.get(e.name).deserialize(e.value);case"RAW":return e.value}}function O(e,t,n,r){return new Promise((a=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.set(o,a),e.start&&e.start(),e.postMessage(Object.assign({id:o},n),r)}))}const R=({dimensions:e,origin:t,direction:n,spacing:r,metadata:a,scalarData:o})=>{const s=g().newInstance();s.setDimensions(e),s.setOrigin(t),s.setDirection(n),s.setSpacing(r);const i=d().newInstance({name:"Pixels",numberOfComponents:1,values:o});s.getPointData().setScalars(i),s.modified();return{imageData:s,spacing:r,origin:t,direction:n,metadata:a,voxelManager:c.utilities.VoxelManager.createScalarVolumeVoxelManager({scalarData:o,dimensions:e,numberOfComponents:1})}};return M({calculateSuvPeak:function({labelmapProps:e,referenceVolumeProps:t,annotations:n,segmentIndex:r=1}){const a=R(e),o=R(t);if("PT"!==o.metadata.Modality)return;const{dimensions:s,imageData:i}=a,{imageData:c}=o;let m;if(n?.length&&n[0].data?.cachedStats){const{projectionPoints:e}=n[0].data.cachedStats,t=[].concat(...e).map((e=>{const t=u.vec3.fromValues(0,0,0);return c.worldToIndex(e,t),t}));m=l.utilities.boundingBox.getBoundingBoxAroundShape(t,s)}let g=0,p=[0,0,0],d=[0,0,0];a.voxelManager.forEach((({pointIJK:e,pointLPS:t})=>{if(a.voxelManager.getAtIJKPoint(e)!==r)return;const n=o.voxelManager.getAtIJKPoint(e);n>g&&(g=n,p=e,d=t)}),{boundsIJK:m,imageData:i,isInObject:()=>!0,returnPoints:!0});const f=i.getDirection().slice(0,3),v=2*(10*Math.pow(1/(4/3*Math.PI),1/3)),h=u.vec3.create(),y=u.vec3.create(),x=u.vec3.create();c.indexToWorld(p,h),u.vec3.scaleAndAdd(y,h,f,-v/2),u.vec3.scaleAndAdd(x,h,f,v/2);const b=[y,x];let w=0,k=0;return l.utilities.pointInSurroundingSphereCallback(c,b,(({value:e})=>{k+=e,w+=1})),{max:g,maxIJK:p,maxLPS:d,mean:k/w}},calculateTMTV:function(e,t=1){const n=e.map((e=>R(e))),r=1===n.length?n[0]:l.utilities.segmentation.createMergedLabelmapForIndex(n),{imageData:a,spacing:o}=r;return.001*a.getPointData().getScalars().getData().reduce(((e,t)=>t>0?e+1:e),0)*o[0]*o[1]*o[2]},getTotalLesionGlycolysis:function({labelmapProps:e,referenceVolumeProps:t}){const n=e.map((e=>R(e))),r=1===n.length?n[0]:l.utilities.segmentation.createMergedLabelmapForIndex(n),{spacing:a}=n[0],o=R(t);let s=0,i=0;const c=r.voxelManager.getScalarDataLength();for(let e=0;e<c;e++)0!==r.voxelManager.getAtIndex(e)&&(s+=o.voxelManager.getAtIndex(e),i+=1);return s/i*i*a[0]*a[1]*a[2]*.001}}),{}})()));
|