@ohif/extension-tmtv 3.13.0-beta.105 → 3.13.0-beta.106

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 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/core/src/utils"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/core/src"),require("@ohif/extension-default")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","@ohif/extension-cornerstone","@ohif/core/src/utils","@ohif/ui-next","@cornerstonejs/core","dcmjs","@ohif/i18n","@cornerstonejs/tools","@ohif/core/src","@ohif/extension-default"],t):"object"==typeof exports?exports["ohif-extension-tmtv"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/core/src/utils"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/core/src"),require("@ohif/extension-default")):e["ohif-extension-tmtv"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["@ohif/extension-cornerstone"],e["@ohif/core/src/utils"],e["@ohif/ui-next"],e["@cornerstonejs/core"],e.dcmjs,e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@ohif/core/src"],e["@ohif/extension-default"])}(globalThis,(e,t,n,o,a,r,i,s,l,c,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=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"),Symbol.for("react.profiler"),Symbol.for("react.provider")),i=Symbol.for("react.context"),s=(Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.iterator),l={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},c=Object.assign,u={};function p(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}function d(){}function m(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}p.prototype.isReactComponent={},p.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")},p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},d.prototype=p.prototype;var f=m.prototype=new d;f.constructor=m,c(f,p.prototype),f.isPureReactComponent=!0;var g=Array.isArray,y=Object.prototype.hasOwnProperty,h=null,v={key:!0,ref:!0,__self:!0,__source:!0},S=null;t.Fragment=a,t.createContext=function(e){return(e={$$typeof:i,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:r,_context:e},e.Consumer=e},t.createElement=function(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)y.call(t,a)&&!v.hasOwnProperty(a)&&(r[a]=t[a]);var l=arguments.length-2;if(1===l)r.children=o;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];r.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===r[a]&&(r[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:h}},t.useCallback=function(e,t){return S.useCallback(e,t)},t.useContext=function(e){return S.useContext(e)},t.useEffect=function(e,t){return S.useEffect(e,t)},t.useReducer=function(e,t,n){return S.useReducer(e,t,n)},t.useRef=function(e){return S.useRef(e)},t.useState=function(e){return S.useState(e)}},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(e){"use strict";e.exports=t},557(e){"use strict";e.exports=r},713(e){"use strict";e.exports=l},2(t){"use strict";t.exports=e},459(e){"use strict";e.exports=c},141(e){"use strict";e.exports=o},669(e){"use strict";e.exports=n},438(e){"use strict";e.exports=u},545(e){"use strict";e.exports=s},55(e){"use strict";e.exports=a},111(e){"use strict";e.exports=i}},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=>{"u">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:()=>ew});let 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"}]},l={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"}]},c={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={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,l,c,u,p,d],createdDate:"2021-02-23T18:32:42.850Z"},y={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:[l,s,i,d,p,u,c]},h={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:[g,{name:"Fusion 2x2",id:"Fusion-2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[o,c,i,d]},{name:"2x3-layout",id:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[o,a,r,i,s,l]},y],numberOfPriorsReferenced:-1};var v,S=m(326),b=m(598),T=m.n(b),I=m(2),x=m.n(I);function E(e){return(E="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})(e)}function R(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=E(o))return o;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==E(t)?t:t+""}function w(){if(console&&console.warn){for(var e,t=arguments.length,n=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)}}m(741),Object.create(null);var O={};function C(){for(var e=arguments.length,t=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),w.apply(void 0,t))}var D=function(e,t){return function(){e.isInitialized?t():e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}};function N(e,t,n){e.loadNamespaces(t,D(e,n))}function P(e,t,n,o){"string"==typeof n&&(n=[n]),n.forEach(function(t){0>e.options.ns.indexOf(t)&&e.options.ns.push(t)}),e.loadLanguages(t,D(e,o))}var L=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,M={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"©","&#169;":"©","&reg;":"®","&#174;":"®","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},j=function(e){return M[e]},U={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(L,j)}},F=(0,S.createContext)(),A=function(){var e;function t(){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");this.usedNamespaces={}}return 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)}}],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,R(o.key),o)}}(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}();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 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 k(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){var o,a;o=t,a=n[t],(o=R(o))in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var _=function(e,t){var n=(0,S.useRef)();return(0,S.useEffect)(function(){n.current=t?n.current:e},[e,t]),n.current};function G(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.i18n,a=(0,S.useContext)(F)||{},r=a.i18n,i=a.defaultNS,s=o||r||v;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new A),!s){C("You will need to pass in an i18next instance by using initReactI18next");var l=function(e,t){return"string"==typeof t?t:t&&"object"===E(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},c=[l,{},!1];return c.t=l,c.i18n={},c.ready=!1,c}s.options.react&&void 0!==s.options.react.wait&&C("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var u=k(k(k({},U),s.options.react),n),p=u.useSuspense,d=u.keyPrefix,m=e||i||s.options&&s.options.defaultNS;m="string"==typeof m?[m]:m||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(m);var f=(s.isInitialized||s.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?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):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}}):(C("i18n.languages were undefined or empty",t.languages),!0)}(e,s,u)});function g(){return s.getFixedT(n.lng||null,"fallback"===u.nsMode?m:m[0],d)}var y=function(e){if(Array.isArray(e))return e}(t=(0,S.useState)(g))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a,r,i=[],s=!0,l=!1;try{a=(t=t.call(e)).next,!1;for(;!(s=(n=a.call(t)).done)&&(i.push(n.value),2!==i.length);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=t.return&&(r=t.return(),Object(r)!==r))return}finally{if(l)throw o}}return i}}(t)||function(e){if(e){if("string"==typeof e)return V(e,2);var t=({}).toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?V(e,2):void 0}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),h=y[0],b=y[1],T=m.join();n.lng&&(T="".concat(n.lng).concat(T));var I=_(T),x=(0,S.useRef)(!0);(0,S.useEffect)(function(){var e=u.bindI18n,t=u.bindI18nStore;function o(){x.current&&b(g)}return x.current=!0,f||p||(n.lng?P(s,n.lng,m,function(){x.current&&b(g)}):N(s,m,function(){x.current&&b(g)})),f&&I&&I!==T&&x.current&&b(g),e&&s&&s.on(e,o),t&&s&&s.store.on(t,o),function(){x.current=!1,e&&s&&e.split(" ").forEach(function(e){return s.off(e,o)}),t&&s&&t.split(" ").forEach(function(e){return s.store.off(e,o)})}},[s,T]);var R=(0,S.useRef)(!0);(0,S.useEffect)(function(){x.current&&!R.current&&b(g),R.current=!1},[s,d]);var w=[h,s,f];if(w.t=h,w.i18n=s,w.ready=f,f||!f&&!p)return w;throw new Promise(function(e){n.lng?P(s,n.lng,m,function(){return e()}):N(s,m,function(){return e()})})}var W=m(55),B=m(459);function $(){return($=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}).apply(null,arguments)}let H={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}},z=({children:e,className:t,...n})=>S.createElement("div",$({className:`flex flex-row items-center space-x-4 ${t||""}`},n),e);function Y(){let{commandsManager:e,servicesManager:t}=(0,B.useSystem)(),{t:n}=G("PanelSUV"),{displaySetService:o,hangingProtocolService:a}=t.services,[r,i]=(0,S.useState)(H),[s,l]=(0,S.useState)(null),c=e=>{i(t=>{let n={...t};return Object.keys(e).forEach(o=>{"object"==typeof e[o]?n[o]={...t[o],...e[o]}:n[o]=e[o]}),n})},u=t=>{let n=e.runCommand("getMatchingPTDisplaySet",{viewportMatchDetails:t});if(!n)return;let o=e.runCommand("getPTMetadata",{ptDisplaySet:n});return{ptDisplaySet:n,metadata:o}};return(0,S.useEffect)(()=>{let e=o.getActiveDisplaySets(),{viewportMatchDetails:t}=a.getMatchDetails();if(!e.length)return;let n=u(t);if(!n)return;let{ptDisplaySet:r,metadata:s}=n;l(r),i(s)},[]),(0,S.useEffect)(()=>{let{unsubscribe:e}=a.subscribe(a.EVENTS.PROTOCOL_CHANGED,({viewportMatchDetails:e})=>{let t=u(e);if(!t)return;let{ptDisplaySet:n,metadata:o}=t;l(n),i(o)});return()=>{e()}},[]),S.createElement(S.Fragment,null,S.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},S.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-background text-base"},S.createElement(W.PanelSection,{defaultOpen:!0},S.createElement(W.PanelSection.Header,null,n("Patient Information")),S.createElement(W.PanelSection.Content,null,S.createElement("div",{className:"bg-muted flex flex-col gap-3 p-2"},S.createElement(z,null,S.createElement(z.Label,null,n("Patient Sex")),S.createElement(z.Input,{value:r.PatientSex||"",onChange:e=>{c({PatientSex:e.target.value})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"kg"},n("Weight")),S.createElement(z.Input,{value:r.PatientWeight||"",onChange:e=>{c({PatientWeight:e.target.value})},id:"weight-input"})),S.createElement(z,null,S.createElement(z.Label,{unit:"bq"},n("Total Dose")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Half Life")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadionuclideHalfLife:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Injection Time")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadiopharmaceuticalStartTime:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Acquisition Time")),S.createElement(z.Input,{value:r.SeriesTime||"",onChange:()=>{}})),S.createElement(W.Button,{variant:"default",size:"sm",className:"self-end px-4",onClick:function(){if(!s)throw Error("No ptDisplaySet found");I.DicomMetadataStore.updateMetadataForSeries(s.StudyInstanceUID,s.SeriesInstanceUID,r),o.setDisplaySetMetadataInvalidated(s.displaySetInstanceUID),setTimeout(()=>{e.runCommand("resetCrosshairs")},0)}},n("Reload Data"))))))))}z.Label=({children:e,unit:t,className:n,...o})=>S.createElement(W.Label,$({className:`min-w-32 flex-shrink-0 ${n||""}`},o),e,t&&S.createElement("span",{className:"text-muted-foreground"}," ",t)),z.Input=({className:e,...t})=>S.createElement(W.Input,$({className:`h-7 flex-1 ${e||""}`},t)),z.Label.displayName="InputRow.Label",z.Input.displayName="InputRow.Input",Y.propTypes={servicesManager:T().shape({services:T().shape({measurementService:T().shape({getMeasurements:T().func.isRequired,subscribe:T().func.isRequired,EVENTS:T().object.isRequired,VALUE_TYPES:T().object.isRequired}).isRequired}).isRequired}).isRequired};var J=m(669);let X=async({commandsManager:e,segmentationService:t})=>{let 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 K(){let{commandsManager:e,servicesManager:t}=(0,B.useSystem)(),{segmentationService:n}=t.services,{segmentationsWithRepresentations:o}=(0,J.useActiveViewportSegmentationRepresentations)(),a=o?.map(e=>e.segmentation.segmentationId)||[],r=o?.map(e=>e.segmentation)||[];(0,S.useEffect)(()=>{(async()=>{for(let t of a)await X({segmentationId:t,commandsManager:e,segmentationService:n})})()},[]),(0,S.useEffect)(()=>{let t=(0,Z.debounce)(async t=>{let{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]);let i=n.getSegmentationGroupStats(a),s=i?.tmtv;return S.createElement("div",{className:"mb-1 flex flex-col"},S.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},S.createElement("div",{className:"bg-popover flex items-baseline justify-between px-2 py-1"},S.createElement("div",{className:"py-1"},S.createElement("span",{className:"text-muted-foreground text-base font-bold uppercase"},"TMTV: "),S.createElement("span",{className:"text-foreground"},s?`${s.toFixed(3)} mL`:"")),S.createElement("div",{className:"flex items-center"},S.createElement(W.Button,{dataCY:"exportTmtvCsvReport",size:"sm",variant:"ghost",onClick:()=>{r.length&&e.runCommand("exportTMTVReportCSV",{segmentations:r,tmtv:s,config:{}})}},S.createElement("span",{className:"pl-1"},"CSV"))))))}var Q=m(438);function ee({configuration:e}){return S.createElement(S.Fragment,null,S.createElement(J.PanelSegmentation,{configuration:e},S.createElement(K,null)))}var et=m(545),en=m.n(et),eo=m(713);let ea=["RectangleROIStartEndThreshold","CircleROIStartEndThreshold"],er=(e,t)=>{},ei=(e,t)=>{},{CORNERSTONE_3D_TOOLS_SOURCE_NAME:es,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:el}=J.Enums;var ec=m(557);let eu=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)};let{weight:o}=n;return{ctLower:-1/0,ctUpper:Infinity,ptLower:o*function(e,t){let{imageIds:n}=e,o=ec.cache.getVolumeContainingImageId(n[0]);if(!o)throw Error("No volume found for display set");let{volume:a}=o,{voxelManager:r}=a,{fn:i,baseValue:s}={fn:(e,t)=>(e>t&&(t=e),t),baseValue:-1/0},l=s,c=eo.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations(t,a);return r.forEach(({value:e})=>{l=i(e,l)},{boundsIJK:c}),l}(t,e.map(e=>eo.annotation.state.getAnnotation(e))),ptUpper:Infinity}},{downloadCsv:ep}=I.utils;var ed=m(111),em=m.n(ed),ef=m(142);let{datasetToBlob:eg}=em().data,ey=I.classes.MetadataProvider,eh=function(e){let t=eg(ef.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,ey,I.DicomMetadataStore));var n=URL.createObjectURL(t);window.location.assign(n)},{SegmentationRepresentations:ev}=eo.Enums,{formatPN:eS}=I.utils,eb=I.classes.MetadataProvider,eT=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],eI="roi_stat",ex=function({config:e,dispatch:t,runCommand:n}){let{t:o}=G("ROIThresholdConfiguration"),a=[{value:eI,label:o("Max"),placeHolder:o("Max")},{value:"range",label:o("Range"),placeHolder:o("Range")}];return S.createElement("div",{className:"bg-muted flex flex-col space-y-4 p-px"},S.createElement("div",{className:"flex items-end space-x-3"},S.createElement("div",{className:"flex min-w-0 flex-1 flex-col"},S.createElement(W.Select,{value:e.strategy,onValueChange:e=>{t({type:"setStrategy",payload:{strategy:e}})}},S.createElement(W.SelectTrigger,{className:"w-full"},S.createElement(W.SelectValue,{placeholder:a.find(t=>t.value===e.strategy)?.placeHolder})),S.createElement(W.SelectContent,{className:""},a.map(e=>S.createElement(W.SelectItem,{key:e.value,value:e.value},e.label))))),S.createElement("div",{className:"flex-shrink-0"},S.createElement("div",{className:"flex justify-end space-x-2"},S.createElement(W.Button,{variant:"secondary",onClick:()=>n("setStartSliceForROIThresholdTool")},o("Start")),S.createElement(W.Button,{variant:"secondary",onClick:()=>n("setEndSliceForROIThresholdTool")},o("End"))))),e.strategy===eI&&S.createElement("div",{className:"mr-0"},S.createElement("div",{className:"mb-2"},S.createElement(W.Label,null,o("Percentage of Max SUV"))),S.createElement(W.Input,{"data-cy":"percentage-of-max-suv-input",className:"w-full",type:"text",value:e.weight,onChange:e=>{let n=e.target.value;"."===n&&(n="0."),isNaN(Number(n))||0>Number(n)||Number(n)>1||t({type:"setWeight",payload:{weight:n}})}})),e.strategy!==eI&&S.createElement("div",{className:"mr-2 text-sm"},S.createElement("div",{className:"flex flex-col space-y-2"},S.createElement(W.Label,null,o("Lower & Upper Ranges")),S.createElement("div",{className:"flex items-center"},S.createElement("div",{className:"w-10 text-left"},S.createElement(W.Label,null,"CT")),S.createElement("div",{className:"flex flex-1 space-x-2"},S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ctLower,onChange:e=>{t({type:"setThreshold",payload:{ctLower:e.target.value}})}})),S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ctUpper,onChange:e=>{t({type:"setThreshold",payload:{ctUpper:e.target.value}})}})))),S.createElement("div",{className:"flex items-center"},S.createElement("div",{className:"w-10 text-left"},S.createElement(W.Label,null,"PT")),S.createElement("div",{className:"flex flex-1 space-x-2"},S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ptLower,onChange:e=>{t({type:"setThreshold",payload:{ptLower:e.target.value}})}})),S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ptUpper,onChange:e=>{t({type:"setThreshold",payload:{ptUpper:e.target.value}})}})))))))};function eE(e,t){let{payload:n}=t,{strategy:o,ctLower:a,ctUpper:r,ptLower:i,ptUpper:s,weight:l}=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:l};default:return e}}let eR=function(){let{commandsManager:e}=(0,I.useSystem)(),t=(0,J.useSegmentations)()[0],{t:n}=G("ROIThresholdConfiguration"),o=(0,S.useCallback)((t,n={})=>e.runCommand(t,n),[e]),[a,r]=(0,S.useReducer)(eE,{strategy:eI,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),i=(0,S.useCallback)(()=>{if(!t)return;let e=t.segmentationId,n=eo.segmentation.segmentIndex.getActiveSegmentIndex(e);o("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:a,segmentIndex:n})},[t,a]);return S.createElement("div",{className:"invisible-scrollbar mb-1 flex flex-col overflow-y-auto overflow-x-hidden"},S.createElement(ex,{config:a,dispatch:r,runCommand:o}),t&&S.createElement(W.Button,{variant:"default",className:"my-3 mr-auto w-20",onClick:i},n("Run")))},ew={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:o={}}){!function({servicesManager:e}){let{measurementService:t,displaySetService:n,cornerstoneViewportService:o}=e.services;(0,eo.addTool)(eo.RectangleROIStartEndThresholdTool),(0,eo.addTool)(eo.CircleROIStartEndThresholdTool);let{RectangleROIStartEndThreshold:a,CircleROIStartEndThreshold:r}={RectangleROIStartEndThreshold:{toAnnotation:er,toMeasurement:e=>((e,t,n)=>{let o,{annotation:a,viewportId:r}=e,{metadata:i,data:s,annotationUID:l}=a;if(!i||!s)return console.warn("Length tool: Missing metadata or data"),null;let{toolName:c,referencedImageId:u,FrameOfReferenceUID:p}=i;if(!ea.includes(c))throw Error("Tool not supported");let{SOPInstanceUID:d,SeriesInstanceUID:m,StudyInstanceUID:f}=(0,J.getSOPInstanceAttributes)(u,n,r);return o=d?t.getDisplaySetForSOPInstanceUID(d,m):t.getDisplaySetsForSeries(m),{uid:l,SOPInstanceUID:d,FrameOfReferenceUID:p,metadata:i,referenceSeriesUID:m,referenceStudyUID:f,toolName:i.toolName,displaySetInstanceUID:o.displaySetInstanceUID,label:i.label,data:s.cachedStats,type:"RectangleROIStartEndThreshold"}})(e,n,o),matchingCriteria:[{valueType:t.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:ei,toMeasurement:e=>((e,t,n)=>{let o,{annotation:a,viewportId:r}=e,{metadata:i,data:s,annotationUID:l}=a;if(!i||!s)return console.warn("Length tool: Missing metadata or data"),null;let{toolName:c,referencedImageId:u,FrameOfReferenceUID:p}=i;if(!ea.includes(c))throw Error("Tool not supported");let{SOPInstanceUID:d,SeriesInstanceUID:m,StudyInstanceUID:f}=(0,J.getSOPInstanceAttributes)(u,n,r);o=d?t.getDisplaySetForSOPInstanceUID(d,m):t.getDisplaySetsForSeries(m);let{cachedStats:g}=s;return{uid:l,SOPInstanceUID:d,FrameOfReferenceUID:p,metadata:i,referenceSeriesUID:m,referenceStudyUID:f,toolName:i.toolName,displaySetInstanceUID:o.displaySetInstanceUID,label:i.label,data:s.cachedStats,type:"CircleROIStartEndThreshold"}})(e,n,o),matchingCriteria:[{valueType:t.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}},i=t.getSource(es,el);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:eR}]},getPanelModule:function({commandsManager:e,extensionManager:t,servicesManager:n}){let{toolbarService:o}=n.services;return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:()=>S.createElement(Y,null)},{name:"tmtv",iconName:"tab-segmentation",iconLabel:"Segmentation",component:()=>S.createElement(S.Fragment,null,S.createElement(Q.Toolbox,{buttonSectionId:o.sections.roiThresholdToolbox,title:en().t("ROIThresholdConfiguration:Threshold Tools")}),S.createElement(ee,{commandsManager:e,servicesManager:n}))},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:()=>S.createElement(Q.Toolbox,{buttonSectionId:o.sections.roiThresholdToolbox,title:en().t("ROIThresholdConfiguration:Threshold Tools")})},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>S.createElement(K,null)}]},getHangingProtocolModule:function(){return[{name:h.id,protocol:h}]},getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>(({servicesManager:e,commandsManager:t,extensionManager:n})=>{let{viewportGridService:o,uiNotificationService:a,displaySetService:r,hangingProtocolService:i,toolGroupService:s,cornerstoneViewportService:l,segmentationService:c}=e.services,{getEnabledElement:u}=n.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common").exports;function p(){let{activeViewportId:e}=o.getState(),{element:t}=u(e)||{};return ec.getEnabledElement(t)}function d(e){return e.reduce((e,t)=>{let n=eo.annotation.selection.getAnnotationsSelectedByToolName(t);return e.concat(n)},[])}let m={getMatchingPTDisplaySet:({viewportMatchDetails:e})=>{let t=null;for(let[,n]of e){let{displaySetsInfo:e}=n,o=e.map(({displaySetInstanceUID:e})=>r.getDisplaySetByUID(e));if(o&&0!==o.length&&(t=o.find(e=>"PT"===e.Modality)))break}return t},getPTMetadata:({ptDisplaySet:e})=>{let t=n.getDataSources()[0].getImageIdsForDisplaySet(e)[0],o=eb.get("instance",t);if("PT"===o.Modality)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})=>{let{viewportMatchDetails:t}=i.getMatchDetails(),n=m.getMatchingPTDisplaySet({viewportMatchDetails:t}),o=null;for(let[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");let s=c.getSegmentationRepresentations(o),l=r.getDisplaySetByUID(n.displaySetInstanceUID),u=await c.createLabelmapForDisplaySet(l,{label:`Segmentation ${s.length+1}`,segments:{1:{label:`${en().t("Segment")} 1`,active:!0}}});return c.addSegmentationRepresentation(o,{segmentationId:u}),u},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{let{representationData:o}=eo.segmentation.state.getSegmentation(e),{displaySetMatchDetails:s}=i.getMatchDetails(),l=s.get("ctDisplaySet"),c=s.get("ptDisplaySet"),u=r.getDisplaySetByUID(l.displaySetInstanceUID),p=r.getDisplaySetByUID(c.displaySetInstanceUID),{volumeId:m}=o[ev.Labelmap],f=ec.cache.getVolume(m),g=d(eT);if(0===g.length)return void a.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});let{ptLower:y,ptUpper:h,ctLower:v,ctUpper:S}=eu(g,p,t),{imageIds:b}=p,T=ec.cache.getVolumeContainingImageId(b[0]);if(!T)return void a.error("No PT volume found");let{imageIds:I}=u,x=ec.cache.getVolumeContainingImageId(I[0]);if(!x)return void a.error("No CT volume found");let E=T.volume,R=x.volume;return eo.utilities.segmentation.rectangleROIThresholdVolumeByRange(g,f,[{volume:E,lower:y,upper:h},{volume:R,lower:v,upper:S}],{overwrite:!0,segmentIndex:n,segmentationId:e})},calculateTMTV:async({segmentations:e})=>{let t=e.map(e=>e.segmentationId),n=await eo.utilities.segmentation.computeMetabolicStats({segmentationIds:t,segmentIndex:1});return c.setSegmentationGroupStats(t,n),n},exportTMTVReportCSV:async({segmentations:e,tmtv:n,config:o,options:a})=>{let r=t.runCommand("getSegmentationCSVReport",{segmentations:e}),i=0;for(let e in r)i+=r[e].namedStats_lesionGlycolysis.value;let 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={}){let o=e[Object.keys(e)[0]],a=Object.keys(o),r=[a.map(e=>e.toLowerCase().startsWith("namedstats_")?e.substring(11):e).join(",")];Object.values(e).forEach(e=>{let t=[];a.forEach(n=>{t.push(e[n]&&"object"==typeof e[n]?Array.isArray(e[n])?e[n].join(" "):e[n].value&&Array.isArray(e[n].value)?e[n].value.join(" "):e[n].value??e[n]: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})=>{let n=[];n.push(`${e}`),Object.keys(t).forEach(e=>{n.push(`${e}`),n.push(`${t[e]}`)}),r.push(n.join(","))}),ep(r.join("\n"),{filename:n.filename??`${o.PatientID}_tmtv.csv`})}(r,s,a)},setStartSliceForROIThresholdTool:()=>{let{viewport:e}=p(),{focalPoint:t}=e.getCamera(),n=d(eT)[0],o=eo.annotation.state.getAnnotation(n);o.data.startCoordinate=t,o.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{let{viewport:e}=p(),t=d(eT)[0],n=eo.annotation.state.getAnnotation(t),o=e.getCamera().focalPoint;n.data.endCoordinate=o,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{let e=eo.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach(t=>{let o=e.annotations[t],a=eT.reduce((e,t)=>[...e,...o[t]??[]],[]);n.push(...a)}),t.runCommand("exportRTReportForAnnotations",{annotations:n})},getSegmentationCSVReport:({segmentations:e})=>{e&&e.length||(e=c.getSegmentations());let t={};for(let n of e){let{label:e,segmentationId:o,representationData:a}=n,r={id:o,label:e};if(!a){t[o]=r;continue}let{cachedStats:i}=n.segments[1]||{};if(i&&Object.entries(i).forEach(([e,t])=>{"object"!=typeof t?r[e]=t:Object.entries(t).forEach(([t,n])=>{r[`${e}_${t}`]=n})}),!n.representationData[ev.Labelmap]){t[o]=r;continue}let s=eo.utilities.segmentation.getReferenceVolumeForSegmentation(o);if(!s||!s.imageIds||!s.imageIds.length){t[o]=r;continue}let l=s.imageIds[0],c=x().classes.MetadataProvider.get("instance",l);if(!c){t[o]=r;continue}t[o]={...r,PatientID:c.PatientID??"000000",PatientName:eS(c.PatientName),StudyInstanceUID:c.StudyInstanceUID,SeriesInstanceUID:c.SeriesInstanceUID,StudyDate:c.StudyDate}}return t},exportRTReportForAnnotations:({annotations:e})=>{eh(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{let o=s.getToolGroup(e);if(!o)return;let{viewportMatchDetails:a}=i.getMatchDetails(),r=m.getMatchingPTDisplaySet({viewportMatchDetails:a});if(!r)return;let c=o.getViewportIds(),u=[];c.forEach(e=>{t.runCommand("setViewportColormap",{viewportId:e,displaySetInstanceUID:r.displaySetInstanceUID,colormap:{name:n}}),u.push(l.getCornerstoneViewport(e))}),u.forEach(e=>{e.render()})}},f={setEndSliceForROIThresholdTool:{commandFn:m.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:m.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:m.getMatchingPTDisplaySet},getPTMetadata:{commandFn:m.getPTMetadata},createNewLabelmapFromPT:{commandFn:m.createNewLabelmapFromPT},thresholdSegmentationByRectangleROITool:{commandFn:m.thresholdSegmentationByRectangleROITool},calculateTMTV:{commandFn:m.calculateTMTV},exportTMTVReportCSV:{commandFn:m.exportTMTVReportCSV},createTMTVRTReport:{commandFn:m.createTMTVRTReport},getSegmentationCSVReport:{commandFn:m.getSegmentationCSVReport},exportRTReportForAnnotations:{commandFn:m.exportRTReportForAnnotations},setFusionPTColormap:{commandFn:m.setFusionPTColormap}};return{actions:m,definitions:f,defaultContext:"TMTV:CORNERSTONE"}})({servicesManager:e,commandsManager:t,extensionManager:n})}})(),f})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/core/src/utils"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/core/src"),require("@ohif/extension-default")):"function"==typeof define&&define.amd?define(["@ohif/core","@cornerstonejs/adapters","@ohif/extension-cornerstone","@ohif/core/src/utils","@ohif/ui-next","@cornerstonejs/core","dcmjs","@ohif/i18n","@cornerstonejs/tools","@ohif/core/src","@ohif/extension-default"],t):"object"==typeof exports?exports["ohif-extension-tmtv"]=t(require("@ohif/core"),require("@cornerstonejs/adapters"),require("@ohif/extension-cornerstone"),require("@ohif/core/src/utils"),require("@ohif/ui-next"),require("@cornerstonejs/core"),require("dcmjs"),require("@ohif/i18n"),require("@cornerstonejs/tools"),require("@ohif/core/src"),require("@ohif/extension-default")):e["ohif-extension-tmtv"]=t(e["@ohif/core"],e["@cornerstonejs/adapters"],e["@ohif/extension-cornerstone"],e["@ohif/core/src/utils"],e["@ohif/ui-next"],e["@cornerstonejs/core"],e.dcmjs,e["@ohif/i18n"],e["@cornerstonejs/tools"],e["@ohif/core/src"],e["@ohif/extension-default"])}(globalThis,(e,t,n,o,a,r,i,s,l,c,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=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"),Symbol.for("react.profiler"),Symbol.for("react.provider")),i=Symbol.for("react.context"),s=(Symbol.for("react.forward_ref"),Symbol.for("react.suspense"),Symbol.for("react.memo"),Symbol.for("react.lazy"),Symbol.iterator),l={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},c=Object.assign,u={};function p(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}function d(){}function m(e,t,n){this.props=e,this.context=t,this.refs=u,this.updater=n||l}p.prototype.isReactComponent={},p.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")},p.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},d.prototype=p.prototype;var f=m.prototype=new d;f.constructor=m,c(f,p.prototype),f.isPureReactComponent=!0;var g=Array.isArray,y=Object.prototype.hasOwnProperty,h=null,v={key:!0,ref:!0,__self:!0,__source:!0},S=null;t.Fragment=a,t.createContext=function(e){return(e={$$typeof:i,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:r,_context:e},e.Consumer=e},t.createElement=function(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)y.call(t,a)&&!v.hasOwnProperty(a)&&(r[a]=t[a]);var l=arguments.length-2;if(1===l)r.children=o;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];r.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===r[a]&&(r[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:r,_owner:h}},t.useCallback=function(e,t){return S.useCallback(e,t)},t.useContext=function(e){return S.useContext(e)},t.useEffect=function(e,t){return S.useEffect(e,t)},t.useReducer=function(e,t,n){return S.useReducer(e,t,n)},t.useRef=function(e){return S.useRef(e)},t.useState=function(e){return S.useState(e)}},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(e){"use strict";e.exports=t},557(e){"use strict";e.exports=r},713(e){"use strict";e.exports=l},2(t){"use strict";t.exports=e},459(e){"use strict";e.exports=c},141(e){"use strict";e.exports=o},669(e){"use strict";e.exports=n},438(e){"use strict";e.exports=u},545(e){"use strict";e.exports=s},55(e){"use strict";e.exports=a},111(e){"use strict";e.exports=i}},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=>{"u">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:()=>ew});let 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"}]},l={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"}]},c={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={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,l,c,u,p,d],createdDate:"2021-02-23T18:32:42.850Z"},y={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:[l,s,i,d,p,u,c]},h={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:[g,{name:"Fusion 2x2",id:"Fusion-2x2",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:2}},viewports:[o,c,i,d]},{name:"2x3-layout",id:"2x3-layout",viewportStructure:{layoutType:"grid",properties:{rows:2,columns:3}},viewports:[o,a,r,i,s,l]},y],numberOfPriorsReferenced:-1};var v,S=m(326),b=m(598),T=m.n(b),I=m(2),x=m.n(I);function E(e){return(E="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})(e)}function R(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=E(o))return o;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==E(t)?t:t+""}function w(){if(console&&console.warn){for(var e,t=arguments.length,n=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)}}m(741),Object.create(null);var O={};function C(){for(var e=arguments.length,t=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),w.apply(void 0,t))}var D=function(e,t){return function(){e.isInitialized?t():e.on("initialized",function n(){setTimeout(function(){e.off("initialized",n)},0),t()})}};function N(e,t,n){e.loadNamespaces(t,D(e,n))}function P(e,t,n,o){"string"==typeof n&&(n=[n]),n.forEach(function(t){0>e.options.ns.indexOf(t)&&e.options.ns.push(t)}),e.loadLanguages(t,D(e,o))}var L=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,M={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"',"&nbsp;":" ","&#160;":" ","&copy;":"\xa9","&#169;":"\xa9","&reg;":"\xae","&#174;":"\xae","&hellip;":"…","&#8230;":"…","&#x2F;":"/","&#47;":"/"},j=function(e){return M[e]},U={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(L,j)}},F=(0,S.createContext)(),A=function(){var e;function t(){if(!(this instanceof t))throw TypeError("Cannot call a class as a function");this.usedNamespaces={}}return 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)}}],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,R(o.key),o)}}(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t}();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 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 k(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){var o,a;o=t,a=n[t],(o=R(o))in e?Object.defineProperty(e,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[o]=a}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):q(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var _=function(e,t){var n=(0,S.useRef)();return(0,S.useEffect)(function(){n.current=t?n.current:e},[e,t]),n.current};function G(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=n.i18n,a=(0,S.useContext)(F)||{},r=a.i18n,i=a.defaultNS,s=o||r||v;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new A),!s){C("You will need to pass in an i18next instance by using initReactI18next");var l=function(e,t){return"string"==typeof t?t:t&&"object"===E(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},c=[l,{},!1];return c.t=l,c.i18n={},c.ready=!1,c}s.options.react&&void 0!==s.options.react.wait&&C("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var u=k(k(k({},U),s.options.react),n),p=u.useSuspense,d=u.keyPrefix,m=e||i||s.options&&s.options.defaultNS;m="string"==typeof m?[m]:m||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(m);var f=(s.isInitialized||s.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?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):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}}):(C("i18n.languages were undefined or empty",t.languages),!0)}(e,s,u)});function g(){return s.getFixedT(n.lng||null,"fallback"===u.nsMode?m:m[0],d)}var y=function(e){if(Array.isArray(e))return e}(t=(0,S.useState)(g))||function(e){var t=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a,r,i=[],s=!0,l=!1;try{a=(t=t.call(e)).next,!1;for(;!(s=(n=a.call(t)).done)&&(i.push(n.value),2!==i.length);s=!0);}catch(e){l=!0,o=e}finally{try{if(!s&&null!=t.return&&(r=t.return(),Object(r)!==r))return}finally{if(l)throw o}}return i}}(t)||function(e){if(e){if("string"==typeof e)return V(e,2);var t=({}).toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?V(e,2):void 0}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),h=y[0],b=y[1],T=m.join();n.lng&&(T="".concat(n.lng).concat(T));var I=_(T),x=(0,S.useRef)(!0);(0,S.useEffect)(function(){var e=u.bindI18n,t=u.bindI18nStore;function o(){x.current&&b(g)}return x.current=!0,f||p||(n.lng?P(s,n.lng,m,function(){x.current&&b(g)}):N(s,m,function(){x.current&&b(g)})),f&&I&&I!==T&&x.current&&b(g),e&&s&&s.on(e,o),t&&s&&s.store.on(t,o),function(){x.current=!1,e&&s&&e.split(" ").forEach(function(e){return s.off(e,o)}),t&&s&&t.split(" ").forEach(function(e){return s.store.off(e,o)})}},[s,T]);var R=(0,S.useRef)(!0);(0,S.useEffect)(function(){x.current&&!R.current&&b(g),R.current=!1},[s,d]);var w=[h,s,f];if(w.t=h,w.i18n=s,w.ready=f,f||!f&&!p)return w;throw new Promise(function(e){n.lng?P(s,n.lng,m,function(){return e()}):N(s,m,function(){return e()})})}var W=m(55),B=m(459);function $(){return($=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}).apply(null,arguments)}let H={PatientWeight:null,PatientSex:null,SeriesTime:null,RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:null,RadionuclideHalfLife:null,RadiopharmaceuticalStartTime:null}},z=({children:e,className:t,...n})=>S.createElement("div",$({className:`flex flex-row items-center space-x-4 ${t||""}`},n),e);function Y(){let{commandsManager:e,servicesManager:t}=(0,B.useSystem)(),{t:n}=G("PanelSUV"),{displaySetService:o,hangingProtocolService:a}=t.services,[r,i]=(0,S.useState)(H),[s,l]=(0,S.useState)(null),c=e=>{i(t=>{let n={...t};return Object.keys(e).forEach(o=>{"object"==typeof e[o]?n[o]={...t[o],...e[o]}:n[o]=e[o]}),n})},u=t=>{let n=e.runCommand("getMatchingPTDisplaySet",{viewportMatchDetails:t});if(!n)return;let o=e.runCommand("getPTMetadata",{ptDisplaySet:n});return{ptDisplaySet:n,metadata:o}};return(0,S.useEffect)(()=>{let e=o.getActiveDisplaySets(),{viewportMatchDetails:t}=a.getMatchDetails();if(!e.length)return;let n=u(t);if(!n)return;let{ptDisplaySet:r,metadata:s}=n;l(r),i(s)},[]),(0,S.useEffect)(()=>{let{unsubscribe:e}=a.subscribe(a.EVENTS.PROTOCOL_CHANGED,({viewportMatchDetails:e})=>{let t=u(e);if(!t)return;let{ptDisplaySet:n,metadata:o}=t;l(n),i(o)});return()=>{e()}},[]),S.createElement(S.Fragment,null,S.createElement("div",{className:"ohif-scrollbar flex min-h-0 flex-auto select-none flex-col justify-between overflow-auto"},S.createElement("div",{className:"flex min-h-0 flex-1 flex-col bg-background text-base"},S.createElement(W.PanelSection,{defaultOpen:!0},S.createElement(W.PanelSection.Header,null,n("Patient Information")),S.createElement(W.PanelSection.Content,null,S.createElement("div",{className:"bg-muted flex flex-col gap-3 p-2"},S.createElement(z,null,S.createElement(z.Label,null,n("Patient Sex")),S.createElement(z.Input,{value:r.PatientSex||"",onChange:e=>{c({PatientSex:e.target.value})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"kg"},n("Weight")),S.createElement(z.Input,{value:r.PatientWeight||"",onChange:e=>{c({PatientWeight:e.target.value})},id:"weight-input"})),S.createElement(z,null,S.createElement(z.Label,{unit:"bq"},n("Total Dose")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadionuclideTotalDose||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadionuclideTotalDose:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Half Life")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadionuclideHalfLife||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadionuclideHalfLife:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Injection Time")),S.createElement(z.Input,{value:r.RadiopharmaceuticalInformationSequence.RadiopharmaceuticalStartTime||"",onChange:e=>{c({RadiopharmaceuticalInformationSequence:{RadiopharmaceuticalStartTime:e.target.value}})}})),S.createElement(z,null,S.createElement(z.Label,{unit:"s"},n("Acquisition Time")),S.createElement(z.Input,{value:r.SeriesTime||"",onChange:()=>{}})),S.createElement(W.Button,{variant:"default",size:"sm",className:"self-end px-4",onClick:function(){if(!s)throw Error("No ptDisplaySet found");I.DicomMetadataStore.updateMetadataForSeries(s.StudyInstanceUID,s.SeriesInstanceUID,r),o.setDisplaySetMetadataInvalidated(s.displaySetInstanceUID),setTimeout(()=>{e.runCommand("resetCrosshairs")},0)}},n("Reload Data"))))))))}z.Label=({children:e,unit:t,className:n,...o})=>S.createElement(W.Label,$({className:`min-w-32 flex-shrink-0 ${n||""}`},o),e,t&&S.createElement("span",{className:"text-muted-foreground"}," ",t)),z.Input=({className:e,...t})=>S.createElement(W.Input,$({className:`h-7 flex-1 ${e||""}`},t)),z.Label.displayName="InputRow.Label",z.Input.displayName="InputRow.Input",Y.propTypes={servicesManager:T().shape({services:T().shape({measurementService:T().shape({getMeasurements:T().func.isRequired,subscribe:T().func.isRequired,EVENTS:T().object.isRequired,VALUE_TYPES:T().object.isRequired}).isRequired}).isRequired}).isRequired};var J=m(669);let X=async({commandsManager:e,segmentationService:t})=>{let 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 K(){let{commandsManager:e,servicesManager:t}=(0,B.useSystem)(),{segmentationService:n}=t.services,{segmentationsWithRepresentations:o}=(0,J.useActiveViewportSegmentationRepresentations)(),a=o?.map(e=>e.segmentation.segmentationId)||[],r=o?.map(e=>e.segmentation)||[];(0,S.useEffect)(()=>{(async()=>{for(let t of a)await X({segmentationId:t,commandsManager:e,segmentationService:n})})()},[]),(0,S.useEffect)(()=>{let t=(0,Z.debounce)(async t=>{let{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]);let i=n.getSegmentationGroupStats(a),s=i?.tmtv;return S.createElement("div",{className:"mb-1 flex flex-col"},S.createElement("div",{className:"invisible-scrollbar overflow-y-auto overflow-x-hidden"},S.createElement("div",{className:"bg-popover flex items-baseline justify-between px-2 py-1"},S.createElement("div",{className:"py-1"},S.createElement("span",{className:"text-muted-foreground text-base font-bold uppercase"},"TMTV: "),S.createElement("span",{className:"text-foreground"},s?`${s.toFixed(3)} mL`:"")),S.createElement("div",{className:"flex items-center"},S.createElement(W.Button,{dataCY:"exportTmtvCsvReport",size:"sm",variant:"ghost",onClick:()=>{r.length&&e.runCommand("exportTMTVReportCSV",{segmentations:r,tmtv:s,config:{}})}},S.createElement("span",{className:"pl-1"},"CSV"))))))}var Q=m(438);function ee({configuration:e}){return S.createElement(S.Fragment,null,S.createElement(J.PanelSegmentation,{configuration:e},S.createElement(K,null)))}var et=m(545),en=m.n(et),eo=m(713);let ea=["RectangleROIStartEndThreshold","CircleROIStartEndThreshold"],er=(e,t)=>{},ei=(e,t)=>{},{CORNERSTONE_3D_TOOLS_SOURCE_NAME:es,CORNERSTONE_3D_TOOLS_SOURCE_VERSION:el}=J.Enums;var ec=m(557);let eu=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)};let{weight:o}=n;return{ctLower:-1/0,ctUpper:Infinity,ptLower:o*function(e,t){let{imageIds:n}=e,o=ec.cache.getVolumeContainingImageId(n[0]);if(!o)throw Error("No volume found for display set");let{volume:a}=o,{voxelManager:r}=a,{fn:i,baseValue:s}={fn:(e,t)=>(e>t&&(t=e),t),baseValue:-1/0},l=s,c=eo.utilities.rectangleROITool.getBoundsIJKFromRectangleAnnotations(t,a);return r.forEach(({value:e})=>{l=i(e,l)},{boundsIJK:c}),l}(t,e.map(e=>eo.annotation.state.getAnnotation(e))),ptUpper:Infinity}},{downloadCsv:ep}=I.utils;var ed=m(111),em=m.n(ed),ef=m(142);let{datasetToBlob:eg}=em().data,ey=I.classes.MetadataProvider,eh=function(e){let t=eg(ef.adaptersRT.Cornerstone3D.RTSS.generateRTSSFromAnnotations(e,ey,I.DicomMetadataStore));var n=URL.createObjectURL(t);window.location.assign(n)},{SegmentationRepresentations:ev}=eo.Enums,{formatPN:eS}=I.utils,eb=I.classes.MetadataProvider,eT=["RectangleROIStartEndThreshold","RectangleROIThreshold","CircleROIStartEndThreshold"],eI="roi_stat",ex=function({config:e,dispatch:t,runCommand:n}){let{t:o}=G("ROIThresholdConfiguration"),a=[{value:eI,label:o("Max"),placeHolder:o("Max")},{value:"range",label:o("Range"),placeHolder:o("Range")}];return S.createElement("div",{className:"bg-muted flex flex-col space-y-4 p-px"},S.createElement("div",{className:"flex items-end space-x-3"},S.createElement("div",{className:"flex min-w-0 flex-1 flex-col"},S.createElement(W.Select,{value:e.strategy,onValueChange:e=>{t({type:"setStrategy",payload:{strategy:e}})}},S.createElement(W.SelectTrigger,{className:"w-full"},S.createElement(W.SelectValue,{placeholder:a.find(t=>t.value===e.strategy)?.placeHolder})),S.createElement(W.SelectContent,{className:""},a.map(e=>S.createElement(W.SelectItem,{key:e.value,value:e.value},e.label))))),S.createElement("div",{className:"flex-shrink-0"},S.createElement("div",{className:"flex justify-end space-x-2"},S.createElement(W.Button,{variant:"secondary",onClick:()=>n("setStartSliceForROIThresholdTool")},o("Start")),S.createElement(W.Button,{variant:"secondary",onClick:()=>n("setEndSliceForROIThresholdTool")},o("End"))))),e.strategy===eI&&S.createElement("div",{className:"mr-0"},S.createElement("div",{className:"mb-2"},S.createElement(W.Label,null,o("Percentage of Max SUV"))),S.createElement(W.Input,{"data-cy":"percentage-of-max-suv-input",className:"w-full",type:"text",value:e.weight,onChange:e=>{let n=e.target.value;"."===n&&(n="0."),isNaN(Number(n))||0>Number(n)||Number(n)>1||t({type:"setWeight",payload:{weight:n}})}})),e.strategy!==eI&&S.createElement("div",{className:"mr-2 text-sm"},S.createElement("div",{className:"flex flex-col space-y-2"},S.createElement(W.Label,null,o("Lower & Upper Ranges")),S.createElement("div",{className:"flex items-center"},S.createElement("div",{className:"w-10 text-left"},S.createElement(W.Label,null,"CT")),S.createElement("div",{className:"flex flex-1 space-x-2"},S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ctLower,onChange:e=>{t({type:"setThreshold",payload:{ctLower:e.target.value}})}})),S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ctUpper,onChange:e=>{t({type:"setThreshold",payload:{ctUpper:e.target.value}})}})))),S.createElement("div",{className:"flex items-center"},S.createElement("div",{className:"w-10 text-left"},S.createElement(W.Label,null,"PT")),S.createElement("div",{className:"flex flex-1 space-x-2"},S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ptLower,onChange:e=>{t({type:"setThreshold",payload:{ptLower:e.target.value}})}})),S.createElement("div",{className:"flex-1"},S.createElement(W.Input,{className:"w-full",type:"text",value:e.ptUpper,onChange:e=>{t({type:"setThreshold",payload:{ptUpper:e.target.value}})}})))))))};function eE(e,t){let{payload:n}=t,{strategy:o,ctLower:a,ctUpper:r,ptLower:i,ptUpper:s,weight:l}=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:l};default:return e}}let eR=function(){let{commandsManager:e}=(0,I.useSystem)(),t=(0,J.useSegmentations)()[0],{t:n}=G("ROIThresholdConfiguration"),o=(0,S.useCallback)((t,n={})=>e.runCommand(t,n),[e]),[a,r]=(0,S.useReducer)(eE,{strategy:eI,ctLower:-1024,ctUpper:1024,ptLower:2.5,ptUpper:100,weight:.41}),i=(0,S.useCallback)(()=>{if(!t)return;let e=t.segmentationId,n=eo.segmentation.segmentIndex.getActiveSegmentIndex(e);o("thresholdSegmentationByRectangleROITool",{segmentationId:e,config:a,segmentIndex:n})},[t,a]);return S.createElement("div",{className:"invisible-scrollbar mb-1 flex flex-col overflow-y-auto overflow-x-hidden"},S.createElement(ex,{config:a,dispatch:r,runCommand:o}),t&&S.createElement(W.Button,{variant:"default",className:"my-3 mr-auto w-20",onClick:i},n("Run")))},ew={id:e,preRegistration({servicesManager:e,commandsManager:t,extensionManager:n,configuration:o={}}){!function({servicesManager:e}){let{measurementService:t,displaySetService:n,cornerstoneViewportService:o}=e.services;(0,eo.addTool)(eo.RectangleROIStartEndThresholdTool),(0,eo.addTool)(eo.CircleROIStartEndThresholdTool);let{RectangleROIStartEndThreshold:a,CircleROIStartEndThreshold:r}={RectangleROIStartEndThreshold:{toAnnotation:er,toMeasurement:e=>((e,t,n)=>{let o,{annotation:a,viewportId:r}=e,{metadata:i,data:s,annotationUID:l}=a;if(!i||!s)return console.warn("Length tool: Missing metadata or data"),null;let{toolName:c,referencedImageId:u,FrameOfReferenceUID:p}=i;if(!ea.includes(c))throw Error("Tool not supported");let{SOPInstanceUID:d,SeriesInstanceUID:m,StudyInstanceUID:f}=(0,J.getSOPInstanceAttributes)(u,n,r);return o=d?t.getDisplaySetForSOPInstanceUID(d,m):t.getDisplaySetsForSeries(m),{uid:l,SOPInstanceUID:d,FrameOfReferenceUID:p,metadata:i,referenceSeriesUID:m,referenceStudyUID:f,toolName:i.toolName,displaySetInstanceUID:o.displaySetInstanceUID,label:i.label,data:s.cachedStats,type:"RectangleROIStartEndThreshold"}})(e,n,o),matchingCriteria:[{valueType:t.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]},CircleROIStartEndThreshold:{toAnnotation:ei,toMeasurement:e=>((e,t,n)=>{let o,{annotation:a,viewportId:r}=e,{metadata:i,data:s,annotationUID:l}=a;if(!i||!s)return console.warn("Length tool: Missing metadata or data"),null;let{toolName:c,referencedImageId:u,FrameOfReferenceUID:p}=i;if(!ea.includes(c))throw Error("Tool not supported");let{SOPInstanceUID:d,SeriesInstanceUID:m,StudyInstanceUID:f}=(0,J.getSOPInstanceAttributes)(u,n,r);o=d?t.getDisplaySetForSOPInstanceUID(d,m):t.getDisplaySetsForSeries(m);let{cachedStats:g}=s;return{uid:l,SOPInstanceUID:d,FrameOfReferenceUID:p,metadata:i,referenceSeriesUID:m,referenceStudyUID:f,toolName:i.toolName,displaySetInstanceUID:o.displaySetInstanceUID,label:i.label,data:s.cachedStats,type:"CircleROIStartEndThreshold"}})(e,n,o),matchingCriteria:[{valueType:t.VALUE_TYPES.ROI_THRESHOLD_MANUAL}]}},i=t.getSource(es,el);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:eR}]},getPanelModule:function({commandsManager:e,extensionManager:t,servicesManager:n}){let{toolbarService:o}=n.services;return[{name:"petSUV",iconName:"tab-patient-info",iconLabel:"Patient Info",label:"Patient Info",component:()=>S.createElement(Y,null)},{name:"tmtv",iconName:"tab-segmentation",iconLabel:"Segmentation",component:()=>S.createElement(S.Fragment,null,S.createElement(Q.Toolbox,{buttonSectionId:o.sections.roiThresholdToolbox,title:en().t("ROIThresholdConfiguration:Threshold Tools")}),S.createElement(ee,{commandsManager:e,servicesManager:n}))},{name:"tmtvBox",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Toolbox",component:()=>S.createElement(Q.Toolbox,{buttonSectionId:o.sections.roiThresholdToolbox,title:en().t("ROIThresholdConfiguration:Threshold Tools")})},{name:"tmtvExport",iconName:"tab-segmentation",iconLabel:"Segmentation",label:"Segmentation Export",component:()=>S.createElement(K,null)}]},getHangingProtocolModule:function(){return[{name:h.id,protocol:h}]},getCommandsModule:({servicesManager:e,commandsManager:t,extensionManager:n})=>(({servicesManager:e,commandsManager:t,extensionManager:n})=>{let{viewportGridService:o,uiNotificationService:a,displaySetService:r,hangingProtocolService:i,toolGroupService:s,cornerstoneViewportService:l,segmentationService:c}=e.services,{getEnabledElement:u}=n.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common").exports;function p(){let{activeViewportId:e}=o.getState(),{element:t}=u(e)||{};return ec.getEnabledElement(t)}function d(e){return e.reduce((e,t)=>{let n=eo.annotation.selection.getAnnotationsSelectedByToolName(t);return e.concat(n)},[])}let m={getMatchingPTDisplaySet:({viewportMatchDetails:e})=>{let t=null;for(let[,n]of e){let{displaySetsInfo:e}=n,o=e.map(({displaySetInstanceUID:e})=>r.getDisplaySetByUID(e));if(o&&0!==o.length&&(t=o.find(e=>"PT"===e.Modality)))break}return t},getPTMetadata:({ptDisplaySet:e})=>{let t=n.getDataSources()[0].getImageIdsForDisplaySet(e)[0],o=eb.get("instance",t);if("PT"===o.Modality)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})=>{let{viewportMatchDetails:t}=i.getMatchDetails(),n=m.getMatchingPTDisplaySet({viewportMatchDetails:t}),o=null;for(let[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");let s=c.getSegmentationRepresentations(o),l=r.getDisplaySetByUID(n.displaySetInstanceUID),u=await c.createLabelmapForDisplaySet(l,{label:`Segmentation ${s.length+1}`,segments:{1:{label:`${en().t("Segment")} 1`,active:!0}}});return c.addSegmentationRepresentation(o,{segmentationId:u}),u},thresholdSegmentationByRectangleROITool:({segmentationId:e,config:t,segmentIndex:n})=>{let{representationData:o}=eo.segmentation.state.getSegmentation(e),{displaySetMatchDetails:s}=i.getMatchDetails(),l=s.get("ctDisplaySet"),c=s.get("ptDisplaySet"),u=r.getDisplaySetByUID(l.displaySetInstanceUID),p=r.getDisplaySetByUID(c.displaySetInstanceUID),{volumeId:m}=o[ev.Labelmap],f=ec.cache.getVolume(m),g=d(eT);if(0===g.length)return void a.show({title:"Commands Module",message:"No ROIThreshold Tool is Selected",type:"error"});let{ptLower:y,ptUpper:h,ctLower:v,ctUpper:S}=eu(g,p,t),{imageIds:b}=p,T=ec.cache.getVolumeContainingImageId(b[0]);if(!T)return void a.error("No PT volume found");let{imageIds:I}=u,x=ec.cache.getVolumeContainingImageId(I[0]);if(!x)return void a.error("No CT volume found");let E=T.volume,R=x.volume;return eo.utilities.segmentation.rectangleROIThresholdVolumeByRange(g,f,[{volume:E,lower:y,upper:h},{volume:R,lower:v,upper:S}],{overwrite:!0,segmentIndex:n,segmentationId:e})},calculateTMTV:async({segmentations:e})=>{let t=e.map(e=>e.segmentationId),n=await eo.utilities.segmentation.computeMetabolicStats({segmentationIds:t,segmentIndex:1});return c.setSegmentationGroupStats(t,n),n},exportTMTVReportCSV:async({segmentations:e,tmtv:n,config:o,options:a})=>{let r=t.runCommand("getSegmentationCSVReport",{segmentations:e}),i=0;for(let e in r)i+=r[e].namedStats_lesionGlycolysis.value;let 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={}){let o=e[Object.keys(e)[0]],a=Object.keys(o),r=[a.map(e=>e.toLowerCase().startsWith("namedstats_")?e.substring(11):e).join(",")];Object.values(e).forEach(e=>{let t=[];a.forEach(n=>{t.push(e[n]&&"object"==typeof e[n]?Array.isArray(e[n])?e[n].join(" "):e[n].value&&Array.isArray(e[n].value)?e[n].value.join(" "):e[n].value??e[n]: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})=>{let n=[];n.push(`${e}`),Object.keys(t).forEach(e=>{n.push(`${e}`),n.push(`${t[e]}`)}),r.push(n.join(","))}),ep(r.join("\n"),{filename:n.filename??`${o.PatientID}_tmtv.csv`})}(r,s,a)},setStartSliceForROIThresholdTool:()=>{let{viewport:e}=p(),{focalPoint:t}=e.getCamera(),n=d(eT)[0],o=eo.annotation.state.getAnnotation(n);o.data.startCoordinate=t,o.invalidated=!0,e.render()},setEndSliceForROIThresholdTool:()=>{let{viewport:e}=p(),t=d(eT)[0],n=eo.annotation.state.getAnnotation(t),o=e.getCamera().focalPoint;n.data.endCoordinate=o,n.invalidated=!0,e.render()},createTMTVRTReport:()=>{let e=eo.annotation.state.getAnnotationManager(),n=[];Object.keys(e.annotations).forEach(t=>{let o=e.annotations[t],a=eT.reduce((e,t)=>[...e,...o[t]??[]],[]);n.push(...a)}),t.runCommand("exportRTReportForAnnotations",{annotations:n})},getSegmentationCSVReport:({segmentations:e})=>{e&&e.length||(e=c.getSegmentations());let t={};for(let n of e){let{label:e,segmentationId:o,representationData:a}=n,r={id:o,label:e};if(!a){t[o]=r;continue}let{cachedStats:i}=n.segments[1]||{};if(i&&Object.entries(i).forEach(([e,t])=>{"object"!=typeof t?r[e]=t:Object.entries(t).forEach(([t,n])=>{r[`${e}_${t}`]=n})}),!n.representationData[ev.Labelmap]){t[o]=r;continue}let s=eo.utilities.segmentation.getReferenceVolumeForSegmentation(o);if(!s||!s.imageIds||!s.imageIds.length){t[o]=r;continue}let l=s.imageIds[0],c=x().classes.MetadataProvider.get("instance",l);if(!c){t[o]=r;continue}t[o]={...r,PatientID:c.PatientID??"000000",PatientName:eS(c.PatientName),StudyInstanceUID:c.StudyInstanceUID,SeriesInstanceUID:c.SeriesInstanceUID,StudyDate:c.StudyDate}}return t},exportRTReportForAnnotations:({annotations:e})=>{eh(e)},setFusionPTColormap:({toolGroupId:e,colormap:n})=>{let o=s.getToolGroup(e);if(!o)return;let{viewportMatchDetails:a}=i.getMatchDetails(),r=m.getMatchingPTDisplaySet({viewportMatchDetails:a});if(!r)return;let c=o.getViewportIds(),u=[];c.forEach(e=>{t.runCommand("setViewportColormap",{viewportId:e,displaySetInstanceUID:r.displaySetInstanceUID,colormap:{name:n}}),u.push(l.getCornerstoneViewport(e))}),u.forEach(e=>{e.render()})}},f={setEndSliceForROIThresholdTool:{commandFn:m.setEndSliceForROIThresholdTool},setStartSliceForROIThresholdTool:{commandFn:m.setStartSliceForROIThresholdTool},getMatchingPTDisplaySet:{commandFn:m.getMatchingPTDisplaySet},getPTMetadata:{commandFn:m.getPTMetadata},createNewLabelmapFromPT:{commandFn:m.createNewLabelmapFromPT},thresholdSegmentationByRectangleROITool:{commandFn:m.thresholdSegmentationByRectangleROITool},calculateTMTV:{commandFn:m.calculateTMTV},exportTMTVReportCSV:{commandFn:m.exportTMTVReportCSV},createTMTVRTReport:{commandFn:m.createTMTVRTReport},getSegmentationCSVReport:{commandFn:m.getSegmentationCSVReport},exportRTReportForAnnotations:{commandFn:m.exportRTReportForAnnotations},setFusionPTColormap:{commandFn:m.setFusionPTColormap}};return{actions:m,definitions:f,defaultContext:"TMTV:CORNERSTONE"}})({servicesManager:e,commandsManager:t,extensionManager:n})}})(),f})());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohif/extension-tmtv",
3
- "version": "3.13.0-beta.105",
3
+ "version": "3.13.0-beta.106",
4
4
  "description": "OHIF extension for Total Metabolic Tumor Volume",
5
5
  "author": "OHIF",
6
6
  "license": "MIT",
@@ -26,8 +26,8 @@
26
26
  "hammerjs": "2.0.8",
27
27
  "prop-types": "15.8.1",
28
28
  "react": "18.3.1",
29
- "@ohif/core": "3.13.0-beta.105",
30
- "@ohif/ui": "3.13.0-beta.105"
29
+ "@ohif/ui": "3.13.0-beta.106",
30
+ "@ohif/core": "3.13.0-beta.106"
31
31
  },
32
32
  "dependencies": {
33
33
  "@babel/runtime": "7.29.7",