@ohif/extension-cornerstone-dicom-rt 3.10.0-beta.151 → 3.10.0-beta.152
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("@cornerstonejs/tools/enums"),require("@ohif/ui"),require("@ohif/ui-next"),require("@ohif/extension-cornerstone")):"function"==typeof define&&define.amd?define(["@ohif/core","dcmjs","@cornerstonejs/tools/enums","@ohif/ui","@ohif/ui-next","@ohif/extension-cornerstone"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-rt"]=t(require("@ohif/core"),require("dcmjs"),require("@cornerstonejs/tools/enums"),require("@ohif/ui"),require("@ohif/ui-next"),require("@ohif/extension-cornerstone")):e["ohif-extension-cornerstone-dicom-rt"]=t(e["@ohif/core"],e.dcmjs,e["@cornerstonejs/tools/enums"],e["@ohif/ui"],e["@ohif/ui-next"],e["@ohif/extension-cornerstone"])}(globalThis,((e,t,n,r,o,i)=>(()=>{var a,s,c={366:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>q});var r=n(326),o=n(598),i=n.n(o),a=n(307),s=n(55),c=n(669);const u=0,l=5;const f=function({servicesManager:e,rtDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateRTDisplaySet:o}){const{uiViewportDialogService:i,customizationService:s}=e.services,c=e._extensionManager._appConfig;return new Promise((async function(f,p){const d=c?.disableConfirmationPrompts?l:await function(e,t,n){return new Promise((function(r,o){const i=t.getCustomization("viewportNotification.hydrateRTMessage"),s=[{id:"no-hydrate",type:a.ButtonEnums.type.secondary,text:"No",value:u},{id:"yes-hydrate",type:a.ButtonEnums.type.primary,text:"Yes",value:l}],c=t=>{e.hide(),r(t)};e.show({id:"promptHydrateRT",viewportId:n,type:"info",message:i,actions:s,onSubmit:c,onOutsideClick:()=>{e.hide(),r(u)},onKeyPress:e=>{"Enter"===e.key&&c(l)}})}))}(i,s,n);if(d===l){r?.forEach((e=>{e()}));f(await o({rtDisplaySet:t,viewportId:n,servicesManager:e}))}}))};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)||!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: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(741);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 I(e,t,n){e.loadNamespaces(t,v(e,n))}function b(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 h=/&(?: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(h,D)}};function C(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 E=(0,r.createContext)(),T=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&C(e.prototype,t),n&&C(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function U(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 P(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?P(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 x(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 N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?x(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):x(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(E)||{},i=o.i18n,a=o.defaultNS,s=n||i||w;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new T),!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=N(N(N({},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=U((0,r.useState)(S),2),h=v[0],O=v[1],D=y.join();t.lng&&(D="".concat(t.lng).concat(D));var C,P,x,k=(C=D,x=(0,r.useRef)(),(0,r.useEffect)((function(){x.current=P?x.current:C}),[C,P]),x.current),_=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function r(){_.current&&O(S)}return _.current=!0,m||f||(t.lng?b(s,t.lng,y,(function(){_.current&&O(S)})):I(s,y,(function(){_.current&&O(S)}))),m&&k&&k!==D&&_.current&&O(S),e&&s&&s.on(e,r),n&&s&&s.store.on(n,r),function(){_.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 j=(0,r.useRef)(!0);(0,r.useEffect)((function(){_.current&&!j.current&&O(S),j.current=!1}),[s,d]);var A=[h,s,m];if(A.t=h,A.i18n=s,A.ready=m,m)return A;if(!m&&!f)return A;throw new Promise((function(e){t.lng?b(s,t.lng,y,(function(){return e()})):I(s,y,(function(){return e()}))}))}function _({isHydrated:e,onStatusClick:t}){let n=null,o=null;switch(e){case!0:o=()=>r.createElement(s.Icons.ByName,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>r.createElement(s.Icons.ByName,{className:"text-aqua-pale",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const i=()=>{const{t:n}=k("Common"),i=n("LOAD");return r.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},r.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},r.createElement(o,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!e&&r.createElement(a.ViewportActionButton,{onInteraction:t},i))};return r.createElement(r.Fragment,null,n&&r.createElement(s.Tooltip,null,r.createElement(s.TooltipTrigger,{asChild:!0},r.createElement("span",null,r.createElement(i,null))),r.createElement(s.TooltipContent,{side:"bottom"},r.createElement(n,null))),!n&&r.createElement(i,null))}const j=function(e,t,n){const r=t.getCustomization("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)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},A.apply(null,arguments)}function M(e){const{children:t,displaySets:n,viewportOptions:o,servicesManager:i,extensionManager:u,commandsManager:l}=e,{displaySetService:p,toolGroupService:d,segmentationService:y,uiNotificationService:m,customizationService:S,viewportActionCornersService:g}=i.services,v=o.viewportId,I=`RTToolGroup-${v}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const b=S.getCustomization("ui.loadingIndicatorTotalPercent"),h=n[0],[O,D]=(0,s.useViewportGrid)(),{setPositionPresentation:w}=(0,c.usePositionPresentationStore)(),[R,C]=(0,r.useState)(h.isHydrated),[E,T]=(0,r.useState)(!h.isLoaded),[P,U]=(0,r.useState)(null),[x,N]=(0,r.useState)({percentComplete:null,totalSegments:null}),k=(0,r.useRef)(null),{viewports:M,activeViewportId:q}=O,L=h.referencedDisplaySetInstanceUID,F=p.getDisplaySetByUID(L),$=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}(F);k.current={displaySet:F,metadata:$};const V=()=>{U(null)},B=(0,r.useCallback)((()=>{O?.viewports.forEach((({viewportId:e})=>{l.runCommand("storePresentation",{viewportId:e})}))}),[O]),G=(0,r.useCallback)((({rtDisplaySet:e,viewportId:t})=>{l.runCommand("hydrateRTSDisplaySet",{displaySet:e,viewportId:t})}),[l]),H=(0,r.useCallback)((()=>{const{component:t}=u.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=k.current;return r.createElement(t,A({},e,{displaySets:[n,h],viewportOptions:{viewportType:"stack",toolGroupId:I,orientation:o.orientation,viewportId:o.viewportId,presentationIds:o.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{U(e.detail.element)})(t)},onElementDisabled:V}))}),[v,h,I]),z=(0,r.useCallback)((e=>{c.utils.handleSegmentChange({direction:e,segDisplaySet:h,viewportId:v,selectedSegmentObjectIndex:0,segmentationService:y})}),[0]);(0,r.useEffect)((()=>{E||f({servicesManager:i,viewportId:v,rtDisplaySet:h,preHydrateCallbacks:[B],hydrateRTDisplaySet:G}).then((e=>{e&&C(!0)}))}),[i,v,h,E]),(0,r.useEffect)((()=>{const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{if(e.rtDisplaySet.displaySetInstanceUID===h.displaySetInstanceUID&&T(!1),h?.firstSegmentedSliceImageId&&o?.presentationIds){const{firstSegmentedSliceImageId:e}=h,{presentationIds:t}=o;w(t.positionPresentationId,{viewportType:"stack",viewReference:{referencedImageId:e},viewPresentation:{}})}e.overlappingSegments&&m.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[h]),(0,r.useEffect)((()=>{const{unsubscribe:e}=y.subscribe(y.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{N({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[h]),(0,r.useEffect)((()=>{const e=p.subscribe(p.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=M.get(q);e.includes(t.displaySetInstanceUID)&&D.setDisplaySetsForViewport({viewportId:q,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=d.getToolGroup(I);if(!e)return e=j(d,S,I),()=>{y.removeSegmentationRepresentations(v),d.destroyToolGroup(I)}}),[]),(0,r.useEffect)((()=>(C(h.isHydrated),()=>{y.removeSegmentationRepresentations(v),k.current=null})),[h]);const Y=(0,r.useCallback)((async()=>{B();const e=await G({rtDisplaySet:h,viewportId:v});C(e)}),[G,h,B,v]);let W=null;return k.current&&F.displaySetInstanceUID===k.current.displaySet.displaySetInstanceUID?(t&&t.length&&(W=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:v,key:t})))),(0,r.useEffect)((()=>{g.addComponents([{viewportId:v,id:"viewportStatusComponent",component:_({isHydrated:R,onStatusClick:Y}),indexPriority:-100,location:g.LOCATIONS.topLeft},{viewportId:v,id:"viewportActionArrowsComponent",component:r.createElement(a.ViewportActionArrows,{key:"actionArrows",onArrowsClick:z,className:v===q?"visible":"invisible group-hover/pane:visible"}),indexPriority:0,location:g.LOCATIONS.topRight}])}),[q,R,z,Y,g,v]),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},E&&r.createElement(b,{className:"h-full w-full",totalNumbers:x.totalSegments,percentComplete:x.percentComplete,loadingText:"Loading RTSTRUCT..."}),H(),W))):null}M.propTypes={displaySets:i().arrayOf(i().object),viewportId:i().string.isRequired,dataSource:i().object,children:i().node};const q=M},856:(e,t,n)=>{"use strict";var r=n(183);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}},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"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),d=Symbol.iterator;var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,S={};function g(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||y}function v(){}function I(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||y}g.prototype.isReactComponent={},g.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")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var b=I.prototype=new v;b.constructor=I,m(b,g.prototype),b.isPureReactComponent=!0;var h=Array.isArray,O=Object.prototype.hasOwnProperty,D={current:null},w={key:!0,ref:!0,__self:!0,__source:!0};function R(e,t,r){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)O.call(t,o)&&!w.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=r;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(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:n,type:e,key:a,ref:s,props:i,_owner:D.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var E=/\/+/g;function T(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 P(e,t,o,i,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 n:case r:c=!0}}if(c)return a=a(c=e),e=""===i?"."+T(c,0):i,h(a)?(o="",null!=e&&(o=e.replace(E,"$&/")+"/"),P(a,t,o,"",(function(e){return e}))):null!=a&&(C(a)&&(a=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,o+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(E,"$&/")+"/")+e)),t.push(a)),1;if(c=0,i=""===i?".":i+":",h(e))for(var u=0;u<e.length;u++){var l=i+T(s=e[u],u);c+=P(s,t,o,l,a)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=d&&e[d]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(s=e.next()).done;)c+=P(s=s.value,t,o,l=i+T(s,u++),a);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function U(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function x(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var N={current:null},k={transition:null},_={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:k,ReactCurrentOwner:D};function j(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:U,forEach:function(e,t,n){U(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return U(e,(function(){t++})),t},toArray:function(e){return U(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=a,t.PureComponent=I,t.StrictMode=i,t.Suspense=l,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=_,t.act=j,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),i=e.key,a=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,s=D.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)O.call(t,u)&&!w.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=r;else if(1<u){c=Array(u);for(var l=0;l<u;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:n,type:e.type,key:i,ref:a,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=R,t.createFactory=function(e){var t=R.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:u,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:x}},t.memo=function(e,t){return{$$typeof:f,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.transition;k.transition={};try{e()}finally{k.transition=t}},t.unstable_act=j,t.useCallback=function(e,t){return N.current.useCallback(e,t)},t.useContext=function(e){return N.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return N.current.useDeferredValue(e)},t.useEffect=function(e,t){return N.current.useEffect(e,t)},t.useId=function(){return N.current.useId()},t.useImperativeHandle=function(e,t,n){return N.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return N.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return N.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return N.current.useMemo(e,t)},t.useReducer=function(e,t,n){return N.current.useReducer(e,t,n)},t.useRef=function(e){return N.current.useRef(e)},t.useState=function(e){return N.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return N.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return N.current.useTransition()},t.version="18.3.1"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},404:e=>{"use strict";e.exports=n},2:t=>{"use strict";t.exports=e},669:e=>{"use strict";e.exports=i},307:e=>{"use strict";e.exports=r},55:e=>{"use strict";e.exports=o},111:e=>{"use strict";e.exports=t}},u={};function l(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return c[e](n,n.exports,l),n.exports}l.m=c,a=[],l.O=(e,t,n,r)=>{if(!t){var o=1/0;for(u=0;u<a.length;u++){for(var[t,n,r]=a[u],i=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(l.O).every((e=>l.O[e](t[s])))?t.splice(s--,1):(i=!1,r<o&&(o=r));if(i){a.splice(u--,1);var c=n();void 0!==c&&(e=c)}}return e}r=r||0;for(var u=a.length;u>0&&a[u-1][2]>r;u--)a[u]=a[u-1];a[u]=[t,n,r]},l.F={},l.E=e=>{Object.keys(l.F).map((t=>{l.F[t](e)}))},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s={524:0},l.F.j=e=>{if(!l.o(s,e)||void 0===s[e]){s[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=l.p+l.u(e),document.head.appendChild(t)}},l.O.j=e=>0===s[e],l.O(0,[524],(()=>{l.E(524)}),5);var f={};return(()=>{"use strict";l.r(f),l.d(f,{default:()=>O});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-rt"}').UU,t=`${e}.sopClassHandlerModule.dicom-rt`;var n=l(326),r=l(2),o=l(111),i=l.n(o);const{DicomMessage:a,DicomMetaDictionary:s}=i().data,c=i().data.Colors.dicomlab2RGB;async function u(e,t,n){const r=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),o=e.getActiveDataSource()[0],{bulkDataURI:i}=o.getConfig?.()||{},{dicomLoaderService:c}=r.exports;t.isLoaded=!0;let u=t.instance;if(i&&i.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)}}))}(u,o);else{const e=await c.findDicomDataPromise(t,null,n),r=a.readFile(e),o=s.naturalizeDataset(r.dict);o._meta=s.namifyDataset(r.meta),u=o}const{StructureSetROISequence:l,ROIContourSequence:f,RTROIObservationsSequence:d}=u,y={StructureSetLabel:u.StructureSetLabel,SeriesInstanceUID:u.SeriesInstanceUID,ROIContours:[],visible:!0,ReferencedSOPInstanceUIDsSet:new Set};for(let e=0;e<f.length;e++){const t=f[e],{ContourSequence:n}=t;if(!n)continue;const r=!1,o=(m=n,Array.isArray(m)?m:[m]),i=[];for(let e=0;e<o.length;e++){const{ContourData:t,NumberOfContourPoints:n,ContourGeometricType:r,ContourImageSequence:a}=o[e];let s=!1;const c=[];for(let e=0;e<3*n;e+=3)c.push({x:t[e],y:t[e+1],z:t[e+2]});switch(r){case"CLOSED_PLANAR":case"OPEN_PLANAR":case"POINT":s=!0;break;default:continue}i.push({numberOfPoints:n,points:c,type:r,isSupported:s}),a?.ReferencedSOPInstanceUID&&y.ReferencedSOPInstanceUIDsSet.add(a?.ReferencedSOPInstanceUID)}p(y,l,d,t,i,r)}var m;return y}function p(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=c(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 d=["1.2.840.10008.5.1.4.1.1.481.3"],y={};function m(e,n,o){const i=e[0],{StudyInstanceUID:a,SeriesInstanceUID:s,SOPInstanceUID:c,SeriesDescription:l,SeriesNumber:f,SeriesDate:p,SOPClassUID:m,wadoRoot:S,wadoUri:g,wadoUriRoot:v}=i,I={Modality:"RTSTRUCT",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:l,SeriesNumber:f,SeriesDate:p,SOPInstanceUID:c,SeriesInstanceUID:s,StudyInstanceUID:a,SOPClassHandlerId:t,SOPClassUID:m,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,structureSet:null,sopClassUids:d,instance:i,wadoRoot:S,wadoUriRoot:v,wadoUri:g,isOverlayDisplaySet:!0};let b=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),b=i.ReferencedSeriesSequence),!b)throw new Error("ReferencedSeriesSequence is missing for the RTSTRUCT");const h=b[0];I.referencedImages=i.ReferencedSeriesSequence.ReferencedInstanceSequence,I.referencedSeriesInstanceUID=h.SeriesInstanceUID;const{displaySetService:O}=n.services,D=O.getDisplaySetsForSeries(I.referencedSeriesInstanceUID);if(D&&0!==D.length){const e=D[0];I.referencedDisplaySetInstanceUID=e.displaySetInstanceUID}else{const{unsubscribe:e}=O.subscribe(O.EVENTS.DISPLAY_SETS_ADDED,(({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===I.referencedSeriesInstanceUID&&(I.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,e())}))}return I.load=({headers:e})=>function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:i}=t.services;(e.loading||e.isLoaded)&&y[o],0;return e.loading=!0,y[o]=new Promise((async(t,o)=>{if(!e.structureSet){const t=await u(n,e,r);e.structureSet=t}i.createSegmentationForRTDisplaySet(e).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,o(t)}))})),y[o]}(I,n,o,e),[I]}const S=function({servicesManager:e,extensionManager:t}){return[{name:"dicom-rt",sopClassUids:d,getDisplaySetsFromSeries:n=>m(n,e,t)}]};var g=l(404);const v=({commandsManager:e,servicesManager:t})=>{const n=t.services,{displaySetService:r,viewportGridService:o}=n,i={hydrateRTSDisplaySet:({displaySet:t,viewportId:n})=>{if("RTSTRUCT"!==t.Modality)throw new Error("Display set is not an RTSTRUCT");const i=r.getDisplaySetByUID(t.referencedDisplaySetInstanceUID);e.runCommand("updateStoredSegmentationPresentation",{displaySet:t,type:g.SegmentationRepresentations.Contour}),e.runCommand("updateStoredPositionPresentation",{viewportId:n,displaySetInstanceUID:i.displaySetInstanceUID}),o.setDisplaySetsForViewport({viewportId:n,displaySetInstanceUIDs:[i.displaySetInstanceUID]})}};return{actions:i,definitions:{hydrateRTSDisplaySet:{commandFn:i.hydrateRTSDisplaySet,storeContexts:[],options:{}}},defaultContext:"cornerstone-dicom-rt"}};function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},I.apply(null,arguments)}const b=n.lazy((()=>Promise.resolve().then(l.bind(l,366)))),h=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(b,e)),O={id:e,getCommandsModule:v,getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-rt",component:o=>n.createElement(h,I({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:S}})(),f=l.O(f)})()));
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@ohif/core"),require("dcmjs"),require("@cornerstonejs/tools/enums"),require("@ohif/ui-next"),require("@ohif/extension-cornerstone"),require("@ohif/ui")):"function"==typeof define&&define.amd?define(["@ohif/core","dcmjs","@cornerstonejs/tools/enums","@ohif/ui-next","@ohif/extension-cornerstone","@ohif/ui"],t):"object"==typeof exports?exports["ohif-extension-cornerstone-dicom-rt"]=t(require("@ohif/core"),require("dcmjs"),require("@cornerstonejs/tools/enums"),require("@ohif/ui-next"),require("@ohif/extension-cornerstone"),require("@ohif/ui")):e["ohif-extension-cornerstone-dicom-rt"]=t(e["@ohif/core"],e.dcmjs,e["@cornerstonejs/tools/enums"],e["@ohif/ui-next"],e["@ohif/extension-cornerstone"],e["@ohif/ui"])}(globalThis,((e,t,n,r,o,i)=>(()=>{var a,s,c={366:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>q});var r=n(326),o=n(598),i=n.n(o),a=n(55),s=n(669),c=n(307);const u=0,l=5;const f=function({servicesManager:e,rtDisplaySet:t,viewportId:n,preHydrateCallbacks:r,hydrateRTDisplaySet:o}){const{uiViewportDialogService:i,customizationService:a}=e.services,s=e._extensionManager._appConfig;return new Promise((async function(f,p){const d=s?.disableConfirmationPrompts?l:await function(e,t,n){return new Promise((function(r,o){const i=t.getCustomization("viewportNotification.hydrateRTMessage"),a=[{id:"no-hydrate",type:c.ButtonEnums.type.secondary,text:"No",value:u},{id:"yes-hydrate",type:c.ButtonEnums.type.primary,text:"Yes",value:l}],s=t=>{e.hide(),r(t)};e.show({id:"promptHydrateRT",viewportId:n,type:"info",message:i,actions:a,onSubmit:s,onOutsideClick:()=>{e.hide(),r(u)},onKeyPress:e=>{"Enter"===e.key&&s(l)}})}))}(i,a,n);if(d===l){r?.forEach((e=>{e()}));f(await o({rtDisplaySet:t,viewportId:n,servicesManager:e}))}}))};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)||!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: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(741);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 I(e,t,n){e.loadNamespaces(t,v(e,n))}function b(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 h=/&(?: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(h,D)}};function C(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 E=(0,r.createContext)(),T=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}return function(e,t,n){t&&C(e.prototype,t),n&&C(e,n),Object.defineProperty(e,"prototype",{writable:!1})}(e,[{key:"addUsedNamespaces",value:function(e){var t=this;e.forEach((function(e){t.usedNamespaces[e]||(t.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}]),e}();function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function U(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 P(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?P(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 x(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 N(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?x(Object(n),!0).forEach((function(t){y(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):x(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.i18n,o=(0,r.useContext)(E)||{},i=o.i18n,a=o.defaultNS,s=n||i||w;if(s&&!s.reportNamespaces&&(s.reportNamespaces=new T),!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=N(N(N({},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=U((0,r.useState)(S),2),h=v[0],O=v[1],D=y.join();t.lng&&(D="".concat(t.lng).concat(D));var C,P,x,k=(C=D,x=(0,r.useRef)(),(0,r.useEffect)((function(){x.current=P?x.current:C}),[C,P]),x.current),_=(0,r.useRef)(!0);(0,r.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function r(){_.current&&O(S)}return _.current=!0,m||f||(t.lng?b(s,t.lng,y,(function(){_.current&&O(S)})):I(s,y,(function(){_.current&&O(S)}))),m&&k&&k!==D&&_.current&&O(S),e&&s&&s.on(e,r),n&&s&&s.store.on(n,r),function(){_.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 j=(0,r.useRef)(!0);(0,r.useEffect)((function(){_.current&&!j.current&&O(S),j.current=!1}),[s,d]);var A=[h,s,m];if(A.t=h,A.i18n=s,A.ready=m,m)return A;if(!m&&!f)return A;throw new Promise((function(e){t.lng?b(s,t.lng,y,(function(){return e()})):I(s,y,(function(){return e()}))}))}function _({isHydrated:e,onStatusClick:t}){let n=null,o=null;switch(e){case!0:o=()=>r.createElement(a.Icons.ByName,{name:"status-alert"}),n=()=>r.createElement("div",null,"This Segmentation is loaded in the segmentation panel");break;case!1:o=()=>r.createElement(a.Icons.ByName,{className:"text-aqua-pale",name:"status-untracked"}),n=()=>r.createElement("div",null,"Click LOAD to load RTSTRUCT.")}const i=()=>{const{t:n}=k("Common"),i=n("LOAD");return r.createElement("div",{className:"flex h-6 cursor-default text-sm leading-6 text-white"},r.createElement("div",{className:"bg-customgray-100 flex min-w-[45px] items-center rounded-l-xl rounded-r p-1"},r.createElement(o,null),r.createElement("span",{className:"ml-1"},"RTSTRUCT")),!e&&r.createElement(a.ViewportActionButton,{onInteraction:t},i))};return r.createElement(r.Fragment,null,n&&r.createElement(a.Tooltip,null,r.createElement(a.TooltipTrigger,{asChild:!0},r.createElement("span",null,r.createElement(i,null))),r.createElement(a.TooltipContent,{side:"bottom"},r.createElement(n,null))),!n&&r.createElement(i,null))}const j=function(e,t,n){const r=t.getCustomization("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)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},A.apply(null,arguments)}function M(e){const{children:t,displaySets:n,viewportOptions:o,servicesManager:i,extensionManager:c,commandsManager:u}=e,{displaySetService:l,toolGroupService:p,segmentationService:d,uiNotificationService:y,customizationService:m,viewportActionCornersService:S}=i.services,g=o.viewportId,v=`RTToolGroup-${g}`;if(n.length>1)throw new Error("RT viewport should only have a single display set");const I=m.getCustomization("ui.loadingIndicatorTotalPercent"),b=n[0],[h,O]=(0,a.useViewportGrid)(),{setPositionPresentation:D}=(0,s.usePositionPresentationStore)(),[w,R]=(0,r.useState)(b.isHydrated),[C,E]=(0,r.useState)(!b.isLoaded),[T,P]=(0,r.useState)(null),[U,x]=(0,r.useState)({percentComplete:null,totalSegments:null}),N=(0,r.useRef)(null),{viewports:k,activeViewportId:M}=h,q=b.referencedDisplaySetInstanceUID,L=l.getDisplaySetByUID(q),F=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}(L);N.current={displaySet:L,metadata:F};const $=()=>{P(null)},V=(0,r.useCallback)((()=>{h?.viewports.forEach((({viewportId:e})=>{u.runCommand("storePresentation",{viewportId:e})}))}),[h]),B=(0,r.useCallback)((({rtDisplaySet:e,viewportId:t})=>{u.runCommand("hydrateRTSDisplaySet",{displaySet:e,viewportId:t})}),[u]),G=(0,r.useCallback)((()=>{const{component:t}=c.getModuleEntry("@ohif/extension-cornerstone.viewportModule.cornerstone"),{displaySet:n}=N.current;return r.createElement(t,A({},e,{displaySets:[n,b],viewportOptions:{viewportType:"stack",toolGroupId:v,orientation:o.orientation,viewportId:o.viewportId,presentationIds:o.presentationIds},onElementEnabled:t=>{e.onElementEnabled?.(t),(e=>{P(e.detail.element)})(t)},onElementDisabled:$}))}),[g,b,v]),H=(0,r.useCallback)((e=>{s.utils.handleSegmentChange({direction:e,segDisplaySet:b,viewportId:g,selectedSegmentObjectIndex:0,segmentationService:d})}),[0]);(0,r.useEffect)((()=>{C||f({servicesManager:i,viewportId:g,rtDisplaySet:b,preHydrateCallbacks:[V],hydrateRTDisplaySet:B}).then((e=>{e&&R(!0)}))}),[i,g,b,C]),(0,r.useEffect)((()=>{const{unsubscribe:e}=d.subscribe(d.EVENTS.SEGMENTATION_LOADING_COMPLETE,(e=>{if(e.rtDisplaySet.displaySetInstanceUID===b.displaySetInstanceUID&&E(!1),b?.firstSegmentedSliceImageId&&o?.presentationIds){const{firstSegmentedSliceImageId:e}=b,{presentationIds:t}=o;D(t.positionPresentationId,{viewportType:"stack",viewReference:{referencedImageId:e},viewPresentation:{}})}e.overlappingSegments&&y.show({title:"Overlapping Segments",message:"Overlapping segments detected which is not currently supported",type:"warning"})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const{unsubscribe:e}=d.subscribe(d.EVENTS.SEGMENT_LOADING_COMPLETE,(({percentComplete:e,numSegments:t})=>{x({percentComplete:e,totalSegments:t})}));return()=>{e()}}),[b]),(0,r.useEffect)((()=>{const e=l.subscribe(l.EVENTS.DISPLAY_SETS_REMOVED,(({displaySetInstanceUIDs:e})=>{const t=k.get(M);e.includes(t.displaySetInstanceUID)&&O.setDisplaySetsForViewport({viewportId:M,displaySetInstanceUIDs:[]})}));return()=>{e.unsubscribe()}}),[]),(0,r.useEffect)((()=>{let e=p.getToolGroup(v);if(!e)return e=j(p,m,v),()=>{d.removeSegmentationRepresentations(g),p.destroyToolGroup(v)}}),[]),(0,r.useEffect)((()=>(R(b.isHydrated),()=>{d.removeSegmentationRepresentations(g),N.current=null})),[b]);const z=(0,r.useCallback)((async()=>{V();const e=await B({rtDisplaySet:b,viewportId:g});R(e)}),[B,b,V,g]);let Y=null;return N.current&&L.displaySetInstanceUID===N.current.displaySet.displaySetInstanceUID?(t&&t.length&&(Y=t.map(((e,t)=>e&&r.cloneElement(e,{viewportId:g,key:t})))),(0,r.useEffect)((()=>{S.addComponents([{viewportId:g,id:"viewportStatusComponent",component:_({isHydrated:w,onStatusClick:z}),indexPriority:-100,location:S.LOCATIONS.topLeft},{viewportId:g,id:"viewportActionArrowsComponent",component:r.createElement(a.ViewportActionArrows,{key:"actionArrows",onArrowsClick:H,className:g===M?"visible":"invisible group-hover/pane:visible"}),indexPriority:0,location:S.LOCATIONS.topRight}])}),[M,w,H,z,S,g]),r.createElement(r.Fragment,null,r.createElement("div",{className:"relative flex h-full w-full flex-row overflow-hidden"},C&&r.createElement(I,{className:"h-full w-full",totalNumbers:U.totalSegments,percentComplete:U.percentComplete,loadingText:"Loading RTSTRUCT..."}),G(),Y))):null}M.propTypes={displaySets:i().arrayOf(i().object),viewportId:i().string.isRequired,dataSource:i().object,children:i().node};const q=M},856:(e,t,n)=>{"use strict";var r=n(183);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}},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"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),c=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),d=Symbol.iterator;var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,S={};function g(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||y}function v(){}function I(e,t,n){this.props=e,this.context=t,this.refs=S,this.updater=n||y}g.prototype.isReactComponent={},g.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")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var b=I.prototype=new v;b.constructor=I,m(b,g.prototype),b.isPureReactComponent=!0;var h=Array.isArray,O=Object.prototype.hasOwnProperty,D={current:null},w={key:!0,ref:!0,__self:!0,__source:!0};function R(e,t,r){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)O.call(t,o)&&!w.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=r;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(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:n,type:e,key:a,ref:s,props:i,_owner:D.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var E=/\/+/g;function T(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 P(e,t,o,i,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 n:case r:c=!0}}if(c)return a=a(c=e),e=""===i?"."+T(c,0):i,h(a)?(o="",null!=e&&(o=e.replace(E,"$&/")+"/"),P(a,t,o,"",(function(e){return e}))):null!=a&&(C(a)&&(a=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,o+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(E,"$&/")+"/")+e)),t.push(a)),1;if(c=0,i=""===i?".":i+":",h(e))for(var u=0;u<e.length;u++){var l=i+T(s=e[u],u);c+=P(s,t,o,l,a)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=d&&e[d]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),u=0;!(s=e.next()).done;)c+=P(s=s.value,t,o,l=i+T(s,u++),a);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return c}function U(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function x(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var N={current:null},k={transition:null},_={ReactCurrentDispatcher:N,ReactCurrentBatchConfig:k,ReactCurrentOwner:D};function j(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:U,forEach:function(e,t,n){U(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return U(e,(function(){t++})),t},toArray:function(e){return U(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=a,t.PureComponent=I,t.StrictMode=i,t.Suspense=l,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=_,t.act=j,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),i=e.key,a=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,s=D.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)O.call(t,u)&&!w.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=r;else if(1<u){c=Array(u);for(var l=0;l<u;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:n,type:e.type,key:i,ref:a,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=R,t.createFactory=function(e){var t=R.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:u,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:x}},t.memo=function(e,t){return{$$typeof:f,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=k.transition;k.transition={};try{e()}finally{k.transition=t}},t.unstable_act=j,t.useCallback=function(e,t){return N.current.useCallback(e,t)},t.useContext=function(e){return N.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return N.current.useDeferredValue(e)},t.useEffect=function(e,t){return N.current.useEffect(e,t)},t.useId=function(){return N.current.useId()},t.useImperativeHandle=function(e,t,n){return N.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return N.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return N.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return N.current.useMemo(e,t)},t.useReducer=function(e,t,n){return N.current.useReducer(e,t,n)},t.useRef=function(e){return N.current.useRef(e)},t.useState=function(e){return N.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return N.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return N.current.useTransition()},t.version="18.3.1"},326:(e,t,n)=>{"use strict";e.exports=n(249)},741:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},404:e=>{"use strict";e.exports=n},2:t=>{"use strict";t.exports=e},669:e=>{"use strict";e.exports=o},307:e=>{"use strict";e.exports=i},55:e=>{"use strict";e.exports=r},111:e=>{"use strict";e.exports=t}},u={};function l(e){var t=u[e];if(void 0!==t)return t.exports;var n=u[e]={exports:{}};return c[e](n,n.exports,l),n.exports}l.m=c,a=[],l.O=(e,t,n,r)=>{if(!t){var o=1/0;for(u=0;u<a.length;u++){for(var[t,n,r]=a[u],i=!0,s=0;s<t.length;s++)(!1&r||o>=r)&&Object.keys(l.O).every((e=>l.O[e](t[s])))?t.splice(s--,1):(i=!1,r<o&&(o=r));if(i){a.splice(u--,1);var c=n();void 0!==c&&(e=c)}}return e}r=r||0;for(var u=a.length;u>0&&a[u-1][2]>r;u--)a[u]=a[u-1];a[u]=[t,n,r]},l.F={},l.E=e=>{Object.keys(l.F).map((t=>{l.F[t](e)}))},l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s={524:0},l.F.j=e=>{if(!l.o(s,e)||void 0===s[e]){s[e]=null;var t=document.createElement("link");l.nc&&t.setAttribute("nonce",l.nc),t.rel="prefetch",t.as="script",t.href=l.p+l.u(e),document.head.appendChild(t)}},l.O.j=e=>0===s[e],l.O(0,[524],(()=>{l.E(524)}),5);var f={};return(()=>{"use strict";l.r(f),l.d(f,{default:()=>O});const e=JSON.parse('{"UU":"@ohif/extension-cornerstone-dicom-rt"}').UU,t=`${e}.sopClassHandlerModule.dicom-rt`;var n=l(326),r=l(2),o=l(111),i=l.n(o);const{DicomMessage:a,DicomMetaDictionary:s}=i().data,c=i().data.Colors.dicomlab2RGB;async function u(e,t,n){const r=e.getModuleEntry("@ohif/extension-cornerstone.utilityModule.common"),o=e.getActiveDataSource()[0],{bulkDataURI:i}=o.getConfig?.()||{},{dicomLoaderService:c}=r.exports;t.isLoaded=!0;let u=t.instance;if(i&&i.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)}}))}(u,o);else{const e=await c.findDicomDataPromise(t,null,n),r=a.readFile(e),o=s.naturalizeDataset(r.dict);o._meta=s.namifyDataset(r.meta),u=o}const{StructureSetROISequence:l,ROIContourSequence:f,RTROIObservationsSequence:d}=u,y={StructureSetLabel:u.StructureSetLabel,SeriesInstanceUID:u.SeriesInstanceUID,ROIContours:[],visible:!0,ReferencedSOPInstanceUIDsSet:new Set};for(let e=0;e<f.length;e++){const t=f[e],{ContourSequence:n}=t;if(!n)continue;const r=!1,o=(m=n,Array.isArray(m)?m:[m]),i=[];for(let e=0;e<o.length;e++){const{ContourData:t,NumberOfContourPoints:n,ContourGeometricType:r,ContourImageSequence:a}=o[e];let s=!1;const c=[];for(let e=0;e<3*n;e+=3)c.push({x:t[e],y:t[e+1],z:t[e+2]});switch(r){case"CLOSED_PLANAR":case"OPEN_PLANAR":case"POINT":s=!0;break;default:continue}i.push({numberOfPoints:n,points:c,type:r,isSupported:s}),a?.ReferencedSOPInstanceUID&&y.ReferencedSOPInstanceUIDsSet.add(a?.ReferencedSOPInstanceUID)}p(y,l,d,t,i,r)}var m;return y}function p(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=c(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 d=["1.2.840.10008.5.1.4.1.1.481.3"],y={};function m(e,n,o){const i=e[0],{StudyInstanceUID:a,SeriesInstanceUID:s,SOPInstanceUID:c,SeriesDescription:l,SeriesNumber:f,SeriesDate:p,SOPClassUID:m,wadoRoot:S,wadoUri:g,wadoUriRoot:v}=i,I={Modality:"RTSTRUCT",loading:!1,isReconstructable:!1,displaySetInstanceUID:r.utils.guid(),SeriesDescription:l,SeriesNumber:f,SeriesDate:p,SOPInstanceUID:c,SeriesInstanceUID:s,StudyInstanceUID:a,SOPClassHandlerId:t,SOPClassUID:m,referencedImages:null,referencedSeriesInstanceUID:null,referencedDisplaySetInstanceUID:null,isDerivedDisplaySet:!0,isLoaded:!1,isHydrated:!1,structureSet:null,sopClassUids:d,instance:i,wadoRoot:S,wadoUriRoot:v,wadoUri:g,isOverlayDisplaySet:!0};let b=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),b=i.ReferencedSeriesSequence),!b)throw new Error("ReferencedSeriesSequence is missing for the RTSTRUCT");const h=b[0];I.referencedImages=i.ReferencedSeriesSequence.ReferencedInstanceSequence,I.referencedSeriesInstanceUID=h.SeriesInstanceUID;const{displaySetService:O}=n.services,D=O.getDisplaySetsForSeries(I.referencedSeriesInstanceUID);if(D&&0!==D.length){const e=D[0];I.referencedDisplaySetInstanceUID=e.displaySetInstanceUID}else{const{unsubscribe:e}=O.subscribe(O.EVENTS.DISPLAY_SETS_ADDED,(({displaySetsAdded:t})=>{const n=t[0];n.SeriesInstanceUID===I.referencedSeriesInstanceUID&&(I.referencedDisplaySetInstanceUID=n.displaySetInstanceUID,e())}))}return I.load=({headers:e})=>function(e,t,n,r){const{SOPInstanceUID:o}=e,{segmentationService:i}=t.services;(e.loading||e.isLoaded)&&y[o],0;return e.loading=!0,y[o]=new Promise((async(t,o)=>{if(!e.structureSet){const t=await u(n,e,r);e.structureSet=t}i.createSegmentationForRTDisplaySet(e).then((()=>{e.loading=!1,t()})).catch((t=>{e.loading=!1,o(t)}))})),y[o]}(I,n,o,e),[I]}const S=function({servicesManager:e,extensionManager:t}){return[{name:"dicom-rt",sopClassUids:d,getDisplaySetsFromSeries:n=>m(n,e,t)}]};var g=l(404);const v=({commandsManager:e,servicesManager:t})=>{const n=t.services,{displaySetService:r,viewportGridService:o}=n,i={hydrateRTSDisplaySet:({displaySet:t,viewportId:n})=>{if("RTSTRUCT"!==t.Modality)throw new Error("Display set is not an RTSTRUCT");const i=r.getDisplaySetByUID(t.referencedDisplaySetInstanceUID);e.runCommand("updateStoredSegmentationPresentation",{displaySet:t,type:g.SegmentationRepresentations.Contour}),e.runCommand("updateStoredPositionPresentation",{viewportId:n,displaySetInstanceUID:i.displaySetInstanceUID}),o.setDisplaySetsForViewport({viewportId:n,displaySetInstanceUIDs:[i.displaySetInstanceUID]})}};return{actions:i,definitions:{hydrateRTSDisplaySet:{commandFn:i.hydrateRTSDisplaySet,storeContexts:[],options:{}}},defaultContext:"cornerstone-dicom-rt"}};function I(){return I=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},I.apply(null,arguments)}const b=n.lazy((()=>Promise.resolve().then(l.bind(l,366)))),h=e=>n.createElement(n.Suspense,{fallback:n.createElement("div",null,"Loading...")},n.createElement(b,e)),O={id:e,getCommandsModule:v,getViewportModule:({servicesManager:e,extensionManager:t,commandsManager:r})=>[{name:"dicom-rt",component:o=>n.createElement(h,I({servicesManager:e,extensionManager:t,commandsManager:r},o))}],getSopClassHandlerModule:S}})(),f=l.O(f)})()));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohif/extension-cornerstone-dicom-rt",
|
|
3
|
-
"version": "3.10.0-beta.
|
|
3
|
+
"version": "3.10.0-beta.152",
|
|
4
4
|
"description": "DICOM RT read workflow",
|
|
5
5
|
"author": "OHIF",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"start": "yarn run dev"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"@ohif/core": "3.10.0-beta.
|
|
37
|
-
"@ohif/extension-cornerstone": "3.10.0-beta.
|
|
38
|
-
"@ohif/extension-default": "3.10.0-beta.
|
|
39
|
-
"@ohif/i18n": "3.10.0-beta.
|
|
36
|
+
"@ohif/core": "3.10.0-beta.152",
|
|
37
|
+
"@ohif/extension-cornerstone": "3.10.0-beta.152",
|
|
38
|
+
"@ohif/extension-default": "3.10.0-beta.152",
|
|
39
|
+
"@ohif/i18n": "3.10.0-beta.152",
|
|
40
40
|
"prop-types": "^15.6.2",
|
|
41
41
|
"react": "^18.3.1",
|
|
42
42
|
"react-dom": "^18.3.1",
|