@ohif/extension-cornerstone-dicom-rt 3.6.0-beta.2 → 3.6.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-cornerstone-dicom-rt.umd.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@ohif/core","dcmjs","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-rt"]=t(require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-rt"]=t(e["@ohif/core"],e.dcmjs,e["@ohif/ui"])}(globalThis,((e,t,n)=>(()=>{var r,o,a={646:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>M});var r=n(735),o=n(216),a=n.n(o),i=n(762),s=n.n(i),c=n(369);const u=async function(e){let{rtDisplaySet:t,viewportIndex:n,servicesManager:r}=e;const{segmentationService:o,hangingProtocolService:a,viewportGridService:i}=r.services,s=t.referencedDisplaySetInstanceUID;let c=null;c=await o.createSegmentationForRTDisplaySet(t,c,!1),o.hydrateSegmentation(t.displaySetInstanceUID);const{viewports:u}=i.getState(),l=a.getViewportsRequireUpdate(n,s);return i.setDisplaySetsForViewports(l),u.forEach(((e,r)=>{if(r===n)return;o.shouldRenderSegmentation(e.displaySetInstanceUIDs,t.displaySetInstanceUID)&&l.push({viewportIndex:r,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{initialImageOptions:{preset:"middle"}}})})),i.setDisplaySetsForViewports(l),!0},l={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const f=function(e){let{servicesManager:t,rtDisplaySet:n,viewportIndex:r,toolGroupId:o="default"}=e;const{uiViewportDialogService:a}=t.services;return new Promise((async function(e,i){const s=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",a=[{type:"secondary",text:"No",value:l.CANCEL},{type:"primary",text:"Yes",value:l.HYDRATE_SEG}],i=t=>{e.hide(),n(t)};e.show({viewportIndex:t,type:"info",message:o,actions:a,onSubmit:i,onOutsideClick:()=>{e.hide(),n(l.CANCEL)}})}))}(a,r);if(s===l.HYDRATE_SEG){e(await u({rtDisplaySet:n,viewportIndex:r,toolGroupId:o,servicesManager:t}))}}))};function p(e){return p="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},p(e)}function d(e){var t=function(e,t){if("object"!==p(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===p(t)?t:String(t)}function y(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n(432);Object.create(null);function m(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var S={};function g(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&S[t[0]]||("string"==typeof t[0]&&(S[t[0]]=new Date),m.apply(void 0,t))}function v(e,t,n){e.loadNamespaces(t,(function(){if(e.isInitialized)n();else{e.on("initialized",(function t(){setTimeout((function(){e.off("initialized",t)}),0),n()}))}}))}var b=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,I={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},h=function(e){return I[e]};var O,D={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(b,h)}};function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}var R=(0,r.createContext)(),E=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}var t,n,r;return t=e,(n=[{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)}}])&&w(t.prototype,n),r&&w(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function P(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 r,o,a,i,s=[],c=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.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)?C(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 T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?T(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var U=function(e,t){var n=(0,r.useRef)();return(0,r.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function N(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(R)||{},a=o.i18n,i=o.defaultNS,s=n||a||O;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new E),!s){g("You will need to pass in an i18next instance by using initReactI18next");var c=function(e,t){return"string"==typeof t?t:t&&"object"===p(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},u=[c,{},!1];return u.t=c,u.i18n={},u.ready=!1,u}s.options.react&&void 0!==s.options.react.wait&&g("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=j(j(j({},D),s.options.react),t),f=l.useSuspense,d=l.keyPrefix,y=e||i||s.options&&s.options.defaultNS;y="string"==typeof y?[y]:y||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(y);var m=(s.isInitialized||s.initializedStoreOnce)&&y.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,{precheck:function(t,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,a=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var i=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!i(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!i(r,e)||o&&!i(a,e)))}(e,t,n):(g("i18n.languages were undefined or empty",t.languages),!0)}(e,s,l)}));function S(){return s.getFixedT(null,"fallback"===l.nsMode?y:y[0],d)}var b=P((0,r.useState)(S),2),I=b[0],h=b[1],w=y.join(),C=U(w),T=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=l.bindI18n,t=l.bindI18nStore;function n(){T.current&&h(S)}return T.current=!0,m||f||v(s,y,(function(){T.current&&h(S)})),m&&C&&C!==w&&T.current&&h(S),e&&s&&s.on(e,n),t&&s&&s.store.on(t,n),function(){T.current=!1,e&&s&&e.split(" ").forEach((function(e){return s.off(e,n)})),t&&s&&t.split(" ").forEach((function(e){return s.store.off(e,n)}))}}),[s,w]);var N=(0,r.useRef)(!0);(0,r.useEffect)((function(){T.current&&!N.current&&h(S),N.current=!1}),[s,d]);var x=[I,s,m];if(x.t=I,x.i18n=s,x.ready=m,m)return x;if(!m&&!f)return x;throw new Promise((function(e){v(s,y,(function(){e()}))}))}const x=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r,{})};function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},k.apply(this,arguments)}const{formatDate:_}=i.utils;function A(e){const{children:t,displaySets:n,viewportOptions:o,viewportIndex:a,viewportLabel:i,servicesManager:l,extensionManager:p}=e,{displaySetService:d,toolGroupService:y,segmentationService:m,uiNotificationService:S,customizationService:g}=l.services,v=`RTToolGroup-${a}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const b=n[0],[I,h]=(0,c.useViewportGrid)(),[O,D]=(0,r.useState)(!1),[w,R]=(0,r.useState)(1),[E,C]=(0,r.useState)(b.isHydrated),[P,T]=(0,r.useState)(!b.isLoaded),[j,U]=(0,r.useState)(null),[A,M]=(0,r.useState)({percentComplete:null,totalSegments:null}),q=(0,r.useRef)(null),{viewports:L,activeViewportIndex:F}=I,$=b.getReferenceDisplaySet(),V=function(e){const t=e.images[0],n={PatientID:t.PatientID,PatientName:t.PatientName,PatientSex:t.PatientSex,PatientAge:t.PatientAge,SliceThickness:t.SliceThickness,StudyDate:t.StudyDate,SeriesDescription:t.SeriesDescription,SeriesInstanceUID:t.SeriesInstanceUID,SeriesNumber:t.SeriesNumber,ManufacturerModelName:t.ManufacturerModelName,SpacingBetweenSlices:t.SpacingBetweenSlices};return n}($);q.current={displaySet:$,metadata:V};const G=e=>{U(e.detail.element)},B=()=>{U(null)},H=(0,r.useCallback)((()=>{const{component:t}=p.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=q.current;return r.createElement(t,k({},e,{displaySets:[n,b],viewportOptions:{viewportType:"volume",toolGroupId:v,orientation:o.orientation,viewportId:o.viewportId},onElementEnabled:G,onElementDisabled:B}))}),[a,b,v]),z=(0,r.useCallback)((e=>{e="left"===e?-1:1;const t=b.displaySetInstanceUID,n=m.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let a=w+e;a>=o-1?a=1:0===a&&(a=o-1),m.jumpToSegmentCenter(t,a,v),R(a)}),[w]);(0,r.useEffect)((()=>{P||f({servicesManager:l,viewportIndex:a,rtDisplaySet:b}).then((e=>{e&&C(!0)}))}),[l,a,b,P]),(0,r.useEffect)((()=>{const{unsubscribe:e}=m.subscribe(m.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.rtDisplaySet.displaySetInstanceUID===b.displaySetInstanceUID&&T(!1),e.overlappingSegments&&S.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const{unsubscribe:e}=m.subscribe(m.EVENTS.SEGMENT_LOADING_COMPLETE,(e=>{let{percentComplete:t,numSegments:n}=e;M({percentComplete:t,totalSegments:n})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const e=d.subscribe(d.EVENTS.DISPLAY_SETS_REMOVED,(e=>{let{displaySetInstanceUIDs:t}=e;const n=L[F];t.includes(n.displaySetInstanceUID)&&h.setDisplaySetsForViewport({viewportIndex:F,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=y.getToolGroup(v);if(!e)return e=x(y,g,v),D(!0),()=>{m.removeSegmentationRepresentationFromToolGroup(v),y.destroyToolGroup(v)}}),[]),(0,r.useEffect)((()=>(C(b.isHydrated),()=>{m.removeSegmentationRepresentationFromToolGroup(v),q.current=null})),[b]);let Y=null;if(!q.current||$.displaySetInstanceUID!==q.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(Y=t.map(((e,t)=>e&&r.cloneElement(e,{viewportIndex:a,key:t}))));const{PatientID:W,PatientName:J,PatientSex:K,PatientAge:Q,SliceThickness:X,ManufacturerModelName:Z,StudyDate:ee,SeriesDescription:te,SpacingBetweenSlices:ne,SeriesNumber:re}=q.current.metadata,oe=async()=>{const e=await u({rtDisplaySet:b,viewportIndex:a,servicesManager:l});C(e)};return r.createElement(r.Fragment,null,r.createElement(c.ViewportActionBar,{onDoubleClick:e=>{e.stopPropagation(),e.preventDefault()},onArrowsClick:z,getStatusComponent:()=>function(e){let{isHydrated:t,onStatusClick:n}=e,o=null,a=null;const{t:i}=N("Common"),s=i("LOAD");switch(t){case!0:a=()=>r.createElement(c.Icon,{name:"status-alert"}),o=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:a=()=>r.createElement(c.Icon,{name:"status-untracked"}),o=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const u=()=>r.createElement("div",{className:"flex h-6 leading-6 cursor-default text-sm text-white"},r.createElement("div",{className:"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"},r.createElement(a,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!t&&r.createElement("div",{className:"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light",onMouseUp:n},s));return r.createElement(r.Fragment,null,o&&r.createElement(c.Tooltip,{content:r.createElement(o,null),position:"bottom-left"},r.createElement(u,null)),!o&&r.createElement(u,null))}({isHydrated:E,onStatusClick:oe}),studyData:{label:i,useAltStyling:!0,studyDate:_(ee),currentSeries:re,seriesDescription:`RT Viewport ${te}`,patientInformation:{patientName:J?s().utils.formatPN(J.Alphabetic):"",patientSex:K||"",patientAge:Q||"",MRN:W||"",thickness:X?`${X.toFixed(2)}mm`:"",spacing:void 0!==ne?`${ne.toFixed(2)}mm`:"",scanner:Z||""}}}),r.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},P&&r.createElement(c.LoadingIndicatorTotalPercent,{className:"w-full h-full",totalNumbers:A.totalSegments,percentComplete:A.percentComplete,loadingText:"Loading RTSTRUCT..."}),H(),Y))}A.propTypes={displaySets:a().arrayOf(a().object),viewportIndex:a().number.isRequired,dataSource:a().object,children:a().node,customProps:a().object},A.defaultProps={customProps:{}};const M=A},516:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var u in a=Object(arguments[c]))n.call(a,u)&&(s[u]=a[u]);if(t){i=t(a);for(var l=0;l<i.length;l++)r.call(a,i[l])&&(s[i[l]]=a[i[l]])}}return s}},459:(e,t,n)=>{"use strict";var r=n(704);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){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:a,resetWarningCache:o};return n.PropTypes=n,n}},216:(e,t,n)=>{e.exports=n(459)()},704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},447:(e,t,n)=>{"use strict";var r=n(516),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,s=60110,c=60112;t.Suspense=60113;var u=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var f=Symbol.for;o=f("react.element"),a=f("react.portal"),t.Fragment=f("react.fragment"),t.StrictMode=f("react.strict_mode"),t.Profiler=f("react.profiler"),i=f("react.provider"),s=f("react.context"),c=f("react.forward_ref"),t.Suspense=f("react.suspense"),u=f("react.memo"),l=f("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function S(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||y}function g(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||y}S.prototype.isReactComponent={},S.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(d(85));this.updater.enqueueSetState(this,e,t,"setState")},S.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},g.prototype=S.prototype;var b=v.prototype=new g;b.constructor=v,r(b,S.prototype),b.isPureReactComponent=!0;var I={current:null},h=Object.prototype.hasOwnProperty,O={key:!0,ref:!0,__self:!0,__source:!0};function D(e,t,n){var r,a={},i=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)h.call(t,r)&&!O.hasOwnProperty(r)&&(a[r]=t[r]);var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){for(var u=Array(c),l=0;l<c;l++)u[l]=arguments[l+2];a.children=u}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===a[r]&&(a[r]=c[r]);return{$$typeof:o,type:e,key:i,ref:s,props:a,_owner:I.current}}function w(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var R=/\/+/g;function E(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,n,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 o:case a:c=!0}}if(c)return i=i(c=e),e=""===r?"."+E(c,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(R,"$&/")+"/"),C(i,t,n,"",(function(e){return e}))):null!=i&&(w(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||c&&c.key===i.key?"":(""+i.key).replace(R,"$&/")+"/")+e)),t.push(i)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var l=r+E(s=e[u],u);c+=C(s,t,n,l,i)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(s=e.next()).done;)c+=C(s=s.value,t,n,l=r+E(s,u++),i);else if("object"===s)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function P(e,t,n){if(null==e)return e;var r=[],o=0;return C(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var j={current:null};function U(){var e=j.current;if(null===e)throw Error(d(321));return e}var N={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:I,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:P,forEach:function(e,t,n){P(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!w(e))throw Error(d(143));return e}},t.Component=S,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var a=r({},e.props),i=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=I.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(l in t)h.call(t,l)&&!O.hasOwnProperty(l)&&(a[l]=void 0===t[l]&&void 0!==u?u[l]:t[l])}var l=arguments.length-2;if(1===l)a.children=n;else if(1<l){u=Array(l);for(var f=0;f<l;f++)u[f]=arguments[f+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:s,props:a,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=D,t.createFactory=function(e){var t=D.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=w,t.lazy=function(e){return{$$typeof:l,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return U().useCallback(e,t)},t.useContext=function(e,t){return U().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return U().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return U().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return U().useLayoutEffect(e,t)},t.useMemo=function(e,t){return U().useMemo(e,t)},t.useReducer=function(e,t,n){return U().useReducer(e,t,n)},t.useRef=function(e){return U().useRef(e)},t.useState=function(e){return U().useState(e)},t.version="17.0.2"},735:(e,t,n)=>{"use strict";e.exports=n(447)},432: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}},762:t=>{"use strict";t.exports=e},369:e=>{"use strict";e.exports=n},836:e=>{"use strict";e.exports=t}},i={};function s(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={exports:{}};return a[e](n,n.exports,s),n.exports}s.m=a,r=[],s.O=(e,t,n,o)=>{if(!t){var a=1/0;for(l=0;l<r.length;l++){for(var[t,n,o]=r[l],i=!0,c=0;c<t.length;c++)(!1&o||a>=o)&&Object.keys(s.O).every((e=>s.O[e](t[c])))?t.splice(c--,1):(i=!1,o<a&&(a=o));if(i){r.splice(l--,1);var u=n();void 0!==u&&(e=u)}}return e}o=o||0;for(var l=r.length;l>0&&r[l-1][2]>o;l--)r[l]=r[l-1];r[l]=[t,n,o]},s.F={},s.E=e=>{Object.keys(s.F).map((t=>{s.F[t](e)}))},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o={143:0},s.F.j=e=>{if(!s.o(o,e)||void 0===o[e]){o[e]=null;var t=document.createElement("link");s.nc&&t.setAttribute("nonce",s.nc),t.rel="prefetch",t.as="script",t.href=s.p+s.u(e),document.head.appendChild(t)}},s.O.j=e=>0===o[e],s.O(0,[143],(()=>{s.E(143)}),5);var c={};return(()=>{"use strict";s.r(c),s.d(c,{default:()=>h});const e=JSON.parse('{"u2":"@ohif/extension-cornerstone-dicom-rt"}').u2,t=`${e}.sopClassHandlerModule.dicom-rt`;var n=s(735),r=s(762),o=s(836),a=s.n(o);const{DicomMessage:i,DicomMetaDictionary:u}=a().data,l=a().data.Colors.dicomlab2RGB;async function f(e,t,n,r){const o=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),a=e.getActiveDataSource()[0],{bulkDataURI:s}=a.getConfig?.()||{},{dicomLoaderService:c}=o.exports,l=function(e){return e.images.map((e=>({imageId:e.imageId,sopInstanceUID:e.SOPInstanceUID})))}(n);t.isLoaded=!0;let f=t.instance;if(s&&s.enabled)await async function(e,t){if(!e||!e.ROIContourSequence)return Promise.reject("Invalid instance object or ROIContourSequence");const n=new Map;for(const r of e.ROIContourSequence){const o=r.ReferencedROINumber;if(r&&r.ContourSequence)for(const a of r.ContourSequence){if(!a||!a.ContourData)return Promise.reject("Invalid Contour or ContourData");const r=a.ContourData;if(Array.isArray(r))n.has(o)?n.get(o).push(Promise.resolve(r)):n.set(o,[Promise.resolve(r)]);else{if(!r||!r.BulkDataURI)return Promise.reject(`Invalid ContourData: ${r}`);{const a=r.BulkDataURI;if(!t||!t.retrieve||!t.retrieve.bulkDataURI)return Promise.reject("Invalid datasource object or retrieve function");const i=t.retrieve.bulkDataURI({BulkDataURI:a,StudyInstanceUID:e.StudyInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID,SOPInstanceUID:e.SOPInstanceUID});n.has(o)?n.get(o).push(i):n.set(o,[i])}}}else n.set(o,[Promise.resolve([])])}const r=new Map;for(const[e,t]of n.entries())r.set(e,await Promise.allSettled(t));e.ROIContourSequence.forEach((e=>{try{const t=e.ReferencedROINumber,n=r.get(t);e.ContourSequence&&e.ContourSequence.forEach(((e,t)=>{const r=n[t];if("fulfilled"===r.status)if(Array.isArray(r.value)&&r.value.every(Number.isFinite))e.ContourData=r.value;else{const t=new Uint8Array(r.value),n=(new TextDecoder).decode(t);"string"==typeof n&&n.includes("\\")?e.ContourData=n.split("\\").map(parseFloat):e.ContourData=[]}else console.error(r.reason)}))}catch(e){console.error(e)}}))}(f,a);else{const e=await c.findDicomDataPromise(t,null,r),n=i.readFile(e),o=u.naturalizeDataset(n.dict);o._meta=u.namifyDataset(n.meta),f=o}const{StructureSetROISequence:y,ROIContourSequence:m,RTROIObservationsSequence:S}=f,g={StructureSetLabel:f.StructureSetLabel,SeriesInstanceUID:f.SeriesInstanceUID,ROIContours:[],visible:!0};for(let e=0;e<m.length;e++){const t=m[e],{ContourSequence:n}=t;if(!n)continue;const r=!1,o=(v=n,Array.isArray(v)?v:[v]),a=[];for(let e=0;e<o.length;e++){const{ContourImageSequence:t,ContourData:n,NumberOfContourPoints:r,ContourGeometricType:i}=o[e],s=t.ReferencedSOPInstanceUID;if(!p(l,s))continue;let c=!1;const u=[];for(let e=0;e<3*r;e+=3)u.push({x:n[e],y:n[e+1],z:n[e+2]});switch(i){case"CLOSED_PLANAR":case"OPEN_PLANAR":case"POINT":c=!0;break;default:continue}a.push({numberOfPoints:r,points:u,type:i,isSupported:c})}d(g,y,S,t,a,r)}var v;return g}const p=(e,t)=>{const n=e.find((e=>e.sopInstanceUID===t));return n?n.imageId:null};function d(e,t,n,r,o,a){const i=t.find((e=>e.ROINumber===r.ReferencedROINumber)),s={ROINumber:i.ROINumber,ROIName:i.ROIName,ROIGenerationAlgorithm:i.ROIGenerationAlgorithm,ROIDescription:i.ROIDescription,isSupported:a,contourPoints:o,visible:!0};!function(e,t){let{ROIDisplayColor:n,RecommendedDisplayCIELabValue:r}=e;!n&&r&&(n=l(r));n&&(t.colorArray=[...n])}(r,s),n&&function(e,t,n){const r=t.find((e=>e.ReferencedROINumber===n));if(r){const{ObservationNumber:t,ROIObservationDescription:n,RTROIInterpretedType:o,ROIInterpreter:a}=r;e.RTROIObservations={ObservationNumber:t,ROIObservationDescription:n,RTROIInterpretedType:o,ROIInterpreter:a}}}(s,n,r.ReferencedROINumber),e.ROIContours.push(s)}const y=["1.2.840.10008.5.1.4.1.1.481.3"];let m={};function S(e,n,o){const a=e[0],{StudyInstanceUID:i,SeriesInstanceUID:s,SOPInstanceUID:c,SeriesDescription:u,SeriesNumber:l,SeriesDate:p,SOPClassUID:d,wadoRoot:S,wadoUri:g,wadoUriRoot:v}=a,b={Modality:"RTSTRUCT",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:u,SeriesNumber:l,SeriesDate:p,SOPInstanceUID:c,SeriesInstanceUID:s,StudyInstanceUID:i,SOPClassHandlerId:t,SOPClassUID:d,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,structureSet:null,sopClassUids:y,instance:a,wadoRoot:S,wadoUriRoot:v,wadoUri:g,isOverlayDisplaySet:!0};let I=a.ReferencedSeriesSequence;if(a.ReferencedFrameOfReferenceSequence&&!a.ReferencedSeriesSequence&&(a.ReferencedSeriesSequence=function(e){const t=[];return e.forEach((e=>{const{RTReferencedStudySequence:n}=e;n.forEach((e=>{const{RTReferencedSeriesSequence:n}=e;n.forEach((e=>{const n=[],{ContourImageSequence:r,SeriesInstanceUID:o}=e;r.forEach((e=>{n.push({ReferencedSOPInstanceUID:e.ReferencedSOPInstanceUID,ReferencedSOPClassUID:e.ReferencedSOPClassUID})}));const a={SeriesInstanceUID:o,ReferencedInstanceSequence:n};t.push(a)}))}))})),t}(a.ReferencedFrameOfReferenceSequence),I=a.ReferencedSeriesSequence),!I)throw new Error("ReferencedSeriesSequence is missing for the RTSTRUCT");const h=I[0];return b.referencedImages=a.ReferencedSeriesSequence.ReferencedInstanceSequence,b.referencedSeriesInstanceUID=h.SeriesInstanceUID,b.getReferenceDisplaySet=()=>{const{DisplaySetService:e}=n.services,t=e.getDisplaySetsForSeries(b.referencedSeriesInstanceUID);if(!t||0===t.length)throw new Error("Referenced DisplaySet is missing for the RT");const r=t[0];return b.referencedDisplaySetInstanceUID=r.displaySetInstanceUID,r},b.load=e=>{let{headers:t}=e;return function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:a}=t.services;(e.loading||e.isLoaded)&&m[o],0;return e.loading=!0,m[o]=new Promise((async(t,o)=>{if(!e.structureSet){const t=await f(n,e,e.getReferenceDisplaySet(),r);e.structureSet=t}const i=!0;a.createSegmentationForRTDisplaySet(e,null,i).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,o(t)}))})),m[o]}(b,n,o,t)},[b]}const g=function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-rt",sopClassUids:y,getDisplaySetsFromSeries:e=>S(e,t,n)}]};function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v.apply(this,arguments)}const b=n.lazy((()=>Promise.resolve().then(s.bind(s,646)))),I=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(b,e)),h={id:e,getViewportModule(e){let{servicesManager:t,extensionManager:r}=e;return[{name:"dicom-rt",component:e=>n.createElement(I,v({servicesManager:t,extensionManager:r},e))}]},getSopClassHandlerModule:g}})(),c=s.O(c)})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@ohif/core","dcmjs","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-rt"]=t(require("@ohif/core"),require("dcmjs"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-rt"]=t(e["@ohif/core"],e.dcmjs,e["@ohif/ui"])}(globalThis,((e,t,n)=>(()=>{var r,o,i={646:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>L});var r=n(735),o=n(216),i=n.n(o),a=n(762),s=n.n(a),c=n(369);const u=async function(e){let{rtDisplaySet:t,viewportIndex:n,servicesManager:r}=e;const{segmentationService:o,hangingProtocolService:i,viewportGridService:a}=r.services,s=t.referencedDisplaySetInstanceUID;let c=null;c=await o.createSegmentationForRTDisplaySet(t,c,!1),o.hydrateSegmentation(t.displaySetInstanceUID);const{viewports:u}=a.getState(),l=i.getViewportsRequireUpdate(n,s);return a.setDisplaySetsForViewports(l),u.forEach(((e,r)=>{if(r===n)return;o.shouldRenderSegmentation(e.displaySetInstanceUIDs,t.displaySetInstanceUID)&&l.push({viewportIndex:r,displaySetInstanceUIDs:e.displaySetInstanceUIDs,viewportOptions:{initialImageOptions:{preset:"middle"}}})})),a.setDisplaySetsForViewports(l),!0},l={NO_NEVER:-1,CANCEL:0,HYDRATE_SEG:5};const f=function(e){let{servicesManager:t,rtDisplaySet:n,viewportIndex:r,toolGroupId:o="default"}=e;const{uiViewportDialogService:i}=t.services;return new Promise((async function(e,a){const s=await function(e,t){return new Promise((function(n,r){const o="Do you want to open this Segmentation?",i=[{type:"secondary",text:"No",value:l.CANCEL},{type:"primary",text:"Yes",value:l.HYDRATE_SEG}],a=t=>{e.hide(),n(t)};e.show({viewportIndex:t,type:"info",message:o,actions:i,onSubmit:a,onOutsideClick:()=>{e.hide(),n(l.CANCEL)}})}))}(i,r);if(s===l.HYDRATE_SEG){e(await u({rtDisplaySet:n,viewportIndex:r,toolGroupId:o,servicesManager:t}))}}))};function p(e){return p="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},p(e)}function d(e){var t=function(e,t){if("object"!==p(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==p(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===p(t)?t:String(t)}function y(e,t,n){return(t=d(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n(432);Object.create(null);function m(){if(console&&console.warn){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];"string"==typeof n[0]&&(n[0]="react-i18next:: ".concat(n[0])),(e=console).warn.apply(e,n)}}var S={};function g(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];"string"==typeof t[0]&&S[t[0]]||("string"==typeof t[0]&&(S[t[0]]=new Date),m.apply(void 0,t))}var v=function(e,t){return function(){if(e.isInitialized)t();else{e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}}};function b(e,t,n){e.loadNamespaces(t,v(e,n))}function h(e,t,n,r){"string"==typeof n&&(n=[n]),n.forEach((function(t){e.options.ns.indexOf(t)<0&&e.options.ns.push(t)})),e.loadLanguages(t,v(e,r))}var I=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,O={"&":"&","&":"&","<":"<","<":"<",">":">",">":">","'":"'","'":"'",""":'"',""":'"'," ":" "," ":" ","©":"©","©":"©","®":"®","®":"®","…":"…","…":"…","/":"/","/":"/"},D=function(e){return O[e]};var w,R={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0,unescape:function(e){return e.replace(I,D)}};function E(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,d(r.key),r)}}var C=(0,r.createContext)(),P=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}var t,n,r;return t=e,(n=[{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(t.prototype,n),r&&E(t,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function j(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 r,o,i,a,s=[],c=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){u=!0,o=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return s}}(e,t)||function(e,t){if(e){if("string"==typeof e)return T(e,t);var n=Object.prototype.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)?T(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 U(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?U(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):U(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var N=function(e,t){var n=(0,r.useRef)();return(0,r.useEffect)((function(){n.current=t?n.current:e}),[e,t]),n.current};function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(C)||{},i=o.i18n,a=o.defaultNS,s=n||i||w;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new P),!s){g("You will need to pass in an i18next instance by using initReactI18next");var c=function(e,t){return"string"==typeof t?t:t&&"object"===p(t)&&"string"==typeof t.defaultValue?t.defaultValue:Array.isArray(e)?e[e.length-1]:e},u=[c,{},!1];return u.t=c,u.i18n={},u.ready=!1,u}s.options.react&&void 0!==s.options.react.wait&&g("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=x(x(x({},R),s.options.react),t),f=l.useSuspense,d=l.keyPrefix,y=e||a||s.options&&s.options.defaultNS;y="string"==typeof y?[y]:y||["translation"],s.reportNamespaces.addUsedNamespaces&&s.reportNamespaces.addUsedNamespaces(y);var m=(s.isInitialized||s.initializedStoreOnce)&&y.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,r){if(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}):function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.languages[0],o=!!t.options&&t.options.fallbackLng,i=t.languages[t.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};return!(n.bindI18n&&n.bindI18n.indexOf("languageChanging")>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!a(t.isLanguageChangingTo,e)||!t.hasResourceBundle(r,e)&&t.services.backendConnector.backend&&(!t.options.resources||t.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}(e,t,n):(g("i18n.languages were undefined or empty",t.languages),!0)}(e,s,l)}));function S(){return s.getFixedT(t.lng||null,"fallback"===l.nsMode?y:y[0],d)}var v=j((0,r.useState)(S),2),I=v[0],O=v[1],D=y.join();t.lng&&(D="".concat(t.lng).concat(D));var E=N(D),T=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function r(){T.current&&O(S)}return T.current=!0,m||f||(t.lng?h(s,t.lng,y,(function(){T.current&&O(S)})):b(s,y,(function(){T.current&&O(S)}))),m&&E&&E!==D&&T.current&&O(S),e&&s&&s.on(e,r),n&&s&&s.store.on(n,r),function(){T.current=!1,e&&s&&e.split(" ").forEach((function(e){return s.off(e,r)})),n&&s&&n.split(" ").forEach((function(e){return s.store.off(e,r)}))}}),[s,D]);var U=(0,r.useRef)(!0);(0,r.useEffect)((function(){T.current&&!U.current&&O(S),U.current=!1}),[s,d]);var k=[I,s,m];if(k.t=I,k.i18n=s,k.ready=m,m)return k;if(!m&&!f)return k;throw new Promise((function(e){t.lng?h(s,t.lng,y,(function(){return e()})):b(s,y,(function(){return e()}))}))}const _=function(e,t,n){const{tools:r}=t.get("cornerstone.overlayViewportTools")??{};return e.createToolGroupAndAddTools(n,r,{})};function A(){return A=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},A.apply(this,arguments)}const{formatDate:M}=a.utils;function q(e){const{children:t,displaySets:n,viewportOptions:o,viewportIndex:i,viewportLabel:a,servicesManager:l,extensionManager:p}=e,{displaySetService:d,toolGroupService:y,segmentationService:m,uiNotificationService:S,customizationService:g}=l.services,v=`RTToolGroup-${i}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const b=n[0],[h,I]=(0,c.useViewportGrid)(),[O,D]=(0,r.useState)(!1),[w,R]=(0,r.useState)(1),[E,C]=(0,r.useState)(b.isHydrated),[P,T]=(0,r.useState)(!b.isLoaded),[j,U]=(0,r.useState)(null),[x,N]=(0,r.useState)({percentComplete:null,totalSegments:null}),q=(0,r.useRef)(null),{viewports:L,activeViewportIndex:F}=h,$=b.getReferenceDisplaySet(),V=function(e){const t=e.images[0],n={PatientID:t.PatientID,PatientName:t.PatientName,PatientSex:t.PatientSex,PatientAge:t.PatientAge,SliceThickness:t.SliceThickness,StudyDate:t.StudyDate,SeriesDescription:t.SeriesDescription,SeriesInstanceUID:t.SeriesInstanceUID,SeriesNumber:t.SeriesNumber,ManufacturerModelName:t.ManufacturerModelName,SpacingBetweenSlices:t.SpacingBetweenSlices};return n}($);q.current={displaySet:$,metadata:V};const G=e=>{U(e.detail.element)},B=()=>{U(null)},H=(0,r.useCallback)((()=>{const{component:t}=p.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=q.current;return r.createElement(t,A({},e,{displaySets:[n,b],viewportOptions:{viewportType:"volume",toolGroupId:v,orientation:o.orientation,viewportId:o.viewportId},onElementEnabled:G,onElementDisabled:B}))}),[i,b,v]),z=(0,r.useCallback)((e=>{e="left"===e?-1:1;const t=b.displaySetInstanceUID,n=m.getSegmentation(t),{segments:r}=n,o=Object.keys(r).length;let i=w+e;i>=o-1?i=1:0===i&&(i=o-1),m.jumpToSegmentCenter(t,i,v),R(i)}),[w]);(0,r.useEffect)((()=>{P||f({servicesManager:l,viewportIndex:i,rtDisplaySet:b}).then((e=>{e&&C(!0)}))}),[l,i,b,P]),(0,r.useEffect)((()=>{const{unsubscribe:e}=m.subscribe(m.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{e.rtDisplaySet.displaySetInstanceUID===b.displaySetInstanceUID&&T(!1),e.overlappingSegments&&S.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const{unsubscribe:e}=m.subscribe(m.EVENTS.SEGMENT_LOADING_COMPLETE,(e=>{let{percentComplete:t,numSegments:n}=e;N({percentComplete:t,totalSegments:n})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const e=d.subscribe(d.EVENTS.DISPLAY_SETS_REMOVED,(e=>{let{displaySetInstanceUIDs:t}=e;const n=L[F];t.includes(n.displaySetInstanceUID)&&I.setDisplaySetsForViewport({viewportIndex:F,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=y.getToolGroup(v);if(!e)return e=_(y,g,v),D(!0),()=>{m.removeSegmentationRepresentationFromToolGroup(v),y.destroyToolGroup(v)}}),[]),(0,r.useEffect)((()=>(C(b.isHydrated),()=>{m.removeSegmentationRepresentationFromToolGroup(v),q.current=null})),[b]);let Y=null;if(!q.current||$.displaySetInstanceUID!==q.current.displaySet.displaySetInstanceUID)return null;t&&t.length&&(Y=t.map(((e,t)=>e&&r.cloneElement(e,{viewportIndex:i,key:t}))));const{PatientID:W,PatientName:J,PatientSex:K,PatientAge:Q,SliceThickness:X,ManufacturerModelName:Z,StudyDate:ee,SeriesDescription:te,SpacingBetweenSlices:ne,SeriesNumber:re}=q.current.metadata,oe=async()=>{const e=await u({rtDisplaySet:b,viewportIndex:i,servicesManager:l});C(e)};return r.createElement(r.Fragment,null,r.createElement(c.ViewportActionBar,{onDoubleClick:e=>{e.stopPropagation(),e.preventDefault()},onArrowsClick:z,getStatusComponent:()=>function(e){let{isHydrated:t,onStatusClick:n}=e,o=null,i=null;const{t:a}=k("Common"),s=a("LOAD");switch(t){case!0:i=()=>r.createElement(c.Icon,{name:"status-alert"}),o=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:i=()=>r.createElement(c.Icon,{name:"status-untracked"}),o=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const u=()=>r.createElement("div",{className:"flex h-6 leading-6 cursor-default text-sm text-white"},r.createElement("div",{className:"min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"},r.createElement(i,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!t&&r.createElement("div",{className:"ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light",onMouseUp:n},s));return r.createElement(r.Fragment,null,o&&r.createElement(c.Tooltip,{content:r.createElement(o,null),position:"bottom-left"},r.createElement(u,null)),!o&&r.createElement(u,null))}({isHydrated:E,onStatusClick:oe}),studyData:{label:a,useAltStyling:!0,studyDate:M(ee),currentSeries:re,seriesDescription:`RT Viewport ${te}`,patientInformation:{patientName:J?s().utils.formatPN(J.Alphabetic):"",patientSex:K||"",patientAge:Q||"",MRN:W||"",thickness:X?`${X.toFixed(2)}mm`:"",spacing:void 0!==ne?`${ne.toFixed(2)}mm`:"",scanner:Z||""}}}),r.createElement("div",{className:"relative flex flex-row w-full h-full overflow-hidden"},P&&r.createElement(c.LoadingIndicatorTotalPercent,{className:"w-full h-full",totalNumbers:x.totalSegments,percentComplete:x.percentComplete,loadingText:"Loading RTSTRUCT..."}),H(),Y))}q.propTypes={displaySets:i().arrayOf(i().object),viewportIndex:i().number.isRequired,dataSource:i().object,children:i().node,customProps:i().object},q.defaultProps={customProps:{}};const L=q},516:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var i,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var u in i=Object(arguments[c]))n.call(i,u)&&(s[u]=i[u]);if(t){a=t(i);for(var l=0;l<a.length;l++)r.call(i,a[l])&&(s[a[l]]=i[a[l]])}}return s}},459:(e,t,n)=>{"use strict";var r=n(704);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,i,a){if(a!==r){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:i,resetWarningCache:o};return n.PropTypes=n,n}},216:(e,t,n)=>{e.exports=n(459)()},704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},447:(e,t,n)=>{"use strict";var r=n(516),o=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,c=60112;t.Suspense=60113;var u=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var f=Symbol.for;o=f("react.element"),i=f("react.portal"),t.Fragment=f("react.fragment"),t.StrictMode=f("react.strict_mode"),t.Profiler=f("react.profiler"),a=f("react.provider"),s=f("react.context"),c=f("react.forward_ref"),t.Suspense=f("react.suspense"),u=f("react.memo"),l=f("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function d(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function S(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||y}function g(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||y}S.prototype.isReactComponent={},S.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(d(85));this.updater.enqueueSetState(this,e,t,"setState")},S.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},g.prototype=S.prototype;var b=v.prototype=new g;b.constructor=v,r(b,S.prototype),b.isPureReactComponent=!0;var h={current:null},I=Object.prototype.hasOwnProperty,O={key:!0,ref:!0,__self:!0,__source:!0};function D(e,t,n){var r,i={},a=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)I.call(t,r)&&!O.hasOwnProperty(r)&&(i[r]=t[r]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var u=Array(c),l=0;l<c;l++)u[l]=arguments[l+2];i.children=u}if(e&&e.defaultProps)for(r in c=e.defaultProps)void 0===i[r]&&(i[r]=c[r]);return{$$typeof:o,type:e,key:a,ref:s,props:i,_owner:h.current}}function w(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var R=/\/+/g;function E(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,n,r,a){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 o:case i:c=!0}}if(c)return a=a(c=e),e=""===r?"."+E(c,0):r,Array.isArray(a)?(n="",null!=e&&(n=e.replace(R,"$&/")+"/"),C(a,t,n,"",(function(e){return e}))):null!=a&&(w(a)&&(a=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(R,"$&/")+"/")+e)),t.push(a)),1;if(c=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var l=r+E(s=e[u],u);c+=C(s,t,n,l,a)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(s=e.next()).done;)c+=C(s=s.value,t,n,l=r+E(s,u++),a);else if("object"===s)throw t=""+e,Error(d(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function P(e,t,n){if(null==e)return e;var r=[],o=0;return C(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var j={current:null};function U(){var e=j.current;if(null===e)throw Error(d(321));return e}var x={ReactCurrentDispatcher:j,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:h,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:P,forEach:function(e,t,n){P(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!w(e))throw Error(d(143));return e}},t.Component=S,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=x,t.cloneElement=function(e,t,n){if(null==e)throw Error(d(267,e));var i=r({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=h.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(l in t)I.call(t,l)&&!O.hasOwnProperty(l)&&(i[l]=void 0===t[l]&&void 0!==u?u[l]:t[l])}var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){u=Array(l);for(var f=0;f<l;f++)u[f]=arguments[f+2];i.children=u}return{$$typeof:o,type:e.type,key:a,ref:s,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=D,t.createFactory=function(e){var t=D.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=w,t.lazy=function(e){return{$$typeof:l,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return U().useCallback(e,t)},t.useContext=function(e,t){return U().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return U().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return U().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return U().useLayoutEffect(e,t)},t.useMemo=function(e,t){return U().useMemo(e,t)},t.useReducer=function(e,t,n){return U().useReducer(e,t,n)},t.useRef=function(e){return U().useRef(e)},t.useState=function(e){return U().useState(e)},t.version="17.0.2"},735:(e,t,n)=>{"use strict";e.exports=n(447)},432: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}},762:t=>{"use strict";t.exports=e},369:e=>{"use strict";e.exports=n},836:e=>{"use strict";e.exports=t}},a={};function s(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return i[e](n,n.exports,s),n.exports}s.m=i,r=[],s.O=(e,t,n,o)=>{if(!t){var i=1/0;for(l=0;l<r.length;l++){for(var[t,n,o]=r[l],a=!0,c=0;c<t.length;c++)(!1&o||i>=o)&&Object.keys(s.O).every((e=>s.O[e](t[c])))?t.splice(c--,1):(a=!1,o<i&&(i=o));if(a){r.splice(l--,1);var u=n();void 0!==u&&(e=u)}}return e}o=o||0;for(var l=r.length;l>0&&r[l-1][2]>o;l--)r[l]=r[l-1];r[l]=[t,n,o]},s.F={},s.E=e=>{Object.keys(s.F).map((t=>{s.F[t](e)}))},s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o={143:0},s.F.j=e=>{if(!s.o(o,e)||void 0===o[e]){o[e]=null;var t=document.createElement("link");s.nc&&t.setAttribute("nonce",s.nc),t.rel="prefetch",t.as="script",t.href=s.p+s.u(e),document.head.appendChild(t)}},s.O.j=e=>0===o[e],s.O(0,[143],(()=>{s.E(143)}),5);var c={};return(()=>{"use strict";s.r(c),s.d(c,{default:()=>I});const e=JSON.parse('{"u2":"@ohif/extension-cornerstone-dicom-rt"}').u2,t=`${e}.sopClassHandlerModule.dicom-rt`;var n=s(735),r=s(762),o=s(836),i=s.n(o);const{DicomMessage:a,DicomMetaDictionary:u}=i().data,l=i().data.Colors.dicomlab2RGB;async function f(e,t,n,r){const o=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),i=e.getActiveDataSource()[0],{bulkDataURI:s}=i.getConfig?.()||{},{dicomLoaderService:c}=o.exports,l=function(e){return e.images.map((e=>({imageId:e.imageId,sopInstanceUID:e.SOPInstanceUID})))}(n);t.isLoaded=!0;let f=t.instance;if(s&&s.enabled)await async function(e,t){if(!e||!e.ROIContourSequence)return Promise.reject("Invalid instance object or ROIContourSequence");const n=new Map;for(const r of e.ROIContourSequence){const o=r.ReferencedROINumber;if(r&&r.ContourSequence)for(const i of r.ContourSequence){if(!i||!i.ContourData)return Promise.reject("Invalid Contour or ContourData");const r=i.ContourData;if(Array.isArray(r))n.has(o)?n.get(o).push(Promise.resolve(r)):n.set(o,[Promise.resolve(r)]);else{if(!r||!r.BulkDataURI)return Promise.reject(`Invalid ContourData: ${r}`);{const i=r.BulkDataURI;if(!t||!t.retrieve||!t.retrieve.bulkDataURI)return Promise.reject("Invalid datasource object or retrieve function");const a=t.retrieve.bulkDataURI({BulkDataURI:i,StudyInstanceUID:e.StudyInstanceUID,SeriesInstanceUID:e.SeriesInstanceUID,SOPInstanceUID:e.SOPInstanceUID});n.has(o)?n.get(o).push(a):n.set(o,[a])}}}else n.set(o,[Promise.resolve([])])}const r=new Map;for(const[e,t]of n.entries())r.set(e,await Promise.allSettled(t));e.ROIContourSequence.forEach((e=>{try{const t=e.ReferencedROINumber,n=r.get(t);e.ContourSequence&&e.ContourSequence.forEach(((e,t)=>{const r=n[t];if("fulfilled"===r.status)if(Array.isArray(r.value)&&r.value.every(Number.isFinite))e.ContourData=r.value;else{const t=new Uint8Array(r.value),n=(new TextDecoder).decode(t);"string"==typeof n&&n.includes("\\")?e.ContourData=n.split("\\").map(parseFloat):e.ContourData=[]}else console.error(r.reason)}))}catch(e){console.error(e)}}))}(f,i);else{const e=await c.findDicomDataPromise(t,null,r),n=a.readFile(e),o=u.naturalizeDataset(n.dict);o._meta=u.namifyDataset(n.meta),f=o}const{StructureSetROISequence:y,ROIContourSequence:m,RTROIObservationsSequence:S}=f,g={StructureSetLabel:f.StructureSetLabel,SeriesInstanceUID:f.SeriesInstanceUID,ROIContours:[],visible:!0};for(let e=0;e<m.length;e++){const t=m[e],{ContourSequence:n}=t;if(!n)continue;const r=!1,o=(v=n,Array.isArray(v)?v:[v]),i=[];for(let e=0;e<o.length;e++){const{ContourImageSequence:t,ContourData:n,NumberOfContourPoints:r,ContourGeometricType:a}=o[e],s=t.ReferencedSOPInstanceUID;if(!p(l,s))continue;let c=!1;const u=[];for(let e=0;e<3*r;e+=3)u.push({x:n[e],y:n[e+1],z:n[e+2]});switch(a){case"CLOSED_PLANAR":case"OPEN_PLANAR":case"POINT":c=!0;break;default:continue}i.push({numberOfPoints:r,points:u,type:a,isSupported:c})}d(g,y,S,t,i,r)}var v;return g}const p=(e,t)=>{const n=e.find((e=>e.sopInstanceUID===t));return n?n.imageId:null};function d(e,t,n,r,o,i){const a=t.find((e=>e.ROINumber===r.ReferencedROINumber)),s={ROINumber:a.ROINumber,ROIName:a.ROIName,ROIGenerationAlgorithm:a.ROIGenerationAlgorithm,ROIDescription:a.ROIDescription,isSupported:i,contourPoints:o,visible:!0};!function(e,t){let{ROIDisplayColor:n,RecommendedDisplayCIELabValue:r}=e;!n&&r&&(n=l(r));n&&(t.colorArray=[...n])}(r,s),n&&function(e,t,n){const r=t.find((e=>e.ReferencedROINumber===n));if(r){const{ObservationNumber:t,ROIObservationDescription:n,RTROIInterpretedType:o,ROIInterpreter:i}=r;e.RTROIObservations={ObservationNumber:t,ROIObservationDescription:n,RTROIInterpretedType:o,ROIInterpreter:i}}}(s,n,r.ReferencedROINumber),e.ROIContours.push(s)}const y=["1.2.840.10008.5.1.4.1.1.481.3"];let m={};function S(e,n,o){const i=e[0],{StudyInstanceUID:a,SeriesInstanceUID:s,SOPInstanceUID:c,SeriesDescription:u,SeriesNumber:l,SeriesDate:p,SOPClassUID:d,wadoRoot:S,wadoUri:g,wadoUriRoot:v}=i,b={Modality:"RTSTRUCT",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:u,SeriesNumber:l,SeriesDate:p,SOPInstanceUID:c,SeriesInstanceUID:s,StudyInstanceUID:a,SOPClassHandlerId:t,SOPClassUID:d,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,structureSet:null,sopClassUids:y,instance:i,wadoRoot:S,wadoUriRoot:v,wadoUri:g,isOverlayDisplaySet:!0};let h=i.ReferencedSeriesSequence;if(i.ReferencedFrameOfReferenceSequence&&!i.ReferencedSeriesSequence&&(i.ReferencedSeriesSequence=function(e){const t=[];return e.forEach((e=>{const{RTReferencedStudySequence:n}=e;n.forEach((e=>{const{RTReferencedSeriesSequence:n}=e;n.forEach((e=>{const n=[],{ContourImageSequence:r,SeriesInstanceUID:o}=e;r.forEach((e=>{n.push({ReferencedSOPInstanceUID:e.ReferencedSOPInstanceUID,ReferencedSOPClassUID:e.ReferencedSOPClassUID})}));const i={SeriesInstanceUID:o,ReferencedInstanceSequence:n};t.push(i)}))}))})),t}(i.ReferencedFrameOfReferenceSequence),h=i.ReferencedSeriesSequence),!h)throw new Error("ReferencedSeriesSequence is missing for the RTSTRUCT");const I=h[0];return b.referencedImages=i.ReferencedSeriesSequence.ReferencedInstanceSequence,b.referencedSeriesInstanceUID=I.SeriesInstanceUID,b.getReferenceDisplaySet=()=>{const{DisplaySetService:e}=n.services,t=e.getDisplaySetsForSeries(b.referencedSeriesInstanceUID);if(!t||0===t.length)throw new Error("Referenced DisplaySet is missing for the RT");const r=t[0];return b.referencedDisplaySetInstanceUID=r.displaySetInstanceUID,r},b.load=e=>{let{headers:t}=e;return function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:i}=t.services;(e.loading||e.isLoaded)&&m[o],0;return e.loading=!0,m[o]=new Promise((async(t,o)=>{if(!e.structureSet){const t=await f(n,e,e.getReferenceDisplaySet(),r);e.structureSet=t}const a=!0;i.createSegmentationForRTDisplaySet(e,null,a).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,o(t)}))})),m[o]}(b,n,o,t)},[b]}const g=function(e){let{servicesManager:t,extensionManager:n}=e;return[{name:"dicom-rt",sopClassUids:y,getDisplaySetsFromSeries:e=>S(e,t,n)}]};function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v.apply(this,arguments)}const b=n.lazy((()=>Promise.resolve().then(s.bind(s,646)))),h=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(b,e)),I={id:e,getViewportModule(e){let{servicesManager:t,extensionManager:r}=e;return[{name:"dicom-rt",component:e=>n.createElement(h,v({servicesManager:t,extensionManager:r},e))}]},getSopClassHandlerModule:g}})(),c=s.O(c)})()));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-cornerstone-dicom-rt",
|
|
3
|
-
"version": "3.6.0
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "DICOM RT read workflow",
|
|
5
5
|
"author": "OHIF",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,45 +31,20 @@
|
|
|
31
31
|
"start": "yarn run dev"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@ohif/core": "3.6.0
|
|
35
|
-
"@ohif/extension-cornerstone": "3.6.0
|
|
36
|
-
"@ohif/extension-default": "3.6.0
|
|
37
|
-
"@ohif/i18n": "3.6.0
|
|
34
|
+
"@ohif/core": "3.6.0",
|
|
35
|
+
"@ohif/extension-cornerstone": "3.6.0",
|
|
36
|
+
"@ohif/extension-default": "3.6.0",
|
|
37
|
+
"@ohif/i18n": "3.6.0",
|
|
38
38
|
"prop-types": "^15.6.2",
|
|
39
39
|
"react": "^17.0.2",
|
|
40
40
|
"react-dom": "^17.0.2",
|
|
41
41
|
"react-i18next": "^10.11.0",
|
|
42
42
|
"react-router": "^6.3.0",
|
|
43
|
-
"react-router-dom": "^6.3.0"
|
|
44
|
-
"webpack": "^5.50.0",
|
|
45
|
-
"webpack-merge": "^5.7.3"
|
|
43
|
+
"react-router-dom": "^6.3.0"
|
|
46
44
|
},
|
|
47
45
|
"dependencies": {
|
|
48
46
|
"@babel/runtime": "^7.20.13",
|
|
49
47
|
"react-color": "^2.19.3"
|
|
50
48
|
},
|
|
51
|
-
"
|
|
52
|
-
"@babel/core": "^7.21.4",
|
|
53
|
-
"@babel/plugin-proposal-class-properties": "^7.5.0",
|
|
54
|
-
"@babel/plugin-proposal-object-rest-spread": "^7.5.5",
|
|
55
|
-
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
|
56
|
-
"@babel/plugin-transform-arrow-functions": "^7.2.0",
|
|
57
|
-
"@babel/plugin-transform-regenerator": "^7.16.7",
|
|
58
|
-
"@babel/plugin-transform-runtime": "^7.17.0",
|
|
59
|
-
"@babel/preset-env": "^7.5.0",
|
|
60
|
-
"@babel/preset-react": "^7.16.7",
|
|
61
|
-
"babel-eslint": "^8.0.3",
|
|
62
|
-
"babel-loader": "^8.0.0-beta.4",
|
|
63
|
-
"babel-plugin-inline-react-svg": "^2.0.1",
|
|
64
|
-
"clean-webpack-plugin": "^4.0.0",
|
|
65
|
-
"copy-webpack-plugin": "^10.2.0",
|
|
66
|
-
"cross-env": "^7.0.3",
|
|
67
|
-
"dotenv": "^14.1.0",
|
|
68
|
-
"eslint": "^5.0.1",
|
|
69
|
-
"eslint-loader": "^2.0.0",
|
|
70
|
-
"webpack": "^5.50.0",
|
|
71
|
-
"webpack-cli": "^4.7.2",
|
|
72
|
-
"webpack-merge": "^5.7.3"
|
|
73
|
-
},
|
|
74
|
-
"gitHead": "655ccd310e18316cb31d199eb353aa4152fde860"
|
|
49
|
+
"gitHead": "72ec0bffb533f883aac3b76d0ed9559c70fe5838"
|
|
75
50
|
}
|